am 10f597e8: am c0177b9b: am 594bb6f4: am 7e1a6855: Refresh all contacts fragment when permission granted

* commit '10f597e84b16961c9ad5d89427cb2432b6ab4016':
  Refresh all contacts fragment when permission granted
diff --git a/src/com/android/dialer/list/AllContactsFragment.java b/src/com/android/dialer/list/AllContactsFragment.java
index 0de8434..0f31ff8 100644
--- a/src/com/android/dialer/list/AllContactsFragment.java
+++ b/src/com/android/dialer/list/AllContactsFragment.java
@@ -19,6 +19,9 @@
 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 @@
 
     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 @@
     }
 
     @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 ebfc72d..324caef 100644
--- a/src/com/android/dialer/list/SpeedDialFragment.java
+++ b/src/com/android/dialer/list/SpeedDialFragment.java
@@ -25,6 +25,7 @@
 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 @@
         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 @@
         }
 
         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);
+            }
+        }
+    }
 }