Loading libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java +11 −2 Original line number Diff line number Diff line Loading @@ -103,6 +103,7 @@ import com.android.wm.shell.sysui.ShellInterface; import com.android.wm.shell.taskview.TaskViewFactory; import com.android.wm.shell.taskview.TaskViewFactoryController; import com.android.wm.shell.taskview.TaskViewTransitions; import com.android.wm.shell.transition.HomeTransitionObserver; import com.android.wm.shell.transition.ShellTransitions; import com.android.wm.shell.transition.Transitions; import com.android.wm.shell.unfold.ShellUnfoldProgressProvider; Loading Loading @@ -613,14 +614,22 @@ public abstract class WMShellBaseModule { @ShellMainThread ShellExecutor mainExecutor, @ShellMainThread Handler mainHandler, @ShellAnimationThread ShellExecutor animExecutor, RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer) { RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer, HomeTransitionObserver homeTransitionObserver) { 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, shellCommandHandler, shellController, organizer, pool, displayController, mainExecutor, mainHandler, animExecutor, rootTaskDisplayAreaOrganizer); rootTaskDisplayAreaOrganizer, homeTransitionObserver); } @WMSingleton @Provides static HomeTransitionObserver provideHomeTransitionObserver(Context context, @ShellMainThread ShellExecutor mainExecutor) { return new HomeTransitionObserver(context, mainExecutor); } @WMSingleton Loading libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +4 −2 Original line number Diff line number Diff line Loading @@ -78,6 +78,7 @@ import com.android.wm.shell.sysui.ShellController; import com.android.wm.shell.sysui.ShellInit; import com.android.wm.shell.taskview.TaskViewTransitions; import com.android.wm.shell.transition.DefaultMixedHandler; import com.android.wm.shell.transition.HomeTransitionObserver; import com.android.wm.shell.transition.Transitions; import com.android.wm.shell.unfold.ShellUnfoldProgressProvider; import com.android.wm.shell.unfold.UnfoldAnimationController; Loading Loading @@ -380,9 +381,10 @@ public abstract class WMShellModule { static RecentsTransitionHandler provideRecentsTransitionHandler( ShellInit shellInit, Transitions transitions, Optional<RecentTasksController> recentTasksController) { Optional<RecentTasksController> recentTasksController, HomeTransitionObserver homeTransitionObserver) { return new RecentsTransitionHandler(shellInit, transitions, recentTasksController.orElse(null)); recentTasksController.orElse(null), homeTransitionObserver); } // Loading libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentsTransitionHandler.java +11 −1 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ import com.android.internal.protolog.common.ProtoLog; import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.protolog.ShellProtoLogGroup; import com.android.wm.shell.sysui.ShellInit; import com.android.wm.shell.transition.HomeTransitionObserver; import com.android.wm.shell.transition.Transitions; import com.android.wm.shell.util.TransitionUtil; Loading @@ -85,11 +86,15 @@ public class RecentsTransitionHandler implements Transitions.TransitionHandler { */ private final ArrayList<RecentsMixedHandler> mMixers = new ArrayList<>(); private final HomeTransitionObserver mHomeTransitionObserver; public RecentsTransitionHandler(ShellInit shellInit, Transitions transitions, @Nullable RecentTasksController recentTasksController) { @Nullable RecentTasksController recentTasksController, HomeTransitionObserver homeTransitionObserver) { mTransitions = transitions; mExecutor = transitions.getMainExecutor(); mRecentTasksController = recentTasksController; mHomeTransitionObserver = homeTransitionObserver; if (!Transitions.ENABLE_SHELL_TRANSITIONS) return; if (recentTasksController == null) return; shellInit.addInitCallback(() -> { Loading Loading @@ -911,6 +916,11 @@ public class RecentsTransitionHandler implements Transitions.TransitionHandler { Slog.e(TAG, "Duplicate call to finish"); return; } if (!toHome) { // For some transitions, we may have notified home activity that it became visible. // We need to notify the observer that we are no longer going home. mHomeTransitionObserver.notifyHomeVisibilityChanged(false); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION, "[%d] RecentsController.finishInner: toHome=%b userLeave=%b " + "willFinishToHome=%b state=%d", Loading libs/WindowManager/Shell/src/com/android/wm/shell/transition/HomeTransitionObserver.java +23 −15 Original line number Diff line number Diff line Loading @@ -38,24 +38,15 @@ import com.android.wm.shell.util.TransitionUtil; */ public class HomeTransitionObserver implements TransitionObserver, RemoteCallable<HomeTransitionObserver> { private final SingleInstanceRemoteListener<HomeTransitionObserver, IHomeTransitionListener> private SingleInstanceRemoteListener<HomeTransitionObserver, IHomeTransitionListener> mListener; private @NonNull final Context mContext; private @NonNull final ShellExecutor mMainExecutor; private @NonNull final Transitions mTransitions; public HomeTransitionObserver(@NonNull Context context, @NonNull ShellExecutor mainExecutor, @NonNull Transitions transitions) { @NonNull ShellExecutor mainExecutor) { mContext = context; mMainExecutor = mainExecutor; mTransitions = transitions; mListener = new SingleInstanceRemoteListener<>(this, c -> mTransitions.registerObserver(this), c -> mTransitions.unregisterObserver(this)); } @Override Loading @@ -72,7 +63,7 @@ public class HomeTransitionObserver implements TransitionObserver, final int mode = change.getMode(); if (taskInfo.getActivityType() == ACTIVITY_TYPE_HOME && TransitionUtil.isOpenOrCloseMode(mode)) { mListener.call(l -> l.onHomeVisibilityChanged(TransitionUtil.isOpeningType(mode))); notifyHomeVisibilityChanged(TransitionUtil.isOpeningType(mode)); } } } Loading @@ -92,7 +83,14 @@ public class HomeTransitionObserver implements TransitionObserver, * Sets the home transition listener that receives any transitions resulting in a change of * */ public void setHomeTransitionListener(IHomeTransitionListener listener) { public void setHomeTransitionListener(Transitions transitions, IHomeTransitionListener listener) { if (mListener == null) { mListener = new SingleInstanceRemoteListener<>(this, c -> transitions.registerObserver(this), c -> transitions.unregisterObserver(this)); } if (listener != null) { mListener.register(listener); } else { Loading @@ -100,6 +98,16 @@ public class HomeTransitionObserver implements TransitionObserver, } } /** * Notifies the listener that the home visibility has changed. * @param isVisible true when home activity is visible, false otherwise. */ public void notifyHomeVisibilityChanged(boolean isVisible) { if (mListener != null) { mListener.call(l -> l.onHomeVisibilityChanged(isVisible)); } } @Override public Context getContext() { return mContext; Loading @@ -113,7 +121,7 @@ public class HomeTransitionObserver implements TransitionObserver, /** * Invalidates this controller, preventing future calls to send updates. */ public void invalidate() { mTransitions.unregisterObserver(this); public void invalidate(Transitions transitions) { transitions.unregisterObserver(this); } } libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java +13 −10 Original line number Diff line number Diff line Loading @@ -192,6 +192,8 @@ public class Transitions implements RemoteCallable<Transitions>, private final ArrayList<TransitionObserver> mObservers = new ArrayList<>(); private HomeTransitionObserver mHomeTransitionObserver; /** List of {@link Runnable} instances to run when the last active transition has finished. */ private final ArrayList<Runnable> mRunWhenIdleQueue = new ArrayList<>(); Loading Loading @@ -267,10 +269,11 @@ public class Transitions implements RemoteCallable<Transitions>, @NonNull DisplayController displayController, @NonNull ShellExecutor mainExecutor, @NonNull Handler mainHandler, @NonNull ShellExecutor animExecutor) { @NonNull ShellExecutor animExecutor, @NonNull HomeTransitionObserver observer) { this(context, shellInit, new ShellCommandHandler(), shellController, organizer, pool, displayController, mainExecutor, mainHandler, animExecutor, new RootTaskDisplayAreaOrganizer(mainExecutor, context, shellInit)); new RootTaskDisplayAreaOrganizer(mainExecutor, context, shellInit), observer); } public Transitions(@NonNull Context context, Loading @@ -283,7 +286,8 @@ public class Transitions implements RemoteCallable<Transitions>, @NonNull ShellExecutor mainExecutor, @NonNull Handler mainHandler, @NonNull ShellExecutor animExecutor, @NonNull RootTaskDisplayAreaOrganizer rootTDAOrganizer) { @NonNull RootTaskDisplayAreaOrganizer rootTDAOrganizer, @NonNull HomeTransitionObserver observer) { mOrganizer = organizer; mContext = context; mMainExecutor = mainExecutor; Loading @@ -302,6 +306,7 @@ public class Transitions implements RemoteCallable<Transitions>, mHandlers.add(mRemoteTransitionHandler); ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "addHandler: Remote"); shellInit.addInitCallback(this::onInit, this); mHomeTransitionObserver = observer; } private void onInit() { Loading Loading @@ -351,7 +356,7 @@ public class Transitions implements RemoteCallable<Transitions>, } private ExternalInterfaceBinder createExternalInterface() { return new IShellTransitionsImpl(mContext, getMainExecutor(), this); return new IShellTransitionsImpl(this); } @Override Loading Loading @@ -1397,12 +1402,9 @@ public class Transitions implements RemoteCallable<Transitions>, private static class IShellTransitionsImpl extends IShellTransitions.Stub implements ExternalInterfaceBinder { private Transitions mTransitions; private final HomeTransitionObserver mHomeTransitionObserver; IShellTransitionsImpl(Context context, ShellExecutor executor, Transitions transitions) { IShellTransitionsImpl(Transitions transitions) { mTransitions = transitions; mHomeTransitionObserver = new HomeTransitionObserver(context, executor, mTransitions); } /** Loading @@ -1410,7 +1412,7 @@ public class Transitions implements RemoteCallable<Transitions>, */ @Override public void invalidate() { mHomeTransitionObserver.invalidate(); mTransitions.mHomeTransitionObserver.invalidate(mTransitions); mTransitions = null; } Loading Loading @@ -1440,7 +1442,8 @@ public class Transitions implements RemoteCallable<Transitions>, public void setHomeTransitionListener(IHomeTransitionListener listener) { executeRemoteCallWithTaskPermission(mTransitions, "setHomeTransitionListener", (transitions) -> { mHomeTransitionObserver.setHomeTransitionListener(listener); transitions.mHomeTransitionObserver.setHomeTransitionListener(mTransitions, listener); }); } } Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java +11 −2 Original line number Diff line number Diff line Loading @@ -103,6 +103,7 @@ import com.android.wm.shell.sysui.ShellInterface; import com.android.wm.shell.taskview.TaskViewFactory; import com.android.wm.shell.taskview.TaskViewFactoryController; import com.android.wm.shell.taskview.TaskViewTransitions; import com.android.wm.shell.transition.HomeTransitionObserver; import com.android.wm.shell.transition.ShellTransitions; import com.android.wm.shell.transition.Transitions; import com.android.wm.shell.unfold.ShellUnfoldProgressProvider; Loading Loading @@ -613,14 +614,22 @@ public abstract class WMShellBaseModule { @ShellMainThread ShellExecutor mainExecutor, @ShellMainThread Handler mainHandler, @ShellAnimationThread ShellExecutor animExecutor, RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer) { RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer, HomeTransitionObserver homeTransitionObserver) { 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, shellCommandHandler, shellController, organizer, pool, displayController, mainExecutor, mainHandler, animExecutor, rootTaskDisplayAreaOrganizer); rootTaskDisplayAreaOrganizer, homeTransitionObserver); } @WMSingleton @Provides static HomeTransitionObserver provideHomeTransitionObserver(Context context, @ShellMainThread ShellExecutor mainExecutor) { return new HomeTransitionObserver(context, mainExecutor); } @WMSingleton Loading
libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +4 −2 Original line number Diff line number Diff line Loading @@ -78,6 +78,7 @@ import com.android.wm.shell.sysui.ShellController; import com.android.wm.shell.sysui.ShellInit; import com.android.wm.shell.taskview.TaskViewTransitions; import com.android.wm.shell.transition.DefaultMixedHandler; import com.android.wm.shell.transition.HomeTransitionObserver; import com.android.wm.shell.transition.Transitions; import com.android.wm.shell.unfold.ShellUnfoldProgressProvider; import com.android.wm.shell.unfold.UnfoldAnimationController; Loading Loading @@ -380,9 +381,10 @@ public abstract class WMShellModule { static RecentsTransitionHandler provideRecentsTransitionHandler( ShellInit shellInit, Transitions transitions, Optional<RecentTasksController> recentTasksController) { Optional<RecentTasksController> recentTasksController, HomeTransitionObserver homeTransitionObserver) { return new RecentsTransitionHandler(shellInit, transitions, recentTasksController.orElse(null)); recentTasksController.orElse(null), homeTransitionObserver); } // Loading
libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentsTransitionHandler.java +11 −1 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ import com.android.internal.protolog.common.ProtoLog; import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.protolog.ShellProtoLogGroup; import com.android.wm.shell.sysui.ShellInit; import com.android.wm.shell.transition.HomeTransitionObserver; import com.android.wm.shell.transition.Transitions; import com.android.wm.shell.util.TransitionUtil; Loading @@ -85,11 +86,15 @@ public class RecentsTransitionHandler implements Transitions.TransitionHandler { */ private final ArrayList<RecentsMixedHandler> mMixers = new ArrayList<>(); private final HomeTransitionObserver mHomeTransitionObserver; public RecentsTransitionHandler(ShellInit shellInit, Transitions transitions, @Nullable RecentTasksController recentTasksController) { @Nullable RecentTasksController recentTasksController, HomeTransitionObserver homeTransitionObserver) { mTransitions = transitions; mExecutor = transitions.getMainExecutor(); mRecentTasksController = recentTasksController; mHomeTransitionObserver = homeTransitionObserver; if (!Transitions.ENABLE_SHELL_TRANSITIONS) return; if (recentTasksController == null) return; shellInit.addInitCallback(() -> { Loading Loading @@ -911,6 +916,11 @@ public class RecentsTransitionHandler implements Transitions.TransitionHandler { Slog.e(TAG, "Duplicate call to finish"); return; } if (!toHome) { // For some transitions, we may have notified home activity that it became visible. // We need to notify the observer that we are no longer going home. mHomeTransitionObserver.notifyHomeVisibilityChanged(false); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION, "[%d] RecentsController.finishInner: toHome=%b userLeave=%b " + "willFinishToHome=%b state=%d", Loading
libs/WindowManager/Shell/src/com/android/wm/shell/transition/HomeTransitionObserver.java +23 −15 Original line number Diff line number Diff line Loading @@ -38,24 +38,15 @@ import com.android.wm.shell.util.TransitionUtil; */ public class HomeTransitionObserver implements TransitionObserver, RemoteCallable<HomeTransitionObserver> { private final SingleInstanceRemoteListener<HomeTransitionObserver, IHomeTransitionListener> private SingleInstanceRemoteListener<HomeTransitionObserver, IHomeTransitionListener> mListener; private @NonNull final Context mContext; private @NonNull final ShellExecutor mMainExecutor; private @NonNull final Transitions mTransitions; public HomeTransitionObserver(@NonNull Context context, @NonNull ShellExecutor mainExecutor, @NonNull Transitions transitions) { @NonNull ShellExecutor mainExecutor) { mContext = context; mMainExecutor = mainExecutor; mTransitions = transitions; mListener = new SingleInstanceRemoteListener<>(this, c -> mTransitions.registerObserver(this), c -> mTransitions.unregisterObserver(this)); } @Override Loading @@ -72,7 +63,7 @@ public class HomeTransitionObserver implements TransitionObserver, final int mode = change.getMode(); if (taskInfo.getActivityType() == ACTIVITY_TYPE_HOME && TransitionUtil.isOpenOrCloseMode(mode)) { mListener.call(l -> l.onHomeVisibilityChanged(TransitionUtil.isOpeningType(mode))); notifyHomeVisibilityChanged(TransitionUtil.isOpeningType(mode)); } } } Loading @@ -92,7 +83,14 @@ public class HomeTransitionObserver implements TransitionObserver, * Sets the home transition listener that receives any transitions resulting in a change of * */ public void setHomeTransitionListener(IHomeTransitionListener listener) { public void setHomeTransitionListener(Transitions transitions, IHomeTransitionListener listener) { if (mListener == null) { mListener = new SingleInstanceRemoteListener<>(this, c -> transitions.registerObserver(this), c -> transitions.unregisterObserver(this)); } if (listener != null) { mListener.register(listener); } else { Loading @@ -100,6 +98,16 @@ public class HomeTransitionObserver implements TransitionObserver, } } /** * Notifies the listener that the home visibility has changed. * @param isVisible true when home activity is visible, false otherwise. */ public void notifyHomeVisibilityChanged(boolean isVisible) { if (mListener != null) { mListener.call(l -> l.onHomeVisibilityChanged(isVisible)); } } @Override public Context getContext() { return mContext; Loading @@ -113,7 +121,7 @@ public class HomeTransitionObserver implements TransitionObserver, /** * Invalidates this controller, preventing future calls to send updates. */ public void invalidate() { mTransitions.unregisterObserver(this); public void invalidate(Transitions transitions) { transitions.unregisterObserver(this); } }
libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java +13 −10 Original line number Diff line number Diff line Loading @@ -192,6 +192,8 @@ public class Transitions implements RemoteCallable<Transitions>, private final ArrayList<TransitionObserver> mObservers = new ArrayList<>(); private HomeTransitionObserver mHomeTransitionObserver; /** List of {@link Runnable} instances to run when the last active transition has finished. */ private final ArrayList<Runnable> mRunWhenIdleQueue = new ArrayList<>(); Loading Loading @@ -267,10 +269,11 @@ public class Transitions implements RemoteCallable<Transitions>, @NonNull DisplayController displayController, @NonNull ShellExecutor mainExecutor, @NonNull Handler mainHandler, @NonNull ShellExecutor animExecutor) { @NonNull ShellExecutor animExecutor, @NonNull HomeTransitionObserver observer) { this(context, shellInit, new ShellCommandHandler(), shellController, organizer, pool, displayController, mainExecutor, mainHandler, animExecutor, new RootTaskDisplayAreaOrganizer(mainExecutor, context, shellInit)); new RootTaskDisplayAreaOrganizer(mainExecutor, context, shellInit), observer); } public Transitions(@NonNull Context context, Loading @@ -283,7 +286,8 @@ public class Transitions implements RemoteCallable<Transitions>, @NonNull ShellExecutor mainExecutor, @NonNull Handler mainHandler, @NonNull ShellExecutor animExecutor, @NonNull RootTaskDisplayAreaOrganizer rootTDAOrganizer) { @NonNull RootTaskDisplayAreaOrganizer rootTDAOrganizer, @NonNull HomeTransitionObserver observer) { mOrganizer = organizer; mContext = context; mMainExecutor = mainExecutor; Loading @@ -302,6 +306,7 @@ public class Transitions implements RemoteCallable<Transitions>, mHandlers.add(mRemoteTransitionHandler); ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "addHandler: Remote"); shellInit.addInitCallback(this::onInit, this); mHomeTransitionObserver = observer; } private void onInit() { Loading Loading @@ -351,7 +356,7 @@ public class Transitions implements RemoteCallable<Transitions>, } private ExternalInterfaceBinder createExternalInterface() { return new IShellTransitionsImpl(mContext, getMainExecutor(), this); return new IShellTransitionsImpl(this); } @Override Loading Loading @@ -1397,12 +1402,9 @@ public class Transitions implements RemoteCallable<Transitions>, private static class IShellTransitionsImpl extends IShellTransitions.Stub implements ExternalInterfaceBinder { private Transitions mTransitions; private final HomeTransitionObserver mHomeTransitionObserver; IShellTransitionsImpl(Context context, ShellExecutor executor, Transitions transitions) { IShellTransitionsImpl(Transitions transitions) { mTransitions = transitions; mHomeTransitionObserver = new HomeTransitionObserver(context, executor, mTransitions); } /** Loading @@ -1410,7 +1412,7 @@ public class Transitions implements RemoteCallable<Transitions>, */ @Override public void invalidate() { mHomeTransitionObserver.invalidate(); mTransitions.mHomeTransitionObserver.invalidate(mTransitions); mTransitions = null; } Loading Loading @@ -1440,7 +1442,8 @@ public class Transitions implements RemoteCallable<Transitions>, public void setHomeTransitionListener(IHomeTransitionListener listener) { executeRemoteCallWithTaskPermission(mTransitions, "setHomeTransitionListener", (transitions) -> { mHomeTransitionObserver.setHomeTransitionListener(listener); transitions.mHomeTransitionObserver.setHomeTransitionListener(mTransitions, listener); }); } } Loading