Loading core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java +16 −1 Original line number Original line Diff line number Diff line Loading @@ -393,6 +393,21 @@ public final class SystemUiDeviceConfigFlags { */ */ public static final String PIP_USER_RESIZE = "pip_user_resize"; public static final String PIP_USER_RESIZE = "pip_user_resize"; /** * (float) Bottom height in DP for Back Gesture. */ public static final String BACK_GESTURE_BOTTOM_HEIGHT = "back_gesture_bottom_height"; /** * (float) Edge width in DP where touch down is allowed for Back Gesture. */ public static final String BACK_GESTURE_EDGE_WIDTH = "back_gesture_edge_width"; /** * (float) Slop multiplier for Back Gesture. */ public static final String BACK_GESTURE_SLOP_MULTIPLIER = "back_gesture_slop_multiplier"; private SystemUiDeviceConfigFlags() { private SystemUiDeviceConfigFlags() { } } } } core/java/com/android/internal/policy/GestureNavigationSettingsObserver.java +27 −1 Original line number Original line Diff line number Diff line Loading @@ -16,13 +16,17 @@ package com.android.internal.policy; package com.android.internal.policy; import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.BACK_GESTURE_EDGE_WIDTH; import android.content.ContentResolver; import android.content.ContentResolver; import android.content.Context; import android.content.Context; import android.content.res.Resources; import android.content.res.Resources; import android.database.ContentObserver; import android.database.ContentObserver; import android.os.Handler; import android.os.Handler; import android.os.UserHandle; import android.os.UserHandle; import android.provider.DeviceConfig; import android.provider.Settings; import android.provider.Settings; import android.util.TypedValue; /** /** * @hide * @hide Loading @@ -30,14 +34,27 @@ import android.provider.Settings; public class GestureNavigationSettingsObserver extends ContentObserver { public class GestureNavigationSettingsObserver extends ContentObserver { private Context mContext; private Context mContext; private Runnable mOnChangeRunnable; private Runnable mOnChangeRunnable; private Handler mMainHandler; public GestureNavigationSettingsObserver(Handler handler, Context context, public GestureNavigationSettingsObserver(Handler handler, Context context, Runnable onChangeRunnable) { Runnable onChangeRunnable) { super(handler); super(handler); mMainHandler = handler; mContext = context; mContext = context; mOnChangeRunnable = onChangeRunnable; mOnChangeRunnable = onChangeRunnable; } } private final DeviceConfig.OnPropertiesChangedListener mOnPropertiesChangedListener = new DeviceConfig.OnPropertiesChangedListener() { @Override public void onPropertiesChanged(DeviceConfig.Properties properties) { if (DeviceConfig.NAMESPACE_SYSTEMUI.equals(properties.getNamespace()) && mOnChangeRunnable != null) { mOnChangeRunnable.run(); } } }; public void register() { public void register() { ContentResolver r = mContext.getContentResolver(); ContentResolver r = mContext.getContentResolver(); r.registerContentObserver( r.registerContentObserver( Loading @@ -49,10 +66,15 @@ public class GestureNavigationSettingsObserver extends ContentObserver { r.registerContentObserver( r.registerContentObserver( Settings.Secure.getUriFor(Settings.Secure.USER_SETUP_COMPLETE), Settings.Secure.getUriFor(Settings.Secure.USER_SETUP_COMPLETE), false, this, UserHandle.USER_ALL); false, this, UserHandle.USER_ALL); DeviceConfig.addOnPropertiesChangedListener( DeviceConfig.NAMESPACE_SYSTEMUI, runnable -> mMainHandler.post(runnable), mOnPropertiesChangedListener); } } public void unregister() { public void unregister() { mContext.getContentResolver().unregisterContentObserver(this); mContext.getContentResolver().unregisterContentObserver(this); DeviceConfig.removeOnPropertiesChangedListener(mOnPropertiesChangedListener); } } @Override @Override Loading @@ -77,8 +99,12 @@ public class GestureNavigationSettingsObserver extends ContentObserver { } } private int getSensitivity(Resources userRes, String side) { private int getSensitivity(Resources userRes, String side) { final int inset = userRes.getDimensionPixelSize( final float defaultInset = userRes.getDimension( com.android.internal.R.dimen.config_backGestureInset); com.android.internal.R.dimen.config_backGestureInset); final float backGestureInset = DeviceConfig.getFloat(DeviceConfig.NAMESPACE_SYSTEMUI, BACK_GESTURE_EDGE_WIDTH, defaultInset); final float inset = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, backGestureInset, userRes.getDisplayMetrics()); final float scale = Settings.Secure.getFloatForUser( final float scale = Settings.Secure.getFloatForUser( mContext.getContentResolver(), side, 1.0f, UserHandle.USER_CURRENT); mContext.getContentResolver(), side, 1.0f, UserHandle.USER_CURRENT); return (int) (inset * scale); return (int) (inset * scale); Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java +18 −7 Original line number Original line Diff line number Diff line Loading @@ -34,8 +34,10 @@ import android.os.RemoteException; import android.os.SystemClock; import android.os.SystemClock; import android.os.SystemProperties; import android.os.SystemProperties; import android.os.UserHandle; import android.os.UserHandle; import android.provider.DeviceConfig; import android.provider.Settings; import android.provider.Settings; import android.util.Log; import android.util.Log; import android.util.TypedValue; import android.view.ISystemGestureExclusionListener; import android.view.ISystemGestureExclusionListener; import android.view.InputChannel; import android.view.InputChannel; import android.view.InputDevice; import android.view.InputDevice; Loading @@ -50,6 +52,7 @@ import android.view.ViewConfiguration; import android.view.WindowManager; import android.view.WindowManager; import android.view.WindowManagerGlobal; import android.view.WindowManagerGlobal; import com.android.internal.config.sysui.SystemUiDeviceConfigFlags; import com.android.internal.policy.GestureNavigationSettingsObserver; import com.android.internal.policy.GestureNavigationSettingsObserver; import com.android.systemui.Dependency; import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.R; Loading Loading @@ -144,9 +147,9 @@ public class EdgeBackGestureHandler extends CurrentUserTracker implements Displa // The right side edge width where touch down is allowed // The right side edge width where touch down is allowed private int mEdgeWidthRight; private int mEdgeWidthRight; // The bottom gesture area height // The bottom gesture area height private int mBottomGestureHeight; private float mBottomGestureHeight; // The slop to distinguish between horizontal and vertical motion // The slop to distinguish between horizontal and vertical motion private final float mTouchSlop; private float mTouchSlop; // Duration after which we consider the event as longpress. // Duration after which we consider the event as longpress. private final int mLongPressTimeout; private final int mLongPressTimeout; private int mStartingQuickstepRotation = -1; private int mStartingQuickstepRotation = -1; Loading Loading @@ -211,10 +214,6 @@ public class EdgeBackGestureHandler extends CurrentUserTracker implements Displa mPluginManager = pluginManager; mPluginManager = pluginManager; Dependency.get(ProtoTracer.class).add(this); Dependency.get(ProtoTracer.class).add(this); // Reduce the default touch slop to ensure that we can intercept the gesture // before the app starts to react to it. // TODO(b/130352502) Tune this value and extract into a constant mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop() * 0.75f; mLongPressTimeout = Math.min(MAX_LONG_PRESS_TIMEOUT, mLongPressTimeout = Math.min(MAX_LONG_PRESS_TIMEOUT, ViewConfiguration.getLongPressTimeout()); ViewConfiguration.getLongPressTimeout()); Loading @@ -233,8 +232,20 @@ public class EdgeBackGestureHandler extends CurrentUserTracker implements Displa mIsBackGestureAllowed = mIsBackGestureAllowed = !mGestureNavigationSettingsObserver.areNavigationButtonForcedVisible(); !mGestureNavigationSettingsObserver.areNavigationButtonForcedVisible(); mBottomGestureHeight = res.getDimensionPixelSize( final float defaultGestureHeight = res.getDimension( com.android.internal.R.dimen.navigation_bar_gesture_height); com.android.internal.R.dimen.navigation_bar_gesture_height); final float gestureHeight = DeviceConfig.getFloat(DeviceConfig.NAMESPACE_SYSTEMUI, SystemUiDeviceConfigFlags.BACK_GESTURE_BOTTOM_HEIGHT, defaultGestureHeight); mBottomGestureHeight = TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, gestureHeight, res.getDisplayMetrics()); // Reduce the default touch slop to ensure that we can intercept the gesture // before the app starts to react to it. // TODO(b/130352502) Tune this value and extract into a constant final float backGestureSlop = DeviceConfig.getFloat(DeviceConfig.NAMESPACE_SYSTEMUI, SystemUiDeviceConfigFlags.BACK_GESTURE_SLOP_MULTIPLIER, 0.75f); mTouchSlop = ViewConfiguration.get(mContext).getScaledTouchSlop() * backGestureSlop; } } @Override @Override Loading Loading
core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java +16 −1 Original line number Original line Diff line number Diff line Loading @@ -393,6 +393,21 @@ public final class SystemUiDeviceConfigFlags { */ */ public static final String PIP_USER_RESIZE = "pip_user_resize"; public static final String PIP_USER_RESIZE = "pip_user_resize"; /** * (float) Bottom height in DP for Back Gesture. */ public static final String BACK_GESTURE_BOTTOM_HEIGHT = "back_gesture_bottom_height"; /** * (float) Edge width in DP where touch down is allowed for Back Gesture. */ public static final String BACK_GESTURE_EDGE_WIDTH = "back_gesture_edge_width"; /** * (float) Slop multiplier for Back Gesture. */ public static final String BACK_GESTURE_SLOP_MULTIPLIER = "back_gesture_slop_multiplier"; private SystemUiDeviceConfigFlags() { private SystemUiDeviceConfigFlags() { } } } }
core/java/com/android/internal/policy/GestureNavigationSettingsObserver.java +27 −1 Original line number Original line Diff line number Diff line Loading @@ -16,13 +16,17 @@ package com.android.internal.policy; package com.android.internal.policy; import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.BACK_GESTURE_EDGE_WIDTH; import android.content.ContentResolver; import android.content.ContentResolver; import android.content.Context; import android.content.Context; import android.content.res.Resources; import android.content.res.Resources; import android.database.ContentObserver; import android.database.ContentObserver; import android.os.Handler; import android.os.Handler; import android.os.UserHandle; import android.os.UserHandle; import android.provider.DeviceConfig; import android.provider.Settings; import android.provider.Settings; import android.util.TypedValue; /** /** * @hide * @hide Loading @@ -30,14 +34,27 @@ import android.provider.Settings; public class GestureNavigationSettingsObserver extends ContentObserver { public class GestureNavigationSettingsObserver extends ContentObserver { private Context mContext; private Context mContext; private Runnable mOnChangeRunnable; private Runnable mOnChangeRunnable; private Handler mMainHandler; public GestureNavigationSettingsObserver(Handler handler, Context context, public GestureNavigationSettingsObserver(Handler handler, Context context, Runnable onChangeRunnable) { Runnable onChangeRunnable) { super(handler); super(handler); mMainHandler = handler; mContext = context; mContext = context; mOnChangeRunnable = onChangeRunnable; mOnChangeRunnable = onChangeRunnable; } } private final DeviceConfig.OnPropertiesChangedListener mOnPropertiesChangedListener = new DeviceConfig.OnPropertiesChangedListener() { @Override public void onPropertiesChanged(DeviceConfig.Properties properties) { if (DeviceConfig.NAMESPACE_SYSTEMUI.equals(properties.getNamespace()) && mOnChangeRunnable != null) { mOnChangeRunnable.run(); } } }; public void register() { public void register() { ContentResolver r = mContext.getContentResolver(); ContentResolver r = mContext.getContentResolver(); r.registerContentObserver( r.registerContentObserver( Loading @@ -49,10 +66,15 @@ public class GestureNavigationSettingsObserver extends ContentObserver { r.registerContentObserver( r.registerContentObserver( Settings.Secure.getUriFor(Settings.Secure.USER_SETUP_COMPLETE), Settings.Secure.getUriFor(Settings.Secure.USER_SETUP_COMPLETE), false, this, UserHandle.USER_ALL); false, this, UserHandle.USER_ALL); DeviceConfig.addOnPropertiesChangedListener( DeviceConfig.NAMESPACE_SYSTEMUI, runnable -> mMainHandler.post(runnable), mOnPropertiesChangedListener); } } public void unregister() { public void unregister() { mContext.getContentResolver().unregisterContentObserver(this); mContext.getContentResolver().unregisterContentObserver(this); DeviceConfig.removeOnPropertiesChangedListener(mOnPropertiesChangedListener); } } @Override @Override Loading @@ -77,8 +99,12 @@ public class GestureNavigationSettingsObserver extends ContentObserver { } } private int getSensitivity(Resources userRes, String side) { private int getSensitivity(Resources userRes, String side) { final int inset = userRes.getDimensionPixelSize( final float defaultInset = userRes.getDimension( com.android.internal.R.dimen.config_backGestureInset); com.android.internal.R.dimen.config_backGestureInset); final float backGestureInset = DeviceConfig.getFloat(DeviceConfig.NAMESPACE_SYSTEMUI, BACK_GESTURE_EDGE_WIDTH, defaultInset); final float inset = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, backGestureInset, userRes.getDisplayMetrics()); final float scale = Settings.Secure.getFloatForUser( final float scale = Settings.Secure.getFloatForUser( mContext.getContentResolver(), side, 1.0f, UserHandle.USER_CURRENT); mContext.getContentResolver(), side, 1.0f, UserHandle.USER_CURRENT); return (int) (inset * scale); return (int) (inset * scale); Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java +18 −7 Original line number Original line Diff line number Diff line Loading @@ -34,8 +34,10 @@ import android.os.RemoteException; import android.os.SystemClock; import android.os.SystemClock; import android.os.SystemProperties; import android.os.SystemProperties; import android.os.UserHandle; import android.os.UserHandle; import android.provider.DeviceConfig; import android.provider.Settings; import android.provider.Settings; import android.util.Log; import android.util.Log; import android.util.TypedValue; import android.view.ISystemGestureExclusionListener; import android.view.ISystemGestureExclusionListener; import android.view.InputChannel; import android.view.InputChannel; import android.view.InputDevice; import android.view.InputDevice; Loading @@ -50,6 +52,7 @@ import android.view.ViewConfiguration; import android.view.WindowManager; import android.view.WindowManager; import android.view.WindowManagerGlobal; import android.view.WindowManagerGlobal; import com.android.internal.config.sysui.SystemUiDeviceConfigFlags; import com.android.internal.policy.GestureNavigationSettingsObserver; import com.android.internal.policy.GestureNavigationSettingsObserver; import com.android.systemui.Dependency; import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.R; Loading Loading @@ -144,9 +147,9 @@ public class EdgeBackGestureHandler extends CurrentUserTracker implements Displa // The right side edge width where touch down is allowed // The right side edge width where touch down is allowed private int mEdgeWidthRight; private int mEdgeWidthRight; // The bottom gesture area height // The bottom gesture area height private int mBottomGestureHeight; private float mBottomGestureHeight; // The slop to distinguish between horizontal and vertical motion // The slop to distinguish between horizontal and vertical motion private final float mTouchSlop; private float mTouchSlop; // Duration after which we consider the event as longpress. // Duration after which we consider the event as longpress. private final int mLongPressTimeout; private final int mLongPressTimeout; private int mStartingQuickstepRotation = -1; private int mStartingQuickstepRotation = -1; Loading Loading @@ -211,10 +214,6 @@ public class EdgeBackGestureHandler extends CurrentUserTracker implements Displa mPluginManager = pluginManager; mPluginManager = pluginManager; Dependency.get(ProtoTracer.class).add(this); Dependency.get(ProtoTracer.class).add(this); // Reduce the default touch slop to ensure that we can intercept the gesture // before the app starts to react to it. // TODO(b/130352502) Tune this value and extract into a constant mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop() * 0.75f; mLongPressTimeout = Math.min(MAX_LONG_PRESS_TIMEOUT, mLongPressTimeout = Math.min(MAX_LONG_PRESS_TIMEOUT, ViewConfiguration.getLongPressTimeout()); ViewConfiguration.getLongPressTimeout()); Loading @@ -233,8 +232,20 @@ public class EdgeBackGestureHandler extends CurrentUserTracker implements Displa mIsBackGestureAllowed = mIsBackGestureAllowed = !mGestureNavigationSettingsObserver.areNavigationButtonForcedVisible(); !mGestureNavigationSettingsObserver.areNavigationButtonForcedVisible(); mBottomGestureHeight = res.getDimensionPixelSize( final float defaultGestureHeight = res.getDimension( com.android.internal.R.dimen.navigation_bar_gesture_height); com.android.internal.R.dimen.navigation_bar_gesture_height); final float gestureHeight = DeviceConfig.getFloat(DeviceConfig.NAMESPACE_SYSTEMUI, SystemUiDeviceConfigFlags.BACK_GESTURE_BOTTOM_HEIGHT, defaultGestureHeight); mBottomGestureHeight = TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, gestureHeight, res.getDisplayMetrics()); // Reduce the default touch slop to ensure that we can intercept the gesture // before the app starts to react to it. // TODO(b/130352502) Tune this value and extract into a constant final float backGestureSlop = DeviceConfig.getFloat(DeviceConfig.NAMESPACE_SYSTEMUI, SystemUiDeviceConfigFlags.BACK_GESTURE_SLOP_MULTIPLIER, 0.75f); mTouchSlop = ViewConfiguration.get(mContext).getScaledTouchSlop() * backGestureSlop; } } @Override @Override Loading