Merge "Fix entry bounds for 3 button nav" into tm-qpr-dev am: a311cc37e9

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21847580

Change-Id: Ie4cd108b67cea483a0c14ca2c7afc214adff99bb
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Mateusz Cicheński
2023-03-09 00:12:54 +00:00
committed by Automerger Merge Worker
4 changed files with 63 additions and 4 deletions

View File

@@ -70,4 +70,9 @@ interface IPip {
* Sets the next pip animation type to be the alpha animation. * Sets the next pip animation type to be the alpha animation.
*/ */
oneway void setPipAnimationTypeToAlpha() = 5; oneway void setPipAnimationTypeToAlpha() = 5;
/**
* Sets the height and visibility of the Launcher keep clear area.
*/
oneway void setLauncherKeepClearAreaHeight(boolean visible, int height) = 6;
} }

View File

@@ -1178,6 +1178,20 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
destinationBoundsOut.set(newDestinationBounds); destinationBoundsOut.set(newDestinationBounds);
} }
/**
* Directly update the animator bounds.
*/
public void updateAnimatorBounds(Rect bounds) {
final PipAnimationController.PipTransitionAnimator animator =
mPipAnimationController.getCurrentAnimator();
if (animator != null && animator.isRunning()) {
if (animator.getAnimationType() == ANIM_TYPE_BOUNDS) {
animator.updateEndValue(bounds);
}
animator.setDestinationBounds(bounds);
}
}
/** /**
* Handles all changes to the PictureInPictureParams. * Handles all changes to the PictureInPictureParams.
*/ */

View File

@@ -93,6 +93,11 @@ public class PipTransitionState {
return hasEnteredPip(mState); return hasEnteredPip(mState);
} }
/** Returns true if activity is currently entering PiP mode. */
public boolean isEnteringPip() {
return isEnteringPip(mState);
}
public void setInSwipePipToHomeTransition(boolean inSwipePipToHomeTransition) { public void setInSwipePipToHomeTransition(boolean inSwipePipToHomeTransition) {
mInSwipePipToHomeTransition = inSwipePipToHomeTransition; mInSwipePipToHomeTransition = inSwipePipToHomeTransition;
} }
@@ -130,6 +135,11 @@ public class PipTransitionState {
return state == ENTERED_PIP; return state == ENTERED_PIP;
} }
/** Returns true if activity is currently entering PiP mode. */
public static boolean isEnteringPip(@TransitionState int state) {
return state == ENTERING_PIP;
}
public interface OnPipTransitionStateChangedListener { public interface OnPipTransitionStateChangedListener {
void onPipTransitionStateChanged(@TransitionState int oldState, void onPipTransitionStateChanged(@TransitionState int oldState,
@TransitionState int newState); @TransitionState int newState);

View File

@@ -101,6 +101,7 @@ import com.android.wm.shell.sysui.UserChangeListener;
import com.android.wm.shell.transition.Transitions; import com.android.wm.shell.transition.Transitions;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
@@ -181,14 +182,20 @@ public class PipController implements PipTransitionController.PipTransitionCallb
// early bail out if the keep clear areas feature is disabled // early bail out if the keep clear areas feature is disabled
return; return;
} }
// only move if already in pip, other transitions account for keep clear areas // only move if we're in PiP or transitioning into PiP
if (mPipTransitionState.hasEnteredPip()) { if (!mPipTransitionState.shouldBlockResizeRequest()) {
Rect destBounds = mPipKeepClearAlgorithm.adjust(mPipBoundsState, Rect destBounds = mPipKeepClearAlgorithm.adjust(mPipBoundsState,
mPipBoundsAlgorithm); mPipBoundsAlgorithm);
// only move if the bounds are actually different // only move if the bounds are actually different
if (destBounds != mPipBoundsState.getBounds()) { if (destBounds != mPipBoundsState.getBounds()) {
if (mPipTransitionState.hasEnteredPip()) {
// if already in PiP, schedule separate animation
mPipTaskOrganizer.scheduleAnimateResizePip(destBounds, mPipTaskOrganizer.scheduleAnimateResizePip(destBounds,
mEnterAnimationDuration, null); mEnterAnimationDuration, null);
} else if (mPipTransitionState.isEnteringPip()) {
// while entering PiP we just need to update animator bounds
mPipTaskOrganizer.updateAnimatorBounds(destBounds);
}
} }
} }
} }
@@ -874,6 +881,21 @@ public class PipController implements PipTransitionController.PipTransitionCallb
} }
} }
private void setLauncherKeepClearAreaHeight(boolean visible, int height) {
if (visible) {
Rect rect = new Rect(
0, mPipBoundsState.getDisplayBounds().bottom - height,
mPipBoundsState.getDisplayBounds().right,
mPipBoundsState.getDisplayBounds().bottom);
Set<Rect> restrictedKeepClearAreas = new HashSet<>(
mPipBoundsState.getRestrictedKeepClearAreas());
restrictedKeepClearAreas.add(rect);
mPipBoundsState.setKeepClearAreas(restrictedKeepClearAreas,
mPipBoundsState.getUnrestrictedKeepClearAreas());
updatePipPositionForKeepClearAreas();
}
}
private void setOnIsInPipStateChangedListener(Consumer<Boolean> callback) { private void setOnIsInPipStateChangedListener(Consumer<Boolean> callback) {
mOnIsInPipStateChangedListener = callback; mOnIsInPipStateChangedListener = callback;
if (mOnIsInPipStateChangedListener != null) { if (mOnIsInPipStateChangedListener != null) {
@@ -1236,6 +1258,14 @@ public class PipController implements PipTransitionController.PipTransitionCallb
}); });
} }
@Override
public void setLauncherKeepClearAreaHeight(boolean visible, int height) {
executeRemoteCallWithTaskPermission(mController, "setLauncherKeepClearAreaHeight",
(controller) -> {
controller.setLauncherKeepClearAreaHeight(visible, height);
});
}
@Override @Override
public void setPipAnimationListener(IPipAnimationListener listener) { public void setPipAnimationListener(IPipAnimationListener listener) {
executeRemoteCallWithTaskPermission(mController, "setPipAnimationListener", executeRemoteCallWithTaskPermission(mController, "setPipAnimationListener",