From f3422e6d64d5858342c82fd3b858e4923bb983ec Mon Sep 17 00:00:00 2001 From: sanryhuang Date: Mon, 19 Mar 2018 11:21:59 +0800 Subject: Hide system apps until installed (2/2) Applying this mechanism for system carrier apps to make visibility reasonable from the user's perspective. In other words, before hidden system apps have been installed, they wouldn't be listed via APIs in PackageManager which are used at all apps list and search in Settings and so on. Test: manual Test: atest CarrierAppUtilsTest Bug: 74068582 Change-Id: Ia0ed11f6dd3773d72e5346875570f6a36525409b --- .../telephony/uicc/UiccCarrierPrivilegeRules.java | 3 +- .../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 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()); -- cgit v1.2.3