summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMark Brophy <mbrophy@google.com>2011-07-18 21:36:33 +0100
committerMark Brophy <mbrophy@google.com>2011-07-22 16:51:06 +0100
commiteea776684be05ee9418f2f3ee63effbb834421ac (patch)
tree821c9a9164d96542ed8c0b647d11d2d72b55b7bb /tests
parent01ff60258654b87d12c219035a637746cf1fdbf7 (diff)
downloadApplicationsProvider-eea776684be05ee9418f2f3ee63effbb834421ac.tar.gz
Ignore disabled activities in Application Provider.
Call the package manager to check whether an app is disabled. Bug: 5029707 Change-Id: Ic338e990ae78dfde1ee6112d5fd69129c74fc50c
Diffstat (limited to 'tests')
-rw-r--r--tests/src/com/android/providers/applications/ApplicationsProviderForTesting.java42
-rw-r--r--tests/src/com/android/providers/applications/ApplicationsProviderTest.java93
-rw-r--r--tests/src/com/android/providers/applications/MockPackageManager.java35
3 files changed, 132 insertions, 38 deletions
diff --git a/tests/src/com/android/providers/applications/ApplicationsProviderForTesting.java b/tests/src/com/android/providers/applications/ApplicationsProviderForTesting.java
index 90b6711..56a3d80 100644
--- a/tests/src/com/android/providers/applications/ApplicationsProviderForTesting.java
+++ b/tests/src/com/android/providers/applications/ApplicationsProviderForTesting.java
@@ -17,9 +17,15 @@
package com.android.providers.applications;
import android.content.pm.PackageManager;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+
import com.android.internal.os.PkgUsageStats;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
/**
@@ -33,6 +39,8 @@ public class ApplicationsProviderForTesting extends ApplicationsProvider {
private boolean mHasGlobalSearchPermission;
+ private MockUpdateHandler mMockUpdateHandler;
+
@Override
protected PackageManager getPackageManager() {
return mMockPackageManager;
@@ -63,4 +71,38 @@ public class ApplicationsProviderForTesting extends ApplicationsProvider {
protected boolean hasGlobalSearchPermission() {
return mHasGlobalSearchPermission;
}
+
+ @Override
+ Handler createHandler(Looper looper) {
+ mMockUpdateHandler = new MockUpdateHandler(looper);
+ return mMockUpdateHandler;
+ }
+
+ public boolean dispatchNextMessage() {
+ return mMockUpdateHandler.dispatchNextMessage();
+ }
+
+ private class MockUpdateHandler extends UpdateHandler {
+
+ List<Message> mMessages = new ArrayList<Message>();
+
+ MockUpdateHandler(Looper looper) {
+ super(looper);
+ }
+
+ @Override
+ public boolean sendMessageAtTime(Message msg, long uptimeMillis) {
+ mMessages.add(msg);
+ return true;
+ }
+
+ public boolean dispatchNextMessage() {
+ if (!mMessages.isEmpty()) {
+ dispatchMessage(mMessages.remove(0));
+ return true;
+ } else {
+ return false;
+ }
+ }
+ }
}
diff --git a/tests/src/com/android/providers/applications/ApplicationsProviderTest.java b/tests/src/com/android/providers/applications/ApplicationsProviderTest.java
index d512590..99a8a2e 100644
--- a/tests/src/com/android/providers/applications/ApplicationsProviderTest.java
+++ b/tests/src/com/android/providers/applications/ApplicationsProviderTest.java
@@ -19,11 +19,12 @@ package com.android.providers.applications;
import android.app.SearchManager;
import android.content.ComponentName;
import android.content.Context;
+import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.provider.Applications;
import android.test.ProviderTestCase2;
-import android.test.suitebuilder.annotation.LargeTest;
+import android.test.suitebuilder.annotation.SmallTest;
import java.util.concurrent.FutureTask;
@@ -36,7 +37,7 @@ import java.util.concurrent.FutureTask;
* is also created in an isolated context so it doesn't interfere with the
* database of the actual ApplicationsProvider installed on the device.
*/
-@LargeTest
+@SmallTest
public class ApplicationsProviderTest extends ProviderTestCase2<ApplicationsProviderForTesting> {
private ApplicationsProviderForTesting mProvider;
@@ -52,7 +53,6 @@ public class ApplicationsProviderTest extends ProviderTestCase2<ApplicationsProv
super.setUp();
mProvider = getProvider();
mMockActivityManager = new MockActivityManager();
- initProvider(mProvider);
}
/**
@@ -62,21 +62,16 @@ public class ApplicationsProviderTest extends ProviderTestCase2<ApplicationsProv
// Decouple the provider from Android's real list of applications.
MockPackageManager mockPackageManager = new MockPackageManager();
addDefaultTestPackages(mockPackageManager);
+
+ initProvider(provider, mockPackageManager);
+ }
+
+ private void initProvider(ApplicationsProviderForTesting provider,
+ MockPackageManager mockPackageManager) throws Exception {
provider.setMockPackageManager(mockPackageManager);
provider.setMockActivityManager(mMockActivityManager);
- // We need to wait for the applications database to be updated (it's
- // updated with a slight delay by a separate thread) before we can use
- // the ApplicationsProvider.
- Runnable markerRunnable = new Runnable() {
- @Override
- public void run() {
- }
- };
- FutureTask<Void> onApplicationsListUpdated = new FutureTask<Void>(markerRunnable, null);
-
- provider.setOnApplicationsListUpdated(onApplicationsListUpdated);
- onApplicationsListUpdated.get();
+ assertTrue(provider.dispatchNextMessage());
}
/**
@@ -99,24 +94,29 @@ public class ApplicationsProviderTest extends ProviderTestCase2<ApplicationsProv
mockPackageManager.addPackage("AlphabeticD2", new ComponentName("d", "d.DView2"));
}
- public void testSearch_singleResult() {
+ public void testSearch_singleResult() throws Exception {
+ initProvider(mProvider);
testSearch("ema", "Email");
}
- public void testSearch_multipleResults() {
+ public void testSearch_multipleResults() throws Exception {
+ initProvider(mProvider);
testSearch("e", "Ebay", "Email");
}
- public void testSearch_noResults() {
+ public void testSearch_noResults() throws Exception {
+ initProvider(mProvider);
testSearch("nosuchapp");
}
- public void testSearch_orderingIsAlphabeticByDefault() {
+ public void testSearch_orderingIsAlphabeticByDefault() throws Exception {
+ initProvider(mProvider);
testSearch("alphabetic", "AlphabeticA", "AlphabeticB", "AlphabeticC", "AlphabeticD",
"AlphabeticD2");
}
- public void testSearch_emptySearchQueryReturnsEverything() {
+ public void testSearch_emptySearchQueryReturnsEverything() throws Exception {
+ initProvider(mProvider);
testSearch("",
"AlphabeticA", "AlphabeticB", "AlphabeticC", "AlphabeticD", "AlphabeticD2",
"Ebay", "Email", "Fakeapp");
@@ -129,13 +129,9 @@ public class ApplicationsProviderTest extends ProviderTestCase2<ApplicationsProv
mMockActivityManager.addLastResumeTime("c", "c.CView", 0);
// Launch count database is populated on startup.
- mProvider = createNewProvider(getMockContext());
mProvider.setHasGlobalSearchPermission(true);
- initProvider(mProvider);
- // Override the previous provider with the new instance in the
- // ContentResolver.
- getMockContentResolver().addProvider(Applications.AUTHORITY, mProvider);
+ initProvider(mProvider);
// New ranking: D, B, A, C (first by launch count, then
// - if the launch counts of two apps are equal - alphabetically)
@@ -143,7 +139,8 @@ public class ApplicationsProviderTest extends ProviderTestCase2<ApplicationsProv
"AlphabeticD2");
}
- public void testSearch_appsAreRankedByResumeTimeAfterUpdate() {
+ public void testSearch_appsAreRankedByResumeTimeAfterUpdate() throws Exception {
+ initProvider(mProvider);
mProvider.setHasGlobalSearchPermission(true);
mMockActivityManager.addLastResumeTime("d", "d.DView", 3);
@@ -161,7 +158,8 @@ public class ApplicationsProviderTest extends ProviderTestCase2<ApplicationsProv
"AlphabeticD2");
}
- public void testSearch_noLastAccessTimesWithoutPermission() {
+ public void testSearch_noLastAccessTimesWithoutPermission() throws Exception {
+ initProvider(mProvider);
mProvider.setHasGlobalSearchPermission(false);
mMockActivityManager.addLastResumeTime("d", "d.DView", 1);
mMockActivityManager.addLastResumeTime("b", "b.BView", 2);
@@ -173,7 +171,8 @@ public class ApplicationsProviderTest extends ProviderTestCase2<ApplicationsProv
assertEquals(-1, cursor.getColumnIndex(SearchManager.SUGGEST_COLUMN_LAST_ACCESS_HINT));
}
- public void testSearch_lastAccessTimes() {
+ public void testSearch_lastAccessTimes() throws Exception {
+ initProvider(mProvider);
mProvider.setHasGlobalSearchPermission(true);
mMockActivityManager.addLastResumeTime("d", "d.DView", 1);
mMockActivityManager.addLastResumeTime("b", "b.BView", 2);
@@ -196,7 +195,8 @@ public class ApplicationsProviderTest extends ProviderTestCase2<ApplicationsProv
* is a privileged application - ordering apps by launch count when asked
* by a regular application would leak information about user behavior.
*/
- public void testSearch_notAllowedToRankByLaunchCount() {
+ public void testSearch_notAllowedToRankByLaunchCount() throws Exception {
+ initProvider(mProvider);
// Simulate non-privileged calling application.
mProvider.setHasGlobalSearchPermission(false);
@@ -214,6 +214,34 @@ public class ApplicationsProviderTest extends ProviderTestCase2<ApplicationsProv
"AlphabeticD2");
}
+ public void testSearch_disabledPackage() throws Exception {
+ MockPackageManager mockPackageManager = new MockPackageManager();
+ mockPackageManager.addPackage("DisabledPackageApp1",
+ new ComponentName("dp", "dp.DisView1"));
+ mockPackageManager.addPackage("DisabledPackageApp2",
+ new ComponentName("dp", "dp.DisView2"),
+ PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+ PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
+ initProvider(mProvider, mockPackageManager);
+
+ mProvider.setHasGlobalSearchPermission(true);
+ testSearch("dis");
+ }
+
+ public void testSearch_disabledComponent() throws Exception {
+ MockPackageManager mockPackageManager = new MockPackageManager();
+ mockPackageManager.addPackage("DisabledApp1", new ComponentName("da", "da.DaView1"),
+ PackageManager.COMPONENT_ENABLED_STATE_DEFAULT,
+ PackageManager.COMPONENT_ENABLED_STATE_DISABLED);
+ mockPackageManager.addPackage("DisabledApp2", new ComponentName("da", "da.DaView2"),
+ PackageManager.COMPONENT_ENABLED_STATE_DEFAULT,
+ PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
+ initProvider(mProvider, mockPackageManager);
+
+ mProvider.setHasGlobalSearchPermission(true);
+ testSearch("dis", "DisabledApp2");
+ }
+
private void testSearch(String searchQuery, String... expectedResultsInOrder) {
Cursor cursor = Applications.search(getMockContentResolver(), searchQuery);
@@ -274,11 +302,4 @@ public class ApplicationsProviderTest extends ProviderTestCase2<ApplicationsProv
cursor.moveToNext();
}
}
-
- private ApplicationsProviderForTesting createNewProvider(Context context) throws Exception {
- ApplicationsProviderForTesting newProviderInstance =
- ApplicationsProviderForTesting.class.newInstance();
- newProviderInstance.attachInfo(context, null);
- return newProviderInstance;
- }
}
diff --git a/tests/src/com/android/providers/applications/MockPackageManager.java b/tests/src/com/android/providers/applications/MockPackageManager.java
index 3d272c4..9db7ee5 100644
--- a/tests/src/com/android/providers/applications/MockPackageManager.java
+++ b/tests/src/com/android/providers/applications/MockPackageManager.java
@@ -26,12 +26,17 @@ import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
public class MockPackageManager extends android.test.mock.MockPackageManager {
private List<ResolveInfo> mPackages = new ArrayList<ResolveInfo>();
+ private Map<String, Integer> mApplicationEnabledSettings = new HashMap<String, Integer>();
+ private Map<String, Integer> mComponentEnabledSettings = new HashMap<String, Integer>();
+
/**
* Returns all packages registered with the mock package manager.
* ApplicationsProvider uses this method to query the list of applications.
@@ -41,16 +46,34 @@ public class MockPackageManager extends android.test.mock.MockPackageManager {
return mPackages;
}
+ @Override
+ public int getApplicationEnabledSetting(String packageName) {
+ return mApplicationEnabledSettings.get(packageName);
+ }
+
+ @Override
+ public int getComponentEnabledSetting(ComponentName componentName) {
+ return mComponentEnabledSettings.get(componentName.flattenToString());
+ }
+
/**
* Adds a new package to the mock package manager.
*
* Example:
- * addPackage("Email", new ComponentName("com.android.email", "com.android.email.MainView"));
+ * addPackage("Email", new ComponentName("com.android.email", "com.android.email.MainView"),
+ * PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+ * PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
*
* @param title the user-friendly title of the application (this is what
* users will search for)
+ * @param componentName The full component name of the app.
+ * @param appEnabledSetting The setting which should be returned from
+ * {@link #getApplicationEnabledSetting}, for this component's package.
+ * @param componentEnabledSetting The setting which should be returned from
+ * {@link #getComponentEnabledSetting}, for this component.
*/
- public void addPackage(final String title, ComponentName componentName) {
+ public void addPackage(final String title, ComponentName componentName, int appEnabledSetting,
+ int componentEnabledSetting) {
// Set the application's title.
ResolveInfo packageInfo = new ResolveInfo() {
@Override
@@ -66,5 +89,13 @@ public class MockPackageManager extends android.test.mock.MockPackageManager {
packageInfo.activityInfo.applicationInfo.packageName = componentName.getPackageName();
mPackages.add(packageInfo);
+
+ mApplicationEnabledSettings.put(componentName.getPackageName(), appEnabledSetting);
+ mComponentEnabledSettings.put(componentName.flattenToString(), componentEnabledSetting);
+ }
+
+ public void addPackage(final String title, ComponentName componentName) {
+ addPackage(title, componentName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT,
+ PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
}
}