Merge "PIP: Add mouse hover/exit menu show support." into rvc-dev
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
index 9b67d80..dfd5d2f 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
@@ -413,6 +413,8 @@
break;
}
case MotionEvent.ACTION_HOVER_ENTER:
+ mMenuController.showMenu(MENU_STATE_FULL, mMotionHelper.getBounds(),
+ mMovementBounds, false /* allowMenuTimeout */, false /* willResizeMenu */);
case MotionEvent.ACTION_HOVER_MOVE: {
if (!shouldDeliverToMenu && !mSendingHoverAccessibilityEvents) {
sendAccessibilityHoverEvent(AccessibilityEvent.TYPE_VIEW_HOVER_ENTER);
@@ -421,6 +423,7 @@
break;
}
case MotionEvent.ACTION_HOVER_EXIT: {
+ mMenuController.hideMenu();
if (!shouldDeliverToMenu && mSendingHoverAccessibilityEvents) {
sendAccessibilityHoverEvent(AccessibilityEvent.TYPE_VIEW_HOVER_EXIT);
mSendingHoverAccessibilityEvents = false;
@@ -538,9 +541,6 @@
mSavedSnapFraction = -1f;
}
} else {
- // If resizing is not allowed, then the PiP should be frozen until the transition
- // ends as well
- setTouchEnabled(false);
mSavedSnapFraction = -1f;
}
}
@@ -714,6 +714,8 @@
}
} else if (mTouchState.isDoubleTap()) {
// Expand to fullscreen if this is a double tap
+ // the PiP should be frozen until the transition ends
+ setTouchEnabled(false);
mMotionHelper.expandPip();
} else if (mMenuState != MENU_STATE_FULL) {
if (!mTouchState.isWaitingForDoubleTap()) {
diff --git a/services/core/java/com/android/server/wm/InputConsumerImpl.java b/services/core/java/com/android/server/wm/InputConsumerImpl.java
index c6183de..a9a9df8 100644
--- a/services/core/java/com/android/server/wm/InputConsumerImpl.java
+++ b/services/core/java/com/android/server/wm/InputConsumerImpl.java
@@ -149,6 +149,10 @@
t.setLayer(mInputSurface, layer);
}
+ void reparent(SurfaceControl.Transaction t, WindowContainer wc) {
+ t.reparent(mInputSurface, wc.getSurfaceControl());
+ }
+
void disposeChannelsLw() {
mService.mInputManager.unregisterInputChannel(mServerChannel);
mClientChannel.dispose();
diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java
index b638e49..e2c7d52 100644
--- a/services/core/java/com/android/server/wm/InputMonitor.java
+++ b/services/core/java/com/android/server/wm/InputMonitor.java
@@ -511,14 +511,13 @@
if (w.inPinnedWindowingMode()) {
if (mAddPipInputConsumerHandle) {
- // Update the bounds of the Pip input consumer to match the window bounds.
- w.getBounds(mTmpRect);
- mPipInputConsumer.layout(mInputTransaction, mTmpRect);
- // The touchable region is relative to the surface top-left
- mTmpRect.offsetTo(0, 0);
- mPipInputConsumer.mWindowHandle.touchableRegion.set(mTmpRect);
- mPipInputConsumer.show(mInputTransaction, w);
+ final Task rootTask = w.getTask().getRootTask();
+ mPipInputConsumer.mWindowHandle.replaceTouchableRegionWithCrop(
+ rootTask.getSurfaceControl());
+ // We set the layer to z=MAX-1 so that it's always on top.
+ mPipInputConsumer.reparent(mInputTransaction, rootTask);
+ mPipInputConsumer.show(mInputTransaction, Integer.MAX_VALUE - 1);
mAddPipInputConsumerHandle = false;
}
}