aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Gerrish <jonathan@indiekid.org>2017-11-01 15:01:36 -0400
committerGitHub <noreply@github.com>2017-11-01 15:01:36 -0400
commitdf68745554155a68f808528812e4b6e927d514b7 (patch)
tree97572189662d601974ecebec1c2e7c4d9189fd87
parenta888d1e4db4cd892a8492f2d697ba83a8f42803a (diff)
parent5a8c94411ba3b230e7a994dba2e4416f29e215bd (diff)
downloadrobolectric-shadows-df68745554155a68f808528812e4b6e927d514b7.tar.gz
Merge pull request #3499 from robolectric/patch173158259
Correctly handle the MATCH_DISABLED_COMPONENTS flag
-rw-r--r--robolectric/src/test/java/org/robolectric/shadows/ShadowPackageManagerTest.java33
-rw-r--r--shadows/framework/src/main/java/org/robolectric/shadows/ShadowApplicationPackageManager.java16
2 files changed, 42 insertions, 7 deletions
diff --git a/robolectric/src/test/java/org/robolectric/shadows/ShadowPackageManagerTest.java b/robolectric/src/test/java/org/robolectric/shadows/ShadowPackageManagerTest.java
index d8a76fb41..6bb797792 100644
--- a/robolectric/src/test/java/org/robolectric/shadows/ShadowPackageManagerTest.java
+++ b/robolectric/src/test/java/org/robolectric/shadows/ShadowPackageManagerTest.java
@@ -16,6 +16,7 @@ import static android.content.pm.ApplicationInfo.FLAG_SUPPORTS_SMALL_SCREENS;
import static android.content.pm.ApplicationInfo.FLAG_TEST_ONLY;
import static android.content.pm.ApplicationInfo.FLAG_VM_SAFE_MODE;
import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
+import static android.content.pm.PackageManager.MATCH_DISABLED_COMPONENTS;
import static android.content.pm.PackageManager.MATCH_UNINSTALLED_PACKAGES;
import static android.content.pm.PackageManager.NameNotFoundException;
import static android.content.pm.PackageManager.SIGNATURE_FIRST_NOT_SIGNED;
@@ -310,6 +311,16 @@ public class ShadowPackageManagerTest {
packageManager.getApplicationInfo(RuntimeEnvironment.application.getPackageName(), 0);
}
+ @Test
+ public void getApplicationInfo_disabledApplication_includeDisabled() throws Exception {
+ shadowPackageManager.setApplicationEnabledSetting(
+ RuntimeEnvironment.application.getPackageName(), COMPONENT_ENABLED_STATE_DISABLED, 0);
+ ApplicationInfo info = packageManager.getApplicationInfo(
+ RuntimeEnvironment.application.getPackageName(), MATCH_DISABLED_COMPONENTS);
+ assertThat(info).isNotNull();
+ assertThat(info.packageName).isEqualTo(RuntimeEnvironment.application.getPackageName());
+ }
+
@Test(expected = PackageManager.NameNotFoundException.class)
public void getApplicationInfo_whenUnknown_shouldThrowNameNotFoundException() throws Exception {
try {
@@ -710,6 +721,16 @@ public class ShadowPackageManagerTest {
}
@Test
+ public void getPackageInfo_disabledPackage_includeDisabled() throws Exception {
+ shadowPackageManager.setApplicationEnabledSetting(
+ RuntimeEnvironment.application.getPackageName(), COMPONENT_ENABLED_STATE_DISABLED, 0);
+ PackageInfo info = packageManager.getPackageInfo(
+ RuntimeEnvironment.application.getPackageName(), MATCH_DISABLED_COMPONENTS);
+ assertThat(info).isNotNull();
+ assertThat(info.packageName).isEqualTo(RuntimeEnvironment.application.getPackageName());
+ }
+
+ @Test
public void getInstalledPackages_uninstalledPackage_includeUninstalled() throws Exception {
shadowPackageManager.setApplicationEnabledSetting(RuntimeEnvironment.application.getPackageName(), COMPONENT_ENABLED_STATE_DISABLED, 0);
@@ -725,6 +746,16 @@ public class ShadowPackageManagerTest {
}
@Test
+ public void getInstalledPackages_disabledPackage_includeDisabled() throws Exception {
+ shadowPackageManager.setApplicationEnabledSetting(
+ RuntimeEnvironment.application.getPackageName(), COMPONENT_ENABLED_STATE_DISABLED, 0);
+
+ assertThat(packageManager.getInstalledPackages(MATCH_DISABLED_COMPONENTS)).isNotEmpty();
+ assertThat(packageManager.getInstalledPackages(MATCH_DISABLED_COMPONENTS).get(0).packageName)
+ .isEqualTo(RuntimeEnvironment.application.getPackageName());
+ }
+
+ @Test
public void testGetPreferredActivities() throws Exception {
// Setup an intentfilter and add to packagemanager
IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN);
@@ -1035,7 +1066,7 @@ public class ShadowPackageManagerTest {
assertThat(e.getMessage()).contains("a_name");
throw e;
}
-
+
}
@Test
diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowApplicationPackageManager.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowApplicationPackageManager.java
index d16019251..c71a3bd8a 100644
--- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowApplicationPackageManager.java
+++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowApplicationPackageManager.java
@@ -3,6 +3,7 @@ package org.robolectric.shadows;
import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
import static android.content.pm.PackageManager.GET_META_DATA;
import static android.content.pm.PackageManager.GET_SIGNATURES;
+import static android.content.pm.PackageManager.MATCH_DISABLED_COMPONENTS;
import static android.content.pm.PackageManager.MATCH_UNINSTALLED_PACKAGES;
import static android.content.pm.PackageManager.SIGNATURE_UNKNOWN_PACKAGE;
import static android.os.Build.VERSION_CODES.JELLY_BEAN;
@@ -79,9 +80,10 @@ public class ShadowApplicationPackageManager extends ShadowPackageManager {
for (PackageInfo packageInfo : packageInfos.values()) {
if (applicationEnabledSettingMap.get(packageInfo.packageName)
!= COMPONENT_ENABLED_STATE_DISABLED
- || (flags & MATCH_UNINSTALLED_PACKAGES) == MATCH_UNINSTALLED_PACKAGES) {
- result.add(packageInfo);
- }
+ || (flags & MATCH_UNINSTALLED_PACKAGES) == MATCH_UNINSTALLED_PACKAGES
+ || (flags & MATCH_DISABLED_COMPONENTS) == MATCH_DISABLED_COMPONENTS) {
+ result.add(packageInfo);
+ }
}
return result;
@@ -239,7 +241,8 @@ public class ShadowApplicationPackageManager extends ShadowPackageManager {
PackageInfo info = packageInfos.get(packageName);
if (info != null) {
if (applicationEnabledSettingMap.get(packageName) == COMPONENT_ENABLED_STATE_DISABLED
- && (flags & MATCH_UNINSTALLED_PACKAGES) != MATCH_UNINSTALLED_PACKAGES) {
+ && (flags & MATCH_UNINSTALLED_PACKAGES) != MATCH_UNINSTALLED_PACKAGES
+ && (flags & MATCH_DISABLED_COMPONENTS) != MATCH_DISABLED_COMPONENTS) {
throw new NameNotFoundException("Package is disabled, can't find");
}
return info;
@@ -700,7 +703,8 @@ public class ShadowApplicationPackageManager extends ShadowPackageManager {
}
if (applicationEnabledSettingMap.get(packageName) == COMPONENT_ENABLED_STATE_DISABLED
- && (flags & MATCH_UNINSTALLED_PACKAGES) != MATCH_UNINSTALLED_PACKAGES) {
+ && (flags & MATCH_UNINSTALLED_PACKAGES) != MATCH_UNINSTALLED_PACKAGES
+ && (flags & MATCH_DISABLED_COMPONENTS) != MATCH_DISABLED_COMPONENTS) {
throw new NameNotFoundException("Package is disabled, can't find");
}
return info.applicationInfo;
@@ -708,7 +712,7 @@ public class ShadowApplicationPackageManager extends ShadowPackageManager {
throw new NameNotFoundException(packageName);
}
}
-
+
@Implementation
public String[] getSystemSharedLibraryNames() {
return new String[0];