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

Commit 320029bf authored by Pat Manning's avatar Pat Manning Committed by Automerger Merge Worker
Browse files

Merge "Removing 'override' from nav bar mode APIs." into tm-dev am: 80c4b33d

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16988243

Change-Id: Id99309dda94fef0f3ff9360c75b0aad7e90794f6
parents 7ccfe2b3 80c4b33d
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -915,10 +915,10 @@ package android.app {
  public class StatusBarManager {
    method @NonNull @RequiresPermission(android.Manifest.permission.STATUS_BAR) public android.app.StatusBarManager.DisableInfo getDisableInfo();
    method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public int getNavBarModeOverride();
    method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public int getNavBarMode();
    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void registerNearbyMediaDevicesProvider(@NonNull android.media.NearbyMediaDevicesProvider);
    method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public void setDisabledForSetup(boolean);
    method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public void setNavBarModeOverride(int);
    method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public void setNavBarMode(int);
    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void unregisterNearbyMediaDevicesProvider(@NonNull android.media.NearbyMediaDevicesProvider);
    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void updateMediaTapToTransferReceiverDisplay(int, @NonNull android.media.MediaRoute2Info, @Nullable android.graphics.drawable.Icon, @Nullable CharSequence);
    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void updateMediaTapToTransferSenderDisplay(int, @NonNull android.media.MediaRoute2Info, @Nullable java.util.concurrent.Executor, @Nullable Runnable);
@@ -933,8 +933,8 @@ package android.app {
    field public static final int MEDIA_TRANSFER_SENDER_STATE_TRANSFER_TO_THIS_DEVICE_FAILED = 7; // 0x7
    field public static final int MEDIA_TRANSFER_SENDER_STATE_TRANSFER_TO_THIS_DEVICE_SUCCEEDED = 5; // 0x5
    field public static final int MEDIA_TRANSFER_SENDER_STATE_TRANSFER_TO_THIS_DEVICE_TRIGGERED = 3; // 0x3
    field public static final int NAV_BAR_MODE_OVERRIDE_KIDS = 1; // 0x1
    field public static final int NAV_BAR_MODE_OVERRIDE_NONE = 0; // 0x0
    field public static final int NAV_BAR_MODE_DEFAULT = 0; // 0x0
    field public static final int NAV_BAR_MODE_KIDS = 1; // 0x1
  }
  public static final class StatusBarManager.DisableInfo {
+19 −21
Original line number Diff line number Diff line
@@ -324,15 +324,15 @@ public class StatusBarManager {
    public @interface RequestResult {}

    /**
     * Constant for {@link #setNavBarModeOverride(int)} indicating the default navbar mode.
     * Constant for {@link #setNavBarMode(int)} indicating the default navbar mode.
     *
     * @hide
     */
    @SystemApi
    public static final int NAV_BAR_MODE_OVERRIDE_NONE = 0;
    public static final int NAV_BAR_MODE_DEFAULT = 0;

    /**
     * Constant for {@link #setNavBarModeOverride(int)} indicating kids navbar mode.
     * Constant for {@link #setNavBarMode(int)} indicating kids navbar mode.
     *
     * <p>When used, back and home icons will change drawables and layout, recents will be hidden,
     * and the navbar will remain visible when apps are in immersive mode.
@@ -340,15 +340,15 @@ public class StatusBarManager {
     * @hide
     */
    @SystemApi
    public static final int NAV_BAR_MODE_OVERRIDE_KIDS = 1;
    public static final int NAV_BAR_MODE_KIDS = 1;

    /** @hide */
    @IntDef(prefix = {"NAV_BAR_MODE_OVERRIDE_"}, value = {
            NAV_BAR_MODE_OVERRIDE_NONE,
            NAV_BAR_MODE_OVERRIDE_KIDS
    @IntDef(prefix = {"NAV_BAR_MODE_"}, value = {
            NAV_BAR_MODE_DEFAULT,
            NAV_BAR_MODE_KIDS
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface NavBarModeOverride {}
    public @interface NavBarMode {}

    /**
     * State indicating that this sender device is close to a receiver device, so the user can
@@ -926,25 +926,23 @@ public class StatusBarManager {
    }

    /**
     * Sets or removes the navigation bar mode override.
     * Sets or removes the navigation bar mode.
     *
     * @param navBarModeOverride the mode of the navigation bar override to be set.
     * @param navBarMode the mode of the navigation bar to be set.
     *
     * @hide
     */
    @SystemApi
    @RequiresPermission(android.Manifest.permission.STATUS_BAR)
    public void setNavBarModeOverride(@NavBarModeOverride int navBarModeOverride) {
        if (navBarModeOverride != NAV_BAR_MODE_OVERRIDE_NONE
                && navBarModeOverride != NAV_BAR_MODE_OVERRIDE_KIDS) {
            throw new IllegalArgumentException(
                    "Supplied navBarModeOverride not supported: " + navBarModeOverride);
    public void setNavBarMode(@NavBarMode int navBarMode) {
        if (navBarMode != NAV_BAR_MODE_DEFAULT && navBarMode != NAV_BAR_MODE_KIDS) {
            throw new IllegalArgumentException("Supplied navBarMode not supported: " + navBarMode);
        }

        try {
            final IStatusBarService svc = getService();
            if (svc != null) {
                svc.setNavBarModeOverride(navBarModeOverride);
                svc.setNavBarMode(navBarMode);
            }
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
@@ -952,23 +950,23 @@ public class StatusBarManager {
    }

    /**
     * Gets the navigation bar mode override. Returns default value if no override is set.
     * Gets the navigation bar mode. Returns default value if no mode is set.
     *
     * @hide
     */
    @SystemApi
    @RequiresPermission(android.Manifest.permission.STATUS_BAR)
    public @NavBarModeOverride int getNavBarModeOverride() {
        int navBarModeOverride = NAV_BAR_MODE_OVERRIDE_NONE;
    public @NavBarMode int getNavBarMode() {
        int navBarMode = NAV_BAR_MODE_DEFAULT;
        try {
            final IStatusBarService svc = getService();
            if (svc != null) {
                navBarModeOverride = svc.getNavBarModeOverride();
                navBarMode = svc.getNavBarMode();
            }
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
        return navBarModeOverride;
        return navBarMode;
    }

    /**
+5 −5
Original line number Diff line number Diff line
@@ -175,20 +175,20 @@ interface IStatusBarService
    void cancelRequestAddTile(in String packageName);

    /**
    * Overrides the navigation bar mode.
    * Sets the navigation bar mode.
    *
    * @param navBarModeOverride the mode of the navigation bar override to be set.
    * @param navBarMode the mode of the navigation bar to be set.
    *
    * @hide
    */
    void setNavBarModeOverride(int navBarModeOverride);
    void setNavBarMode(int navBarMode);

    /**
    * Gets the navigation bar mode override.
    * Gets the navigation bar mode.
    *
    * @hide
    */
    int getNavBarModeOverride();
    int getNavBarMode();

    /**
    * Register a listener for certain sessions. Each session may be guarded by its own permission.
+13 −14
Original line number Diff line number Diff line
@@ -18,9 +18,9 @@ package com.android.server.statusbar;

import static android.app.StatusBarManager.DISABLE2_GLOBAL_ACTIONS;
import static android.app.StatusBarManager.DISABLE2_NOTIFICATION_SHADE;
import static android.app.StatusBarManager.NAV_BAR_MODE_OVERRIDE_KIDS;
import static android.app.StatusBarManager.NAV_BAR_MODE_OVERRIDE_NONE;
import static android.app.StatusBarManager.NavBarModeOverride;
import static android.app.StatusBarManager.NAV_BAR_MODE_DEFAULT;
import static android.app.StatusBarManager.NAV_BAR_MODE_KIDS;
import static android.app.StatusBarManager.NavBarMode;
import static android.app.StatusBarManager.SessionFlags;
import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON_OVERLAY;
@@ -1945,26 +1945,25 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
    }

    /**
     * Sets or removes the navigation bar mode override.
     * Sets or removes the navigation bar mode.
     *
     * @param navBarModeOverride the mode of the navigation bar override to be set.
     * @param navBarMode the mode of the navigation bar to be set.
     */
    public void setNavBarModeOverride(@NavBarModeOverride int navBarModeOverride) {
    public void setNavBarMode(@NavBarMode int navBarMode) {
        enforceStatusBar();
        if (navBarModeOverride != NAV_BAR_MODE_OVERRIDE_NONE
                && navBarModeOverride != NAV_BAR_MODE_OVERRIDE_KIDS) {
        if (navBarMode != NAV_BAR_MODE_DEFAULT && navBarMode != NAV_BAR_MODE_KIDS) {
            throw new UnsupportedOperationException(
                    "Supplied navBarModeOverride not supported: " + navBarModeOverride);
                    "Supplied navBarMode not supported: " + navBarMode);
        }

        final int userId = mCurrentUserId;
        final long userIdentity = Binder.clearCallingIdentity();
        try {
            Settings.Secure.putIntForUser(mContext.getContentResolver(),
                    Settings.Secure.NAV_BAR_KIDS_MODE, navBarModeOverride, userId);
                    Settings.Secure.NAV_BAR_KIDS_MODE, navBarMode, userId);

            IOverlayManager overlayManager = getOverlayManager();
            if (overlayManager != null && navBarModeOverride == NAV_BAR_MODE_OVERRIDE_KIDS
            if (overlayManager != null && navBarMode == NAV_BAR_MODE_KIDS
                    && isPackageSupported(NAV_BAR_MODE_3BUTTON_OVERLAY)) {
                overlayManager.setEnabledExclusiveInCategory(NAV_BAR_MODE_3BUTTON_OVERLAY, userId);
            }
@@ -1976,14 +1975,14 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
    }

    /**
     * Gets the navigation bar mode override. Returns default value if no override is set.
     * Gets the navigation bar mode. Returns default value if no mode is set.
     *
     * @hide
     */
    public @NavBarModeOverride int getNavBarModeOverride() {
    public @NavBarMode int getNavBarMode() {
        enforceStatusBar();

        int navBarKidsMode = NAV_BAR_MODE_OVERRIDE_NONE;
        int navBarKidsMode = NAV_BAR_MODE_DEFAULT;
        final int userId = mCurrentUserId;
        final long userIdentity = Binder.clearCallingIdentity();
        try {
+19 −19
Original line number Diff line number Diff line
@@ -584,55 +584,55 @@ public class StatusBarManagerServiceTest {
    }

    @Test
    public void testSetNavBarModeOverride_setsOverrideModeKids() throws RemoteException {
        int navBarModeOverrideKids = StatusBarManager.NAV_BAR_MODE_OVERRIDE_KIDS;
    public void testSetNavBarMode_setsModeKids() throws RemoteException {
        int navBarModeKids = StatusBarManager.NAV_BAR_MODE_KIDS;

        mStatusBarManagerService.setNavBarModeOverride(navBarModeOverrideKids);
        mStatusBarManagerService.setNavBarMode(navBarModeKids);

        assertEquals(navBarModeOverrideKids, mStatusBarManagerService.getNavBarModeOverride());
        assertEquals(navBarModeKids, mStatusBarManagerService.getNavBarMode());
        verify(mOverlayManager).setEnabledExclusiveInCategory(anyString(), anyInt());
    }

    @Test
    public void testSetNavBarModeOverride_setsOverrideModeNone() throws RemoteException {
        int navBarModeOverrideNone = StatusBarManager.NAV_BAR_MODE_OVERRIDE_NONE;
    public void testSetNavBarMode_setsModeNone() throws RemoteException {
        int navBarModeNone = StatusBarManager.NAV_BAR_MODE_DEFAULT;

        mStatusBarManagerService.setNavBarModeOverride(navBarModeOverrideNone);
        mStatusBarManagerService.setNavBarMode(navBarModeNone);

        assertEquals(navBarModeOverrideNone, mStatusBarManagerService.getNavBarModeOverride());
        assertEquals(navBarModeNone, mStatusBarManagerService.getNavBarMode());
        verify(mOverlayManager, never()).setEnabledExclusiveInCategory(anyString(), anyInt());
    }

    @Test
    public void testSetNavBarModeOverride_invalidInputThrowsError() throws RemoteException {
        int navBarModeOverrideInvalid = -1;
    public void testSetNavBarMode_invalidInputThrowsError() throws RemoteException {
        int navBarModeInvalid = -1;

        assertThrows(UnsupportedOperationException.class,
                () -> mStatusBarManagerService.setNavBarModeOverride(navBarModeOverrideInvalid));
                () -> mStatusBarManagerService.setNavBarMode(navBarModeInvalid));
        verify(mOverlayManager, never()).setEnabledExclusiveInCategory(anyString(), anyInt());
    }

    @Test
    public void testSetNavBarModeOverride_noOverlayManagerDoesNotEnable() throws RemoteException {
    public void testSetNavBarMode_noOverlayManagerDoesNotEnable() throws RemoteException {
        mOverlayManager = null;
        int navBarModeOverrideKids = StatusBarManager.NAV_BAR_MODE_OVERRIDE_KIDS;
        int navBarModeKids = StatusBarManager.NAV_BAR_MODE_KIDS;

        mStatusBarManagerService.setNavBarModeOverride(navBarModeOverrideKids);
        mStatusBarManagerService.setNavBarMode(navBarModeKids);

        assertEquals(navBarModeOverrideKids, mStatusBarManagerService.getNavBarModeOverride());
        assertEquals(navBarModeKids, mStatusBarManagerService.getNavBarMode());
        verify(mOverlayManager, never()).setEnabledExclusiveInCategory(anyString(), anyInt());
    }

    @Test
    public void testSetNavBarModeOverride_noPackageDoesNotEnable() throws Exception {
    public void testSetNavBarMode_noPackageDoesNotEnable() throws Exception {
        mContext.setMockPackageManager(mPackageManager);
        when(mPackageManager.getPackageInfo(anyString(),
                any(PackageManager.PackageInfoFlags.class))).thenReturn(null);
        int navBarModeOverrideKids = StatusBarManager.NAV_BAR_MODE_OVERRIDE_KIDS;
        int navBarModeKids = StatusBarManager.NAV_BAR_MODE_KIDS;

        mStatusBarManagerService.setNavBarModeOverride(navBarModeOverrideKids);
        mStatusBarManagerService.setNavBarMode(navBarModeKids);

        assertEquals(navBarModeOverrideKids, mStatusBarManagerService.getNavBarModeOverride());
        assertEquals(navBarModeKids, mStatusBarManagerService.getNavBarMode());
        verify(mOverlayManager, never()).setEnabledExclusiveInCategory(anyString(), anyInt());
    }