diff options
author | Brian Attwell <brianattwell@google.com> | 2015-05-28 17:19:43 -0700 |
---|---|---|
committer | Brian Attwell <brianattwell@google.com> | 2015-06-02 20:48:51 +0000 |
commit | 95f4fd8bf381ed9319f139febc369ce70dcb022e (patch) | |
tree | d8f2f8c84bc112a6f6455ea00587ccfb65065f13 /src/com/android | |
parent | d67c70c551749929f2fa845279b554132bf992f0 (diff) | |
download | packages_providers_ContactsProvider-95f4fd8bf381ed9319f139febc369ce70dcb022e.zip packages_providers_ContactsProvider-95f4fd8bf381ed9319f139febc369ce70dcb022e.tar.gz packages_providers_ContactsProvider-95f4fd8bf381ed9319f139febc369ce70dcb022e.tar.bz2 |
Decouple ProviderStatus & internal provider state
Bug: 21090207
Change-Id: I7e93e36ad0c0d667ac56983c76acb1b97bd8755c
Diffstat (limited to 'src/com/android')
-rw-r--r-- | src/com/android/providers/contacts/ContactsProvider2.java | 42 | ||||
-rw-r--r-- | src/com/android/providers/contacts/SearchIndexManager.java | 4 |
2 files changed, 30 insertions, 16 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, " |