Improve system gesture listener to handle display cutout
Expand swipe start threshold such that we can catch touches that just
start below the notch area.
Bug: 123050747
Test: -- 1.Setup a pixel stand.
2.Verify swipe getsture to dismiss the immersiveModeConfirmation.
-- atest HeadsUpManagerPhoneTest
Change-Id: Iaad1fbeabf165439667e25f564ae97dee68cb2d5
This commit is contained in:
@@ -47,6 +47,9 @@
|
||||
<dimen name="navigation_bar_height_landscape">48dp</dimen>
|
||||
<!-- Width of the navigation bar when it is placed vertically on the screen -->
|
||||
<dimen name="navigation_bar_width">48dp</dimen>
|
||||
<!-- How much we expand the touchable region of the status bar below the notch to catch touches
|
||||
that just start below the notch. -->
|
||||
<dimen name="display_cutout_touchable_region_size">12dp</dimen>
|
||||
|
||||
<!-- EXPERIMENT BEGIN -->
|
||||
<!-- Height of the bottom navigation bar frame; this is different than navigation_bar_height
|
||||
|
||||
@@ -1745,6 +1745,7 @@
|
||||
<java-symbol type="dimen" name="navigation_bar_height_landscape_car_mode" />
|
||||
<java-symbol type="dimen" name="navigation_bar_width_car_mode" />
|
||||
<java-symbol type="dimen" name="status_bar_height" />
|
||||
<java-symbol type="dimen" name="display_cutout_touchable_region_size" />
|
||||
<java-symbol type="dimen" name="quick_qs_offset_height" />
|
||||
<java-symbol type="dimen" name="quick_qs_total_height" />
|
||||
<java-symbol type="drawable" name="ic_jog_dial_sound_off" />
|
||||
|
||||
@@ -977,10 +977,6 @@
|
||||
<!-- How much into a DisplayCutout's bounds we can go, on each side -->
|
||||
<dimen name="display_cutout_margin_consumption">0px</dimen>
|
||||
|
||||
<!-- How much we expand the touchable region of the status bar below the notch to catch touches
|
||||
that just start below the notch. -->
|
||||
<dimen name="display_cutout_touchable_region_size">12dp</dimen>
|
||||
|
||||
<!-- Padding below Ongoing App Ops dialog title -->
|
||||
<dimen name="ongoing_appops_dialog_sep">16dp</dimen>
|
||||
<!--Padding around text items in Ongoing App Ops dialog -->
|
||||
|
||||
@@ -140,7 +140,7 @@ public class HeadsUpManagerPhone extends HeadsUpManager implements Dumpable,
|
||||
mHeadsUpInset = mStatusBarHeight + resources.getDimensionPixelSize(
|
||||
R.dimen.heads_up_status_bar_padding);
|
||||
mDisplayCutoutTouchableRegionSize = resources.getDimensionPixelSize(
|
||||
R.dimen.display_cutout_touchable_region_size);
|
||||
com.android.internal.R.dimen.display_cutout_touchable_region_size);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -2541,6 +2541,7 @@ public class DisplayPolicy {
|
||||
*/
|
||||
public void onOverlayChangedLw() {
|
||||
onConfigurationChanged();
|
||||
mSystemGestures.onConfigurationChanged();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -17,9 +17,13 @@
|
||||
package com.android.server.wm;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Rect;
|
||||
import android.hardware.display.DisplayManagerGlobal;
|
||||
import android.os.Handler;
|
||||
import android.os.SystemClock;
|
||||
import android.util.Slog;
|
||||
import android.view.Display;
|
||||
import android.view.DisplayCutout;
|
||||
import android.view.GestureDetector;
|
||||
import android.view.InputDevice;
|
||||
import android.view.MotionEvent;
|
||||
@@ -46,8 +50,9 @@ class SystemGesturesPointerEventListener implements PointerEventListener {
|
||||
|
||||
private final Context mContext;
|
||||
private final Handler mHandler;
|
||||
private final int mSwipeStartThreshold;
|
||||
private final int mSwipeDistanceThreshold;
|
||||
private int mDisplayCutoutTouchableRegionSize;
|
||||
private int mSwipeStartThreshold;
|
||||
private int mSwipeDistanceThreshold;
|
||||
private final Callbacks mCallbacks;
|
||||
private final int[] mDownPointerId = new int[MAX_TRACKED_POINTERS];
|
||||
private final float[] mDownX = new float[MAX_TRACKED_POINTERS];
|
||||
@@ -65,14 +70,33 @@ class SystemGesturesPointerEventListener implements PointerEventListener {
|
||||
private long mLastFlingTime;
|
||||
|
||||
SystemGesturesPointerEventListener(Context context, Handler handler, Callbacks callbacks) {
|
||||
mContext = context;
|
||||
mContext = checkNull("context", context);
|
||||
mHandler = handler;
|
||||
mCallbacks = checkNull("callbacks", callbacks);
|
||||
mSwipeStartThreshold = checkNull("context", context).getResources()
|
||||
|
||||
onConfigurationChanged();
|
||||
}
|
||||
|
||||
void onConfigurationChanged() {
|
||||
mSwipeStartThreshold = mContext.getResources()
|
||||
.getDimensionPixelSize(com.android.internal.R.dimen.status_bar_height);
|
||||
|
||||
final Display display = DisplayManagerGlobal.getInstance()
|
||||
.getRealDisplay(Display.DEFAULT_DISPLAY);
|
||||
final DisplayCutout displayCutout = display.getCutout();
|
||||
if (displayCutout != null) {
|
||||
final Rect bounds = displayCutout.getBoundingRectTop();
|
||||
if (!bounds.isEmpty()) {
|
||||
// Expand swipe start threshold such that we can catch touches that just start below
|
||||
// the notch area
|
||||
mDisplayCutoutTouchableRegionSize = mContext.getResources().getDimensionPixelSize(
|
||||
com.android.internal.R.dimen.display_cutout_touchable_region_size);
|
||||
mSwipeStartThreshold += mDisplayCutoutTouchableRegionSize;
|
||||
}
|
||||
}
|
||||
mSwipeDistanceThreshold = mSwipeStartThreshold;
|
||||
if (DEBUG) Slog.d(TAG, "mSwipeStartThreshold=" + mSwipeStartThreshold
|
||||
+ " mSwipeDistanceThreshold=" + mSwipeDistanceThreshold);
|
||||
+ " mSwipeDistanceThreshold=" + mSwipeDistanceThreshold);
|
||||
}
|
||||
|
||||
private static <T> T checkNull(String name, T arg) {
|
||||
|
||||
Reference in New Issue
Block a user