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

Commit 2c54f50d authored by Nate Myren's avatar Nate Myren
Browse files

Allow shell to revoke notification permission without kill

Add the revokePostNotificationPermissionWithoutKillForTest API, which
will allow the shell to revoke the POST_NOTIFICATIONS permission without
killing this app. Gate this permission behind the
REVOKE_POST_NOTIFICATIONS_WITHOUT_KILL permission, which is
signature|privileged, accessible only to the shell.

Ignore-AOSP-First: Contains information about unreleased features
Test: manual
Bug: 194833441
Change-Id: I3177d1aeb338591c1d736aa6b4f073b6db6227e7
parent 7d24159b
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ package android {
    field public static final String RECORD_BACKGROUND_AUDIO = "android.permission.RECORD_BACKGROUND_AUDIO";
    field public static final String REMOVE_TASKS = "android.permission.REMOVE_TASKS";
    field public static final String RESET_APP_ERRORS = "android.permission.RESET_APP_ERRORS";
    field public static final String REVOKE_POST_NOTIFICATIONS_WITHOUT_KILL = "android.permission.REVOKE_POST_NOTIFICATIONS_WITHOUT_KILL";
    field public static final String SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS = "android.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS";
    field public static final String START_TASKS_FROM_RECENTS = "android.permission.START_TASKS_FROM_RECENTS";
    field public static final String SUSPEND_APPS = "android.permission.SUSPEND_APPS";
@@ -2036,6 +2037,7 @@ package android.permission {
    method @NonNull @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public java.util.List<android.permission.PermGroupUsage> getIndicatorAppOpUsageData();
    method @NonNull @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public java.util.List<android.permission.PermGroupUsage> getIndicatorAppOpUsageData(boolean);
    method @NonNull public android.content.AttributionSource registerAttributionSource(@NonNull android.content.AttributionSource);
    method public void revokePostNotificationPermissionWithoutKillForTest(@NonNull String, int);
  }

}
+2 −0
Original line number Diff line number Diff line
@@ -67,6 +67,8 @@ interface IPermissionManager {
    void revokeRuntimePermission(String packageName, String permissionName, int userId,
            String reason);

    void revokePostNotificationPermissionWithoutKillForTest(String packageName, int userId);

    boolean shouldShowRequestPermissionRationale(String packageName, String permissionName,
            int userId);

+20 −0
Original line number Diff line number Diff line
@@ -1362,6 +1362,26 @@ public final class PermissionManager {
        return false;
    }

    /**
     * Revoke the POST_NOTIFICATIONS permission, without killing the app. This method must ONLY BE
     * USED in CTS or local tests.
     *
     * @param packageName The package to be revoked
     * @param userId The user for which to revoke
     *
     * @hide
     */
    @TestApi
    public void revokePostNotificationPermissionWithoutKillForTest(@NonNull String packageName,
            int userId) {
        try {
            mPermissionManager.revokePostNotificationPermissionWithoutKillForTest(packageName,
                    userId);
        } catch (RemoteException e) {
            e.rethrowFromSystemServer();
        }
    }

    /* @hide */
    private static int checkPermissionUncached(@Nullable String permission, int pid, int uid) {
        final IActivityManager am = ActivityManager.getService();
+6 −0
Original line number Diff line number Diff line
@@ -4438,6 +4438,12 @@
    <permission android:name="android.permission.REVOKE_RUNTIME_PERMISSIONS"
         android:protectionLevel="signature|installer|verifier" />

   <!-- @TestApi Allows an application to revoke the POST_NOTIFICATIONS permission from an app
        without killing the app. Only granted to the shell.
        @hide -->
    <permission android:name="android.permission.REVOKE_POST_NOTIFICATIONS_WITHOUT_KILL"
        android:protectionLevel="signature" />

    <!-- @SystemApi Allows the system to read runtime permission state.
        @hide -->
    <permission android:name="android.permission.GET_RUNTIME_PERMISSIONS"
+3 −0
Original line number Diff line number Diff line
@@ -613,6 +613,9 @@
    <!-- Permission required for CTS test - CtsSafetyCenterTestCases -->
    <uses-permission android:name="android.permission.READ_SAFETY_CENTER_STATUS" />

    <!-- Permission required for CTS test - Notification test suite -->
    <uses-permission android:name="android.permission.REVOKE_POST_NOTIFICATIONS_WITHOUT_KILL" />

    <application android:label="@string/app_label"
                android:theme="@android:style/Theme.DeviceDefault.DayNight"
                android:defaultToDeviceProtectedStorage="true"
Loading