load contacts and start observer after giving permissions

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 26 
src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java   | 15 
2 files changed, 18 insertions(+), 23 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/services/XmppConnectionService.java 🔗

@@ -190,15 +190,6 @@ public class XmppConnectionService extends Service {
     public DatabaseBackend databaseBackend;
     private ReplacingSerialSingleThreadExecutor mContactMergerExecutor = new ReplacingSerialSingleThreadExecutor(true);
     private long mLastActivity = 0;
-    private ContentObserver contactObserver = new ContentObserver(null) {
-        @Override
-        public void onChange(boolean selfChange) {
-            super.onChange(selfChange);
-            if (restoredFromDatabaseLatch.getCount() == 0) {
-                loadPhoneContacts();
-            }
-        }
-    };
     private FileBackend fileBackend = new FileBackend(this);
     private MemorizingTrustManager mMemorizingTrustManager;
     private NotificationService mNotificationService = new NotificationService(this);
@@ -984,8 +975,7 @@ public class XmppConnectionService extends Service {
         restoreFromDatabase();
 
         if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M || ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) {
-            //TODO get this restarted if users gives permission
-            getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, contactObserver);
+            startContactObserver();
         }
         if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M || ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
             Log.d(Config.LOGTAG, "starting file observer");
@@ -1024,6 +1014,18 @@ public class XmppConnectionService extends Service {
         }
     }
 
+    public void startContactObserver() {
+        getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, new ContentObserver(null) {
+            @Override
+            public void onChange(boolean selfChange) {
+                super.onChange(selfChange);
+                if (restoredFromDatabaseLatch.getCount() == 0) {
+                    loadPhoneContacts();
+                }
+            }
+        });
+    }
+
     @Override
     public void onTrimMemory(int level) {
         super.onTrimMemory(level);
@@ -1538,7 +1540,7 @@ public class XmppConnectionService extends Service {
 				}
 				Log.d(Config.LOGTAG, "finished merging phone contacts");
 				mShortcutService.refresh(mInitialAddressbookSyncCompleted.compareAndSet(false, true));
-				updateAccountUi();
+				updateRosterUi();
 			}
 		}));
 	}

src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java 🔗

@@ -677,19 +677,11 @@ public class StartConversationActivity extends XmppActivity implements XmppConne
 						AlertDialog.Builder builder = new AlertDialog.Builder(this);
 						builder.setTitle(R.string.sync_with_contacts);
 						builder.setMessage(R.string.sync_with_contacts_long);
-						builder.setPositiveButton(R.string.next, (dialog, which) -> {
-							if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
-								requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, REQUEST_SYNC_CONTACTS);
-							}
-						});
-						builder.setOnDismissListener(dialog -> {
-							if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
-								requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, REQUEST_SYNC_CONTACTS);
-							}
-						});
+						builder.setPositiveButton(R.string.next, (dialog, which) -> requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, REQUEST_SYNC_CONTACTS));
+						builder.setOnDismissListener(dialog -> requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, REQUEST_SYNC_CONTACTS));
 						builder.create().show();
 					} else {
-						requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, 0);
+						requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, REQUEST_SYNC_CONTACTS);
 					}
 				}
 			}
@@ -703,6 +695,7 @@ public class StartConversationActivity extends XmppActivity implements XmppConne
 				ScanActivity.onRequestPermissionResult(this, requestCode, grantResults);
 				if (requestCode == REQUEST_SYNC_CONTACTS && xmppConnectionServiceBound) {
 					xmppConnectionService.loadPhoneContacts();
+					xmppConnectionService.startContactObserver();
 				}
 			}
 	}