diff options
-rw-r--r-- | core/java/android/provider/Settings.java | 6 | ||||
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarInflaterView.java | 53 |
2 files changed, 58 insertions, 1 deletions
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 9b1003104c3b..5046ccf95542 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -10370,6 +10370,12 @@ public final class Settings { public static void setLocationProviderEnabled(ContentResolver cr, String provider, boolean enabled) { } + + /** + * Whether to show swipe up hint in gestural nav mode + * @hide + */ + public static final String NAVIGATION_BAR_HINT = "navigation_bar_hint"; } /** diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarInflaterView.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarInflaterView.java index 4d9175b8db68..de2ce021a7c2 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarInflaterView.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarInflaterView.java @@ -18,11 +18,17 @@ package com.android.systemui.navigationbar; import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON; +import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL; import android.annotation.Nullable; +import android.app.ActivityManager; import android.content.Context; +import android.content.om.IOverlayManager; import android.content.res.Configuration; import android.graphics.drawable.Icon; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.provider.Settings; import android.util.AttributeSet; import android.util.Log; import android.util.SparseArray; @@ -43,12 +49,13 @@ import com.android.systemui.navigationbar.buttons.ReverseLinearLayout; import com.android.systemui.navigationbar.buttons.ReverseLinearLayout.ReverseRelativeLayout; import com.android.systemui.recents.OverviewProxyService; import com.android.systemui.shared.system.QuickStepContract; +import com.android.systemui.tuner.TunerService; import java.io.PrintWriter; import java.util.Objects; public class NavigationBarInflaterView extends FrameLayout - implements NavigationModeController.ModeChangedListener { + implements NavigationModeController.ModeChangedListener, TunerService.Tunable { private static final String TAG = "NavBarInflater"; @@ -83,6 +90,11 @@ public class NavigationBarInflaterView extends FrameLayout private static final String ABSOLUTE_SUFFIX = "A"; private static final String ABSOLUTE_VERTICAL_CENTERED_SUFFIX = "C"; + private static final String KEY_NAVIGATION_HINT = + Settings.Secure.NAVIGATION_BAR_HINT; + private static final String OVERLAY_NAVIGATION_HIDE_HINT = + "android.ice.overlay.hidenav"; + protected LayoutInflater mLayoutInflater; protected LayoutInflater mLandscapeInflater; @@ -102,6 +114,8 @@ public class NavigationBarInflaterView extends FrameLayout private OverviewProxyService mOverviewProxyService; private int mNavBarMode = NAV_BAR_MODE_3BUTTON; + private boolean mIsHintEnabled; + public NavigationBarInflaterView(Context context, AttributeSet attrs) { super(context, attrs); createInflaters(); @@ -143,12 +157,22 @@ public class NavigationBarInflaterView extends FrameLayout : mOverviewProxyService.shouldShowSwipeUpUI() ? R.string.config_navBarLayoutQuickstep : R.string.config_navBarLayout; + if (!mIsHintEnabled && defaultResource == R.string.config_navBarLayoutHandle) { + return getContext().getString(defaultResource).replace(HOME_HANDLE, ""); + } return getContext().getString(defaultResource); } @Override public void onNavigationModeChanged(int mode) { mNavBarMode = mode; + updateHint(); + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + Dependency.get(TunerService.class).addTunable(this, KEY_NAVIGATION_HINT); } @Override @@ -157,6 +181,15 @@ public class NavigationBarInflaterView extends FrameLayout super.onDetachedFromWindow(); } + @Override + public void onTuningChanged(String key, String newValue) { + if (KEY_NAVIGATION_HINT.equals(key)) { + mIsHintEnabled = TunerService.parseIntegerSwitch(newValue, true); + updateHint(); + onLikelyDefaultLayoutChange(); + } + } + public void onLikelyDefaultLayoutChange() { // Reevaluate new layout final String newValue = getDefaultLayout(); @@ -209,6 +242,24 @@ public class NavigationBarInflaterView extends FrameLayout } } + private void updateHint() { + final IOverlayManager iom = IOverlayManager.Stub.asInterface( + ServiceManager.getService(Context.OVERLAY_SERVICE)); + final boolean state = mNavBarMode == NAV_BAR_MODE_GESTURAL && !mIsHintEnabled; + final int userId = ActivityManager.getCurrentUser(); + try { + iom.setEnabled(OVERLAY_NAVIGATION_HIDE_HINT, state, userId); + if (state) { + // As overlays are also used to apply navigation mode, it is needed to set + // our customization overlay to highest priority to ensure it is applied. + iom.setHighestPriority(OVERLAY_NAVIGATION_HIDE_HINT, userId); + } + } catch (RemoteException e) { + Log.e(TAG, "Failed to " + (state ? "enable" : "disable") + + " overlay " + OVERLAY_NAVIGATION_HIDE_HINT + " for user " + userId); + } + } + private void initiallyFill(ButtonDispatcher buttonDispatcher) { addAll(buttonDispatcher, mHorizontal.findViewById(R.id.ends_group)); addAll(buttonDispatcher, mHorizontal.findViewById(R.id.center_group)); |