diff options
author | Jonathan Gerrish <jonathan@indiekid.org> | 2017-11-01 15:01:36 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-01 15:01:36 -0400 |
commit | df68745554155a68f808528812e4b6e927d514b7 (patch) | |
tree | 97572189662d601974ecebec1c2e7c4d9189fd87 | |
parent | a888d1e4db4cd892a8492f2d697ba83a8f42803a (diff) | |
parent | 5a8c94411ba3b230e7a994dba2e4416f29e215bd (diff) | |
download | robolectric-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.java | 33 | ||||
-rw-r--r-- | shadows/framework/src/main/java/org/robolectric/shadows/ShadowApplicationPackageManager.java | 16 |
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]; |