Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dd4984e9 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Remove RECEIVE_PACKAGE_CHANGED_BROADCAST_ON_COMPONENT_STATE_CHANGED permission" into main

parents 74f0da44 d5d26b73
Loading
Loading
Loading
Loading
+0 −16
Original line number Original line Diff line number Diff line
@@ -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
+1 −4
Original line number Original line Diff line number Diff line
@@ -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;
@@ -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.
+12 −36
Original line number Original line Diff line number Diff line
@@ -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();
@@ -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)
@@ -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