Loading core/res/AndroidManifest.xml +0 −16 Original line number Original line Diff line number Diff line Loading @@ -8804,22 +8804,6 @@ <permission android:name="android.permission.RESERVED_FOR_TESTING_SIGNATURE" <permission android:name="android.permission.RESERVED_FOR_TESTING_SIGNATURE" android:protectionLevel="signature"/> android:protectionLevel="signature"/> <!-- This permission allows the system to receive PACKAGE_CHANGED broadcasts when the component state of a non-exported component has been changed. <p>Not for use by third-party applications. </p> <p>Protection level: internal @hide --> <permission android:name="android.permission.INTERNAL_RECEIVE_PACKAGE_CHANGED_BROADCAST_ON_COMPONENT_STATE_CHANGED" android:protectionLevel="internal" android:featureFlag="android.content.pm.reduce_broadcasts_for_component_state_changes"/> <uses-permission android:name="android.permission.INTERNAL_RECEIVE_PACKAGE_CHANGED_BROADCAST_ON_COMPONENT_STATE_CHANGED" android:featureFlag="android.content.pm.reduce_broadcasts_for_component_state_changes"/> <!-- @SystemApi <!-- @SystemApi @FlaggedApi("android.media.tv.flags.kids_mode_tvdb_sharing") @FlaggedApi("android.media.tv.flags.kids_mode_tvdb_sharing") This permission is required when accessing information related to This permission is required when accessing information related to Loading services/core/java/com/android/server/pm/BroadcastHelper.java +1 −4 Original line number Original line Diff line number Diff line Loading @@ -86,8 +86,6 @@ import java.util.function.Supplier; */ */ public final class BroadcastHelper { public final class BroadcastHelper { private static final boolean DEBUG_BROADCASTS = false; private static final boolean DEBUG_BROADCASTS = false; private static final String PERMISSION_PACKAGE_CHANGED_BROADCAST_ON_COMPONENT_STATE_CHANGED = "android.permission.INTERNAL_RECEIVE_PACKAGE_CHANGED_BROADCAST_ON_COMPONENT_STATE_CHANGED"; private final UserManagerInternal mUmInternal; private final UserManagerInternal mUmInternal; private final ActivityManagerInternal mAmInternal; private final ActivityManagerInternal mAmInternal; Loading Loading @@ -398,8 +396,7 @@ public final class BroadcastHelper { sendPackageChangedBroadcastWithPermissions(packageName, dontKillApp, sendPackageChangedBroadcastWithPermissions(packageName, dontKillApp, notExportedComponentNames, packageUid, reason, userIds, instantUserIds, notExportedComponentNames, packageUid, reason, userIds, instantUserIds, broadcastAllowList, "android" /* targetPackageName */, broadcastAllowList, "android" /* targetPackageName */, new String[]{ null /* requiredPermissions */); PERMISSION_PACKAGE_CHANGED_BROADCAST_ON_COMPONENT_STATE_CHANGED}); } } // Second, send the PACKAGE_CHANGED broadcast to the application itself. // Second, send the PACKAGE_CHANGED broadcast to the application itself. Loading services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/BroadcastHelperTest.java +12 −36 Original line number Original line Diff line number Diff line Loading @@ -72,8 +72,6 @@ public class BroadcastHelperTest { private static final String PACKAGE_CHANGED_TEST_PACKAGE_NAME = "testpackagename"; private static final String PACKAGE_CHANGED_TEST_PACKAGE_NAME = "testpackagename"; private static final String PACKAGE_CHANGED_TEST_MAIN_ACTIVITY = private static final String PACKAGE_CHANGED_TEST_MAIN_ACTIVITY = PACKAGE_CHANGED_TEST_PACKAGE_NAME + ".MainActivity"; PACKAGE_CHANGED_TEST_PACKAGE_NAME + ".MainActivity"; private static final String PERMISSION_PACKAGE_CHANGED_BROADCAST_ON_COMPONENT_STATE_CHANGED = "android.permission.INTERNAL_RECEIVE_PACKAGE_CHANGED_BROADCAST_ON_COMPONENT_STATE_CHANGED"; @Rule @Rule public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule(); public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule(); Loading Loading @@ -125,34 +123,23 @@ public class BroadcastHelperTest { @RequiresFlagsEnabled(FLAG_REDUCE_BROADCASTS_FOR_COMPONENT_STATE_CHANGES) @RequiresFlagsEnabled(FLAG_REDUCE_BROADCASTS_FOR_COMPONENT_STATE_CHANGES) @Test @Test public void changeNonExportedComponent_sendPackageChangedBroadcastToSystem_withPermission() public void changeNonExportedComponent_sendPackageChangedBroadcastToSystemAndApplicationItself() throws Exception { throws Exception { changeComponentAndSendPackageChangedBroadcast(false /* changeExportedComponent */, changeComponentAndSendPackageChangedBroadcast(false /* changeExportedComponent */, new String[0] /* sharedPackages */); new String[0] /* sharedPackages */); ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class); ArgumentCaptor<Intent> captorIntent = ArgumentCaptor.forClass(Intent.class); verify(mMockActivityManagerInternal).broadcastIntentWithCallback( verify(mMockActivityManagerInternal, times(2)).broadcastIntentWithCallback( captor.capture(), eq(null), captorIntent.capture(), eq(null), eq(null), anyInt(), eq(null), eq(null), eq(null)); eq(new String[]{PERMISSION_PACKAGE_CHANGED_BROADCAST_ON_COMPONENT_STATE_CHANGED}), List<Intent> intents = captorIntent.getAllValues(); anyInt(), eq(null), eq(null), eq(null)); assertNotNull(intents); Intent intent = captor.getValue(); assertThat(intents.size()).isEqualTo(2); assertNotNull(intent); assertThat(intent.getPackage()).isEqualTo("android"); } @RequiresFlagsEnabled(FLAG_REDUCE_BROADCASTS_FOR_COMPONENT_STATE_CHANGES) final Intent intent1 = intents.get(0); @Test assertThat(intent1.getPackage()).isEqualTo("android"); public void changeNonExportedComponent_sendPackageChangedBroadcastToApplicationItself() throws Exception { changeComponentAndSendPackageChangedBroadcast(false /* changeExportedComponent */, new String[0] /* sharedPackages */); ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class); final Intent intent2 = intents.get(1); verify(mMockActivityManagerInternal).broadcastIntentWithCallback(captor.capture(), eq(null), assertThat(intent2.getPackage()).isEqualTo(PACKAGE_CHANGED_TEST_PACKAGE_NAME); eq(null), anyInt(), eq(null), eq(null), eq(null)); Intent intent = captor.getValue(); assertNotNull(intent); assertThat(intent.getPackage()).isEqualTo(PACKAGE_CHANGED_TEST_PACKAGE_NAME); } } @RequiresFlagsEnabled(FLAG_REDUCE_BROADCASTS_FOR_COMPONENT_STATE_CHANGES) @RequiresFlagsEnabled(FLAG_REDUCE_BROADCASTS_FOR_COMPONENT_STATE_CHANGES) Loading @@ -163,31 +150,20 @@ public class BroadcastHelperTest { new String[]{"shared.package"} /* sharedPackages */); new String[]{"shared.package"} /* sharedPackages */); ArgumentCaptor<Intent> captorIntent = ArgumentCaptor.forClass(Intent.class); ArgumentCaptor<Intent> captorIntent = ArgumentCaptor.forClass(Intent.class); ArgumentCaptor<String[]> captorRequiredPermissions = ArgumentCaptor.forClass( String[].class); verify(mMockActivityManagerInternal, times(3)).broadcastIntentWithCallback( verify(mMockActivityManagerInternal, times(3)).broadcastIntentWithCallback( captorIntent.capture(), eq(null), captorRequiredPermissions.capture(), anyInt(), captorIntent.capture(), eq(null), eq(null), anyInt(), eq(null), eq(null), eq(null)); eq(null), eq(null), eq(null)); List<Intent> intents = captorIntent.getAllValues(); List<Intent> intents = captorIntent.getAllValues(); List<String[]> requiredPermissions = captorRequiredPermissions.getAllValues(); assertNotNull(intents); assertNotNull(intents); assertThat(intents.size()).isEqualTo(3); assertThat(intents.size()).isEqualTo(3); final Intent intent1 = intents.get(0); final Intent intent1 = intents.get(0); final String[] requiredPermission1 = requiredPermissions.get(0); assertThat(intent1.getPackage()).isEqualTo("android"); assertThat(intent1.getPackage()).isEqualTo("android"); assertThat(requiredPermission1).isEqualTo( new String[]{PERMISSION_PACKAGE_CHANGED_BROADCAST_ON_COMPONENT_STATE_CHANGED}); final Intent intent2 = intents.get(1); final Intent intent2 = intents.get(1); final String[] requiredPermission2 = requiredPermissions.get(1); assertThat(intent2.getPackage()).isEqualTo(PACKAGE_CHANGED_TEST_PACKAGE_NAME); assertThat(intent2.getPackage()).isEqualTo(PACKAGE_CHANGED_TEST_PACKAGE_NAME); assertThat(requiredPermission2).isNull(); final Intent intent3 = intents.get(2); final Intent intent3 = intents.get(2); final String[] requiredPermission3 = requiredPermissions.get(2); assertThat(intent3.getPackage()).isEqualTo("shared.package"); assertThat(intent3.getPackage()).isEqualTo("shared.package"); assertThat(requiredPermission3).isNull(); } } @Test @Test Loading Loading
core/res/AndroidManifest.xml +0 −16 Original line number Original line Diff line number Diff line Loading @@ -8804,22 +8804,6 @@ <permission android:name="android.permission.RESERVED_FOR_TESTING_SIGNATURE" <permission android:name="android.permission.RESERVED_FOR_TESTING_SIGNATURE" android:protectionLevel="signature"/> android:protectionLevel="signature"/> <!-- This permission allows the system to receive PACKAGE_CHANGED broadcasts when the component state of a non-exported component has been changed. <p>Not for use by third-party applications. </p> <p>Protection level: internal @hide --> <permission android:name="android.permission.INTERNAL_RECEIVE_PACKAGE_CHANGED_BROADCAST_ON_COMPONENT_STATE_CHANGED" android:protectionLevel="internal" android:featureFlag="android.content.pm.reduce_broadcasts_for_component_state_changes"/> <uses-permission android:name="android.permission.INTERNAL_RECEIVE_PACKAGE_CHANGED_BROADCAST_ON_COMPONENT_STATE_CHANGED" android:featureFlag="android.content.pm.reduce_broadcasts_for_component_state_changes"/> <!-- @SystemApi <!-- @SystemApi @FlaggedApi("android.media.tv.flags.kids_mode_tvdb_sharing") @FlaggedApi("android.media.tv.flags.kids_mode_tvdb_sharing") This permission is required when accessing information related to This permission is required when accessing information related to Loading
services/core/java/com/android/server/pm/BroadcastHelper.java +1 −4 Original line number Original line Diff line number Diff line Loading @@ -86,8 +86,6 @@ import java.util.function.Supplier; */ */ public final class BroadcastHelper { public final class BroadcastHelper { private static final boolean DEBUG_BROADCASTS = false; private static final boolean DEBUG_BROADCASTS = false; private static final String PERMISSION_PACKAGE_CHANGED_BROADCAST_ON_COMPONENT_STATE_CHANGED = "android.permission.INTERNAL_RECEIVE_PACKAGE_CHANGED_BROADCAST_ON_COMPONENT_STATE_CHANGED"; private final UserManagerInternal mUmInternal; private final UserManagerInternal mUmInternal; private final ActivityManagerInternal mAmInternal; private final ActivityManagerInternal mAmInternal; Loading Loading @@ -398,8 +396,7 @@ public final class BroadcastHelper { sendPackageChangedBroadcastWithPermissions(packageName, dontKillApp, sendPackageChangedBroadcastWithPermissions(packageName, dontKillApp, notExportedComponentNames, packageUid, reason, userIds, instantUserIds, notExportedComponentNames, packageUid, reason, userIds, instantUserIds, broadcastAllowList, "android" /* targetPackageName */, broadcastAllowList, "android" /* targetPackageName */, new String[]{ null /* requiredPermissions */); PERMISSION_PACKAGE_CHANGED_BROADCAST_ON_COMPONENT_STATE_CHANGED}); } } // Second, send the PACKAGE_CHANGED broadcast to the application itself. // Second, send the PACKAGE_CHANGED broadcast to the application itself. Loading
services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/BroadcastHelperTest.java +12 −36 Original line number Original line Diff line number Diff line Loading @@ -72,8 +72,6 @@ public class BroadcastHelperTest { private static final String PACKAGE_CHANGED_TEST_PACKAGE_NAME = "testpackagename"; private static final String PACKAGE_CHANGED_TEST_PACKAGE_NAME = "testpackagename"; private static final String PACKAGE_CHANGED_TEST_MAIN_ACTIVITY = private static final String PACKAGE_CHANGED_TEST_MAIN_ACTIVITY = PACKAGE_CHANGED_TEST_PACKAGE_NAME + ".MainActivity"; PACKAGE_CHANGED_TEST_PACKAGE_NAME + ".MainActivity"; private static final String PERMISSION_PACKAGE_CHANGED_BROADCAST_ON_COMPONENT_STATE_CHANGED = "android.permission.INTERNAL_RECEIVE_PACKAGE_CHANGED_BROADCAST_ON_COMPONENT_STATE_CHANGED"; @Rule @Rule public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule(); public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule(); Loading Loading @@ -125,34 +123,23 @@ public class BroadcastHelperTest { @RequiresFlagsEnabled(FLAG_REDUCE_BROADCASTS_FOR_COMPONENT_STATE_CHANGES) @RequiresFlagsEnabled(FLAG_REDUCE_BROADCASTS_FOR_COMPONENT_STATE_CHANGES) @Test @Test public void changeNonExportedComponent_sendPackageChangedBroadcastToSystem_withPermission() public void changeNonExportedComponent_sendPackageChangedBroadcastToSystemAndApplicationItself() throws Exception { throws Exception { changeComponentAndSendPackageChangedBroadcast(false /* changeExportedComponent */, changeComponentAndSendPackageChangedBroadcast(false /* changeExportedComponent */, new String[0] /* sharedPackages */); new String[0] /* sharedPackages */); ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class); ArgumentCaptor<Intent> captorIntent = ArgumentCaptor.forClass(Intent.class); verify(mMockActivityManagerInternal).broadcastIntentWithCallback( verify(mMockActivityManagerInternal, times(2)).broadcastIntentWithCallback( captor.capture(), eq(null), captorIntent.capture(), eq(null), eq(null), anyInt(), eq(null), eq(null), eq(null)); eq(new String[]{PERMISSION_PACKAGE_CHANGED_BROADCAST_ON_COMPONENT_STATE_CHANGED}), List<Intent> intents = captorIntent.getAllValues(); anyInt(), eq(null), eq(null), eq(null)); assertNotNull(intents); Intent intent = captor.getValue(); assertThat(intents.size()).isEqualTo(2); assertNotNull(intent); assertThat(intent.getPackage()).isEqualTo("android"); } @RequiresFlagsEnabled(FLAG_REDUCE_BROADCASTS_FOR_COMPONENT_STATE_CHANGES) final Intent intent1 = intents.get(0); @Test assertThat(intent1.getPackage()).isEqualTo("android"); public void changeNonExportedComponent_sendPackageChangedBroadcastToApplicationItself() throws Exception { changeComponentAndSendPackageChangedBroadcast(false /* changeExportedComponent */, new String[0] /* sharedPackages */); ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class); final Intent intent2 = intents.get(1); verify(mMockActivityManagerInternal).broadcastIntentWithCallback(captor.capture(), eq(null), assertThat(intent2.getPackage()).isEqualTo(PACKAGE_CHANGED_TEST_PACKAGE_NAME); eq(null), anyInt(), eq(null), eq(null), eq(null)); Intent intent = captor.getValue(); assertNotNull(intent); assertThat(intent.getPackage()).isEqualTo(PACKAGE_CHANGED_TEST_PACKAGE_NAME); } } @RequiresFlagsEnabled(FLAG_REDUCE_BROADCASTS_FOR_COMPONENT_STATE_CHANGES) @RequiresFlagsEnabled(FLAG_REDUCE_BROADCASTS_FOR_COMPONENT_STATE_CHANGES) Loading @@ -163,31 +150,20 @@ public class BroadcastHelperTest { new String[]{"shared.package"} /* sharedPackages */); new String[]{"shared.package"} /* sharedPackages */); ArgumentCaptor<Intent> captorIntent = ArgumentCaptor.forClass(Intent.class); ArgumentCaptor<Intent> captorIntent = ArgumentCaptor.forClass(Intent.class); ArgumentCaptor<String[]> captorRequiredPermissions = ArgumentCaptor.forClass( String[].class); verify(mMockActivityManagerInternal, times(3)).broadcastIntentWithCallback( verify(mMockActivityManagerInternal, times(3)).broadcastIntentWithCallback( captorIntent.capture(), eq(null), captorRequiredPermissions.capture(), anyInt(), captorIntent.capture(), eq(null), eq(null), anyInt(), eq(null), eq(null), eq(null)); eq(null), eq(null), eq(null)); List<Intent> intents = captorIntent.getAllValues(); List<Intent> intents = captorIntent.getAllValues(); List<String[]> requiredPermissions = captorRequiredPermissions.getAllValues(); assertNotNull(intents); assertNotNull(intents); assertThat(intents.size()).isEqualTo(3); assertThat(intents.size()).isEqualTo(3); final Intent intent1 = intents.get(0); final Intent intent1 = intents.get(0); final String[] requiredPermission1 = requiredPermissions.get(0); assertThat(intent1.getPackage()).isEqualTo("android"); assertThat(intent1.getPackage()).isEqualTo("android"); assertThat(requiredPermission1).isEqualTo( new String[]{PERMISSION_PACKAGE_CHANGED_BROADCAST_ON_COMPONENT_STATE_CHANGED}); final Intent intent2 = intents.get(1); final Intent intent2 = intents.get(1); final String[] requiredPermission2 = requiredPermissions.get(1); assertThat(intent2.getPackage()).isEqualTo(PACKAGE_CHANGED_TEST_PACKAGE_NAME); assertThat(intent2.getPackage()).isEqualTo(PACKAGE_CHANGED_TEST_PACKAGE_NAME); assertThat(requiredPermission2).isNull(); final Intent intent3 = intents.get(2); final Intent intent3 = intents.get(2); final String[] requiredPermission3 = requiredPermissions.get(2); assertThat(intent3.getPackage()).isEqualTo("shared.package"); assertThat(intent3.getPackage()).isEqualTo("shared.package"); assertThat(requiredPermission3).isNull(); } } @Test @Test Loading