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

Commit 8ffa58cd authored by Pat Manning's avatar Pat Manning
Browse files

Create API to set taskbar to kids mode.

- Disables recents in taskbar.
- Changes back and home icons and centers them in the taskbar.

Test: manual
Bug: 203749295
Change-Id: I9aa2a213728549509da4cf7f50abceb690ba31cf
parent 9a605015
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -853,7 +853,11 @@ 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 void setDisabledForSetup(boolean);
    method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public void setNavBarModeOverride(int);
    field public static final int NAV_BAR_MODE_OVERRIDE_KIDS = 1; // 0x1
    field public static final int NAV_BAR_MODE_OVERRIDE_NONE = 0; // 0x0
  }
  public static final class StatusBarManager.DisableInfo {
+73 −0
Original line number Diff line number Diff line
@@ -282,6 +282,33 @@ public class StatusBarManager {
    @Retention(RetentionPolicy.SOURCE)
    public @interface RequestResult {}

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

    /**
     * Constant for {@link #setNavBarModeOverride(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.
     *
     * @hide
     */
    @SystemApi
    public static final int NAV_BAR_MODE_OVERRIDE_KIDS = 1;

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

    @UnsupportedAppUsage
    private Context mContext;
    private IStatusBarService mService;
@@ -687,6 +714,52 @@ public class StatusBarManager {
        }
    }

    /**
     * Sets or removes the navigation bar mode override.
     *
     * @param navBarModeOverride the mode of the navigation bar override 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 UnsupportedOperationException(
                    "Supplied navBarModeOverride not supported: " + navBarModeOverride);
        }

        try {
            final IStatusBarService svc = getService();
            if (svc != null) {
                svc.setNavBarModeOverride(navBarModeOverride);
            }
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

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

    /** @hide */
    public static String windowStateToString(int state) {
        if (state == WINDOW_STATE_HIDING) return "WINDOW_STATE_HIDING";
+8 −0
Original line number Diff line number Diff line
@@ -10060,6 +10060,14 @@ public final class Settings {
        public static final String THEME_CUSTOMIZATION_OVERLAY_PACKAGES =
                "theme_customization_overlay_packages";
        /**
         * Indicates whether the device is in kids nav mode.
         * <p>Type: int (0 for false, 1 for true)
         *
         * @hide
         */
        public static final String NAV_BAR_KIDS_MODE = "nav_bar_kids_mode";
        /**
         * Navigation bar mode.
         *  0 = 3 button
+16 −0
Original line number Diff line number Diff line
@@ -162,4 +162,20 @@ interface IStatusBarService

    void requestAddTile(in ComponentName componentName, in CharSequence label, in Icon icon, int userId, in IAddTileResultCallback callback);
    void cancelRequestAddTile(in String packageName);

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

    /**
    * Gets the navigation bar mode override.
    *
    * @hide
    */
    int getNavBarModeOverride();
}
+2 −1
Original line number Diff line number Diff line
@@ -382,6 +382,7 @@ message SecureSettingsProto {

    optional SettingProto multi_press_timeout = 38 [ (android.privacy).dest = DEST_AUTOMATIC ];

    optional SettingProto nav_bar_kids_mode = 91 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto navigation_mode = 76 [ (android.privacy).dest = DEST_AUTOMATIC ];

    message NfcPayment {
@@ -664,5 +665,5 @@ message SecureSettingsProto {

    // Please insert fields in alphabetical order and group them into messages
    // if possible (to avoid reaching the method limit).
    // Next tag = 91;
    // Next tag = 92;
}
Loading