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

Commit 7b95c615 authored by Angela Wang's avatar Angela Wang
Browse files

Flash notification-related APIs should be restricted to system level access only

Flag: EXEMPT bugfix
Bug: 312197121
Test: tested with the attached APK in buganizer and confirmed that flash notifications are not displayed.
Test: atest AccessibilityManagerTest#testStartAndStopFlashNotificationSequence
Change-Id: I5d593a1bc5eaeb29023e09cc785633eb394b7034
parent 60b76eb8
Loading
Loading
Loading
Loading
+8 −12
Original line number Diff line number Diff line
@@ -2049,9 +2049,7 @@ public final class AccessibilityManager {
     * {@link android.view.Display#DEFAULT_DISPLAY}, is or lower than
     * {@link android.view.Display#INVALID_DISPLAY}, or is already being proxy-ed.
     *
     * @throws SecurityException if the app does not hold the
     * {@link Manifest.permission#MANAGE_ACCESSIBILITY} permission or the
     * {@link Manifest.permission#CREATE_VIRTUAL_DEVICE} permission.
     * @throws SecurityException if the app does not hold the required permissions.
     *
     * @hide
     */
@@ -2079,9 +2077,7 @@ public final class AccessibilityManager {
     *
     * @return {@code true} if the proxy is successfully unregistered.
     *
     * @throws SecurityException if the app does not hold the
     * {@link Manifest.permission#MANAGE_ACCESSIBILITY} permission or the
     * {@link Manifest.permission#CREATE_VIRTUAL_DEVICE} permission.
     * @throws SecurityException if the app does not hold the required permissions.
     *
     * @hide
     */
@@ -2134,8 +2130,8 @@ public final class AccessibilityManager {
        try {
            return service.startFlashNotificationSequence(context.getOpPackageName(),
                    reason, mBinder);
        } catch (RemoteException re) {
            Log.e(LOG_TAG, "Error while start flash notification sequence", re);
        } catch (RemoteException | SecurityException e) {
            Log.e(LOG_TAG, "Error while start flash notification sequence", e);
            return false;
        }
    }
@@ -2164,8 +2160,8 @@ public final class AccessibilityManager {

        try {
            return service.stopFlashNotificationSequence(context.getOpPackageName());
        } catch (RemoteException re) {
            Log.e(LOG_TAG, "Error while stop flash notification sequence", re);
        } catch (RemoteException | SecurityException e) {
            Log.e(LOG_TAG, "Error while stop flash notification sequence", e);
            return false;
        }
    }
@@ -2192,8 +2188,8 @@ public final class AccessibilityManager {
        try {
            return service.startFlashNotificationEvent(context.getOpPackageName(),
                    reason, reasonPkg);
        } catch (RemoteException re) {
            Log.e(LOG_TAG, "Error while start flash notification event", re);
        } catch (RemoteException | SecurityException e) {
            Log.e(LOG_TAG, "Error while start flash notification event", e);
            return false;
        }
    }
+3 −3
Original line number Diff line number Diff line
@@ -156,13 +156,13 @@ interface IAccessibilityManager {
    @EnforcePermission("INJECT_EVENTS")
    void injectInputEventToInputFilter(in InputEvent event);

    @RequiresNoPermission
    @EnforcePermission("MANAGE_ACCESSIBILITY")
    boolean startFlashNotificationSequence(String opPkg, int reason, IBinder token);

    @RequiresNoPermission
    @EnforcePermission("MANAGE_ACCESSIBILITY")
    boolean stopFlashNotificationSequence(String opPkg);

    @RequiresNoPermission
    @EnforcePermission("MANAGE_ACCESSIBILITY")
    boolean startFlashNotificationEvent(String opPkg, int reason, String reasonPkg);

    @RequiresNoPermission
+13 −27
Original line number Diff line number Diff line
@@ -4886,40 +4886,26 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
    }

    @Override
    @RequiresNoPermission
    public boolean startFlashNotificationSequence(String opPkg,
            @FlashNotificationReason int reason, IBinder token) {
        final long identity = Binder.clearCallingIdentity();
        try {
            return mFlashNotificationsController.startFlashNotificationSequence(opPkg,
                    reason, token);
        } finally {
            Binder.restoreCallingIdentity(identity);
        }
    @EnforcePermission(MANAGE_ACCESSIBILITY)
    public boolean startFlashNotificationSequence(String opPkg, @FlashNotificationReason int reason,
            IBinder token) {
        startFlashNotificationSequence_enforcePermission();
        return mFlashNotificationsController.startFlashNotificationSequence(opPkg, reason, token);
    }

    @Override
    @RequiresNoPermission
    @EnforcePermission(MANAGE_ACCESSIBILITY)
    public boolean stopFlashNotificationSequence(String opPkg) {
        final long identity = Binder.clearCallingIdentity();
        try {
        stopFlashNotificationSequence_enforcePermission();
        return mFlashNotificationsController.stopFlashNotificationSequence(opPkg);
        } finally {
            Binder.restoreCallingIdentity(identity);
        }
    }

    @Override
    @RequiresNoPermission
    public boolean startFlashNotificationEvent(String opPkg,
            @FlashNotificationReason int reason, String reasonPkg) {
        final long identity = Binder.clearCallingIdentity();
        try {
            return mFlashNotificationsController.startFlashNotificationEvent(opPkg,
                    reason, reasonPkg);
        } finally {
            Binder.restoreCallingIdentity(identity);
        }
    @EnforcePermission(MANAGE_ACCESSIBILITY)
    public boolean startFlashNotificationEvent(String opPkg, @FlashNotificationReason int reason,
            String reasonPkg) {
        startFlashNotificationEvent_enforcePermission();
        return mFlashNotificationsController.startFlashNotificationEvent(opPkg, reason, reasonPkg);
    }

    @Override