Merge "Ensure PipTransitionController initializes in order" into tm-qpr-dev

This commit is contained in:
Winson Chung
2022-08-05 23:34:46 +00:00
committed by Android (Google) Code Review
6 changed files with 47 additions and 23 deletions

View File

@@ -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.pip.tv.TvPipTransition;
import com.android.wm.shell.splitscreen.SplitScreenController; import com.android.wm.shell.splitscreen.SplitScreenController;
import com.android.wm.shell.sysui.ShellController; import com.android.wm.shell.sysui.ShellController;
import com.android.wm.shell.sysui.ShellInit;
import com.android.wm.shell.transition.Transitions; import com.android.wm.shell.transition.Transitions;
import java.util.Optional; import java.util.Optional;
@@ -138,12 +139,14 @@ public abstract class TvPipModule {
@WMSingleton @WMSingleton
@Provides @Provides
static PipTransitionController provideTvPipTransition( static PipTransitionController provideTvPipTransition(
Transitions transitions, ShellTaskOrganizer shellTaskOrganizer, ShellInit shellInit,
ShellTaskOrganizer shellTaskOrganizer,
Transitions transitions,
PipAnimationController pipAnimationController, PipAnimationController pipAnimationController,
TvPipBoundsAlgorithm tvPipBoundsAlgorithm, TvPipBoundsAlgorithm tvPipBoundsAlgorithm,
TvPipBoundsState tvPipBoundsState, TvPipMenuController pipMenuController) { TvPipBoundsState tvPipBoundsState, TvPipMenuController pipMenuController) {
return new TvPipTransition(tvPipBoundsState, pipMenuController, return new TvPipTransition(shellInit, shellTaskOrganizer, transitions, tvPipBoundsState,
tvPipBoundsAlgorithm, pipAnimationController, transitions, shellTaskOrganizer); pipMenuController, tvPipBoundsAlgorithm, pipAnimationController);
} }
@WMSingleton @WMSingleton

View File

@@ -409,15 +409,15 @@ public abstract class WMShellModule {
@WMSingleton @WMSingleton
@Provides @Provides
static PipTransitionController providePipTransitionController(Context context, static PipTransitionController providePipTransitionController(Context context,
Transitions transitions, ShellTaskOrganizer shellTaskOrganizer, ShellInit shellInit, ShellTaskOrganizer shellTaskOrganizer, Transitions transitions,
PipAnimationController pipAnimationController, PipBoundsAlgorithm pipBoundsAlgorithm, PipAnimationController pipAnimationController, PipBoundsAlgorithm pipBoundsAlgorithm,
PipBoundsState pipBoundsState, PipTransitionState pipTransitionState, PipBoundsState pipBoundsState, PipTransitionState pipTransitionState,
PhonePipMenuController pipMenuController, PhonePipMenuController pipMenuController,
PipSurfaceTransactionHelper pipSurfaceTransactionHelper, PipSurfaceTransactionHelper pipSurfaceTransactionHelper,
Optional<SplitScreenController> splitScreenOptional) { Optional<SplitScreenController> splitScreenOptional) {
return new PipTransition(context, pipBoundsState, pipTransitionState, pipMenuController, return new PipTransition(context, shellInit, shellTaskOrganizer, transitions,
pipBoundsAlgorithm, pipAnimationController, transitions, shellTaskOrganizer, pipBoundsState, pipTransitionState, pipMenuController, pipBoundsAlgorithm,
pipSurfaceTransactionHelper, splitScreenOptional); pipAnimationController, pipSurfaceTransactionHelper, splitScreenOptional);
} }
@WMSingleton @WMSingleton

View File

@@ -66,6 +66,7 @@ import com.android.wm.shell.R;
import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.protolog.ShellProtoLogGroup; import com.android.wm.shell.protolog.ShellProtoLogGroup;
import com.android.wm.shell.splitscreen.SplitScreenController; 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.CounterRotatorHelper;
import com.android.wm.shell.transition.Transitions; import com.android.wm.shell.transition.Transitions;
@@ -107,17 +108,18 @@ public class PipTransition extends PipTransitionController {
private boolean mHasFadeOut; private boolean mHasFadeOut;
public PipTransition(Context context, public PipTransition(Context context,
@NonNull ShellInit shellInit,
@NonNull ShellTaskOrganizer shellTaskOrganizer,
@NonNull Transitions transitions,
PipBoundsState pipBoundsState, PipBoundsState pipBoundsState,
PipTransitionState pipTransitionState, PipTransitionState pipTransitionState,
PipMenuController pipMenuController, PipMenuController pipMenuController,
PipBoundsAlgorithm pipBoundsAlgorithm, PipBoundsAlgorithm pipBoundsAlgorithm,
PipAnimationController pipAnimationController, PipAnimationController pipAnimationController,
Transitions transitions,
@NonNull ShellTaskOrganizer shellTaskOrganizer,
PipSurfaceTransactionHelper pipSurfaceTransactionHelper, PipSurfaceTransactionHelper pipSurfaceTransactionHelper,
Optional<SplitScreenController> splitScreenOptional) { Optional<SplitScreenController> splitScreenOptional) {
super(pipBoundsState, pipMenuController, pipBoundsAlgorithm, super(shellInit, shellTaskOrganizer, transitions, pipBoundsState, pipMenuController,
pipAnimationController, transitions, shellTaskOrganizer); pipBoundsAlgorithm, pipAnimationController);
mContext = context; mContext = context;
mPipTransitionState = pipTransitionState; mPipTransitionState = pipTransitionState;
mEnterExitAnimationDuration = context.getResources() mEnterExitAnimationDuration = context.getResources()

View File

@@ -38,6 +38,7 @@ import android.window.WindowContainerTransaction;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.sysui.ShellInit;
import com.android.wm.shell.transition.Transitions; import com.android.wm.shell.transition.Transitions;
import java.util.ArrayList; import java.util.ArrayList;
@@ -131,10 +132,13 @@ public abstract class PipTransitionController implements Transitions.TransitionH
public void onFixedRotationStarted() { public void onFixedRotationStarted() {
} }
public PipTransitionController(PipBoundsState pipBoundsState, public PipTransitionController(
@NonNull ShellInit shellInit,
@NonNull ShellTaskOrganizer shellTaskOrganizer,
@NonNull Transitions transitions,
PipBoundsState pipBoundsState,
PipMenuController pipMenuController, PipBoundsAlgorithm pipBoundsAlgorithm, PipMenuController pipMenuController, PipBoundsAlgorithm pipBoundsAlgorithm,
PipAnimationController pipAnimationController, Transitions transitions, PipAnimationController pipAnimationController) {
@android.annotation.NonNull ShellTaskOrganizer shellTaskOrganizer) {
mPipBoundsState = pipBoundsState; mPipBoundsState = pipBoundsState;
mPipMenuController = pipMenuController; mPipMenuController = pipMenuController;
mShellTaskOrganizer = shellTaskOrganizer; mShellTaskOrganizer = shellTaskOrganizer;
@@ -142,10 +146,14 @@ public abstract class PipTransitionController implements Transitions.TransitionH
mPipAnimationController = pipAnimationController; mPipAnimationController = pipAnimationController;
mTransitions = transitions; mTransitions = transitions;
if (Transitions.ENABLE_SHELL_TRANSITIONS) { if (Transitions.ENABLE_SHELL_TRANSITIONS) {
transitions.addHandler(this); shellInit.addInitCallback(this::onInit, this);
} }
} }
private void onInit() {
mTransitions.addHandler(this);
}
void setPipOrganizer(PipTaskOrganizer pto) { void setPipOrganizer(PipTaskOrganizer pto) {
mPipOrganizer = pto; mPipOrganizer = pto;
} }

View File

@@ -32,6 +32,7 @@ import com.android.wm.shell.pip.PipAnimationController;
import com.android.wm.shell.pip.PipBoundsState; import com.android.wm.shell.pip.PipBoundsState;
import com.android.wm.shell.pip.PipMenuController; import com.android.wm.shell.pip.PipMenuController;
import com.android.wm.shell.pip.PipTransitionController; import com.android.wm.shell.pip.PipTransitionController;
import com.android.wm.shell.sysui.ShellInit;
import com.android.wm.shell.transition.Transitions; 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. * TODO: Implement animation once TV is using Transitions.
*/ */
public class TvPipTransition extends PipTransitionController { public class TvPipTransition extends PipTransitionController {
public TvPipTransition(PipBoundsState pipBoundsState, public TvPipTransition(
@NonNull ShellInit shellInit,
@NonNull ShellTaskOrganizer shellTaskOrganizer,
@NonNull Transitions transitions,
PipBoundsState pipBoundsState,
PipMenuController pipMenuController, PipMenuController pipMenuController,
TvPipBoundsAlgorithm tvPipBoundsAlgorithm, TvPipBoundsAlgorithm tvPipBoundsAlgorithm,
PipAnimationController pipAnimationController, PipAnimationController pipAnimationController) {
Transitions transitions, super(shellInit, shellTaskOrganizer, transitions, pipBoundsState, pipMenuController,
@NonNull ShellTaskOrganizer shellTaskOrganizer) { tvPipBoundsAlgorithm, pipAnimationController);
super(pipBoundsState, pipMenuController, tvPipBoundsAlgorithm, pipAnimationController,
transitions, shellTaskOrganizer);
} }
@Override @Override

View File

@@ -158,9 +158,11 @@ public class Transitions implements RemoteCallable<Transitions> {
private void onInit() { private void onInit() {
// The very last handler (0 in the list) should be the default one. // 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. // 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(); ContentResolver resolver = mContext.getContentResolver();
mTransitionAnimationScaleSetting = Settings.Global.getFloat(resolver, mTransitionAnimationScaleSetting = Settings.Global.getFloat(resolver,
@@ -206,7 +208,13 @@ public class Transitions implements RemoteCallable<Transitions> {
* @see TransitionHandler * @see TransitionHandler
*/ */
public void addHandler(@NonNull TransitionHandler handler) { 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); mHandlers.add(handler);
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "addHandler: %s",
handler.getClass().getSimpleName());
} }
public ShellExecutor getMainExecutor() { public ShellExecutor getMainExecutor() {