summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesse Chan <jc@lineageos.org>2020-05-19 16:05:23 +0800
committeralk3pInjection <webmaster@raspii.tech>2022-03-05 14:57:20 +0800
commitab6c939257b54115b8f0a6229d318013c4395be8 (patch)
tree671646d5162b4b0af53e8d7e20d1851e02e00243
parentfd912c0425be5180a595a0a80d8797f6a9e2f8e0 (diff)
SystemUI: Implement hide gestural navigation hint bar [1/2]
Author: Jesse Chan <jc@lineageos.org> Date: Tue Jun 2 13:59:52 2020 +0800 SystemUI: Set no hint overlay to highest priority 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. Change-Id: I41ca4b7ea99fea9f62d2e8ece5114f682e8e7fe9 Signed-off-by: Jesse Chan <jc@lineageos.org> Change-Id: Ic6695dfe929db443f169d59f153e14a6de249590 Signed-off-by: Jesse Chan <jc@lineageos.org>
-rw-r--r--core/java/android/provider/Settings.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarInflaterView.java53
2 files changed, 58 insertions, 1 deletions
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 13aa640f1931..efa02a17b6c0 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -10259,6 +10259,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));