summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/android/contacts/ContactsApplication.java8
-rw-r--r--src/com/android/contacts/model/AccountTypeManager.java31
-rw-r--r--tests/src/com/android/contacts/activities/PeopleActivityTest.java17
-rw-r--r--tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java21
-rw-r--r--tests/src/com/android/contacts/model/ContactLoaderTest.java10
-rw-r--r--tests/src/com/android/contacts/tests/mocks/ContactsAccountManagerMockContext.java47
6 files changed, 44 insertions, 90 deletions
diff --git a/src/com/android/contacts/ContactsApplication.java b/src/com/android/contacts/ContactsApplication.java
index d6c5702e5..4e43b46f4 100644
--- a/src/com/android/contacts/ContactsApplication.java
+++ b/src/com/android/contacts/ContactsApplication.java
@@ -41,7 +41,6 @@ public final class ContactsApplication extends Application {
private static final boolean ENABLE_FRAGMENT_LOG = false; // Don't submit with true
private static InjectedServices sInjectedServices;
- private AccountTypeManager mAccountTypeManager;
private ContactPhotoManager mContactPhotoManager;
private ContactListFilterController mContactListFilterController;
@@ -89,13 +88,6 @@ public final class ContactsApplication extends Application {
}
}
- if (AccountTypeManager.ACCOUNT_TYPE_SERVICE.equals(name)) {
- if (mAccountTypeManager == null) {
- mAccountTypeManager = AccountTypeManager.createAccountTypeManager(this);
- }
- return mAccountTypeManager;
- }
-
if (ContactPhotoManager.CONTACT_PHOTO_SERVICE.equals(name)) {
if (mContactPhotoManager == null) {
mContactPhotoManager = ContactPhotoManager.createContactPhotoManager(this);
diff --git a/src/com/android/contacts/model/AccountTypeManager.java b/src/com/android/contacts/model/AccountTypeManager.java
index 6850e4f16..5205ee076 100644
--- a/src/com/android/contacts/model/AccountTypeManager.java
+++ b/src/com/android/contacts/model/AccountTypeManager.java
@@ -53,6 +53,7 @@ import com.android.contacts.model.account.ExternalAccountType;
import com.android.contacts.model.account.FallbackAccountType;
import com.android.contacts.model.account.GoogleAccountType;
import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.test.NeededForTesting;
import com.android.contacts.util.Constants;
import com.android.internal.util.Objects;
import com.google.common.annotations.VisibleForTesting;
@@ -77,25 +78,35 @@ import java.util.concurrent.atomic.AtomicBoolean;
public abstract class AccountTypeManager {
static final String TAG = "AccountTypeManager";
- public static final String ACCOUNT_TYPE_SERVICE = "contactAccountTypes";
+ private static final Object mInitializationLock = new Object();
+ private static AccountTypeManager mAccountTypeManager;
/**
* Requests the singleton instance of {@link AccountTypeManager} with data bound from
* the available authenticators. This method can safely be called from the UI thread.
*/
public static AccountTypeManager getInstance(Context context) {
- context = context.getApplicationContext();
- AccountTypeManager service =
- (AccountTypeManager) context.getSystemService(ACCOUNT_TYPE_SERVICE);
- if (service == null) {
- service = createAccountTypeManager(context);
- Log.e(TAG, "No account type service in context: " + context);
+ synchronized (mInitializationLock) {
+ if (mAccountTypeManager == null) {
+ context = context.getApplicationContext();
+ mAccountTypeManager = new AccountTypeManagerImpl(context);
+ }
}
- return service;
+ return mAccountTypeManager;
}
- public static synchronized AccountTypeManager createAccountTypeManager(Context context) {
- return new AccountTypeManagerImpl(context);
+ /**
+ * Set the instance of account type manager. This is only for and should only be used by unit
+ * tests. While having this method is not ideal, it's simpler than the alternative of
+ * holding this as a service in the ContactsApplication context class.
+ *
+ * @param mockManager The mock AccountTypeManager.
+ */
+ @NeededForTesting
+ public static void setInstanceForTest(AccountTypeManager mockManager) {
+ synchronized (mInitializationLock) {
+ mAccountTypeManager = mockManager;
+ }
}
/**
diff --git a/tests/src/com/android/contacts/activities/PeopleActivityTest.java b/tests/src/com/android/contacts/activities/PeopleActivityTest.java
index cda7a574e..644c0a586 100644
--- a/tests/src/com/android/contacts/activities/PeopleActivityTest.java
+++ b/tests/src/com/android/contacts/activities/PeopleActivityTest.java
@@ -35,6 +35,9 @@ import android.widget.TextView;
import com.android.contacts.ContactsApplication;
import com.android.contacts.R;
import com.android.contacts.common.ContactPhotoManager;
+import com.android.contacts.common.test.mocks.ContactsMockContext;
+import com.android.contacts.common.test.mocks.MockContentProvider;
+import com.android.contacts.common.test.mocks.MockContentProvider.Query;
import com.android.contacts.detail.ContactDetailFragment;
import com.android.contacts.interactions.TestLoaderManager;
import com.android.contacts.list.ContactBrowseListFragment;
@@ -43,12 +46,8 @@ import com.android.contacts.model.account.AccountType;
import com.android.contacts.model.account.AccountWithDataSet;
import com.android.contacts.model.account.BaseAccountType;
import com.android.contacts.test.InjectedServices;
-import com.android.contacts.tests.mocks.ContactsAccountManagerMockContext;
-import com.android.contacts.common.test.mocks.ContactsMockContext;
import com.android.contacts.tests.mocks.MockAccountTypeManager;
import com.android.contacts.tests.mocks.MockContactPhotoManager;
-import com.android.contacts.common.test.mocks.MockContentProvider;
-import com.android.contacts.common.test.mocks.MockContentProvider.Query;
import com.android.contacts.tests.mocks.MockSharedPreferences;
import com.android.contacts.util.PhoneCapabilityTester;
@@ -87,7 +86,7 @@ public class PeopleActivityTest
@Override
public void setUp() {
- mContext = new ContactsAccountManagerMockContext(getInstrumentation().getTargetContext());
+ mContext = new ContactsMockContext(getInstrumentation().getTargetContext());
mContactsProvider = mContext.getContactsProvider();
mSettingsProvider = mContext.getSettingsProvider();
InjectedServices services = new InjectedServices();
@@ -104,11 +103,11 @@ public class PeopleActivityTest
accountType.accountType = TEST_ACCOUNT_TYPE;
AccountWithDataSet account = new AccountWithDataSet(TEST_ACCOUNT, TEST_ACCOUNT_TYPE, null);
-
- services.setSystemService(AccountTypeManager.ACCOUNT_TYPE_SERVICE,
- new MockAccountTypeManager(
- new AccountType[]{accountType}, new AccountWithDataSet[]{account}));
ContactsApplication.injectServices(services);
+
+ final MockAccountTypeManager mockManager = new MockAccountTypeManager(
+ new AccountType[] { accountType }, new AccountWithDataSet[] { account });
+ AccountTypeManager.setInstanceForTest(mockManager);
}
@Override
diff --git a/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java b/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
index c8346881b..bf4e24b20 100644
--- a/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
+++ b/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
@@ -26,17 +26,16 @@ import android.test.suitebuilder.annotation.SmallTest;
import com.android.contacts.ContactsApplication;
import com.android.contacts.R;
+import com.android.contacts.common.test.FragmentTestActivity;
+import com.android.contacts.common.test.IntegrationTestUtils;
+import com.android.contacts.common.test.mocks.ContactsMockContext;
+import com.android.contacts.common.test.mocks.MockContentProvider;
+import com.android.contacts.common.test.mocks.MockContentProvider.Query;
import com.android.contacts.model.AccountTypeManager;
import com.android.contacts.model.account.AccountType;
import com.android.contacts.model.account.BaseAccountType;
-import com.android.contacts.common.test.FragmentTestActivity;
import com.android.contacts.test.InjectedServices;
-import com.android.contacts.tests.mocks.ContactsAccountManagerMockContext;
-import com.android.contacts.common.test.mocks.ContactsMockContext;
import com.android.contacts.tests.mocks.MockAccountTypeManager;
-import com.android.contacts.common.test.mocks.MockContentProvider;
-import com.android.contacts.common.test.mocks.MockContentProvider.Query;
-import com.android.contacts.common.test.IntegrationTestUtils;
/**
* Tests for {@link ContactDeletionInteraction}.
@@ -80,7 +79,7 @@ public class ContactDeletionInteractionTest
mUtils = new IntegrationTestUtils(getInstrumentation());
mUtils.acquireScreenWakeLock(getInstrumentation().getTargetContext());
- mContext = new ContactsAccountManagerMockContext(getInstrumentation().getTargetContext());
+ mContext = new ContactsMockContext(getInstrumentation().getTargetContext());
InjectedServices services = new InjectedServices();
services.setContentResolver(mContext.getContentResolver());
@@ -99,11 +98,11 @@ public class ContactDeletionInteractionTest
}
};
writableAccountType.accountType = WRITABLE_ACCOUNT_TYPE;
-
- services.setSystemService(AccountTypeManager.ACCOUNT_TYPE_SERVICE,
- new MockAccountTypeManager(
- new AccountType[]{writableAccountType, readOnlyAccountType}, null));
ContactsApplication.injectServices(services);
+
+ final MockAccountTypeManager mockManager = new MockAccountTypeManager(
+ new AccountType[] { writableAccountType, readOnlyAccountType }, null);
+ AccountTypeManager.setInstanceForTest(mockManager);
mContactsProvider = mContext.getContactsProvider();
}
diff --git a/tests/src/com/android/contacts/model/ContactLoaderTest.java b/tests/src/com/android/contacts/model/ContactLoaderTest.java
index f1fb7aef9..2876e2a2b 100644
--- a/tests/src/com/android/contacts/model/ContactLoaderTest.java
+++ b/tests/src/com/android/contacts/model/ContactLoaderTest.java
@@ -28,26 +28,26 @@ import android.provider.ContactsContract.StatusUpdates;
import android.test.LoaderTestCase;
import android.test.suitebuilder.annotation.LargeTest;
+import com.android.contacts.common.test.mocks.ContactsMockContext;
+import com.android.contacts.common.test.mocks.MockContentProvider;
import com.android.contacts.model.account.AccountType;
import com.android.contacts.model.account.AccountWithDataSet;
import com.android.contacts.model.account.BaseAccountType;
import com.android.contacts.test.InjectedServices;
-import com.android.contacts.tests.mocks.ContactsAccountManagerMockContext;
import com.android.contacts.tests.mocks.MockAccountTypeManager;
-import com.android.contacts.common.test.mocks.MockContentProvider;
/**
* Runs ContactLoader tests for the the contact-detail and editor view.
*/
@LargeTest
public class ContactLoaderTest extends LoaderTestCase {
- private ContactsAccountManagerMockContext mMockContext;
+ private ContactsMockContext mMockContext;
private MockContentProvider mContactsProvider;
@Override
protected void setUp() throws Exception {
super.setUp();
- mMockContext = new ContactsAccountManagerMockContext(getContext());
+ mMockContext = new ContactsMockContext(getContext());
mContactsProvider = mMockContext.getContactsProvider();
InjectedServices services = new InjectedServices();
@@ -62,7 +62,7 @@ public class ContactLoaderTest extends LoaderTestCase {
AccountWithDataSet account =
new AccountWithDataSet("mockAccountName", "mockAccountType", null);
- mMockContext.setMockAccountTypeManager(
+ AccountTypeManager.setInstanceForTest(
new MockAccountTypeManager(
new AccountType[]{accountType}, new AccountWithDataSet[]{account}));
}
diff --git a/tests/src/com/android/contacts/tests/mocks/ContactsAccountManagerMockContext.java b/tests/src/com/android/contacts/tests/mocks/ContactsAccountManagerMockContext.java
deleted file mode 100644
index c0ba9d395..000000000
--- a/tests/src/com/android/contacts/tests/mocks/ContactsAccountManagerMockContext.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.contacts.tests.mocks;
-
-import android.content.Context;
-
-import com.android.contacts.common.test.mocks.ContactsMockContext;
-import com.android.contacts.model.AccountTypeManager;
-
-/**
- * A ContactsMockContext with an additional mock AccountTypeManager.
- */
-public class ContactsAccountManagerMockContext extends ContactsMockContext {
-
- private MockAccountTypeManager mMockAccountTypeManager;
-
-
- public ContactsAccountManagerMockContext(Context base) {
- super(base);
- }
-
- public void setMockAccountTypeManager(MockAccountTypeManager mockAccountTypeManager) {
- mMockAccountTypeManager = mockAccountTypeManager;
- }
-
- @Override
- public Object getSystemService(String name) {
- if (AccountTypeManager.ACCOUNT_TYPE_SERVICE.equals(name)) {
- return mMockAccountTypeManager;
- }
- return super.getSystemService(name);
- }
-}