Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit df8bbef5 authored by Winson Chung's avatar Winson Chung
Browse files

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
parent cc5e0d2b
Loading
Loading
Loading
Loading
+6 −3
Original line number Original line Diff line number Diff line
@@ -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
+4 −4
Original line number Original line Diff line number Diff line
@@ -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
+6 −4
Original line number Original line Diff line number Diff line
@@ -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()
+12 −4
Original line number Original line Diff line number Diff line
@@ -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;
    }
    }
+9 −6
Original line number Original line Diff line number Diff line
@@ -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
Loading