Ensure PipTransitionController initializes in order
- This is the only transition controller that isn't using ShellInit, which means that it currently adds itself as a handler too early. Bug: 238217847 Test: atest PinnedStackTests Test: atest WMShellFlickerTests:com.android.wm.shell.flicker.pip.AutoEnterPipOnGoToHomeTest Change-Id: Ia6dd437d52b8e7f249c86ed4b013fcbf04c31265
This commit is contained in:
@@ -49,6 +49,7 @@ import com.android.wm.shell.pip.tv.TvPipTaskOrganizer;
|
||||
import com.android.wm.shell.pip.tv.TvPipTransition;
|
||||
import com.android.wm.shell.splitscreen.SplitScreenController;
|
||||
import com.android.wm.shell.sysui.ShellController;
|
||||
import com.android.wm.shell.sysui.ShellInit;
|
||||
import com.android.wm.shell.transition.Transitions;
|
||||
|
||||
import java.util.Optional;
|
||||
@@ -138,12 +139,14 @@ public abstract class TvPipModule {
|
||||
@WMSingleton
|
||||
@Provides
|
||||
static PipTransitionController provideTvPipTransition(
|
||||
Transitions transitions, ShellTaskOrganizer shellTaskOrganizer,
|
||||
ShellInit shellInit,
|
||||
ShellTaskOrganizer shellTaskOrganizer,
|
||||
Transitions transitions,
|
||||
PipAnimationController pipAnimationController,
|
||||
TvPipBoundsAlgorithm tvPipBoundsAlgorithm,
|
||||
TvPipBoundsState tvPipBoundsState, TvPipMenuController pipMenuController) {
|
||||
return new TvPipTransition(tvPipBoundsState, pipMenuController,
|
||||
tvPipBoundsAlgorithm, pipAnimationController, transitions, shellTaskOrganizer);
|
||||
return new TvPipTransition(shellInit, shellTaskOrganizer, transitions, tvPipBoundsState,
|
||||
pipMenuController, tvPipBoundsAlgorithm, pipAnimationController);
|
||||
}
|
||||
|
||||
@WMSingleton
|
||||
|
||||
@@ -409,15 +409,15 @@ public abstract class WMShellModule {
|
||||
@WMSingleton
|
||||
@Provides
|
||||
static PipTransitionController providePipTransitionController(Context context,
|
||||
Transitions transitions, ShellTaskOrganizer shellTaskOrganizer,
|
||||
ShellInit shellInit, ShellTaskOrganizer shellTaskOrganizer, Transitions transitions,
|
||||
PipAnimationController pipAnimationController, PipBoundsAlgorithm pipBoundsAlgorithm,
|
||||
PipBoundsState pipBoundsState, PipTransitionState pipTransitionState,
|
||||
PhonePipMenuController pipMenuController,
|
||||
PipSurfaceTransactionHelper pipSurfaceTransactionHelper,
|
||||
Optional<SplitScreenController> splitScreenOptional) {
|
||||
return new PipTransition(context, pipBoundsState, pipTransitionState, pipMenuController,
|
||||
pipBoundsAlgorithm, pipAnimationController, transitions, shellTaskOrganizer,
|
||||
pipSurfaceTransactionHelper, splitScreenOptional);
|
||||
return new PipTransition(context, shellInit, shellTaskOrganizer, transitions,
|
||||
pipBoundsState, pipTransitionState, pipMenuController, pipBoundsAlgorithm,
|
||||
pipAnimationController, pipSurfaceTransactionHelper, splitScreenOptional);
|
||||
}
|
||||
|
||||
@WMSingleton
|
||||
|
||||
@@ -66,6 +66,7 @@ import com.android.wm.shell.R;
|
||||
import com.android.wm.shell.ShellTaskOrganizer;
|
||||
import com.android.wm.shell.protolog.ShellProtoLogGroup;
|
||||
import com.android.wm.shell.splitscreen.SplitScreenController;
|
||||
import com.android.wm.shell.sysui.ShellInit;
|
||||
import com.android.wm.shell.transition.CounterRotatorHelper;
|
||||
import com.android.wm.shell.transition.Transitions;
|
||||
|
||||
@@ -107,17 +108,18 @@ public class PipTransition extends PipTransitionController {
|
||||
private boolean mHasFadeOut;
|
||||
|
||||
public PipTransition(Context context,
|
||||
@NonNull ShellInit shellInit,
|
||||
@NonNull ShellTaskOrganizer shellTaskOrganizer,
|
||||
@NonNull Transitions transitions,
|
||||
PipBoundsState pipBoundsState,
|
||||
PipTransitionState pipTransitionState,
|
||||
PipMenuController pipMenuController,
|
||||
PipBoundsAlgorithm pipBoundsAlgorithm,
|
||||
PipAnimationController pipAnimationController,
|
||||
Transitions transitions,
|
||||
@NonNull ShellTaskOrganizer shellTaskOrganizer,
|
||||
PipSurfaceTransactionHelper pipSurfaceTransactionHelper,
|
||||
Optional<SplitScreenController> splitScreenOptional) {
|
||||
super(pipBoundsState, pipMenuController, pipBoundsAlgorithm,
|
||||
pipAnimationController, transitions, shellTaskOrganizer);
|
||||
super(shellInit, shellTaskOrganizer, transitions, pipBoundsState, pipMenuController,
|
||||
pipBoundsAlgorithm, pipAnimationController);
|
||||
mContext = context;
|
||||
mPipTransitionState = pipTransitionState;
|
||||
mEnterExitAnimationDuration = context.getResources()
|
||||
|
||||
@@ -38,6 +38,7 @@ import android.window.WindowContainerTransaction;
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.android.wm.shell.ShellTaskOrganizer;
|
||||
import com.android.wm.shell.sysui.ShellInit;
|
||||
import com.android.wm.shell.transition.Transitions;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -131,10 +132,13 @@ public abstract class PipTransitionController implements Transitions.TransitionH
|
||||
public void onFixedRotationStarted() {
|
||||
}
|
||||
|
||||
public PipTransitionController(PipBoundsState pipBoundsState,
|
||||
public PipTransitionController(
|
||||
@NonNull ShellInit shellInit,
|
||||
@NonNull ShellTaskOrganizer shellTaskOrganizer,
|
||||
@NonNull Transitions transitions,
|
||||
PipBoundsState pipBoundsState,
|
||||
PipMenuController pipMenuController, PipBoundsAlgorithm pipBoundsAlgorithm,
|
||||
PipAnimationController pipAnimationController, Transitions transitions,
|
||||
@android.annotation.NonNull ShellTaskOrganizer shellTaskOrganizer) {
|
||||
PipAnimationController pipAnimationController) {
|
||||
mPipBoundsState = pipBoundsState;
|
||||
mPipMenuController = pipMenuController;
|
||||
mShellTaskOrganizer = shellTaskOrganizer;
|
||||
@@ -142,10 +146,14 @@ public abstract class PipTransitionController implements Transitions.TransitionH
|
||||
mPipAnimationController = pipAnimationController;
|
||||
mTransitions = transitions;
|
||||
if (Transitions.ENABLE_SHELL_TRANSITIONS) {
|
||||
transitions.addHandler(this);
|
||||
shellInit.addInitCallback(this::onInit, this);
|
||||
}
|
||||
}
|
||||
|
||||
private void onInit() {
|
||||
mTransitions.addHandler(this);
|
||||
}
|
||||
|
||||
void setPipOrganizer(PipTaskOrganizer pto) {
|
||||
mPipOrganizer = pto;
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ import com.android.wm.shell.pip.PipAnimationController;
|
||||
import com.android.wm.shell.pip.PipBoundsState;
|
||||
import com.android.wm.shell.pip.PipMenuController;
|
||||
import com.android.wm.shell.pip.PipTransitionController;
|
||||
import com.android.wm.shell.sysui.ShellInit;
|
||||
import com.android.wm.shell.transition.Transitions;
|
||||
|
||||
/**
|
||||
@@ -39,14 +40,16 @@ import com.android.wm.shell.transition.Transitions;
|
||||
* TODO: Implement animation once TV is using Transitions.
|
||||
*/
|
||||
public class TvPipTransition extends PipTransitionController {
|
||||
public TvPipTransition(PipBoundsState pipBoundsState,
|
||||
public TvPipTransition(
|
||||
@NonNull ShellInit shellInit,
|
||||
@NonNull ShellTaskOrganizer shellTaskOrganizer,
|
||||
@NonNull Transitions transitions,
|
||||
PipBoundsState pipBoundsState,
|
||||
PipMenuController pipMenuController,
|
||||
TvPipBoundsAlgorithm tvPipBoundsAlgorithm,
|
||||
PipAnimationController pipAnimationController,
|
||||
Transitions transitions,
|
||||
@NonNull ShellTaskOrganizer shellTaskOrganizer) {
|
||||
super(pipBoundsState, pipMenuController, tvPipBoundsAlgorithm, pipAnimationController,
|
||||
transitions, shellTaskOrganizer);
|
||||
PipAnimationController pipAnimationController) {
|
||||
super(shellInit, shellTaskOrganizer, transitions, pipBoundsState, pipMenuController,
|
||||
tvPipBoundsAlgorithm, pipAnimationController);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -158,9 +158,11 @@ public class Transitions implements RemoteCallable<Transitions> {
|
||||
|
||||
private void onInit() {
|
||||
// The very last handler (0 in the list) should be the default one.
|
||||
mHandlers.add(0, mDefaultTransitionHandler);
|
||||
mHandlers.add(mDefaultTransitionHandler);
|
||||
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "addHandler: Default");
|
||||
// Next lowest priority is remote transitions.
|
||||
mHandlers.add(1, mRemoteTransitionHandler);
|
||||
mHandlers.add(mRemoteTransitionHandler);
|
||||
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "addHandler: Remote");
|
||||
|
||||
ContentResolver resolver = mContext.getContentResolver();
|
||||
mTransitionAnimationScaleSetting = Settings.Global.getFloat(resolver,
|
||||
@@ -206,7 +208,13 @@ public class Transitions implements RemoteCallable<Transitions> {
|
||||
* @see TransitionHandler
|
||||
*/
|
||||
public void addHandler(@NonNull TransitionHandler handler) {
|
||||
if (mHandlers.isEmpty()) {
|
||||
throw new RuntimeException("Unexpected handler added prior to initialization, please "
|
||||
+ "use ShellInit callbacks to ensure proper ordering");
|
||||
}
|
||||
mHandlers.add(handler);
|
||||
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "addHandler: %s",
|
||||
handler.getClass().getSimpleName());
|
||||
}
|
||||
|
||||
public ShellExecutor getMainExecutor() {
|
||||
|
||||
Reference in New Issue
Block a user