Merge changes Ia84b998e,Ic6d973e3 into sc-dev

* changes:
  Hide the Pip menu on drag resize, expand and dismiss
  Hide the PIP menu on double tap to resize
This commit is contained in:
Jorge Gil
2021-02-16 21:03:03 +00:00
committed by Android (Google) Code Review
5 changed files with 33 additions and 21 deletions

View File

@@ -375,17 +375,29 @@ public class PhonePipMenuController implements PipMenuController {
}
/**
* Hides the menu activity.
* Hides the menu view.
*/
public void hideMenu() {
hideMenu(true /* animate */, true /* resize */);
}
/**
* Hides the menu view.
*
* @param animate whether to animate the menu fadeout
* @param resize whether or not to resize the PiP with the state change
*/
public void hideMenu(boolean animate, boolean resize) {
final boolean isMenuVisible = isMenuVisible();
if (DEBUG) {
Log.d(TAG, "hideMenu() state=" + mMenuState
+ " isMenuVisible=" + isMenuVisible
+ " animate=" + animate
+ " resize=" + resize
+ " callers=\n" + Debug.getCallers(5, " "));
}
if (isMenuVisible) {
mPipMenuView.hideMenu();
mPipMenuView.hideMenu(animate, resize);
}
}
@@ -403,15 +415,6 @@ public class PhonePipMenuController implements PipMenuController {
}
}
/**
* Preemptively mark the menu as invisible, used when we are directly manipulating the pinned
* stack and don't want to trigger a resize which can animate the stack in a conflicting way
* (ie. when manually expanding or dismissing).
*/
public void hideMenuWithoutResize() {
onMenuStateChanged(MENU_STATE_NONE, false /* resize */, null /* callback */);
}
/**
* Sets the menu actions to the actions provided by the current PiP menu.
*/

View File

@@ -89,7 +89,6 @@ public class PipMenuView extends FrameLayout {
private static final boolean ENABLE_RESIZE_HANDLE = false;
private int mMenuState;
private boolean mResize = true;
private boolean mAllowMenuTimeout = true;
private boolean mAllowTouches = true;
@@ -329,16 +328,21 @@ public class PipMenuView extends FrameLayout {
hideMenu(null);
}
void hideMenu(boolean animate, boolean resize) {
hideMenu(null, true /* notifyMenuVisibility */, animate, resize);
}
void hideMenu(Runnable animationEndCallback) {
hideMenu(animationEndCallback, true /* notifyMenuVisibility */, true /* animate */);
hideMenu(animationEndCallback, true /* notifyMenuVisibility */, true /* animate */,
true /* resize */);
}
private void hideMenu(final Runnable animationFinishedRunnable, boolean notifyMenuVisibility,
boolean animate) {
boolean animate, boolean resize) {
if (mMenuState != MENU_STATE_NONE) {
cancelDelayedHide();
if (notifyMenuVisibility) {
notifyMenuStateChange(MENU_STATE_NONE, mResize, null);
notifyMenuStateChange(MENU_STATE_NONE, resize, null);
}
mMenuContainerAnimator = new AnimatorSet();
ObjectAnimator menuAnim = ObjectAnimator.ofFloat(mMenuContainer, View.ALPHA,
@@ -469,7 +473,8 @@ public class PipMenuView extends FrameLayout {
private void expandPip() {
// Do not notify menu visibility when hiding the menu, the controller will do this when it
// handles the message
hideMenu(mController::onPipExpand, false /* notifyMenuVisibility */, true /* animate */);
hideMenu(mController::onPipExpand, false /* notifyMenuVisibility */, true /* animate */,
true /* resize */);
}
private void dismissPip() {
@@ -479,7 +484,8 @@ public class PipMenuView extends FrameLayout {
final boolean animate = mMenuState != MENU_STATE_CLOSE;
// Do not notify menu visibility when hiding the menu, the controller will do this when it
// handles the message
hideMenu(mController::onPipDismiss, false /* notifyMenuVisibility */, animate);
hideMenu(mController::onPipDismiss, false /* notifyMenuVisibility */, animate,
true /* resize */);
}
private void showSettings() {

View File

@@ -325,7 +325,7 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
+ " callers=\n" + Debug.getCallers(5, " "));
}
cancelPhysicsAnimation();
mMenuController.hideMenuWithoutResize();
mMenuController.hideMenu(false /* animate */, false /* resize */);
mPipTaskOrganizer.exitPip(skipAnimation ? 0 : LEAVE_PIP_DURATION);
}
@@ -338,7 +338,7 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
Log.d(TAG, "removePip: callers=\n" + Debug.getCallers(5, " "));
}
cancelPhysicsAnimation();
mMenuController.hideMenuWithoutResize();
mMenuController.hideMenu(true /* animate*/, false /* resize */);
mPipTaskOrganizer.removePip();
}

View File

@@ -516,8 +516,8 @@ public class PipResizeGestureHandler {
}
if (mThresholdCrossed) {
if (mPhonePipMenuController.isMenuVisible()) {
mPhonePipMenuController.hideMenuWithoutResize();
mPhonePipMenuController.hideMenu();
mPhonePipMenuController.hideMenu(false /* animate */,
false /* resize */);
}
final Rect currentPipBounds = mPipBoundsState.getBounds();
mLastResizeBounds.set(TaskResizingAlgorithm.resizeDrag(x, y,

View File

@@ -876,6 +876,9 @@ public class PipTouchHandler {
< mPipBoundsState.getMaxSize().x
&& mPipBoundsState.getBounds().height()
< mPipBoundsState.getMaxSize().y;
if (mMenuController.isMenuVisible()) {
mMenuController.hideMenu(false /* animate */, false /* resize */);
}
if (toExpand) {
mPipResizeGestureHandler.setUserResizeBounds(mPipBoundsState.getBounds());
animateToMaximizedState(null);