diff options
author | Brian Attwell <brianattwell@google.com> | 2015-06-02 21:09:27 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-06-02 21:09:27 +0000 |
commit | 094a424d37b976b64598c1175de545355ae37f5d (patch) | |
tree | 6983737708bf33d1d5cf8da1cfabdc4e19be1603 | |
parent | 887e7bb76379f8d49215e3bb310ff24f0d2478b0 (diff) | |
parent | 95f4fd8bf381ed9319f139febc369ce70dcb022e (diff) | |
download | packages_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
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) { |