aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRicky Wai <rickywai@google.com>2017-03-24 23:05:44 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2017-03-24 23:05:45 +0000
commit4563b8c5320759689abd09846cbd2bf84b4e0a50 (patch)
tree0c09017d8198a965c24c96a0231fedae911a73ef
parent1467a85d2c3e05c059bd260312b46eff99666552 (diff)
parent40af6e611d9fe06031ee9748fbcc94a34f9de5da (diff)
downloadContactsProvider-4563b8c5320759689abd09846cbd2bf84b4e0a50.tar.gz
Merge "Schedule re-scan contacts directory provider if directory is force updated"
-rw-r--r--src/com/android/providers/contacts/ContactDirectoryManager.java16
-rw-r--r--src/com/android/providers/contacts/ContactsProvider2.java11
2 files changed, 27 insertions, 0 deletions
diff --git a/src/com/android/providers/contacts/ContactDirectoryManager.java b/src/com/android/providers/contacts/ContactDirectoryManager.java
index cb6dc4a1..33e541d3 100644
--- a/src/com/android/providers/contacts/ContactDirectoryManager.java
+++ b/src/com/android/providers/contacts/ContactDirectoryManager.java
@@ -104,6 +104,8 @@ public class ContactDirectoryManager {
private final Context mContext;
private final PackageManager mPackageManager;
+ private volatile boolean mDirectoriesForceUpdated = false;
+
public ContactDirectoryManager(ContactsProvider2 contactsProvider) {
mContactsProvider = contactsProvider;
mContext = contactsProvider.getContext();
@@ -114,6 +116,10 @@ public class ContactDirectoryManager {
return (ContactsDatabaseHelper) mContactsProvider.getDatabaseHelper();
}
+ public void setDirectoriesForceUpdated(boolean updated) {
+ mDirectoriesForceUpdated = updated;
+ }
+
/**
* Scans through existing directories to see if the cached resource IDs still
* match their original resource names. If not - plays it safe by refreshing all directories.
@@ -230,6 +236,9 @@ public class ContactDirectoryManager {
Log.d(TAG, "scanAllPackagesIfNeeded()");
}
final long start = SystemClock.elapsedRealtime();
+ // Reset directory updated flag to false. If it's changed to true
+ // then we need to rescan directories.
+ mDirectoriesForceUpdated = false;
final int count = scanAllPackages();
getDbHelper().setProperty(DbProperties.DIRECTORY_SCAN_COMPLETE, "1");
final long end = SystemClock.elapsedRealtime();
@@ -238,6 +247,13 @@ public class ContactDirectoryManager {
// Announce the change to listeners of the contacts authority
mContactsProvider.notifyChange(/* syncToNetwork =*/false,
/* syncToMetadataNetwork =*/false);
+
+ // We schedule a rescan if update(DIRECTORIES) is called while we're scanning all packages.
+ if (mDirectoriesForceUpdated) {
+ mDirectoriesForceUpdated = false;
+ mContactsProvider.scheduleRescanDirectories();
+ }
+
return count;
}
diff --git a/src/com/android/providers/contacts/ContactsProvider2.java b/src/com/android/providers/contacts/ContactsProvider2.java
index 72edc086..0d2dd9ed 100644
--- a/src/com/android/providers/contacts/ContactsProvider2.java
+++ b/src/com/android/providers/contacts/ContactsProvider2.java
@@ -252,6 +252,7 @@ public class ContactsProvider2 extends AbstractContactsProvider
private static final int BACKGROUND_TASK_CHANGE_LOCALE = 9;
private static final int BACKGROUND_TASK_CLEANUP_PHOTOS = 10;
private static final int BACKGROUND_TASK_CLEAN_DELETE_LOG = 11;
+ private static final int BACKGROUND_TASK_RESCAN_DIRECTORY = 12;
protected static final int STATUS_NORMAL = 0;
protected static final int STATUS_UPGRADING = 1;
@@ -1779,6 +1780,11 @@ public class ContactsProvider2 extends AbstractContactsProvider
break;
}
+ case BACKGROUND_TASK_RESCAN_DIRECTORY: {
+ updateDirectoriesInBackground(true);
+ break;
+ }
+
case BACKGROUND_TASK_UPDATE_LOCALE: {
updateLocaleInBackground();
break;
@@ -4233,6 +4239,7 @@ public class ContactsProvider2 extends AbstractContactsProvider
}
case DIRECTORIES: {
+ mContactDirectoryManager.setDirectoriesForceUpdated(true);
scanPackagesByUid(Binder.getCallingUid());
count = 1;
break;
@@ -4936,6 +4943,10 @@ public class ContactsProvider2 extends AbstractContactsProvider
scheduleBackgroundTask(BACKGROUND_TASK_UPDATE_ACCOUNTS);
}
+ public void scheduleRescanDirectories() {
+ scheduleBackgroundTask(BACKGROUND_TASK_RESCAN_DIRECTORY);
+ }
+
interface RawContactsBackupQuery {
String TABLE = Tables.RAW_CONTACTS;
String[] COLUMNS = new String[] {