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

Commit af0d09b9 authored by Winson Chung's avatar Winson Chung Committed by Android (Google) Code Review
Browse files

Merge "Revert "Update calls to go through the feature interface instead..."" into sc-dev

parents 6547d098 ee904f65
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -86,6 +86,7 @@ import com.android.quickstep.util.RemoteAnimationProvider;
import com.android.quickstep.util.StaggeredWorkspaceAnim;
import com.android.quickstep.util.SurfaceTransactionApplier;
import com.android.quickstep.views.RecentsView;
import com.android.systemui.shared.recents.IStartingWindowListener;
import com.android.systemui.shared.system.ActivityCompat;
import com.android.systemui.shared.system.ActivityOptionsCompat;
import com.android.systemui.shared.system.InteractionJankMonitorWrapper;
@@ -97,7 +98,6 @@ import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
import com.android.systemui.shared.system.RemoteTransitionCompat;
import com.android.systemui.shared.system.SyncRtSurfaceTransactionApplierCompat.SurfaceParams;
import com.android.systemui.shared.system.WindowManagerWrapper;
import com.android.wm.shell.startingsurface.IStartingWindowListener;

import java.util.LinkedHashMap;

+107 −133
Original line number Diff line number Diff line
@@ -35,17 +35,12 @@ import android.util.Log;
import android.view.MotionEvent;

import com.android.launcher3.util.MainThreadInitializedObject;
import com.android.systemui.shared.recents.IPinnedStackAnimationListener;
import com.android.systemui.shared.recents.ISplitScreenListener;
import com.android.systemui.shared.recents.IStartingWindowListener;
import com.android.systemui.shared.recents.ISystemUiProxy;
import com.android.systemui.shared.recents.model.Task;
import com.android.systemui.shared.system.RemoteTransitionCompat;
import com.android.wm.shell.onehanded.IOneHanded;
import com.android.wm.shell.pip.IPip;
import com.android.wm.shell.pip.IPipAnimationListener;
import com.android.wm.shell.splitscreen.ISplitScreen;
import com.android.wm.shell.splitscreen.ISplitScreenListener;
import com.android.wm.shell.startingsurface.IStartingWindow;
import com.android.wm.shell.startingsurface.IStartingWindowListener;
import com.android.wm.shell.transition.IShellTransitions;

/**
 * Holds the reference to SystemUI.
@@ -58,13 +53,8 @@ public class SystemUiProxy implements ISystemUiProxy,
            new MainThreadInitializedObject<>(SystemUiProxy::new);

    private ISystemUiProxy mSystemUiProxy;
    private IPip mPip;
    private ISplitScreen mSplitScreen;
    private IOneHanded mOneHanded;
    private IShellTransitions mShellTransitions;
    private IStartingWindow mStartingWindow;
    private final DeathRecipient mSystemUiProxyDeathRecipient = () -> {
        MAIN_EXECUTOR.execute(() -> clearProxy());
        MAIN_EXECUTOR.execute(() -> setProxy(null));
    };

    // Used to dedupe calls to SystemUI
@@ -92,23 +82,12 @@ public class SystemUiProxy implements ISystemUiProxy,
        return null;
    }

    public void setProxy(ISystemUiProxy proxy, IPip pip, ISplitScreen splitScreen,
            IOneHanded oneHanded, IShellTransitions shellTransitions,
            IStartingWindow startingWindow) {
    public void setProxy(ISystemUiProxy proxy) {
        unlinkToDeath();
        mSystemUiProxy = proxy;
        mPip = pip;
        mSplitScreen = splitScreen;
        mOneHanded = oneHanded;
        mShellTransitions = shellTransitions;
        mStartingWindow = startingWindow;
        linkToDeath();
    }

    public void clearProxy() {
        setProxy(null, null, null, null, null, null);
    }

    // TODO(141886704): Find a way to remove this
    public void setLastSystemUiStateFlags(int stateFlags) {
        mLastSystemUiStateFlags = stateFlags;
@@ -285,6 +264,21 @@ public class SystemUiProxy implements ISystemUiProxy,
        }
    }

    @Override
    public void setShelfHeight(boolean visible, int shelfHeight) {
        boolean changed = visible != mLastShelfVisible || shelfHeight != mLastShelfHeight;
        if (mSystemUiProxy != null && changed) {
            mLastShelfVisible = visible;
            mLastShelfHeight = shelfHeight;
            try {
                mSystemUiProxy.setShelfHeight(visible, shelfHeight);
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call setShelfHeight visible: " + visible
                        + " height: " + shelfHeight, e);
            }
        }
    }

    @Override
    public void handleImageAsScreenshot(Bitmap bitmap, Rect rect, Insets insets, int i) {
        if (mSystemUiProxy != null) {
@@ -321,6 +315,20 @@ public class SystemUiProxy implements ISystemUiProxy,
        }
    }

    /**
     * Sets listener to get pinned stack animation callbacks.
     */
    @Override
    public void setPinnedStackAnimationListener(IPinnedStackAnimationListener listener) {
        if (mSystemUiProxy != null) {
            try {
                mSystemUiProxy.setPinnedStackAnimationListener(listener);
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call setPinnedStackAnimationListener", e);
            }
        }
    }

    @Override
    public void onQuickSwitchToNewTask(int rotation) {
        if (mSystemUiProxy != null) {
@@ -346,55 +354,44 @@ public class SystemUiProxy implements ISystemUiProxy,
    }

    @Override
    public void expandNotificationPanel() {
    public void startOneHandedMode() {
        if (mSystemUiProxy != null) {
            try {
                mSystemUiProxy.expandNotificationPanel();
                mSystemUiProxy.startOneHandedMode();
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call expandNotificationPanel", e);
                Log.w(TAG, "Failed call startOneHandedMode", e);
            }
        }
    }

    //
    // Pip
    //

    /**
     * Sets the shelf height.
     */
    public void setShelfHeight(boolean visible, int shelfHeight) {
        boolean changed = visible != mLastShelfVisible || shelfHeight != mLastShelfHeight;
        if (mPip != null && changed) {
            mLastShelfVisible = visible;
            mLastShelfHeight = shelfHeight;
    @Override
    public void stopOneHandedMode() {
        if (mSystemUiProxy != null) {
            try {
                mPip.setShelfHeight(visible, shelfHeight);
                mSystemUiProxy.stopOneHandedMode();
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call setShelfHeight visible: " + visible
                        + " height: " + shelfHeight, e);
                Log.w(TAG, "Failed call stopOneHandedMode", e);
            }
        }
    }

    /**
     * Sets listener to get pinned stack animation callbacks.
     */
    public void setPinnedStackAnimationListener(IPipAnimationListener listener) {
        if (mPip != null) {
    @Override
    public void expandNotificationPanel() {
        if (mSystemUiProxy != null) {
            try {
                mPip.setPinnedStackAnimationListener(listener);
                mSystemUiProxy.expandNotificationPanel();
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call setPinnedStackAnimationListener", e);
                Log.w(TAG, "Failed call expandNotificationPanel", e);
            }
        }
    }

    @Override
    public Rect startSwipePipToHome(ComponentName componentName, ActivityInfo activityInfo,
            PictureInPictureParams pictureInPictureParams, int launcherRotation, int shelfHeight) {
        if (mPip != null) {
        if (mSystemUiProxy != null) {
            try {
                return mPip.startSwipePipToHome(componentName, activityInfo,
                return mSystemUiProxy.startSwipePipToHome(componentName, activityInfo,
                        pictureInPictureParams, launcherRotation, shelfHeight);
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call startSwipePipToHome", e);
@@ -403,85 +400,111 @@ public class SystemUiProxy implements ISystemUiProxy,
        return null;
    }

    @Override
    public void stopSwipePipToHome(ComponentName componentName, Rect destinationBounds) {
        if (mPip != null) {
        if (mSystemUiProxy != null) {
            try {
                mPip.stopSwipePipToHome(componentName, destinationBounds);
                mSystemUiProxy.stopSwipePipToHome(componentName, destinationBounds);
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call stopSwipePipToHome");
            }
        }
    }

    //
    // Splitscreen
    //
    @Override
    public void registerRemoteTransition(RemoteTransitionCompat remoteTransition) {
        if (mSystemUiProxy != null) {
            try {
                mSystemUiProxy.registerRemoteTransition(remoteTransition);
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call registerRemoteTransition");
            }
        }
    }

    @Override
    public void unregisterRemoteTransition(RemoteTransitionCompat remoteTransition) {
        if (mSystemUiProxy != null) {
            try {
                mSystemUiProxy.unregisterRemoteTransition(remoteTransition);
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call registerRemoteTransition");
            }
        }
    }

    @Override
    public void registerSplitScreenListener(ISplitScreenListener listener) {
        if (mSplitScreen != null) {
        if (mSystemUiProxy != null) {
            try {
                mSplitScreen.registerSplitScreenListener(listener);
                mSystemUiProxy.registerSplitScreenListener(listener);
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call registerSplitScreenListener");
            }
        }
    }

    @Override
    public void unregisterSplitScreenListener(ISplitScreenListener listener) {
        if (mSplitScreen != null) {
        if (mSystemUiProxy != null) {
            try {
                mSplitScreen.unregisterSplitScreenListener(listener);
                mSystemUiProxy.unregisterSplitScreenListener(listener);
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call unregisterSplitScreenListener");
            }
        }
    }

    @Override
    public void setSideStageVisibility(boolean visible) {
        if (mSplitScreen != null) {
        if (mSystemUiProxy != null) {
            try {
                mSplitScreen.setSideStageVisibility(visible);
                mSystemUiProxy.setSideStageVisibility(visible);
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call setSideStageVisibility");
            }
        }
    }

    @Override
    public void exitSplitScreen() {
        if (mSplitScreen != null) {
        if (mSystemUiProxy != null) {
            try {
                mSplitScreen.exitSplitScreen();
                mSystemUiProxy.exitSplitScreen();
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call exitSplitScreen");
            }
        }
    }

    @Override
    public void exitSplitScreenOnHide(boolean exitSplitScreenOnHide) {
        if (mSplitScreen != null) {
        if (mSystemUiProxy != null) {
            try {
                mSplitScreen.exitSplitScreenOnHide(exitSplitScreenOnHide);
                mSystemUiProxy.exitSplitScreenOnHide(exitSplitScreenOnHide);
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call exitSplitScreen");
            }
        }
    }

    @Override
    public void startTask(int taskId, int stage, int position, Bundle options) {
        if (mSplitScreen != null) {
        if (mSystemUiProxy != null) {
            try {
                mSplitScreen.startTask(taskId, stage, position, options);
                mSystemUiProxy.startTask(taskId, stage, position, options);
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call startTask");
            }
        }
    }

    @Override
    public void startShortcut(String packageName, String shortcutId, int stage, int position,
            Bundle options, UserHandle user) {
        if (mSplitScreen != null) {
        if (mSystemUiProxy != null) {
            try {
                mSplitScreen.startShortcut(packageName, shortcutId, stage, position, options,
                mSystemUiProxy.startShortcut(packageName, shortcutId, stage, position, options,
                        user);
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call startShortcut");
@@ -489,87 +512,38 @@ public class SystemUiProxy implements ISystemUiProxy,
        }
    }

    public void startIntent(PendingIntent intent, Intent fillInIntent, int stage, int position,
            Bundle options) {
        if (mSplitScreen != null) {
    @Override
    public void startIntent(PendingIntent intent, Intent fillInIntent, int stage,
            int position, Bundle options) {
        if (mSystemUiProxy != null) {
            try {
                mSplitScreen.startIntent(intent, fillInIntent, stage, position, options);
                mSystemUiProxy.startIntent(intent, fillInIntent, stage, position,
                        options);
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call startIntent");
            }
        }
    }

    @Override
    public void removeFromSideStage(int taskId) {
        if (mSplitScreen != null) {
        if (mSystemUiProxy != null) {
            try {
                mSplitScreen.removeFromSideStage(taskId);
                mSystemUiProxy.removeFromSideStage(taskId);
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call removeFromSideStage");
            }
        }
    }

    //
    // One handed
    //

    public void startOneHandedMode() {
        if (mOneHanded != null) {
            try {
                mOneHanded.startOneHanded();
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call startOneHandedMode", e);
            }
        }
    }

    public void stopOneHandedMode() {
        if (mOneHanded != null) {
            try {
                mOneHanded.stopOneHanded();
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call stopOneHandedMode", e);
            }
        }
    }

    //
    // Remote transitions
    //

    public void registerRemoteTransition(RemoteTransitionCompat remoteTransition) {
        if (mShellTransitions != null) {
            try {
                mShellTransitions.registerRemote(remoteTransition.getFilter(),
                        remoteTransition.getTransition());
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call registerRemoteTransition");
            }
        }
    }

    public void unregisterRemoteTransition(RemoteTransitionCompat remoteTransition) {
        if (mShellTransitions != null) {
            try {
                mShellTransitions.unregisterRemote(remoteTransition.getTransition());
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call registerRemoteTransition");
            }
        }
    }

    //
    // Starting window
    //

    /**
     * Sets listener to get callbacks when launching a task.
     */
    @Override
    public void setStartingWindowListener(IStartingWindowListener listener) {
        if (mStartingWindow != null) {
        if (mSystemUiProxy != null) {
            try {
                mStartingWindow.setStartingWindowListener(listener);
                mSystemUiProxy.setStartingWindowListener(listener);
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call setStartingWindowListener", e);
            }
+2 −22
Original line number Diff line number Diff line
@@ -24,11 +24,6 @@ import static com.android.launcher3.config.FeatureFlags.ASSISTANT_GIVES_LAUNCHER
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import static com.android.quickstep.GestureState.DEFAULT_STATE;
import static com.android.quickstep.util.NavigationModeFeatureFlag.LIVE_TILE;
import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_SHELL_ONE_HANDED;
import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_SHELL_PIP;
import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_SHELL_SHELL_TRANSITIONS;
import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_SHELL_SPLIT_SCREEN;
import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_SHELL_STARTING_WINDOW;
import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_SYSUI_PROXY;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_TRACING_ENABLED;

@@ -106,11 +101,6 @@ import com.android.systemui.shared.system.InputChannelCompat.InputEventReceiver;
import com.android.systemui.shared.system.InputConsumerController;
import com.android.systemui.shared.system.InputMonitorCompat;
import com.android.systemui.shared.tracing.ProtoTraceable;
import com.android.wm.shell.onehanded.IOneHanded;
import com.android.wm.shell.pip.IPip;
import com.android.wm.shell.splitscreen.ISplitScreen;
import com.android.wm.shell.startingsurface.IStartingWindow;
import com.android.wm.shell.transition.IShellTransitions;

import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -150,18 +140,8 @@ public class TouchInteractionService extends Service implements PluginListener<O
        public void onInitialize(Bundle bundle) {
            ISystemUiProxy proxy = ISystemUiProxy.Stub.asInterface(
                    bundle.getBinder(KEY_EXTRA_SYSUI_PROXY));
            IPip pip = IPip.Stub.asInterface(bundle.getBinder(KEY_EXTRA_SHELL_PIP));
            ISplitScreen splitscreen = ISplitScreen.Stub.asInterface(bundle.getBinder(
                    KEY_EXTRA_SHELL_SPLIT_SCREEN));
            IOneHanded onehanded = IOneHanded.Stub.asInterface(
                    bundle.getBinder(KEY_EXTRA_SHELL_ONE_HANDED));
            IShellTransitions shellTransitions = IShellTransitions.Stub.asInterface(
                    bundle.getBinder(KEY_EXTRA_SHELL_SHELL_TRANSITIONS));
            IStartingWindow startingWindow = IStartingWindow.Stub.asInterface(
                    bundle.getBinder(KEY_EXTRA_SHELL_STARTING_WINDOW));
            MAIN_EXECUTOR.execute(() -> {
                SystemUiProxy.INSTANCE.get(TouchInteractionService.this).setProxy(proxy, pip,
                        splitscreen, onehanded, shellTransitions, startingWindow);
                SystemUiProxy.INSTANCE.get(TouchInteractionService.this).setProxy(proxy);
                TouchInteractionService.this.initInputMonitor();
                preloadOverview(true /* fromInit */);
                mDeviceState.runOnUserUnlocked(() -> {
@@ -441,7 +421,7 @@ public class TouchInteractionService extends Service implements PluginListener<O
        }
        disposeEventHandlers();
        mDeviceState.destroy();
        SystemUiProxy.INSTANCE.get(this).clearProxy();
        SystemUiProxy.INSTANCE.get(this).setProxy(null);
        ProtoTracer.INSTANCE.get(this).stop();
        ProtoTracer.INSTANCE.get(this).remove(this);

+10 −13
Original line number Diff line number Diff line
@@ -39,7 +39,6 @@ import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCH
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASK_DISMISS_SWIPE_UP;
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASK_LAUNCH_SWIPE_DOWN;
import static com.android.launcher3.statehandlers.DepthController.DEPTH;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
import static com.android.launcher3.util.SystemUiController.UI_STATE_OVERVIEW;
import static com.android.quickstep.TaskUtils.checkCurrentOrManagedUserId;
@@ -134,13 +133,13 @@ import com.android.quickstep.util.SurfaceTransactionApplier;
import com.android.quickstep.util.TaskViewSimulator;
import com.android.quickstep.util.TransformParams;
import com.android.systemui.plugins.ResourceProvider;
import com.android.systemui.shared.recents.IPinnedStackAnimationListener;
import com.android.systemui.shared.recents.model.Task;
import com.android.systemui.shared.recents.model.Task.TaskKey;
import com.android.systemui.shared.recents.model.ThumbnailData;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.PackageManagerWrapper;
import com.android.systemui.shared.system.TaskStackChangeListener;
import com.android.wm.shell.pip.IPipAnimationListener;

import java.util.ArrayList;
import java.util.function.Consumer;
@@ -378,7 +377,7 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
        }
    };

    private final PinnedStackAnimationListener mIPipAnimationListener =
    private final PinnedStackAnimationListener mIPinnedStackAnimationListener =
            new PinnedStackAnimationListener();

    // Used to keep track of the last requested task list id, so that we do not request to load the
@@ -598,9 +597,9 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
        mLiveTileParams.setSyncTransactionApplier(mSyncTransactionApplier);
        RecentsModel.INSTANCE.get(getContext()).addThumbnailChangeListener(this);
        mIdp.addOnChangeListener(this);
        mIPipAnimationListener.setActivity(mActivity);
        mIPinnedStackAnimationListener.setActivity(mActivity);
        SystemUiProxy.INSTANCE.get(getContext()).setPinnedStackAnimationListener(
                mIPipAnimationListener);
                mIPinnedStackAnimationListener);
        mOrientationState.initListeners();
        SplitScreenBounds.INSTANCE.addOnChangeListener(this);
        mTaskOverlayFactory.initListeners();
@@ -619,7 +618,7 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
        mIdp.removeOnChangeListener(this);
        SystemUiProxy.INSTANCE.get(getContext()).setPinnedStackAnimationListener(null);
        SplitScreenBounds.INSTANCE.removeOnChangeListener(this);
        mIPipAnimationListener.setActivity(null);
        mIPinnedStackAnimationListener.setActivity(null);
        mOrientationState.destroyListeners();
        mTaskOverlayFactory.removeListeners();
    }
@@ -2923,7 +2922,7 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
    }

    private static class PinnedStackAnimationListener<T extends BaseActivity> extends
            IPipAnimationListener.Stub {
            IPinnedStackAnimationListener.Stub {
        private T mActivity;

        public void setActivity(T activity) {
@@ -2931,12 +2930,10 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
        }

        @Override
        public void onPipAnimationStarted() {
            MAIN_EXECUTOR.execute(() -> {
        public void onPinnedStackAnimationStarted() {
            // Needed for activities that auto-enter PiP, which will not trigger a remote
            // animation to be created
            mActivity.clearForceInvisibleFlag(STATE_HANDLER_INVISIBILITY_FLAGS);
            });
        }
    }
}