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
@@ -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();
}
}));
}
@@ -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();
}
}
}