diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2018-05-24 18:01:43 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-05-24 18:01:43 +0000 |
commit | 7186dc5fb177bbd2095646ef726bfc86b0e12e7c (patch) | |
tree | af681066f44b6346c2fb0afebd3afb74e3893322 | |
parent | 80ce47fde433a5bb406da51fbfd6bbb473c94630 (diff) | |
parent | f3422e6d64d5858342c82fd3b858e4923bb983ec (diff) | |
download | telephony-7186dc5fb177bbd2095646ef726bfc86b0e12e7c.tar.gz |
Merge "Hide system apps until installed (2/2)" into pi-dev
-rw-r--r-- | src/java/com/android/internal/telephony/uicc/UiccCarrierPrivilegeRules.java | 3 | ||||
-rw-r--r-- | tests/telephonytests/src/com/android/internal/telephony/CarrierAppUtilsTest.java | 352 |
2 files changed, 192 insertions, 163 deletions
diff --git a/src/java/com/android/internal/telephony/uicc/UiccCarrierPrivilegeRules.java b/src/java/com/android/internal/telephony/uicc/UiccCarrierPrivilegeRules.java index a45c247aa8..a7bbb955a8 100644 --- a/src/java/com/android/internal/telephony/uicc/UiccCarrierPrivilegeRules.java +++ b/src/java/com/android/internal/telephony/uicc/UiccCarrierPrivilegeRules.java @@ -310,7 +310,8 @@ public class UiccCarrierPrivilegeRules extends Handler { // gained carrier privileges (as an indication that a matching SIM has been inserted). PackageInfo pInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES - | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS); + | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS); return getCarrierPrivilegeStatus(pInfo); } catch (PackageManager.NameNotFoundException ex) { log("Package " + packageName + " not found for carrier privilege status check"); diff --git a/tests/telephonytests/src/com/android/internal/telephony/CarrierAppUtilsTest.java b/tests/telephonytests/src/com/android/internal/telephony/CarrierAppUtilsTest.java index 54a56df3cf..2192499a85 100644 --- a/tests/telephonytests/src/com/android/internal/telephony/CarrierAppUtilsTest.java +++ b/tests/telephonytests/src/com/android/internal/telephony/CarrierAppUtilsTest.java @@ -87,15 +87,16 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { @Test @SmallTest public void testDisableCarrierAppsUntilPrivileged_MissingApp() throws Exception { Mockito.when(mPackageManager.getApplicationInfo("com.example.missing.app", - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(null); + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, + USER_ID)).thenReturn(null); ArraySet<String> systemCarrierAppsDisabledUntilUsed = new ArraySet<>(); systemCarrierAppsDisabledUntilUsed.add("com.example.missing.app"); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, mTelephonyManager, mContentResolver, USER_ID, systemCarrierAppsDisabledUntilUsed, ASSOCIATED_APPS); - Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( - Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), - Mockito.anyString()); + Mockito.verify(mPackageManager, Mockito.never()).setSystemAppInstallState( + Mockito.anyString(), Mockito.anyBoolean(), Mockito.anyInt()); Mockito.verify(mPackageManager, Mockito.never()) .grantDefaultPermissionsToEnabledCarrierApps(Mockito.any(String[].class), Mockito.anyInt()); @@ -107,12 +108,13 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { public void testDisableCarrierAppsUntilPrivileged_NonSystemApp() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, + USER_ID)).thenReturn(appInfo); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS); - Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( - Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), - Mockito.anyString()); + Mockito.verify(mPackageManager, Mockito.never()).setSystemAppInstallState( + Mockito.anyString(), Mockito.anyBoolean(), Mockito.anyInt()); Mockito.verify(mPackageManager, Mockito.never()) .grantDefaultPermissionsToEnabledCarrierApps( Mockito.any(String[].class), Mockito.anyInt()); @@ -128,17 +130,18 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.packageName = CARRIER_APP; - appInfo.flags |= ApplicationInfo.FLAG_SYSTEM; + appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED; appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, + USER_ID)).thenReturn(appInfo); Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP)) .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS); - Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( - Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), - Mockito.anyString()); + Mockito.verify(mPackageManager, Mockito.never()).setSystemAppInstallState( + Mockito.anyString(), Mockito.anyBoolean(), Mockito.anyInt()); Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps( new String[] {appInfo.packageName}, USER_ID); } @@ -148,37 +151,39 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { public void testDisableCarrierAppsUntilPrivileged_HasPrivileges_Disabled() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.packageName = CARRIER_APP; - appInfo.flags |= ApplicationInfo.FLAG_SYSTEM; + appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED; appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, + USER_ID)).thenReturn(appInfo); Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP)) .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS); - Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( - Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), - Mockito.anyString()); + Mockito.verify(mPackageManager, Mockito.never()).setSystemAppInstallState( + Mockito.anyString(), Mockito.anyBoolean(), Mockito.anyInt()); Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps( new String[] {appInfo.packageName}, USER_ID); } - /** Configured app has privileges, and is already enabled - should only grant permissions. */ + /** Configured app has privileges, and is already installed - should only grant permissions. */ @Test @SmallTest public void testDisableCarrierAppsUntilPrivileged_HasPrivileges_Enabled() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.packageName = CARRIER_APP; - appInfo.flags |= ApplicationInfo.FLAG_SYSTEM; + appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED; appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_ENABLED; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, + USER_ID)).thenReturn(appInfo); Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP)) .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS); - Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( - Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), - Mockito.anyString()); + Mockito.verify(mPackageManager, Mockito.never()).setSystemAppInstallState( + Mockito.anyString(), Mockito.anyBoolean(), Mockito.anyInt()); Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps( new String[] {appInfo.packageName}, USER_ID); } @@ -188,23 +193,25 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { public void testDisableCarrierAppsUntilPrivileged_HasPrivileges_UpdatedApp() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.packageName = CARRIER_APP; - appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP; + appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP + | ApplicationInfo.FLAG_INSTALLED; appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_ENABLED; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, + USER_ID)).thenReturn(appInfo); Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP)) .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS); - Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( - Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), - Mockito.anyString()); + Mockito.verify(mPackageManager, Mockito.never()).setSystemAppInstallState( + Mockito.anyString(), Mockito.anyBoolean(), Mockito.anyInt()); Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps( new String[] {appInfo.packageName}, USER_ID); } /** - * Configured app has privileges, and is in the default state - should enable. Associated app + * Configured app has privileges, and is in the default state - should install. Associated app * is missing and should not be touched. */ @Test @SmallTest @@ -212,28 +219,27 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.packageName = CARRIER_APP; - appInfo.flags |= ApplicationInfo.FLAG_SYSTEM; + appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED; appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)) + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, USER_ID)) .thenReturn(appInfo); Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP)) .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS); - Mockito.verify(mPackageManager).setApplicationEnabledSetting( - CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, - PackageManager.DONT_KILL_APP, USER_ID, CALLING_PACKAGE); - Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( - ASSOCIATED_APP, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, - PackageManager.DONT_KILL_APP, USER_ID, CALLING_PACKAGE); + Mockito.verify(mPackageManager).setSystemAppInstallState( + CARRIER_APP, true, USER_ID); + Mockito.verify(mPackageManager, Mockito.never()).setSystemAppInstallState( + ASSOCIATED_APP, true, USER_ID); Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps( new String[] {appInfo.packageName}, USER_ID); } /** * Configured app has privileges, and is in the default state along with associated app - should - * enable both. + * install both. */ @Test @SmallTest public void testDisableCarrierAppsUntilPrivileged_HasPrivileges_Associated_Default() @@ -243,34 +249,34 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { mContentResolver, Settings.Secure.CARRIER_APPS_HANDLED, 1, USER_ID); ApplicationInfo appInfo = new ApplicationInfo(); appInfo.packageName = CARRIER_APP; - appInfo.flags |= ApplicationInfo.FLAG_SYSTEM; + appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED; appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)) + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, USER_ID)) .thenReturn(appInfo); ApplicationInfo associatedAppInfo = new ApplicationInfo(); associatedAppInfo.packageName = ASSOCIATED_APP; associatedAppInfo.flags |= ApplicationInfo.FLAG_SYSTEM; associatedAppInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT; Mockito.when(mPackageManager.getApplicationInfo(ASSOCIATED_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)) + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, USER_ID)) .thenReturn(associatedAppInfo); Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP)) .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS); - Mockito.verify(mPackageManager).setApplicationEnabledSetting( - CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, - PackageManager.DONT_KILL_APP, USER_ID, CALLING_PACKAGE); - Mockito.verify(mPackageManager).setApplicationEnabledSetting( - ASSOCIATED_APP, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, - PackageManager.DONT_KILL_APP, USER_ID, CALLING_PACKAGE); + Mockito.verify(mPackageManager).setSystemAppInstallState( + CARRIER_APP, true, USER_ID); + Mockito.verify(mPackageManager).setSystemAppInstallState( + ASSOCIATED_APP, true, USER_ID); Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps( new String[] {appInfo.packageName}, USER_ID); } /** - * Configured app has privileges, and is disabled until used - should enable. Associated app has + * Configured app has privileges, and is uninstalled - should install. Associated app has * been updated and should not be touched. */ @Test @SmallTest @@ -278,10 +284,12 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.packageName = CARRIER_APP; - appInfo.flags |= ApplicationInfo.FLAG_SYSTEM; + appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED; appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, + USER_ID)).thenReturn(appInfo); ApplicationInfo associatedAppInfo = new ApplicationInfo(); associatedAppInfo.packageName = ASSOCIATED_APP; associatedAppInfo.flags |= @@ -289,53 +297,53 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { associatedAppInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED; Mockito.when(mPackageManager.getApplicationInfo(ASSOCIATED_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)) + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, USER_ID)) .thenReturn(associatedAppInfo); Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP)) .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS); - Mockito.verify(mPackageManager).setApplicationEnabledSetting( - CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, - PackageManager.DONT_KILL_APP, USER_ID, CALLING_PACKAGE); - Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( - ASSOCIATED_APP, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, - PackageManager.DONT_KILL_APP, USER_ID, CALLING_PACKAGE); + Mockito.verify(mPackageManager).setSystemAppInstallState( + CARRIER_APP, true, USER_ID); + Mockito.verify(mPackageManager, Mockito.never()).setSystemAppInstallState( + ASSOCIATED_APP, true, USER_ID); Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps( new String[] {appInfo.packageName}, USER_ID); } /** - * Configured app has privileges, and is disabled until used along with associated app - should - * enable both. + * Configured app has privileges, and is uninstalled until used along with associated app - + * should install both. */ @Test @SmallTest public void testDisableCarrierAppsUntilPrivileged_HasPrivileges_Associated_DisabledUntilUsed() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.packageName = CARRIER_APP; - appInfo.flags |= ApplicationInfo.FLAG_SYSTEM; + appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED; appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, + USER_ID)).thenReturn(appInfo); ApplicationInfo associatedAppInfo = new ApplicationInfo(); associatedAppInfo.packageName = ASSOCIATED_APP; associatedAppInfo.flags |= ApplicationInfo.FLAG_SYSTEM; associatedAppInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED; Mockito.when(mPackageManager.getApplicationInfo(ASSOCIATED_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)) + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, USER_ID)) .thenReturn(associatedAppInfo); Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP)) .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS); - Mockito.verify(mPackageManager).setApplicationEnabledSetting( - CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, - PackageManager.DONT_KILL_APP, USER_ID, CALLING_PACKAGE); - Mockito.verify(mPackageManager).setApplicationEnabledSetting( - ASSOCIATED_APP, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, - PackageManager.DONT_KILL_APP, USER_ID, CALLING_PACKAGE); + Mockito.verify(mPackageManager).setSystemAppInstallState( + CARRIER_APP, true, USER_ID); + Mockito.verify(mPackageManager).setSystemAppInstallState( + ASSOCIATED_APP, true, USER_ID); Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps( new String[] {appInfo.packageName}, USER_ID); } @@ -345,17 +353,18 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { public void testDisableCarrierAppsUntilPrivileged_NoPrivileges_DisabledUser() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.packageName = CARRIER_APP; - appInfo.flags |= ApplicationInfo.FLAG_SYSTEM; + appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED; appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, + USER_ID)).thenReturn(appInfo); Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP)) .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS); - Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( - Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), - Mockito.anyString()); + Mockito.verify(mPackageManager, Mockito.never()).setSystemAppInstallState( + Mockito.anyString(), Mockito.anyBoolean(), Mockito.anyInt()); Mockito.verify(mPackageManager, Mockito.never()) .grantDefaultPermissionsToEnabledCarrierApps( Mockito.any(String[].class), Mockito.anyInt()); @@ -367,98 +376,103 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.packageName = CARRIER_APP; - appInfo.flags |= ApplicationInfo.FLAG_SYSTEM; + appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED; appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, + USER_ID)).thenReturn(appInfo); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, null /* telephonyManager */, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS); - Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( - Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), - Mockito.anyString()); + Mockito.verify(mPackageManager, Mockito.never()).setSystemAppInstallState( + Mockito.anyString(), Mockito.anyBoolean(), Mockito.anyInt()); Mockito.verify(mPackageManager, Mockito.never()) .grantDefaultPermissionsToEnabledCarrierApps( Mockito.any(String[].class), Mockito.anyInt()); } - /** Configured app has no privileges, and was disabled - should do nothing. */ + /** Configured app has no privileges, and was uninstalled - should do nothing. */ @Test @SmallTest public void testDisableCarrierAppsUntilPrivileged_NoPrivileges_Disabled() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.packageName = CARRIER_APP; - appInfo.flags |= ApplicationInfo.FLAG_SYSTEM; + appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED; appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, + USER_ID)).thenReturn(appInfo); Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP)) .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS); - Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( - Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), - Mockito.anyString()); + Mockito.verify(mPackageManager, Mockito.never()).setSystemAppInstallState( + Mockito.anyString(), Mockito.anyBoolean(), Mockito.anyInt()); Mockito.verify(mPackageManager, Mockito.never()) .grantDefaultPermissionsToEnabledCarrierApps( Mockito.any(String[].class), Mockito.anyInt()); } - /** Telephony is not initialized, and app was disabled - should do nothing. */ + /** Telephony is not initialized, and app was uninstalled - should do nothing. */ @Test @SmallTest public void testDisableCarrierAppsUntilPrivileged_NullPrivileges_Disabled() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.packageName = CARRIER_APP; - appInfo.flags |= ApplicationInfo.FLAG_SYSTEM; + appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED; appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, + USER_ID)).thenReturn(appInfo); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, null /* telephonyManager */, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS); - Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( - Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), - Mockito.anyString()); + Mockito.verify(mPackageManager, Mockito.never()).setSystemAppInstallState( + Mockito.anyString(), Mockito.anyBoolean(), Mockito.anyInt()); Mockito.verify(mPackageManager, Mockito.never()) .grantDefaultPermissionsToEnabledCarrierApps( Mockito.any(String[].class), Mockito.anyInt()); } - /** Configured app has no privileges, and is explicitly enabled - should do nothing. */ + /** Configured app has no privileges, and is explicitly installed - should do nothing. */ @Test @SmallTest public void testDisableCarrierAppsUntilPrivileged_NoPrivileges_Enabled() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.packageName = CARRIER_APP; - appInfo.flags |= ApplicationInfo.FLAG_SYSTEM; + appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED; appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_ENABLED; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, + USER_ID)).thenReturn(appInfo); Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP)) .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS); - Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( - Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), - Mockito.anyString()); + Mockito.verify(mPackageManager, Mockito.never()).setSystemAppInstallState( + Mockito.anyString(), Mockito.anyBoolean(), Mockito.anyInt()); Mockito.verify(mPackageManager, Mockito.never()) .grantDefaultPermissionsToEnabledCarrierApps( Mockito.any(String[].class), Mockito.anyInt()); } - /** Telephony is not initialized, and app is explicitly enabled - should do nothing. */ + /** Telephony is not initialized, and app is explicitly installed - should do nothing. */ @Test @SmallTest public void testDisableCarrierAppsUntilPrivileged_NullPrivileges_Enabled() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.packageName = CARRIER_APP; - appInfo.flags |= ApplicationInfo.FLAG_SYSTEM; + appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED; appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_ENABLED; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, + USER_ID)).thenReturn(appInfo); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, null /* telephonyManager */, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS); - Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( - Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), - Mockito.anyString()); + Mockito.verify(mPackageManager, Mockito.never()).setSystemAppInstallState( + Mockito.anyString(), Mockito.anyBoolean(), Mockito.anyInt()); Mockito.verify(mPackageManager, Mockito.never()) .grantDefaultPermissionsToEnabledCarrierApps( Mockito.any(String[].class), Mockito.anyInt()); @@ -469,17 +483,19 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { public void testDisableCarrierAppsUntilPrivileged_NoPrivileges_UpdatedApp() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.packageName = CARRIER_APP; - appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP; + appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP + | ApplicationInfo.FLAG_INSTALLED; appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_ENABLED; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, + USER_ID)).thenReturn(appInfo); Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP)) .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS); - Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( - Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), - Mockito.anyString()); + Mockito.verify(mPackageManager, Mockito.never()).setSystemAppInstallState( + Mockito.anyString(), Mockito.anyBoolean(), Mockito.anyInt()); Mockito.verify(mPackageManager, Mockito.never()) .grantDefaultPermissionsToEnabledCarrierApps( Mockito.any(String[].class), Mockito.anyInt()); @@ -490,51 +506,54 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { public void testDisableCarrierAppsUntilPrivileged_NullPrivileges_UpdatedApp() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.packageName = CARRIER_APP; - appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP; + appInfo.flags |= (ApplicationInfo.FLAG_SYSTEM + | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP | ApplicationInfo.FLAG_INSTALLED); appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_ENABLED; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, + USER_ID)).thenReturn(appInfo); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, null /* telephonyManager */, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS); - Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( - Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), - Mockito.anyString()); + Mockito.verify(mPackageManager, Mockito.never()).setSystemAppInstallState( + Mockito.anyString(), Mockito.anyBoolean(), Mockito.anyInt()); Mockito.verify(mPackageManager, Mockito.never()) .grantDefaultPermissionsToEnabledCarrierApps( Mockito.any(String[].class), Mockito.anyInt()); } /** - * Configured app has no privileges, and is in the default state - should disable until use. - * Associated app is enabled and should not be touched. + * Configured app has no privileges, and is in the default state - should uninstalled. + * Associated app is installed and should not be touched. */ @Test @SmallTest public void testDisableCarrierAppsUntilPrivileged_NoPrivileges_EnabledAssociated_Default() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.packageName = CARRIER_APP; - appInfo.flags |= ApplicationInfo.FLAG_SYSTEM; + appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED; appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, + USER_ID)).thenReturn(appInfo); ApplicationInfo associatedAppInfo = new ApplicationInfo(); associatedAppInfo.packageName = ASSOCIATED_APP; associatedAppInfo.flags |= ApplicationInfo.FLAG_SYSTEM; associatedAppInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_ENABLED; Mockito.when(mPackageManager.getApplicationInfo(ASSOCIATED_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)) + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, USER_ID)) .thenReturn(associatedAppInfo); Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP)) .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS); - Mockito.verify(mPackageManager).setApplicationEnabledSetting( - CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 0, USER_ID, - CALLING_PACKAGE); - Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( - ASSOCIATED_APP, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 0, - USER_ID, CALLING_PACKAGE); + Mockito.verify(mPackageManager).setSystemAppInstallState( + CARRIER_APP, false, USER_ID); + Mockito.verify(mPackageManager, Mockito.never()).setSystemAppInstallState( + ASSOCIATED_APP, false, USER_ID); Mockito.verify(mPackageManager, Mockito.never()) .grantDefaultPermissionsToEnabledCarrierApps( Mockito.any(String[].class), Mockito.anyInt()); @@ -542,34 +561,35 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { /** * Configured app has no privileges, and is in the default state along with associated app - - * should disable both. + * should uninstall both. */ @Test @SmallTest public void testDisableCarrierAppsUntilPrivileged_NoPrivileges_Associated_Default() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.packageName = CARRIER_APP; - appInfo.flags |= ApplicationInfo.FLAG_SYSTEM; + appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED; appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, + USER_ID)).thenReturn(appInfo); ApplicationInfo associatedAppInfo = new ApplicationInfo(); associatedAppInfo.packageName = ASSOCIATED_APP; associatedAppInfo.flags |= ApplicationInfo.FLAG_SYSTEM; associatedAppInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT; Mockito.when(mPackageManager.getApplicationInfo(ASSOCIATED_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)) + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, USER_ID)) .thenReturn(associatedAppInfo); Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP)) .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS); - Mockito.verify(mPackageManager).setApplicationEnabledSetting( - CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 0, USER_ID, - CALLING_PACKAGE); - Mockito.verify(mPackageManager).setApplicationEnabledSetting( - ASSOCIATED_APP, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 0, - USER_ID, CALLING_PACKAGE); + Mockito.verify(mPackageManager).setSystemAppInstallState( + CARRIER_APP, false, USER_ID); + Mockito.verify(mPackageManager).setSystemAppInstallState( + ASSOCIATED_APP, false, USER_ID); Mockito.verify(mPackageManager, Mockito.never()) .grantDefaultPermissionsToEnabledCarrierApps( Mockito.any(String[].class), Mockito.anyInt()); @@ -577,7 +597,7 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { /** * Configured app has no privileges, and is in the default state along with associated app, and - * disabling has already occurred - should only disable configured app. + * disabling has already occurred - should only uninstall configured app. */ @Test @SmallTest public void testDisableCarrierAppsUntilPrivileged_NoPrivileges_Associated_Default_AlreadyRun() @@ -586,90 +606,98 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { mContentResolver, Settings.Secure.CARRIER_APPS_HANDLED, 1, USER_ID); ApplicationInfo appInfo = new ApplicationInfo(); appInfo.packageName = CARRIER_APP; - appInfo.flags |= ApplicationInfo.FLAG_SYSTEM; + appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED; appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, + USER_ID)).thenReturn(appInfo); ApplicationInfo associatedAppInfo = new ApplicationInfo(); associatedAppInfo.packageName = ASSOCIATED_APP; associatedAppInfo.flags |= ApplicationInfo.FLAG_SYSTEM; associatedAppInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT; Mockito.when(mPackageManager.getApplicationInfo(ASSOCIATED_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)) + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, USER_ID)) .thenReturn(associatedAppInfo); Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP)) .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS); - Mockito.verify(mPackageManager).setApplicationEnabledSetting( - CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 0, USER_ID, - CALLING_PACKAGE); - Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( - Mockito.eq(ASSOCIATED_APP), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), - Mockito.anyString()); + Mockito.verify(mPackageManager).setSystemAppInstallState( + CARRIER_APP, false, USER_ID); + Mockito.verify(mPackageManager, Mockito.never()).setSystemAppInstallState( + Mockito.eq(ASSOCIATED_APP), Mockito.anyBoolean(), Mockito.anyInt()); Mockito.verify(mPackageManager, Mockito.never()) .grantDefaultPermissionsToEnabledCarrierApps( Mockito.any(String[].class), Mockito.anyInt()); } - /** Telephony is not initialized, and app is in the default state - should disable until use. */ + /** Telephony is not initialized, and app is in the default state - should uninstall it. */ @Test @SmallTest public void testDisableCarrierAppsUntilPrivileged_NullPrivileges_Default() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.packageName = CARRIER_APP; - appInfo.flags |= ApplicationInfo.FLAG_SYSTEM; + appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED; appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, + USER_ID)).thenReturn(appInfo); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, null /* telephonyManager */, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS); - Mockito.verify(mPackageManager).setApplicationEnabledSetting( - CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 0, USER_ID, - CALLING_PACKAGE); + Mockito.verify(mPackageManager).setSystemAppInstallState( + CARRIER_APP, false, USER_ID); Mockito.verify(mPackageManager, Mockito.never()) .grantDefaultPermissionsToEnabledCarrierApps( Mockito.any(String[].class), Mockito.anyInt()); } - /** Configured app has no privileges, and is disabled until used - should do nothing. */ + /** Configured app has no privileges, and is disabled until used or not installed - should do + * nothing. + **/ @Test @SmallTest public void testDisableCarrierAppsUntilPrivileged_NoPrivileges_DisabledUntilUsed() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.packageName = CARRIER_APP; - appInfo.flags |= ApplicationInfo.FLAG_SYSTEM; + appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED; appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, + USER_ID)).thenReturn(appInfo); Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP)) .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS); - Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( - Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), - Mockito.anyString()); + Mockito.verify(mPackageManager, Mockito.never()).setSystemAppInstallState( + Mockito.anyString(), Mockito.anyBoolean(), Mockito.anyInt()); Mockito.verify(mPackageManager, Mockito.never()) .grantDefaultPermissionsToEnabledCarrierApps( Mockito.any(String[].class), Mockito.anyInt()); } - /** Telephony is not initialized, and app is disabled until used - should do nothing. */ + /** Telephony is not initialized, and app is disabled until used or not installed - should do + * nothing. + **/ @Test @SmallTest public void testDisableCarrierAppsUntilPrivileged_NullPrivileges_DisabledUntilUsed() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.packageName = CARRIER_APP; - appInfo.flags |= ApplicationInfo.FLAG_SYSTEM; + appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED; appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, - PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); + PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, + USER_ID)).thenReturn(appInfo); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, null /* telephonyManager */, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS); - Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( - Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), - Mockito.anyString()); + Mockito.verify(mPackageManager, Mockito.never()).setSystemAppInstallState( + Mockito.anyString(), Mockito.anyBoolean(), Mockito.anyInt()); Mockito.verify(mPackageManager, Mockito.never()) .grantDefaultPermissionsToEnabledCarrierApps( Mockito.any(String[].class), Mockito.anyInt()); |