Make mCurrentPipTaskToken null when app crashes
PipTransition#mCurrentPipTaskToken needs to be nullified after exit. Otherwise, we end up calling resetPrevPip() without startEnterAnimation() later on when running PinnedStackTests. Bug: 287989186 Test: atest PinnedStackTests Test: run "adb shell am force-stop <pip activity package name>" after entering PiP, and then check for mCurrentPipTaskToken in sysdump Change-Id: Id869f78dbf85f009509082181590e224a6d7f893
This commit is contained in:
@@ -1927,6 +1927,7 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
|
|||||||
pw.println(innerPrefix + "mLeash=" + mLeash);
|
pw.println(innerPrefix + "mLeash=" + mLeash);
|
||||||
pw.println(innerPrefix + "mState=" + mPipTransitionState.getTransitionState());
|
pw.println(innerPrefix + "mState=" + mPipTransitionState.getTransitionState());
|
||||||
pw.println(innerPrefix + "mPictureInPictureParams=" + mPictureInPictureParams);
|
pw.println(innerPrefix + "mPictureInPictureParams=" + mPictureInPictureParams);
|
||||||
|
mPipTransitionController.dump(pw, innerPrefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ import com.android.wm.shell.transition.CounterRotatorHelper;
|
|||||||
import com.android.wm.shell.transition.Transitions;
|
import com.android.wm.shell.transition.Transitions;
|
||||||
import com.android.wm.shell.util.TransitionUtil;
|
import com.android.wm.shell.util.TransitionUtil;
|
||||||
|
|
||||||
|
import java.io.PrintWriter;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -451,6 +452,9 @@ public class PipTransition extends PipTransitionController {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void forceFinishTransition() {
|
public void forceFinishTransition() {
|
||||||
|
// mFinishCallback might be null with an outdated mCurrentPipTaskToken
|
||||||
|
// for example, when app crashes while in PiP and exit transition has not started
|
||||||
|
mCurrentPipTaskToken = null;
|
||||||
if (mFinishCallback == null) return;
|
if (mFinishCallback == null) return;
|
||||||
mFinishCallback.onTransitionFinished(null /* wct */, null /* callback */);
|
mFinishCallback.onTransitionFinished(null /* wct */, null /* callback */);
|
||||||
mFinishCallback = null;
|
mFinishCallback = null;
|
||||||
@@ -1137,4 +1141,12 @@ public class PipTransition extends PipTransitionController {
|
|||||||
PipMenuController.ALPHA_NO_CHANGE);
|
PipMenuController.ALPHA_NO_CHANGE);
|
||||||
mPipMenuController.updateMenuBounds(destinationBounds);
|
mPipMenuController.updateMenuBounds(destinationBounds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void dump(PrintWriter pw, String prefix) {
|
||||||
|
final String innerPrefix = prefix + " ";
|
||||||
|
pw.println(prefix + TAG);
|
||||||
|
pw.println(innerPrefix + "mCurrentPipTaskToken=" + mCurrentPipTaskToken);
|
||||||
|
pw.println(innerPrefix + "mFinishCallback=" + mFinishCallback);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ import com.android.wm.shell.common.split.SplitScreenUtils;
|
|||||||
import com.android.wm.shell.sysui.ShellInit;
|
import com.android.wm.shell.sysui.ShellInit;
|
||||||
import com.android.wm.shell.transition.Transitions;
|
import com.android.wm.shell.transition.Transitions;
|
||||||
|
|
||||||
|
import java.io.PrintWriter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -283,4 +284,9 @@ public abstract class PipTransitionController implements Transitions.TransitionH
|
|||||||
*/
|
*/
|
||||||
void onPipTransitionCanceled(int direction);
|
void onPipTransitionCanceled(int direction);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dumps internal states.
|
||||||
|
*/
|
||||||
|
public void dump(PrintWriter pw, String prefix) {}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user