summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Attwell <brianattwell@google.com>2015-06-02 21:09:27 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-06-02 21:09:27 +0000
commit094a424d37b976b64598c1175de545355ae37f5d (patch)
tree6983737708bf33d1d5cf8da1cfabdc4e19be1603
parent887e7bb76379f8d49215e3bb310ff24f0d2478b0 (diff)
parent95f4fd8bf381ed9319f139febc369ce70dcb022e (diff)
downloadpackages_providers_ContactsProvider-094a424d37b976b64598c1175de545355ae37f5d.zip
packages_providers_ContactsProvider-094a424d37b976b64598c1175de545355ae37f5d.tar.gz
packages_providers_ContactsProvider-094a424d37b976b64598c1175de545355ae37f5d.tar.bz2
am 95f4fd8b: Decouple ProviderStatus & internal provider state
* commit '95f4fd8bf381ed9319f139febc369ce70dcb022e': Decouple ProviderStatus & internal provider state
-rw-r--r--src/com/android/providers/contacts/ContactsProvider2.java42
-rw-r--r--src/com/android/providers/contacts/SearchIndexManager.java4
-rw-r--r--tests/src/com/android/providers/contacts/ContactsProvider2Test.java8
3 files changed, 34 insertions, 20 deletions
diff --git a/src/com/android/providers/contacts/ContactsProvider2.java b/src/com/android/providers/contacts/ContactsProvider2.java
index 480545c..6cf6d98 100644
--- a/src/com/android/providers/contacts/ContactsProvider2.java
+++ b/src/com/android/providers/contacts/ContactsProvider2.java
@@ -244,6 +244,11 @@ public class ContactsProvider2 extends AbstractContactsProvider
private static final int BACKGROUND_TASK_CLEANUP_PHOTOS = 10;
private static final int BACKGROUND_TASK_CLEAN_DELETE_LOG = 11;
+ protected static final int STATUS_NORMAL = 0;
+ protected static final int STATUS_UPGRADING = 1;
+ protected static final int STATUS_CHANGING_LOCALE = 2;
+ protected static final int STATUS_NO_ACCOUNTS_NO_CONTACTS = 3;
+
/** Default for the maximum number of returned aggregation suggestions. */
private static final int DEFAULT_MAX_SUGGESTIONS = 5;
@@ -1426,7 +1431,7 @@ public class ContactsProvider2 extends AbstractContactsProvider
private CommonNicknameCache mCommonNicknameCache;
private SearchIndexManager mSearchIndexManager;
- private int mProviderStatus = ProviderStatus.STATUS_NORMAL;
+ private int mProviderStatus = STATUS_NORMAL;
private boolean mProviderStatusUpdateNeeded;
private volatile CountDownLatch mReadAccessLatch;
private volatile CountDownLatch mWriteAccessLatch;
@@ -1768,8 +1773,8 @@ public class ContactsProvider2 extends AbstractContactsProvider
}
public void onLocaleChanged() {
- if (mProviderStatus != ProviderStatus.STATUS_NORMAL
- && mProviderStatus != ProviderStatus.STATUS_NO_ACCOUNTS_NO_CONTACTS) {
+ if (mProviderStatus != STATUS_NORMAL
+ && mProviderStatus != STATUS_NO_ACCOUNTS_NO_CONTACTS) {
return;
}
@@ -1806,7 +1811,7 @@ public class ContactsProvider2 extends AbstractContactsProvider
protected void updateLocaleInBackground() {
// The process is already running - postpone the change
- if (mProviderStatus == ProviderStatus.STATUS_CHANGING_LOCALE) {
+ if (mProviderStatus == STATUS_CHANGING_LOCALE) {
return;
}
@@ -1817,7 +1822,7 @@ public class ContactsProvider2 extends AbstractContactsProvider
}
int providerStatus = mProviderStatus;
- setProviderStatus(ProviderStatus.STATUS_CHANGING_LOCALE);
+ setProviderStatus(STATUS_CHANGING_LOCALE);
mContactsHelper.setLocale(currentLocales);
mProfileHelper.setLocale(currentLocales);
mSearchIndexManager.updateIndex(true);
@@ -1878,8 +1883,8 @@ public class ContactsProvider2 extends AbstractContactsProvider
}
private void updateProviderStatus() {
- if (mProviderStatus != ProviderStatus.STATUS_NORMAL
- && mProviderStatus != ProviderStatus.STATUS_NO_ACCOUNTS_NO_CONTACTS) {
+ if (mProviderStatus != STATUS_NORMAL
+ && mProviderStatus != STATUS_NO_ACCOUNTS_NO_CONTACTS) {
return;
}
@@ -1892,12 +1897,12 @@ public class ContactsProvider2 extends AbstractContactsProvider
// TODO: Different status if there is a profile but no contacts?
if (isContactsEmpty && profileNum <= 1) {
- setProviderStatus(ProviderStatus.STATUS_NO_ACCOUNTS_NO_CONTACTS);
+ setProviderStatus(STATUS_NO_ACCOUNTS_NO_CONTACTS);
} else {
- setProviderStatus(ProviderStatus.STATUS_NORMAL);
+ setProviderStatus(STATUS_NORMAL);
}
} else {
- setProviderStatus(ProviderStatus.STATUS_NORMAL);
+ setProviderStatus(STATUS_NORMAL);
}
}
@@ -2050,7 +2055,7 @@ public class ContactsProvider2 extends AbstractContactsProvider
mProfileHelper.wipeData();
mContactsPhotoStore.clear();
mProfilePhotoStore.clear();
- mProviderStatus = ProviderStatus.STATUS_NO_ACCOUNTS_NO_CONTACTS;
+ mProviderStatus = STATUS_NO_ACCOUNTS_NO_CONTACTS;
initForDefaultLocale();
}
@@ -6595,9 +6600,18 @@ public class ContactsProvider2 extends AbstractContactsProvider
}
case PROVIDER_STATUS: {
+ final int providerStatus;
+ if (mProviderStatus == STATUS_UPGRADING
+ || mProviderStatus == STATUS_CHANGING_LOCALE) {
+ providerStatus = ProviderStatus.STATUS_BUSY;
+ } else if (mProviderStatus == STATUS_NORMAL) {
+ providerStatus = ProviderStatus.STATUS_NORMAL;
+ } else {
+ providerStatus = ProviderStatus.STATUS_EMPTY;
+ }
return buildSingleRowResult(projection,
new String[] {ProviderStatus.STATUS},
- new Object[] {mProviderStatus});
+ new Object[] {providerStatus});
}
case DIRECTORIES : {
@@ -9020,7 +9034,7 @@ public class ContactsProvider2 extends AbstractContactsProvider
Log.i(TAG, "Upgrading aggregation algorithm");
final long start = SystemClock.elapsedRealtime();
- setProviderStatus(ProviderStatus.STATUS_UPGRADING);
+ setProviderStatus(STATUS_UPGRADING);
// Re-aggregate all visible raw contacts.
try {
@@ -9077,7 +9091,7 @@ public class ContactsProvider2 extends AbstractContactsProvider
Log.e(TAG, "Failed to bump aggregation algorithm version; continuing anyway.", e2);
}
} finally { // Need one more finally because endTransaction() may fail.
- setProviderStatus(ProviderStatus.STATUS_NORMAL);
+ setProviderStatus(STATUS_NORMAL);
}
}
diff --git a/src/com/android/providers/contacts/SearchIndexManager.java b/src/com/android/providers/contacts/SearchIndexManager.java
index badb7a9..ba2a60d 100644
--- a/src/com/android/providers/contacts/SearchIndexManager.java
+++ b/src/com/android/providers/contacts/SearchIndexManager.java
@@ -271,14 +271,14 @@ public class SearchIndexManager {
}
private void rebuildIndex(SQLiteDatabase db) {
- mContactsProvider.setProviderStatus(ProviderStatus.STATUS_UPGRADING);
+ mContactsProvider.setProviderStatus(ContactsProvider2.STATUS_UPGRADING);
final long start = SystemClock.elapsedRealtime();
int count = 0;
try {
mDbHelper.createSearchIndexTable(db, true);
count = buildAndInsertIndex(db, null);
} finally {
- mContactsProvider.setProviderStatus(ProviderStatus.STATUS_NORMAL);
+ mContactsProvider.setProviderStatus(ContactsProvider2.STATUS_NORMAL);
final long end = SystemClock.elapsedRealtime();
Log.i(TAG, "Rebuild contact search index in " + (end - start) + "ms, "
diff --git a/tests/src/com/android/providers/contacts/ContactsProvider2Test.java b/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
index 1e1ef04..9e0b7c5 100644
--- a/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
+++ b/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
@@ -7493,7 +7493,7 @@ public class ContactsProvider2Test extends BaseContactsProvider2Test {
}
public void testProviderStatusNoContactsNoAccounts() throws Exception {
- assertProviderStatus(ProviderStatus.STATUS_NO_ACCOUNTS_NO_CONTACTS);
+ assertProviderStatus(ProviderStatus.STATUS_EMPTY);
}
public void testProviderStatusOnlyLocalContacts() throws Exception {
@@ -7501,17 +7501,17 @@ public class ContactsProvider2Test extends BaseContactsProvider2Test {
assertProviderStatus(ProviderStatus.STATUS_NORMAL);
mResolver.delete(
ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId), null, null);
- assertProviderStatus(ProviderStatus.STATUS_NO_ACCOUNTS_NO_CONTACTS);
+ assertProviderStatus(ProviderStatus.STATUS_EMPTY);
}
public void testProviderStatusWithAccounts() throws Exception {
- assertProviderStatus(ProviderStatus.STATUS_NO_ACCOUNTS_NO_CONTACTS);
+ assertProviderStatus(ProviderStatus.STATUS_EMPTY);
mActor.setAccounts(new Account[]{TestUtil.ACCOUNT_1});
((ContactsProvider2)getProvider()).onAccountsUpdated(new Account[]{TestUtil.ACCOUNT_1});
assertProviderStatus(ProviderStatus.STATUS_NORMAL);
mActor.setAccounts(new Account[0]);
((ContactsProvider2)getProvider()).onAccountsUpdated(new Account[0]);
- assertProviderStatus(ProviderStatus.STATUS_NO_ACCOUNTS_NO_CONTACTS);
+ assertProviderStatus(ProviderStatus.STATUS_EMPTY);
}
private void assertProviderStatus(int expectedProviderStatus) {