Enable mouse hovering on sides to show system bars
Before this CL, mouse hovering events can only show sytem bars from top
or bottom. However, we might have system bars on the left or right. This
CL enables mouse hovering events to show system bars from any sides.
Bug: 234093736
Test: Connect a mouse and see if hovering events can show transient bars
from each side.
Change-Id: Ida8d01534db57f51a6720f9c9f28e886ac3311ad
This commit is contained in:
@@ -344,7 +344,6 @@ public class DisplayPolicy {
|
||||
private boolean mShouldAttachNavBarToAppDuringTransition;
|
||||
|
||||
// -------- PolicyHandler --------
|
||||
private static final int MSG_REQUEST_TRANSIENT_BARS = 2;
|
||||
private static final int MSG_ENABLE_POINTER_LOCATION = 4;
|
||||
private static final int MSG_DISABLE_POINTER_LOCATION = 5;
|
||||
|
||||
@@ -364,11 +363,6 @@ public class DisplayPolicy {
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
switch (msg.what) {
|
||||
case MSG_REQUEST_TRANSIENT_BARS:
|
||||
synchronized (mLock) {
|
||||
((Runnable) msg.obj).run();
|
||||
}
|
||||
break;
|
||||
case MSG_ENABLE_POINTER_LOCATION:
|
||||
enablePointerLocation();
|
||||
break;
|
||||
@@ -413,7 +407,11 @@ public class DisplayPolicy {
|
||||
mSystemGestures = new SystemGesturesPointerEventListener(mUiContext, mHandler,
|
||||
new SystemGesturesPointerEventListener.Callbacks() {
|
||||
|
||||
private static final long MOUSE_GESTURE_DELAY_MS = 500;
|
||||
|
||||
private Runnable mOnSwipeFromLeft = this::onSwipeFromLeft;
|
||||
private Runnable mOnSwipeFromTop = this::onSwipeFromTop;
|
||||
private Runnable mOnSwipeFromRight = this::onSwipeFromRight;
|
||||
private Runnable mOnSwipeFromBottom = this::onSwipeFromBottom;
|
||||
|
||||
private Insets getControllableInsets(WindowState win) {
|
||||
@@ -513,25 +511,48 @@ public class DisplayPolicy {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMouseHoverAtLeft() {
|
||||
mHandler.removeCallbacks(mOnSwipeFromLeft);
|
||||
mHandler.postDelayed(mOnSwipeFromLeft, MOUSE_GESTURE_DELAY_MS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMouseHoverAtTop() {
|
||||
mHandler.removeMessages(MSG_REQUEST_TRANSIENT_BARS);
|
||||
Message msg = mHandler.obtainMessage(MSG_REQUEST_TRANSIENT_BARS);
|
||||
msg.obj = mOnSwipeFromTop;
|
||||
mHandler.sendMessageDelayed(msg, 500 /* delayMillis */);
|
||||
mHandler.removeCallbacks(mOnSwipeFromTop);
|
||||
mHandler.postDelayed(mOnSwipeFromTop, MOUSE_GESTURE_DELAY_MS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMouseHoverAtRight() {
|
||||
mHandler.removeCallbacks(mOnSwipeFromRight);
|
||||
mHandler.postDelayed(mOnSwipeFromRight, MOUSE_GESTURE_DELAY_MS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMouseHoverAtBottom() {
|
||||
mHandler.removeMessages(MSG_REQUEST_TRANSIENT_BARS);
|
||||
Message msg = mHandler.obtainMessage(MSG_REQUEST_TRANSIENT_BARS);
|
||||
msg.obj = mOnSwipeFromBottom;
|
||||
mHandler.sendMessageDelayed(msg, 500 /* delayMillis */);
|
||||
mHandler.removeCallbacks(mOnSwipeFromBottom);
|
||||
mHandler.postDelayed(mOnSwipeFromBottom, MOUSE_GESTURE_DELAY_MS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMouseLeaveFromEdge() {
|
||||
mHandler.removeMessages(MSG_REQUEST_TRANSIENT_BARS);
|
||||
public void onMouseLeaveFromLeft() {
|
||||
mHandler.removeCallbacks(mOnSwipeFromLeft);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMouseLeaveFromTop() {
|
||||
mHandler.removeCallbacks(mOnSwipeFromTop);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMouseLeaveFromRight() {
|
||||
mHandler.removeCallbacks(mOnSwipeFromRight);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMouseLeaveFromBottom() {
|
||||
mHandler.removeCallbacks(mOnSwipeFromBottom);
|
||||
}
|
||||
});
|
||||
displayContent.registerPointerEventListener(mSystemGestures);
|
||||
|
||||
@@ -78,7 +78,10 @@ class SystemGesturesPointerEventListener implements PointerEventListener {
|
||||
private int mDownPointers;
|
||||
private boolean mSwipeFireable;
|
||||
private boolean mDebugFireable;
|
||||
private boolean mMouseHoveringAtEdge;
|
||||
private boolean mMouseHoveringAtLeft;
|
||||
private boolean mMouseHoveringAtTop;
|
||||
private boolean mMouseHoveringAtRight;
|
||||
private boolean mMouseHoveringAtBottom;
|
||||
private long mLastFlingTime;
|
||||
|
||||
SystemGesturesPointerEventListener(Context context, Handler handler, Callbacks callbacks) {
|
||||
@@ -174,9 +177,21 @@ class SystemGesturesPointerEventListener implements PointerEventListener {
|
||||
mDebugFireable = true;
|
||||
mDownPointers = 0;
|
||||
captureDown(event, 0);
|
||||
if (mMouseHoveringAtEdge) {
|
||||
mMouseHoveringAtEdge = false;
|
||||
mCallbacks.onMouseLeaveFromEdge();
|
||||
if (mMouseHoveringAtLeft) {
|
||||
mMouseHoveringAtLeft = false;
|
||||
mCallbacks.onMouseLeaveFromLeft();
|
||||
}
|
||||
if (mMouseHoveringAtTop) {
|
||||
mMouseHoveringAtTop = false;
|
||||
mCallbacks.onMouseLeaveFromTop();
|
||||
}
|
||||
if (mMouseHoveringAtRight) {
|
||||
mMouseHoveringAtRight = false;
|
||||
mCallbacks.onMouseLeaveFromRight();
|
||||
}
|
||||
if (mMouseHoveringAtBottom) {
|
||||
mMouseHoveringAtBottom = false;
|
||||
mCallbacks.onMouseLeaveFromBottom();
|
||||
}
|
||||
mCallbacks.onDown();
|
||||
break;
|
||||
@@ -211,16 +226,35 @@ class SystemGesturesPointerEventListener implements PointerEventListener {
|
||||
break;
|
||||
case MotionEvent.ACTION_HOVER_MOVE:
|
||||
if (event.isFromSource(InputDevice.SOURCE_MOUSE)) {
|
||||
if (!mMouseHoveringAtEdge && event.getY() == 0) {
|
||||
final float eventX = event.getX();
|
||||
final float eventY = event.getY();
|
||||
if (!mMouseHoveringAtLeft && eventX == 0) {
|
||||
mCallbacks.onMouseHoverAtLeft();
|
||||
mMouseHoveringAtLeft = true;
|
||||
} else if (mMouseHoveringAtLeft && eventX > 0) {
|
||||
mCallbacks.onMouseLeaveFromLeft();
|
||||
mMouseHoveringAtLeft = false;
|
||||
}
|
||||
if (!mMouseHoveringAtTop && eventY == 0) {
|
||||
mCallbacks.onMouseHoverAtTop();
|
||||
mMouseHoveringAtEdge = true;
|
||||
} else if (!mMouseHoveringAtEdge && event.getY() >= screenHeight - 1) {
|
||||
mMouseHoveringAtTop = true;
|
||||
} else if (mMouseHoveringAtTop && eventY > 0) {
|
||||
mCallbacks.onMouseLeaveFromTop();
|
||||
mMouseHoveringAtTop = false;
|
||||
}
|
||||
if (!mMouseHoveringAtRight && eventX >= screenWidth - 1) {
|
||||
mCallbacks.onMouseHoverAtRight();
|
||||
mMouseHoveringAtRight = true;
|
||||
} else if (mMouseHoveringAtRight && eventX < screenWidth - 1) {
|
||||
mCallbacks.onMouseLeaveFromRight();
|
||||
mMouseHoveringAtRight = false;
|
||||
}
|
||||
if (!mMouseHoveringAtBottom && eventY >= screenHeight - 1) {
|
||||
mCallbacks.onMouseHoverAtBottom();
|
||||
mMouseHoveringAtEdge = true;
|
||||
} else if (mMouseHoveringAtEdge
|
||||
&& (event.getY() > 0 && event.getY() < screenHeight - 1)) {
|
||||
mCallbacks.onMouseLeaveFromEdge();
|
||||
mMouseHoveringAtEdge = false;
|
||||
mMouseHoveringAtBottom = true;
|
||||
} else if (mMouseHoveringAtBottom && eventY < screenHeight - 1) {
|
||||
mCallbacks.onMouseLeaveFromBottom();
|
||||
mMouseHoveringAtBottom = false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -373,9 +407,14 @@ class SystemGesturesPointerEventListener implements PointerEventListener {
|
||||
void onFling(int durationMs);
|
||||
void onDown();
|
||||
void onUpOrCancel();
|
||||
void onMouseHoverAtLeft();
|
||||
void onMouseHoverAtTop();
|
||||
void onMouseHoverAtRight();
|
||||
void onMouseHoverAtBottom();
|
||||
void onMouseLeaveFromEdge();
|
||||
void onMouseLeaveFromLeft();
|
||||
void onMouseLeaveFromTop();
|
||||
void onMouseLeaveFromRight();
|
||||
void onMouseLeaveFromBottom();
|
||||
void onDebug();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user