Loading src/java/com/android/internal/telephony/CarrierAppUtils.java +5 −9 Original line number Diff line number Diff line Loading @@ -79,10 +79,8 @@ public final class CarrierAppUtils { if (candidates == null || candidates.isEmpty()) { return; } List<String> enabledCarrierPackages = new ArrayList<>(); try { boolean anyAppsEnabled = false; for (ApplicationInfo ai : candidates) { String packageName = ai.packageName; boolean hasPrivileges = Loading @@ -94,7 +92,7 @@ public final class CarrierAppUtils { PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED) { Slog.i(TAG, "Update state(" + packageName + "): ENABLED for user " + userId); enabledCarrierPackages.add(ai.packageName); anyAppsEnabled = true; packageManager.setApplicationEnabledSetting(packageName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0, userId, callingPackage); Loading @@ -102,7 +100,7 @@ public final class CarrierAppUtils { 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); anyAppsEnabled = true; } } else if (!hasPrivileges && ai.enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) { Loading @@ -114,12 +112,10 @@ public final class CarrierAppUtils { } } if (!enabledCarrierPackages.isEmpty()) { if (anyAppsEnabled) { // Since we enabled at least one app, ensure we grant default permissions to those // apps. String[] packageNames = new String[enabledCarrierPackages.size()]; enabledCarrierPackages.toArray(packageNames); packageManager.grantDefaultPermissionsToEnabledCarrierApps(packageNames, userId); packageManager.grantDefaultPermissions(userId); } } catch (RemoteException e) { Slog.w(TAG, "Could not reach PackageManager", e); Loading src/java/com/android/internal/telephony/SubscriptionInfoUpdater.java +28 −0 Original line number Diff line number Diff line Loading @@ -27,13 +27,16 @@ import android.content.ContentValues; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.IPackagesProvider; import android.os.AsyncResult; import android.os.Handler; import android.os.IRemoteCallback; import android.os.Message; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemProperties; import android.os.UserHandle; import android.preference.PreferenceManager; import android.provider.Settings; Loading Loading @@ -123,6 +126,31 @@ public class SubscriptionInfoUpdater extends Handler { } private void initializeCarrierApps() { // Let the PackageManager query carrier apps as they get certain permissions granted by // default. try { mPackageManager.setCarrierAppPackagesProvider( new IPackagesProvider.Stub() { @Override public String[] getPackages(int userId) { List<ApplicationInfo> defaultApps = CarrierAppUtils.getDefaultCarrierApps(mPackageManager, TelephonyManager.getDefault(), userId); if (defaultApps == null) { return null; } int count = defaultApps.size(); String[] packages = new String[count]; for (int i = 0; i < count; i++) { packages[i] = defaultApps.get(i).packageName; } return packages; } }); } catch (RemoteException e) { logd("Couldn't contact PackageManager: " + e.getMessage()); } // Initialize carrier apps: // -Now (on system startup) // -Whenever new carrier privilege rules might change (new SIM is loaded) Loading tests/telephonytests/src/com/android/internal/telephony/CarrierAppUtilsTest.java +12 −33 Original line number Diff line number Diff line Loading @@ -60,9 +60,7 @@ 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, Mockito.never()).grantDefaultPermissions(Mockito.anyInt()); Mockito.verifyNoMoreInteractions(mTelephonyManager); } Loading @@ -76,9 +74,7 @@ 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, Mockito.never()).grantDefaultPermissions(Mockito.anyInt()); Mockito.verifyNoMoreInteractions(mTelephonyManager); } Loading @@ -98,9 +94,7 @@ 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, Mockito.never()).grantDefaultPermissions(Mockito.anyInt()); } /** Configured app has privileges, but was disabled - should do nothing. */ Loading @@ -118,9 +112,7 @@ 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, Mockito.never()).grantDefaultPermissions(Mockito.anyInt()); } /** Configured app has privileges, and is already enabled - should only grant permissions. */ Loading @@ -138,8 +130,7 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { 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); Mockito.verify(mPackageManager).grantDefaultPermissions(USER_ID); } /** Configured app has privileges, and is in the default state - should enable. */ Loading @@ -157,8 +148,7 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { Mockito.verify(mPackageManager).setApplicationEnabledSetting( CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0, USER_ID, CALLING_PACKAGE); Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps( new String[] {appInfo.packageName}, USER_ID); Mockito.verify(mPackageManager).grantDefaultPermissions(USER_ID); } /** Configured app has privileges, and is disabled until used - should enable. */ Loading @@ -177,8 +167,7 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { Mockito.verify(mPackageManager).setApplicationEnabledSetting( CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0, USER_ID, CALLING_PACKAGE); Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps( new String[] {appInfo.packageName}, USER_ID); Mockito.verify(mPackageManager).grantDefaultPermissions(USER_ID); } /** Configured app has no privileges, and was disabled by the user - should do nothing. */ Loading @@ -196,9 +185,7 @@ 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, Mockito.never()).grantDefaultPermissions(Mockito.anyInt()); } /** Configured app has no privileges, and was disabled - should do nothing. */ Loading @@ -216,9 +203,7 @@ 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, Mockito.never()).grantDefaultPermissions(Mockito.anyInt()); } /** Configured app has no privileges, and is explicitly enabled - should do nothing. */ Loading @@ -236,9 +221,7 @@ 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, Mockito.never()).grantDefaultPermissions(Mockito.anyInt()); } /** Configured app has no privileges, and is in the default state - should disable until use. */ Loading @@ -256,9 +239,7 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { Mockito.verify(mPackageManager).setApplicationEnabledSetting( CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 0, USER_ID, CALLING_PACKAGE); Mockito.verify(mPackageManager, Mockito.never()) .grantDefaultPermissionsToEnabledCarrierApps( Mockito.any(String[].class), Mockito.anyInt()); Mockito.verify(mPackageManager, Mockito.never()).grantDefaultPermissions(Mockito.anyInt()); } /** Configured app has no privileges, and is disabled until used - should do nothing. */ Loading @@ -277,9 +258,7 @@ 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, Mockito.never()).grantDefaultPermissions(Mockito.anyInt()); } } Loading
src/java/com/android/internal/telephony/CarrierAppUtils.java +5 −9 Original line number Diff line number Diff line Loading @@ -79,10 +79,8 @@ public final class CarrierAppUtils { if (candidates == null || candidates.isEmpty()) { return; } List<String> enabledCarrierPackages = new ArrayList<>(); try { boolean anyAppsEnabled = false; for (ApplicationInfo ai : candidates) { String packageName = ai.packageName; boolean hasPrivileges = Loading @@ -94,7 +92,7 @@ public final class CarrierAppUtils { PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED) { Slog.i(TAG, "Update state(" + packageName + "): ENABLED for user " + userId); enabledCarrierPackages.add(ai.packageName); anyAppsEnabled = true; packageManager.setApplicationEnabledSetting(packageName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0, userId, callingPackage); Loading @@ -102,7 +100,7 @@ public final class CarrierAppUtils { 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); anyAppsEnabled = true; } } else if (!hasPrivileges && ai.enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) { Loading @@ -114,12 +112,10 @@ public final class CarrierAppUtils { } } if (!enabledCarrierPackages.isEmpty()) { if (anyAppsEnabled) { // Since we enabled at least one app, ensure we grant default permissions to those // apps. String[] packageNames = new String[enabledCarrierPackages.size()]; enabledCarrierPackages.toArray(packageNames); packageManager.grantDefaultPermissionsToEnabledCarrierApps(packageNames, userId); packageManager.grantDefaultPermissions(userId); } } catch (RemoteException e) { Slog.w(TAG, "Could not reach PackageManager", e); Loading
src/java/com/android/internal/telephony/SubscriptionInfoUpdater.java +28 −0 Original line number Diff line number Diff line Loading @@ -27,13 +27,16 @@ import android.content.ContentValues; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.IPackagesProvider; import android.os.AsyncResult; import android.os.Handler; import android.os.IRemoteCallback; import android.os.Message; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemProperties; import android.os.UserHandle; import android.preference.PreferenceManager; import android.provider.Settings; Loading Loading @@ -123,6 +126,31 @@ public class SubscriptionInfoUpdater extends Handler { } private void initializeCarrierApps() { // Let the PackageManager query carrier apps as they get certain permissions granted by // default. try { mPackageManager.setCarrierAppPackagesProvider( new IPackagesProvider.Stub() { @Override public String[] getPackages(int userId) { List<ApplicationInfo> defaultApps = CarrierAppUtils.getDefaultCarrierApps(mPackageManager, TelephonyManager.getDefault(), userId); if (defaultApps == null) { return null; } int count = defaultApps.size(); String[] packages = new String[count]; for (int i = 0; i < count; i++) { packages[i] = defaultApps.get(i).packageName; } return packages; } }); } catch (RemoteException e) { logd("Couldn't contact PackageManager: " + e.getMessage()); } // Initialize carrier apps: // -Now (on system startup) // -Whenever new carrier privilege rules might change (new SIM is loaded) Loading
tests/telephonytests/src/com/android/internal/telephony/CarrierAppUtilsTest.java +12 −33 Original line number Diff line number Diff line Loading @@ -60,9 +60,7 @@ 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, Mockito.never()).grantDefaultPermissions(Mockito.anyInt()); Mockito.verifyNoMoreInteractions(mTelephonyManager); } Loading @@ -76,9 +74,7 @@ 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, Mockito.never()).grantDefaultPermissions(Mockito.anyInt()); Mockito.verifyNoMoreInteractions(mTelephonyManager); } Loading @@ -98,9 +94,7 @@ 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, Mockito.never()).grantDefaultPermissions(Mockito.anyInt()); } /** Configured app has privileges, but was disabled - should do nothing. */ Loading @@ -118,9 +112,7 @@ 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, Mockito.never()).grantDefaultPermissions(Mockito.anyInt()); } /** Configured app has privileges, and is already enabled - should only grant permissions. */ Loading @@ -138,8 +130,7 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { 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); Mockito.verify(mPackageManager).grantDefaultPermissions(USER_ID); } /** Configured app has privileges, and is in the default state - should enable. */ Loading @@ -157,8 +148,7 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { Mockito.verify(mPackageManager).setApplicationEnabledSetting( CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0, USER_ID, CALLING_PACKAGE); Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps( new String[] {appInfo.packageName}, USER_ID); Mockito.verify(mPackageManager).grantDefaultPermissions(USER_ID); } /** Configured app has privileges, and is disabled until used - should enable. */ Loading @@ -177,8 +167,7 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { Mockito.verify(mPackageManager).setApplicationEnabledSetting( CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0, USER_ID, CALLING_PACKAGE); Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps( new String[] {appInfo.packageName}, USER_ID); Mockito.verify(mPackageManager).grantDefaultPermissions(USER_ID); } /** Configured app has no privileges, and was disabled by the user - should do nothing. */ Loading @@ -196,9 +185,7 @@ 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, Mockito.never()).grantDefaultPermissions(Mockito.anyInt()); } /** Configured app has no privileges, and was disabled - should do nothing. */ Loading @@ -216,9 +203,7 @@ 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, Mockito.never()).grantDefaultPermissions(Mockito.anyInt()); } /** Configured app has no privileges, and is explicitly enabled - should do nothing. */ Loading @@ -236,9 +221,7 @@ 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, Mockito.never()).grantDefaultPermissions(Mockito.anyInt()); } /** Configured app has no privileges, and is in the default state - should disable until use. */ Loading @@ -256,9 +239,7 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase { Mockito.verify(mPackageManager).setApplicationEnabledSetting( CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 0, USER_ID, CALLING_PACKAGE); Mockito.verify(mPackageManager, Mockito.never()) .grantDefaultPermissionsToEnabledCarrierApps( Mockito.any(String[].class), Mockito.anyInt()); Mockito.verify(mPackageManager, Mockito.never()).grantDefaultPermissions(Mockito.anyInt()); } /** Configured app has no privileges, and is disabled until used - should do nothing. */ Loading @@ -277,9 +258,7 @@ 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, Mockito.never()).grantDefaultPermissions(Mockito.anyInt()); } }