Loading src/java/com/android/internal/telephony/CarrierAppUtils.java +21 −18 Original line number Diff line number Diff line Loading @@ -88,29 +88,33 @@ public final class CarrierAppUtils { boolean hasPrivileges = telephonyManager.checkCarrierPrivilegesForPackageAnyPhone(packageName) == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS; if (hasPrivileges) { if (ai.enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT // Only update enabled state for the app on /system. Once it has been updated we // shouldn't touch it. if (!ai.isUpdatedSystemApp()) { if (hasPrivileges && (ai.enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT || ai.enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED) { PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED)) { Slog.i(TAG, "Update state(" + packageName + "): ENABLED for user " + userId); enabledCarrierPackages.add(ai.packageName); packageManager.setApplicationEnabledSetting(packageName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP, userId, callingPackage); } else if (ai.enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) { // If we're already enabled, don't bother re-enabling, but treat the app as // enabled so that we re-grant default permissions in case they were lost. enabledCarrierPackages.add(ai.packageName); } } else if (!hasPrivileges && ai.enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) { Slog.i(TAG, "Update state(" + packageName + "): DISABLED_UNTIL_USED for user " + userId); && ai.enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) { Slog.i(TAG, "Update state(" + packageName + "): DISABLED_UNTIL_USED for user " + userId); packageManager.setApplicationEnabledSetting(packageName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 0, userId, callingPackage); PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 0, userId, callingPackage); } } // Always re-grant default permissions to carrier apps w/ privileges. if (hasPrivileges) { enabledCarrierPackages.add(ai.packageName); } } Loading Loading @@ -194,8 +198,7 @@ public final class CarrierAppUtils { // No app found for packageName continue; } boolean isSystemPackage = (ai.flags & ApplicationInfo.FLAG_SYSTEM) != 0; if (!isSystemPackage) { if (!ai.isSystemApp()) { continue; } apps.add(ai); Loading tests/telephonytests/src/com/android/internal/telephony/CarrierAppUtilsTest.java +48 −8 Original line number Diff line number Diff line Loading @@ -82,7 +82,10 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { Mockito.verifyNoMoreInteractions(mTelephonyManager); } /** Configured app has privileges, but was disabled by the user - should do nothing. */ /** * Configured app has privileges, but was disabled by the user - should only grant * permissions. */ public void testDisableCarrierAppsUntilPrivileged_HasPrivileges_DisabledUser() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); Loading @@ -98,12 +101,11 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyString()); Mockito.verify(mPackageManager, Mockito.never()) .grantDefaultPermissionsToEnabledCarrierApps( Mockito.any(String[].class), Mockito.anyInt()); Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps( new String[] {appInfo.packageName}, USER_ID); } /** Configured app has privileges, but was disabled - should do nothing. */ /** Configured app has privileges, but was disabled - should only grant permissions. */ public void testDisableCarrierAppsUntilPrivileged_HasPrivileges_Disabled() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.packageName = CARRIER_APP; Loading @@ -118,9 +120,8 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyString()); Mockito.verify(mPackageManager, Mockito.never()) .grantDefaultPermissionsToEnabledCarrierApps( Mockito.any(String[].class), Mockito.anyInt()); Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps( new String[] {appInfo.packageName}, USER_ID); } /** Configured app has privileges, and is already enabled - should only grant permissions. */ Loading @@ -142,6 +143,25 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { new String[] {appInfo.packageName}, USER_ID); } /** Configured /data app has privileges - should only grant permissions. */ 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.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_ENABLED; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP)) .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, mTelephonyManager, USER_ID, CARRIER_APPS); Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyString()); Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps( new String[] {appInfo.packageName}, USER_ID); } /** Configured app has privileges, and is in the default state - should enable. */ public void testDisableCarrierAppsUntilPrivileged_HasPrivileges_Default() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); Loading Loading @@ -241,6 +261,26 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { Mockito.any(String[].class), Mockito.anyInt()); } /** Configured /data app has no privileges - should do nothing. */ 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.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_ENABLED; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP)) .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, mTelephonyManager, USER_ID, CARRIER_APPS); Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyString()); 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. */ public void testDisableCarrierAppsUntilPrivileged_NoPrivileges_Default() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); Loading Loading
src/java/com/android/internal/telephony/CarrierAppUtils.java +21 −18 Original line number Diff line number Diff line Loading @@ -88,29 +88,33 @@ public final class CarrierAppUtils { boolean hasPrivileges = telephonyManager.checkCarrierPrivilegesForPackageAnyPhone(packageName) == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS; if (hasPrivileges) { if (ai.enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT // Only update enabled state for the app on /system. Once it has been updated we // shouldn't touch it. if (!ai.isUpdatedSystemApp()) { if (hasPrivileges && (ai.enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT || ai.enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED) { PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED)) { Slog.i(TAG, "Update state(" + packageName + "): ENABLED for user " + userId); enabledCarrierPackages.add(ai.packageName); packageManager.setApplicationEnabledSetting(packageName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP, userId, callingPackage); } else if (ai.enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) { // If we're already enabled, don't bother re-enabling, but treat the app as // enabled so that we re-grant default permissions in case they were lost. enabledCarrierPackages.add(ai.packageName); } } else if (!hasPrivileges && ai.enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) { Slog.i(TAG, "Update state(" + packageName + "): DISABLED_UNTIL_USED for user " + userId); && ai.enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) { Slog.i(TAG, "Update state(" + packageName + "): DISABLED_UNTIL_USED for user " + userId); packageManager.setApplicationEnabledSetting(packageName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 0, userId, callingPackage); PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 0, userId, callingPackage); } } // Always re-grant default permissions to carrier apps w/ privileges. if (hasPrivileges) { enabledCarrierPackages.add(ai.packageName); } } Loading Loading @@ -194,8 +198,7 @@ public final class CarrierAppUtils { // No app found for packageName continue; } boolean isSystemPackage = (ai.flags & ApplicationInfo.FLAG_SYSTEM) != 0; if (!isSystemPackage) { if (!ai.isSystemApp()) { continue; } apps.add(ai); Loading
tests/telephonytests/src/com/android/internal/telephony/CarrierAppUtilsTest.java +48 −8 Original line number Diff line number Diff line Loading @@ -82,7 +82,10 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { Mockito.verifyNoMoreInteractions(mTelephonyManager); } /** Configured app has privileges, but was disabled by the user - should do nothing. */ /** * Configured app has privileges, but was disabled by the user - should only grant * permissions. */ public void testDisableCarrierAppsUntilPrivileged_HasPrivileges_DisabledUser() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); Loading @@ -98,12 +101,11 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyString()); Mockito.verify(mPackageManager, Mockito.never()) .grantDefaultPermissionsToEnabledCarrierApps( Mockito.any(String[].class), Mockito.anyInt()); Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps( new String[] {appInfo.packageName}, USER_ID); } /** Configured app has privileges, but was disabled - should do nothing. */ /** Configured app has privileges, but was disabled - should only grant permissions. */ public void testDisableCarrierAppsUntilPrivileged_HasPrivileges_Disabled() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.packageName = CARRIER_APP; Loading @@ -118,9 +120,8 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyString()); Mockito.verify(mPackageManager, Mockito.never()) .grantDefaultPermissionsToEnabledCarrierApps( Mockito.any(String[].class), Mockito.anyInt()); Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps( new String[] {appInfo.packageName}, USER_ID); } /** Configured app has privileges, and is already enabled - should only grant permissions. */ Loading @@ -142,6 +143,25 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { new String[] {appInfo.packageName}, USER_ID); } /** Configured /data app has privileges - should only grant permissions. */ 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.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_ENABLED; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP)) .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, mTelephonyManager, USER_ID, CARRIER_APPS); Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyString()); Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps( new String[] {appInfo.packageName}, USER_ID); } /** Configured app has privileges, and is in the default state - should enable. */ public void testDisableCarrierAppsUntilPrivileged_HasPrivileges_Default() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); Loading Loading @@ -241,6 +261,26 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { Mockito.any(String[].class), Mockito.anyInt()); } /** Configured /data app has no privileges - should do nothing. */ 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.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_ENABLED; Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP, PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo); Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP)) .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS); CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager, mTelephonyManager, USER_ID, CARRIER_APPS); Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting( Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyString()); 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. */ public void testDisableCarrierAppsUntilPrivileged_NoPrivileges_Default() throws Exception { ApplicationInfo appInfo = new ApplicationInfo(); Loading