diff --git a/core/java/android/app/StatusBarManager.java b/core/java/android/app/StatusBarManager.java index e460638d44202..c6e36a36701bf 100644 --- a/core/java/android/app/StatusBarManager.java +++ b/core/java/android/app/StatusBarManager.java @@ -335,7 +335,7 @@ public class StatusBarManager { * Constant for {@link #setNavBarMode(int)} indicating kids navbar mode. * *
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. + * and enables the setting to force navbar visible, even when apps are in immersive mode. * * @hide */ diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 71c5e2a340781..f2137b30350af 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -10287,6 +10287,14 @@ public final class Settings { public static final String THEME_CUSTOMIZATION_OVERLAY_PACKAGES = "theme_customization_overlay_packages"; + /** + * Indicates whether the nav bar is forced to always be visible, even in immersive mode. + *
Type: int (0 for false, 1 for true) + * + * @hide + */ + public static final String NAV_BAR_FORCE_VISIBLE = "nav_bar_force_visible"; + /** * Indicates whether the device is in kids nav mode. *
Type: int (0 for false, 1 for true) diff --git a/core/java/com/android/internal/policy/ForceShowNavigationBarSettingsObserver.java b/core/java/com/android/internal/policy/ForceShowNavigationBarSettingsObserver.java index 3e72564bad5df..75dce5a278ffa 100644 --- a/core/java/com/android/internal/policy/ForceShowNavigationBarSettingsObserver.java +++ b/core/java/com/android/internal/policy/ForceShowNavigationBarSettingsObserver.java @@ -26,7 +26,7 @@ import android.provider.Settings; /** * A ContentObserver for listening force show navigation bar relative setting keys: * - {@link Settings.Secure#NAVIGATION_MODE} - * - {@link Settings.Secure#NAV_BAR_KIDS_MODE} + * - {@link Settings.Secure#NAV_BAR_FORCE_VISIBLE} * * @hide */ @@ -52,7 +52,7 @@ public class ForceShowNavigationBarSettingsObserver extends ContentObserver { Settings.Secure.getUriFor(Settings.Secure.NAVIGATION_MODE), false, this, UserHandle.USER_ALL); r.registerContentObserver( - Settings.Secure.getUriFor(Settings.Secure.NAV_BAR_KIDS_MODE), + Settings.Secure.getUriFor(Settings.Secure.NAV_BAR_FORCE_VISIBLE), false, this, UserHandle.USER_ALL); } @@ -78,6 +78,6 @@ public class ForceShowNavigationBarSettingsObserver extends ContentObserver { return Settings.Secure.getIntForUser(mContext.getContentResolver(), Settings.Secure.NAVIGATION_MODE, 0, UserHandle.USER_CURRENT) == 0 && Settings.Secure.getIntForUser(mContext.getContentResolver(), - Settings.Secure.NAV_BAR_KIDS_MODE, 0, UserHandle.USER_CURRENT) == 1; + Settings.Secure.NAV_BAR_FORCE_VISIBLE, 0, UserHandle.USER_CURRENT) == 1; } } diff --git a/core/proto/android/providers/settings/secure.proto b/core/proto/android/providers/settings/secure.proto index 4c0ba8cbe304d..6a421f007a76a 100644 --- a/core/proto/android/providers/settings/secure.proto +++ b/core/proto/android/providers/settings/secure.proto @@ -385,7 +385,18 @@ 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 ]; + message NavBar { + option (android.msg_privacy).dest = DEST_EXPLICIT; + + // Nav bar is forced to always be visible, even in immersive mode. + optional SettingProto nav_bar_force_visible = 1 [ (android.privacy).dest = DEST_AUTOMATIC ]; + // Indicates whether the device is in kids nav mode. + optional SettingProto nav_bar_kids_mode = 2 [ (android.privacy).dest = DEST_AUTOMATIC ]; + } + optional NavBar nav_bar = 92; + reserved 91; // Formerly nav_bar_kids_mode + reserved "nav_bar_kids_mode"; // Moved to message NavBar + optional SettingProto navigation_mode = 76 [ (android.privacy).dest = DEST_AUTOMATIC ]; message NfcPayment { @@ -668,5 +679,5 @@ message SecureSettingsProto { // Please insert fields in alphabetical order and group them into messages // if possible (to avoid reaching the method limit). - // Next tag = 92; + // Next tag = 93; } diff --git a/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java b/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java index 42aa2053e1a46..fa3360cd31f61 100644 --- a/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java +++ b/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java @@ -231,6 +231,7 @@ public class SecureSettingsValidators { VALIDATORS.put(Secure.SKIP_DIRECTION, BOOLEAN_VALIDATOR); VALIDATORS.put(Secure.SILENCE_GESTURE, BOOLEAN_VALIDATOR); VALIDATORS.put(Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES, JSON_OBJECT_VALIDATOR); + VALIDATORS.put(Secure.NAV_BAR_FORCE_VISIBLE, BOOLEAN_VALIDATOR); VALIDATORS.put(Secure.NAV_BAR_KIDS_MODE, BOOLEAN_VALIDATOR); VALIDATORS.put( Secure.NAVIGATION_MODE, new DiscreteValueValidator(new String[] {"0", "1", "2"})); diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java index a2b6992888683..1c5bf81faf3e8 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java @@ -2252,9 +2252,12 @@ class SettingsProtoDumpUtil { Settings.Secure.MULTI_PRESS_TIMEOUT, SecureSettingsProto.MULTI_PRESS_TIMEOUT); + dumpSetting(s, p, + Settings.Secure.NAV_BAR_FORCE_VISIBLE, + SecureSettingsProto.NavBar.NAV_BAR_FORCE_VISIBLE); dumpSetting(s, p, Settings.Secure.NAV_BAR_KIDS_MODE, - SecureSettingsProto.NAV_BAR_KIDS_MODE); + SecureSettingsProto.NavBar.NAV_BAR_KIDS_MODE); dumpSetting(s, p, Settings.Secure.NAVIGATION_MODE, diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java index b8763feaf269d..59b9daf709d85 100644 --- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java +++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java @@ -1954,8 +1954,7 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D public void setNavBarMode(@NavBarMode int navBarMode) { enforceStatusBar(); if (navBarMode != NAV_BAR_MODE_DEFAULT && navBarMode != NAV_BAR_MODE_KIDS) { - throw new UnsupportedOperationException( - "Supplied navBarMode not supported: " + navBarMode); + throw new IllegalArgumentException("Supplied navBarMode not supported: " + navBarMode); } final int userId = mCurrentUserId; @@ -1963,6 +1962,8 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D try { Settings.Secure.putIntForUser(mContext.getContentResolver(), Settings.Secure.NAV_BAR_KIDS_MODE, navBarMode, userId); + Settings.Secure.putIntForUser(mContext.getContentResolver(), + Settings.Secure.NAV_BAR_FORCE_VISIBLE, navBarMode, userId); IOverlayManager overlayManager = getOverlayManager(); if (overlayManager != null && navBarMode == NAV_BAR_MODE_KIDS