Merge "Fix entry bounds for 3 button nav" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
a311cc37e9
@@ -70,4 +70,9 @@ interface IPip {
|
||||
* Sets the next pip animation type to be the alpha animation.
|
||||
*/
|
||||
oneway void setPipAnimationTypeToAlpha() = 5;
|
||||
|
||||
/**
|
||||
* Sets the height and visibility of the Launcher keep clear area.
|
||||
*/
|
||||
oneway void setLauncherKeepClearAreaHeight(boolean visible, int height) = 6;
|
||||
}
|
||||
|
||||
@@ -1178,6 +1178,20 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
|
||||
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.
|
||||
*/
|
||||
|
||||
@@ -93,6 +93,11 @@ public class PipTransitionState {
|
||||
return hasEnteredPip(mState);
|
||||
}
|
||||
|
||||
/** Returns true if activity is currently entering PiP mode. */
|
||||
public boolean isEnteringPip() {
|
||||
return isEnteringPip(mState);
|
||||
}
|
||||
|
||||
public void setInSwipePipToHomeTransition(boolean inSwipePipToHomeTransition) {
|
||||
mInSwipePipToHomeTransition = inSwipePipToHomeTransition;
|
||||
}
|
||||
@@ -130,6 +135,11 @@ public class PipTransitionState {
|
||||
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 {
|
||||
void onPipTransitionStateChanged(@TransitionState int oldState,
|
||||
@TransitionState int newState);
|
||||
|
||||
@@ -101,6 +101,7 @@ import com.android.wm.shell.sysui.UserChangeListener;
|
||||
import com.android.wm.shell.transition.Transitions;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
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
|
||||
return;
|
||||
}
|
||||
// only move if already in pip, other transitions account for keep clear areas
|
||||
if (mPipTransitionState.hasEnteredPip()) {
|
||||
// only move if we're in PiP or transitioning into PiP
|
||||
if (!mPipTransitionState.shouldBlockResizeRequest()) {
|
||||
Rect destBounds = mPipKeepClearAlgorithm.adjust(mPipBoundsState,
|
||||
mPipBoundsAlgorithm);
|
||||
// only move if the bounds are actually different
|
||||
if (destBounds != mPipBoundsState.getBounds()) {
|
||||
mPipTaskOrganizer.scheduleAnimateResizePip(destBounds,
|
||||
mEnterAnimationDuration, null);
|
||||
if (mPipTransitionState.hasEnteredPip()) {
|
||||
// if already in PiP, schedule separate animation
|
||||
mPipTaskOrganizer.scheduleAnimateResizePip(destBounds,
|
||||
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) {
|
||||
mOnIsInPipStateChangedListener = callback;
|
||||
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
|
||||
public void setPipAnimationListener(IPipAnimationListener listener) {
|
||||
executeRemoteCallWithTaskPermission(mController, "setPipAnimationListener",
|
||||
|
||||
Reference in New Issue
Block a user