summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/com/android/dialer/list/AllContactsFragment.java28
-rw-r--r--src/com/android/dialer/list/SpeedDialFragment.java15
2 files changed, 42 insertions, 1 deletions
diff --git a/src/com/android/dialer/list/AllContactsFragment.java b/src/com/android/dialer/list/AllContactsFragment.java
index 0de84347e..0f31ff88f 100644
--- a/src/com/android/dialer/list/AllContactsFragment.java
+++ b/src/com/android/dialer/list/AllContactsFragment.java
@@ -19,6 +19,9 @@ package com.android.dialer.list;
import static android.Manifest.permission.READ_CONTACTS;
import android.app.Activity;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
import android.content.Loader;
import android.content.pm.PackageManager;
import android.database.Cursor;
@@ -52,6 +55,17 @@ public class AllContactsFragment extends ContactEntryListFragment<ContactEntryLi
private EmptyContentView mEmptyListView;
+ /**
+ * Listen to broadcast events about permissions in order to be notified if the READ_CONTACTS
+ * permission is granted via the UI in another fragment.
+ */
+ private BroadcastReceiver mReadContactsPermissionGrantedReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ reloadData();
+ }
+ };
+
public AllContactsFragment() {
setQuickContactEnabled(false);
setAdjustSelectionBoundsEnabled(true);
@@ -76,6 +90,20 @@ public class AllContactsFragment extends ContactEntryListFragment<ContactEntryLi
}
@Override
+ public void onStart() {
+ super.onStart();
+ PermissionsUtil.registerPermissionReceiver(getActivity(),
+ mReadContactsPermissionGrantedReceiver, READ_CONTACTS);
+ }
+
+ @Override
+ public void onStop() {
+ PermissionsUtil.unregisterPermissionReceiver(getActivity(),
+ mReadContactsPermissionGrantedReceiver);
+ super.onStop();
+ }
+
+ @Override
protected void startLoading() {
if (PermissionsUtil.hasPermission(getActivity(), READ_CONTACTS)) {
super.startLoading();
diff --git a/src/com/android/dialer/list/SpeedDialFragment.java b/src/com/android/dialer/list/SpeedDialFragment.java
index ebfc72da0..324caefb6 100644
--- a/src/com/android/dialer/list/SpeedDialFragment.java
+++ b/src/com/android/dialer/list/SpeedDialFragment.java
@@ -25,6 +25,7 @@ import android.app.Fragment;
import android.app.LoaderManager;
import android.content.CursorLoader;
import android.content.Loader;
+import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Rect;
import android.net.Uri;
@@ -64,6 +65,8 @@ public class SpeedDialFragment extends Fragment implements OnItemClickListener,
PhoneFavoritesTileAdapter.OnDataSetChangedForAnimationListener,
EmptyContentView.OnEmptyViewActionButtonClickedListener {
+ private static final int READ_CONTACTS_PERMISSION_REQUEST_CODE = 1;
+
/**
* By default, the animation code assumes that all items in a list view are of the same height
* when animating new list items into view (e.g. from the bottom of the screen into view).
@@ -470,10 +473,20 @@ public class SpeedDialFragment extends Fragment implements OnItemClickListener,
}
if (!PermissionsUtil.hasPermission(activity, READ_CONTACTS)) {
- requestPermissions(new String[] {READ_CONTACTS}, 0);
+ requestPermissions(new String[] {READ_CONTACTS}, READ_CONTACTS_PERMISSION_REQUEST_CODE);
} else {
// Switch tabs
((HostInterface) activity).showAllContactsTab();
}
}
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, String[] permissions,
+ int[] grantResults) {
+ if (requestCode == READ_CONTACTS_PERMISSION_REQUEST_CODE) {
+ if (grantResults.length == 1 && PackageManager.PERMISSION_GRANTED == grantResults[0]) {
+ PermissionsUtil.notifyPermissionGranted(getActivity(), READ_CONTACTS);
+ }
+ }
+ }
}