Adding mock shared preferences
Change-Id: I1af7cb97703191ce016a936fd843e1ac73be1022
diff --git a/src/com/android/contacts/ContactsActivity.java b/src/com/android/contacts/ContactsActivity.java
index 90a975f..79ebecb 100644
--- a/src/com/android/contacts/ContactsActivity.java
+++ b/src/com/android/contacts/ContactsActivity.java
@@ -20,6 +20,7 @@
import android.app.Activity;
import android.content.ContentResolver;
+import android.content.SharedPreferences;
/**
* A common superclass for Contacts activities that handles application-wide services.
@@ -43,6 +44,19 @@
}
@Override
+ public SharedPreferences getSharedPreferences(String name, int mode) {
+ InjectedServices services = ContactsApplication.getInjectedServices();
+ if (services != null) {
+ SharedPreferences prefs = services.getSharedPreferences();
+ if (prefs != null) {
+ return prefs;
+ }
+ }
+
+ return super.getSharedPreferences(name, mode);
+ }
+
+ @Override
public Object getSystemService(String name) {
Object service = super.getSystemService(name);
if (service != null) {
diff --git a/src/com/android/contacts/ContactsApplication.java b/src/com/android/contacts/ContactsApplication.java
index 288a3d7..f0e2736 100644
--- a/src/com/android/contacts/ContactsApplication.java
+++ b/src/com/android/contacts/ContactsApplication.java
@@ -22,6 +22,7 @@
import android.app.Application;
import android.content.ContentResolver;
import android.content.Context;
+import android.content.SharedPreferences;
import android.os.StrictMode;
import android.preference.PreferenceManager;
@@ -53,6 +54,18 @@
}
@Override
+ public SharedPreferences getSharedPreferences(String name, int mode) {
+ if (sInjectedServices != null) {
+ SharedPreferences prefs = sInjectedServices.getSharedPreferences();
+ if (prefs != null) {
+ return prefs;
+ }
+ }
+
+ return super.getSharedPreferences(name, mode);
+ }
+
+ @Override
public Object getSystemService(String name) {
if (sInjectedServices != null) {
Object service = sInjectedServices.getSystemService(name);
diff --git a/src/com/android/contacts/list/ContactBrowseListFragment.java b/src/com/android/contacts/list/ContactBrowseListFragment.java
index a53fce7..0301f44 100644
--- a/src/com/android/contacts/list/ContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/ContactBrowseListFragment.java
@@ -611,6 +611,9 @@
private void restoreFilter() {
if (mFilterEnabled) {
mFilter = ContactListFilter.restoreFromPreferences(mPrefs);
+ if (mFilter == null) {
+ mFilter = new ContactListFilter(ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS);
+ }
}
}
diff --git a/src/com/android/contacts/test/InjectedServices.java b/src/com/android/contacts/test/InjectedServices.java
index f059f3a..b74481c 100644
--- a/src/com/android/contacts/test/InjectedServices.java
+++ b/src/com/android/contacts/test/InjectedServices.java
@@ -19,6 +19,7 @@
import com.google.android.collect.Maps;
import android.content.ContentResolver;
+import android.content.SharedPreferences;
import java.util.HashMap;
@@ -30,16 +31,25 @@
public class InjectedServices {
private ContentResolver mContentResolver;
+ private SharedPreferences mSharedPreferences;
private HashMap<String, Object> mSystemServices;
- public void setContentResolver(ContentResolver mContentResolver) {
- this.mContentResolver = mContentResolver;
+ public void setContentResolver(ContentResolver contentResolver) {
+ this.mContentResolver = contentResolver;
}
public ContentResolver getContentResolver() {
return mContentResolver;
}
+ public void setSharedPreferences(SharedPreferences sharedPreferences) {
+ this.mSharedPreferences = sharedPreferences;
+ }
+
+ public SharedPreferences getSharedPreferences() {
+ return mSharedPreferences;
+ }
+
public void setSystemService(String name, Object service) {
if (mSystemServices == null) {
mSystemServices = Maps.newHashMap();
diff --git a/tests/src/com/android/contacts/activities/ContactBrowserActivityTest.java b/tests/src/com/android/contacts/activities/ContactBrowserActivityTest.java
index a0c768d..eb4cad0 100644
--- a/tests/src/com/android/contacts/activities/ContactBrowserActivityTest.java
+++ b/tests/src/com/android/contacts/activities/ContactBrowserActivityTest.java
@@ -25,10 +25,12 @@
import com.android.contacts.tests.mocks.ContactsMockContext;
import com.android.contacts.tests.mocks.MockAccountTypeManager;
import com.android.contacts.tests.mocks.MockContentProvider;
+import com.android.contacts.tests.mocks.MockSharedPreferences;
import android.accounts.Account;
import android.content.Intent;
import android.net.Uri;
+import android.os.AsyncTask;
import android.provider.ContactsContract;
import android.provider.ContactsContract.ContactCounts;
import android.provider.ContactsContract.Contacts;
@@ -51,6 +53,11 @@
public class ContactBrowserActivityTest
extends ActivityInstrumentationTestCase2<ContactBrowserActivity>
{
+ static {
+ // AsyncTask class needs to be initialized on the main thread.
+ AsyncTask.init();
+ }
+
private ContactsMockContext mContext;
private MockContentProvider mContactsProvider;
private MockContentProvider mSettingsProvider;
@@ -66,6 +73,7 @@
mSettingsProvider = mContext.getSettingsProvider();
InjectedServices services = new InjectedServices();
services.setContentResolver(mContext.getContentResolver());
+ services.setSharedPreferences(new MockSharedPreferences());
FallbackAccountType accountType = new FallbackAccountType();
accountType.accountType = "testAccountType";
diff --git a/tests/src/com/android/contacts/tests/mocks/MockSharedPreferences.java b/tests/src/com/android/contacts/tests/mocks/MockSharedPreferences.java
new file mode 100644
index 0000000..40fd934
--- /dev/null
+++ b/tests/src/com/android/contacts/tests/mocks/MockSharedPreferences.java
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2010 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 com.google.android.collect.Maps;
+
+import android.content.SharedPreferences;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+
+/**
+ * A programmable mock content provider.
+ */
+public class MockSharedPreferences implements SharedPreferences, SharedPreferences.Editor {
+
+ private HashMap<String, Object> mValues = Maps.newHashMap();
+ private HashMap<String, Object> mTempValues = Maps.newHashMap();
+
+ public Editor edit() {
+ return this;
+ }
+
+ public boolean contains(String key) {
+ return mValues.containsKey(key);
+ }
+
+ public Map<String, ?> getAll() {
+ return new HashMap<String, Object>(mValues);
+ }
+
+ public boolean getBoolean(String key, boolean defValue) {
+ if (mValues.containsKey(key)) {
+ return ((Boolean)mValues.get(key)).booleanValue();
+ }
+ return defValue;
+ }
+
+ public float getFloat(String key, float defValue) {
+ if (mValues.containsKey(key)) {
+ return ((Float)mValues.get(key)).floatValue();
+ }
+ return defValue;
+ }
+
+ public int getInt(String key, int defValue) {
+ if (mValues.containsKey(key)) {
+ return ((Integer)mValues.get(key)).intValue();
+ }
+ return defValue;
+ }
+
+ public long getLong(String key, long defValue) {
+ if (mValues.containsKey(key)) {
+ return ((Long)mValues.get(key)).longValue();
+ }
+ return defValue;
+ }
+
+ public String getString(String key, String defValue) {
+ if (mValues.containsKey(key))
+ return (String)mValues.get(key);
+ return defValue;
+ }
+
+ @SuppressWarnings("unchecked")
+ public Set<String> getStringSet(String key, Set<String> defValues) {
+ if (mValues.containsKey(key)) {
+ return (Set<String>) mValues.get(key);
+ }
+ return defValues;
+ }
+
+ public void registerOnSharedPreferenceChangeListener(
+ OnSharedPreferenceChangeListener listener) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void unregisterOnSharedPreferenceChangeListener(
+ OnSharedPreferenceChangeListener listener) {
+ throw new UnsupportedOperationException();
+ }
+
+ public Editor putBoolean(String key, boolean value) {
+ mTempValues.put(key, Boolean.valueOf(value));
+ return this;
+ }
+
+ public Editor putFloat(String key, float value) {
+ mTempValues.put(key, value);
+ return this;
+ }
+
+ public Editor putInt(String key, int value) {
+ mTempValues.put(key, value);
+ return this;
+ }
+
+ public Editor putLong(String key, long value) {
+ mTempValues.put(key, value);
+ return this;
+ }
+
+ public Editor putString(String key, String value) {
+ mTempValues.put(key, value);
+ return this;
+ }
+
+ public Editor putStringSet(String key, Set<String> values) {
+ mTempValues.put(key, values);
+ return this;
+ }
+
+ public Editor remove(String key) {
+ mTempValues.remove(key);
+ return this;
+ }
+
+ public Editor clear() {
+ mTempValues.clear();
+ return this;
+ }
+
+ @SuppressWarnings("unchecked")
+ public boolean commit() {
+ mValues = (HashMap<String, Object>)mTempValues.clone();
+ return true;
+ }
+
+ public void apply() {
+ commit();
+ }
+}
diff --git a/tests/src/com/android/contacts/widget/TestLoaderManager.java b/tests/src/com/android/contacts/widget/TestLoaderManager.java
deleted file mode 100644
index 4c06970..0000000
--- a/tests/src/com/android/contacts/widget/TestLoaderManager.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (C) 2010 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.widget;
-
-import android.app.LoaderManager;
-import android.content.AsyncTaskLoader;
-import android.content.Loader;
-import android.content.Loader.OnLoadCompleteListener;
-import android.os.Bundle;
-
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-import java.util.LinkedHashMap;
-
-import junit.framework.Assert;
-
-/**
- * A {@link LoaderManager} that performs synchronous loading on demand for unit
- * testing.
- */
-public class TestLoaderManager extends LoaderManager {
-
- // Using a linked hash map to get all loading done in a predictable order.
- private LinkedHashMap<Integer, Loader<?>> mStartedLoaders = new LinkedHashMap<
- Integer, Loader<?>>();
-
- @Override
- @SuppressWarnings("unchecked")
- public <D> Loader<D> getLoader(int id) {
- return (Loader<D>)mStartedLoaders.get(id);
- }
-
- @Override
- public <D> Loader<D> initLoader(int id, Bundle args, final LoaderCallbacks<D> callbacks) {
- Loader<D> loader = callbacks.onCreateLoader(id, args);
- loader.registerListener(id, new OnLoadCompleteListener<D>() {
- @Override
- public void onLoadComplete(Loader<D> loader, D data) {
- callbacks.onLoadFinished(loader, data);
- }
- });
-
- mStartedLoaders.put(id, loader);
- return loader;
- }
-
- public <D> Loader<D> recreateLoader(int id, Bundle args, LoaderCallbacks<D> callbacks) {
- return initLoader(id, args, callbacks);
- }
-
- public <D> Loader<D> restartLoader(int id, Bundle args, LoaderCallbacks<D> callbacks) {
- return initLoader(id, args, callbacks);
- }
-
- public void destroyLoader(int id) {
- mStartedLoaders.get(id).stopLoading();
- }
-
- public void stopLoader(int id) {
- mStartedLoaders.get(id).stopLoading();
- }
-
- @Override
- public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {
- }
-
- /**
- * Synchronously runs all started loaders.
- */
- public void executeLoaders() {
- for (Loader<?> loader : mStartedLoaders.values()) {
- executeLoader(loader);
- }
- }
-
- /**
- * Synchronously runs the specified loader.
- */
- public void executeLoader(int id) {
- Loader<?> loader = mStartedLoaders.get(id);
- if (loader == null) {
- Assert.fail("Loader not started: " + id);
- }
- executeLoader(loader);
- }
-
- @SuppressWarnings("unchecked")
- private <D> void executeLoader(final Loader<D> loader) {
- if (loader instanceof AsyncTaskLoader) {
- AsyncTaskLoader<D> atLoader = (AsyncTaskLoader<D>)loader;
- D data = atLoader.loadInBackground();
- loader.deliverResult(data);
- } else {
- loader.forceLoad();
- }
- }
-}