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

Commit 82753280 authored by Evan Rosky's avatar Evan Rosky
Browse files

Add a config to disable registering Shell Transitions in dagger

This is needed for android-auto where shell is actually in launcher
vs systemui.

Also have TaskViewTransitions use this information instead of checking
the flag so that it doesn't do anything in the process where it isn't
registered.

Bug: 255631687
Test: everything still works as expected
Change-Id: I61ad21575850f15fd821cc5c8239bf7246549936
parent a577c1d8
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -23,6 +23,10 @@
         TODO(b/238217847): This config is temporary until we refactor the base WMComponent. -->
    <bool name="config_registerShellTaskOrganizerOnInit">true</bool>

    <!-- Determines whether to register the shell transitions on init.
         TODO(b/238217847): This config is temporary until we refactor the base WMComponent. -->
    <bool name="config_registerShellTransitionsOnInit">true</bool>

    <!-- Animation duration for PIP when entering. -->
    <integer name="config_pipEnterAnimationDuration">425</integer>

+1 −2
Original line number Diff line number Diff line
@@ -41,7 +41,6 @@ import android.window.WindowContainerToken;
import android.window.WindowContainerTransaction;

import com.android.wm.shell.common.SyncTransactionQueue;
import com.android.wm.shell.transition.Transitions;

import java.io.PrintWriter;
import java.util.concurrent.Executor;
@@ -123,7 +122,7 @@ public class TaskView extends SurfaceView implements SurfaceHolder.Callback,

    /** Until all users are converted, we may have mixed-use (eg. Car). */
    private boolean isUsingShellTransitions() {
        return mTaskViewTransitions != null && Transitions.ENABLE_SHELL_TRANSITIONS;
        return mTaskViewTransitions != null && mTaskViewTransitions.isEnabled();
    }

    /**
+4 −0
Original line number Diff line number Diff line
@@ -87,6 +87,10 @@ public class TaskViewTransitions implements Transitions.TransitionHandler {
        // Note: Don't unregister handler since this is a singleton with lifetime bound to Shell
    }

    boolean isEnabled() {
        return mTransitions.isRegistered();
    }

    /**
     * Looks through the pending transitions for one matching `taskView`.
     * @param taskView the pending transition should be for this.
+4 −0
Original line number Diff line number Diff line
@@ -506,6 +506,10 @@ public abstract class WMShellBaseModule {
            @ShellMainThread ShellExecutor mainExecutor,
            @ShellMainThread Handler mainHandler,
            @ShellAnimationThread ShellExecutor animExecutor) {
        if (!context.getResources().getBoolean(R.bool.config_registerShellTransitionsOnInit)) {
            // TODO(b/238217847): Force override shell init if registration is disabled
            shellInit = new ShellInit(mainExecutor);
        }
        return new Transitions(context, shellInit, shellController, organizer, pool,
                displayController, mainExecutor, mainHandler, animExecutor);
    }
+19 −8
Original line number Diff line number Diff line
@@ -122,6 +122,8 @@ public class Transitions implements RemoteCallable<Transitions> {
    private final ShellController mShellController;
    private final ShellTransitionImpl mImpl = new ShellTransitionImpl();

    private boolean mIsRegistered = false;

    /** List of possible handlers. Ordered by specificity (eg. tapped back to front). */
    private final ArrayList<TransitionHandler> mHandlers = new ArrayList<>();

@@ -163,19 +165,18 @@ public class Transitions implements RemoteCallable<Transitions> {
                displayController, pool, mainExecutor, mainHandler, animExecutor);
        mRemoteTransitionHandler = new RemoteTransitionHandler(mMainExecutor);
        mShellController = shellController;
        shellInit.addInitCallback(this::onInit, this);
    }

    private void onInit() {
        mShellController.addExternalInterface(KEY_EXTRA_SHELL_SHELL_TRANSITIONS,
                this::createExternalInterface, this);

        // The very last handler (0 in the list) should be the default one.
        mHandlers.add(mDefaultTransitionHandler);
        ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "addHandler: Default");
        // Next lowest priority is remote transitions.
        mHandlers.add(mRemoteTransitionHandler);
        ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "addHandler: Remote");
        shellInit.addInitCallback(this::onInit, this);
    }

    private void onInit() {
        mShellController.addExternalInterface(KEY_EXTRA_SHELL_SHELL_TRANSITIONS,
                this::createExternalInterface, this);

        ContentResolver resolver = mContext.getContentResolver();
        mTransitionAnimationScaleSetting = getTransitionAnimationScaleSetting();
@@ -186,13 +187,23 @@ public class Transitions implements RemoteCallable<Transitions> {
                new SettingsObserver());

        if (Transitions.ENABLE_SHELL_TRANSITIONS) {
            mIsRegistered = true;
            // Register this transition handler with Core
            try {
                mOrganizer.registerTransitionPlayer(mPlayerImpl);
            } catch (RuntimeException e) {
                mIsRegistered = false;
                throw e;
            }
            // Pre-load the instance.
            TransitionMetrics.getInstance();
        }
    }

    public boolean isRegistered() {
        return mIsRegistered;
    }

    private float getTransitionAnimationScaleSetting() {
        return fixScale(Settings.Global.getFloat(mContext.getContentResolver(),
                Settings.Global.TRANSITION_ANIMATION_SCALE, mContext.getResources().getFloat(