Merge "Ensure PipTransitionController initializes in order" into tm-qpr-dev
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.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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
Reference in New Issue
Block a user