Loading quickstep/src/com/android/launcher3/LauncherInitListener.java→quickstep/src/com/android/launcher3/LauncherLifecycleListener.java +14 −7 Original line number Diff line number Diff line /* * Copyright (C) 2018 The Android Open Source Project * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. Loading @@ -16,19 +16,23 @@ package com.android.launcher3; import android.animation.AnimatorSet; import android.annotation.Nullable; import android.annotation.TargetApi; import android.os.Build; import android.os.CancellationSignal; import android.view.RemoteAnimationTarget; import com.android.launcher3.uioverrides.QuickstepLauncher; import com.android.quickstep.util.ActivityInitListener; import com.android.quickstep.util.ActivityLifecycleListener; import com.android.quickstep.util.RemoteAnimationProvider; import java.util.function.BiPredicate; /** * {@link ActivityLifecycleListener} for the in-launcher recents. */ @TargetApi(Build.VERSION_CODES.P) public class LauncherInitListener extends ActivityInitListener<Launcher> { public class LauncherLifecycleListener extends ActivityLifecycleListener<Launcher> { private RemoteAnimationProvider mRemoteAnimationProvider; Loading @@ -36,13 +40,16 @@ public class LauncherInitListener extends ActivityInitListener<Launcher> { * @param onInitListener a callback made when the activity is initialized. The callback should * return true to continue receiving callbacks (ie. for if the activity is * recreated). * @param onDestroyListener a callback made when the activity is destroyed. */ public LauncherInitListener(BiPredicate<Launcher, Boolean> onInitListener) { super(onInitListener, Launcher.ACTIVITY_TRACKER); public LauncherLifecycleListener( @Nullable BiPredicate<Launcher, Boolean> onInitListener, @Nullable Runnable onDestroyListener) { super(onInitListener, onDestroyListener, Launcher.ACTIVITY_TRACKER); } @Override public boolean handleInit(Launcher launcher, boolean alreadyOnHome) { public boolean handleActivityReady(Launcher launcher, boolean alreadyOnHome) { if (mRemoteAnimationProvider != null) { QuickstepTransitionManager appTransitionManager = ((QuickstepLauncher) launcher).getAppTransitionManager(); Loading @@ -68,7 +75,7 @@ public class LauncherInitListener extends ActivityInitListener<Launcher> { }, cancellationSignal); } launcher.deferOverlayCallbacksUntilNextResumeOrStop(); return super.handleInit(launcher, alreadyOnHome); return super.handleActivityReady(launcher, alreadyOnHome); } @Override Loading quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +10 −3 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ import static com.android.quickstep.GestureState.STATE_RECENTS_SCROLLING_FINISHE import static com.android.quickstep.MultiStateCallback.DEBUG_STATES; import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.CANCEL_RECENTS_ANIMATION; import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.EXPECTING_TASK_APPEARED; import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.LAUNCHER_DESTROYED; import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.ON_SETTLED_ON_END_TARGET; import static com.android.quickstep.util.VibratorWrapper.OVERVIEW_HAPTIC; import static com.android.quickstep.views.RecentsView.UPDATE_SYSUI_FLAGS_THRESHOLD; Loading Loading @@ -113,7 +114,7 @@ import com.android.quickstep.GestureState.GestureEndTarget; import com.android.quickstep.RemoteTargetGluer.RemoteTargetHandle; import com.android.quickstep.util.ActiveGestureErrorDetector; import com.android.quickstep.util.ActiveGestureLog; import com.android.quickstep.util.ActivityInitListener; import com.android.quickstep.util.ActivityLifecycleListener; import com.android.quickstep.util.AnimatorControllerWithResistance; import com.android.quickstep.util.InputConsumerProxy; import com.android.quickstep.util.InputProxyHandlerFactory; Loading Loading @@ -159,7 +160,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, protected final BaseActivityInterface<S, T> mActivityInterface; protected final InputConsumerProxy mInputConsumerProxy; protected final ActivityInitListener mActivityInitListener; protected final ActivityLifecycleListener mActivityInitListener; // Callbacks to be made once the recents animation starts private final ArrayList<Runnable> mRecentsAnimationStartCallbacks = new ArrayList<>(); private final OnScrollChangedListener mOnRecentsScrollListener = this::onRecentsViewScroll; Loading Loading @@ -329,7 +330,8 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, InputConsumerController inputConsumer) { super(context, deviceState, gestureState); mActivityInterface = gestureState.getActivityInterface(); mActivityInitListener = mActivityInterface.createActivityInitListener(this::onActivityInit); mActivityInitListener = mActivityInterface.createActivityLifecycleListener( this::onActivityInit, this::onActivityDestroy); mInputConsumerProxy = new InputConsumerProxy(context, /* rotationSupplier = */ () -> { if (mRecentsView == null) { Loading Loading @@ -520,6 +522,11 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, return true; } private void onActivityDestroy() { ActiveGestureLog.INSTANCE.addLog("Launcher activity destroyed", LAUNCHER_DESTROYED); onGestureCancelled(); } /** * Return true if the window should be translated horizontally if the recents view scrolls */ Loading quickstep/src/com/android/quickstep/BaseActivityInterface.java +12 −3 Original line number Diff line number Diff line Loading @@ -60,7 +60,7 @@ import com.android.launcher3.touch.PagedOrientationHandler; import com.android.launcher3.util.DisplayController; import com.android.launcher3.util.NavigationMode; import com.android.launcher3.views.ScrimView; import com.android.quickstep.util.ActivityInitListener; import com.android.quickstep.util.ActivityLifecycleListener; import com.android.quickstep.util.AnimatorControllerWithResistance; import com.android.quickstep.views.RecentsView; import com.android.systemui.shared.recents.model.ThumbnailData; Loading Loading @@ -123,8 +123,17 @@ public abstract class BaseActivityInterface<STATE_TYPE extends BaseState<STATE_T public abstract AnimationFactory prepareRecentsUI(RecentsAnimationDeviceState deviceState, boolean activityVisible, Consumer<AnimatorControllerWithResistance> callback); public abstract ActivityInitListener createActivityInitListener( Predicate<Boolean> onInitListener); /** * Creates a activity listener for activity initialized and/or destroyed. One or both of these * listeners must be provided. * * @param onInitListener a callback made when the activity is initialized. The callback should * return true to continue receiving callbacks (ie. for if the activity is * recreated). * @param onDestroyListener a callback made when the activity is destroyed. */ public abstract ActivityLifecycleListener createActivityLifecycleListener( @Nullable Predicate<Boolean> onInitListener, @Nullable Runnable onDestroyListener); /** * Sets a callback to be run when an activity launch happens while launcher is not yet resumed. Loading quickstep/src/com/android/quickstep/FallbackActivityInterface.java +7 −5 Original line number Diff line number Diff line Loading @@ -36,7 +36,7 @@ import com.android.launcher3.touch.PagedOrientationHandler; import com.android.launcher3.util.DisplayController; import com.android.quickstep.GestureState.GestureEndTarget; import com.android.quickstep.fallback.RecentsState; import com.android.quickstep.util.ActivityInitListener; import com.android.quickstep.util.ActivityLifecycleListener; import com.android.quickstep.util.AnimatorControllerWithResistance; import com.android.quickstep.views.RecentsView; Loading Loading @@ -88,10 +88,12 @@ public final class FallbackActivityInterface extends } @Override public ActivityInitListener createActivityInitListener( Predicate<Boolean> onInitListener) { return new ActivityInitListener<>((activity, alreadyOnHome) -> onInitListener.test(alreadyOnHome), RecentsActivity.ACTIVITY_TRACKER); public ActivityLifecycleListener createActivityLifecycleListener( @Nullable Predicate<Boolean> onInitListener, @Nullable Runnable onDestroyListener) { return new ActivityLifecycleListener<>( (activity, alreadyOnHome) -> onInitListener.test(alreadyOnHome), onDestroyListener, RecentsActivity.ACTIVITY_TRACKER); } @Nullable Loading quickstep/src/com/android/quickstep/LauncherActivityInterface.java +6 −5 Original line number Diff line number Diff line Loading @@ -37,7 +37,7 @@ import androidx.annotation.UiThread; import com.android.launcher3.DeviceProfile; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherAnimUtils; import com.android.launcher3.LauncherInitListener; import com.android.launcher3.LauncherLifecycleListener; import com.android.launcher3.LauncherState; import com.android.launcher3.anim.PendingAnimation; import com.android.launcher3.statehandlers.DepthController; Loading @@ -49,7 +49,7 @@ import com.android.launcher3.uioverrides.QuickstepLauncher; import com.android.launcher3.util.DisplayController; import com.android.launcher3.util.NavigationMode; import com.android.quickstep.GestureState.GestureEndTarget; import com.android.quickstep.util.ActivityInitListener; import com.android.quickstep.util.ActivityLifecycleListener; import com.android.quickstep.util.AnimatorControllerWithResistance; import com.android.quickstep.util.LayoutUtils; import com.android.quickstep.views.RecentsView; Loading Loading @@ -136,9 +136,10 @@ public final class LauncherActivityInterface extends } @Override public ActivityInitListener createActivityInitListener(Predicate<Boolean> onInitListener) { return new LauncherInitListener((activity, alreadyOnHome) -> onInitListener.test(alreadyOnHome)); public ActivityLifecycleListener createActivityLifecycleListener( @Nullable Predicate<Boolean> onInitListener, @Nullable Runnable onDestroyListener) { return new LauncherLifecycleListener((activity, alreadyOnHome) -> onInitListener.test(alreadyOnHome), onDestroyListener); } @Override Loading Loading
quickstep/src/com/android/launcher3/LauncherInitListener.java→quickstep/src/com/android/launcher3/LauncherLifecycleListener.java +14 −7 Original line number Diff line number Diff line /* * Copyright (C) 2018 The Android Open Source Project * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. Loading @@ -16,19 +16,23 @@ package com.android.launcher3; import android.animation.AnimatorSet; import android.annotation.Nullable; import android.annotation.TargetApi; import android.os.Build; import android.os.CancellationSignal; import android.view.RemoteAnimationTarget; import com.android.launcher3.uioverrides.QuickstepLauncher; import com.android.quickstep.util.ActivityInitListener; import com.android.quickstep.util.ActivityLifecycleListener; import com.android.quickstep.util.RemoteAnimationProvider; import java.util.function.BiPredicate; /** * {@link ActivityLifecycleListener} for the in-launcher recents. */ @TargetApi(Build.VERSION_CODES.P) public class LauncherInitListener extends ActivityInitListener<Launcher> { public class LauncherLifecycleListener extends ActivityLifecycleListener<Launcher> { private RemoteAnimationProvider mRemoteAnimationProvider; Loading @@ -36,13 +40,16 @@ public class LauncherInitListener extends ActivityInitListener<Launcher> { * @param onInitListener a callback made when the activity is initialized. The callback should * return true to continue receiving callbacks (ie. for if the activity is * recreated). * @param onDestroyListener a callback made when the activity is destroyed. */ public LauncherInitListener(BiPredicate<Launcher, Boolean> onInitListener) { super(onInitListener, Launcher.ACTIVITY_TRACKER); public LauncherLifecycleListener( @Nullable BiPredicate<Launcher, Boolean> onInitListener, @Nullable Runnable onDestroyListener) { super(onInitListener, onDestroyListener, Launcher.ACTIVITY_TRACKER); } @Override public boolean handleInit(Launcher launcher, boolean alreadyOnHome) { public boolean handleActivityReady(Launcher launcher, boolean alreadyOnHome) { if (mRemoteAnimationProvider != null) { QuickstepTransitionManager appTransitionManager = ((QuickstepLauncher) launcher).getAppTransitionManager(); Loading @@ -68,7 +75,7 @@ public class LauncherInitListener extends ActivityInitListener<Launcher> { }, cancellationSignal); } launcher.deferOverlayCallbacksUntilNextResumeOrStop(); return super.handleInit(launcher, alreadyOnHome); return super.handleActivityReady(launcher, alreadyOnHome); } @Override Loading
quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +10 −3 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ import static com.android.quickstep.GestureState.STATE_RECENTS_SCROLLING_FINISHE import static com.android.quickstep.MultiStateCallback.DEBUG_STATES; import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.CANCEL_RECENTS_ANIMATION; import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.EXPECTING_TASK_APPEARED; import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.LAUNCHER_DESTROYED; import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.ON_SETTLED_ON_END_TARGET; import static com.android.quickstep.util.VibratorWrapper.OVERVIEW_HAPTIC; import static com.android.quickstep.views.RecentsView.UPDATE_SYSUI_FLAGS_THRESHOLD; Loading Loading @@ -113,7 +114,7 @@ import com.android.quickstep.GestureState.GestureEndTarget; import com.android.quickstep.RemoteTargetGluer.RemoteTargetHandle; import com.android.quickstep.util.ActiveGestureErrorDetector; import com.android.quickstep.util.ActiveGestureLog; import com.android.quickstep.util.ActivityInitListener; import com.android.quickstep.util.ActivityLifecycleListener; import com.android.quickstep.util.AnimatorControllerWithResistance; import com.android.quickstep.util.InputConsumerProxy; import com.android.quickstep.util.InputProxyHandlerFactory; Loading Loading @@ -159,7 +160,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, protected final BaseActivityInterface<S, T> mActivityInterface; protected final InputConsumerProxy mInputConsumerProxy; protected final ActivityInitListener mActivityInitListener; protected final ActivityLifecycleListener mActivityInitListener; // Callbacks to be made once the recents animation starts private final ArrayList<Runnable> mRecentsAnimationStartCallbacks = new ArrayList<>(); private final OnScrollChangedListener mOnRecentsScrollListener = this::onRecentsViewScroll; Loading Loading @@ -329,7 +330,8 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, InputConsumerController inputConsumer) { super(context, deviceState, gestureState); mActivityInterface = gestureState.getActivityInterface(); mActivityInitListener = mActivityInterface.createActivityInitListener(this::onActivityInit); mActivityInitListener = mActivityInterface.createActivityLifecycleListener( this::onActivityInit, this::onActivityDestroy); mInputConsumerProxy = new InputConsumerProxy(context, /* rotationSupplier = */ () -> { if (mRecentsView == null) { Loading Loading @@ -520,6 +522,11 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, return true; } private void onActivityDestroy() { ActiveGestureLog.INSTANCE.addLog("Launcher activity destroyed", LAUNCHER_DESTROYED); onGestureCancelled(); } /** * Return true if the window should be translated horizontally if the recents view scrolls */ Loading
quickstep/src/com/android/quickstep/BaseActivityInterface.java +12 −3 Original line number Diff line number Diff line Loading @@ -60,7 +60,7 @@ import com.android.launcher3.touch.PagedOrientationHandler; import com.android.launcher3.util.DisplayController; import com.android.launcher3.util.NavigationMode; import com.android.launcher3.views.ScrimView; import com.android.quickstep.util.ActivityInitListener; import com.android.quickstep.util.ActivityLifecycleListener; import com.android.quickstep.util.AnimatorControllerWithResistance; import com.android.quickstep.views.RecentsView; import com.android.systemui.shared.recents.model.ThumbnailData; Loading Loading @@ -123,8 +123,17 @@ public abstract class BaseActivityInterface<STATE_TYPE extends BaseState<STATE_T public abstract AnimationFactory prepareRecentsUI(RecentsAnimationDeviceState deviceState, boolean activityVisible, Consumer<AnimatorControllerWithResistance> callback); public abstract ActivityInitListener createActivityInitListener( Predicate<Boolean> onInitListener); /** * Creates a activity listener for activity initialized and/or destroyed. One or both of these * listeners must be provided. * * @param onInitListener a callback made when the activity is initialized. The callback should * return true to continue receiving callbacks (ie. for if the activity is * recreated). * @param onDestroyListener a callback made when the activity is destroyed. */ public abstract ActivityLifecycleListener createActivityLifecycleListener( @Nullable Predicate<Boolean> onInitListener, @Nullable Runnable onDestroyListener); /** * Sets a callback to be run when an activity launch happens while launcher is not yet resumed. Loading
quickstep/src/com/android/quickstep/FallbackActivityInterface.java +7 −5 Original line number Diff line number Diff line Loading @@ -36,7 +36,7 @@ import com.android.launcher3.touch.PagedOrientationHandler; import com.android.launcher3.util.DisplayController; import com.android.quickstep.GestureState.GestureEndTarget; import com.android.quickstep.fallback.RecentsState; import com.android.quickstep.util.ActivityInitListener; import com.android.quickstep.util.ActivityLifecycleListener; import com.android.quickstep.util.AnimatorControllerWithResistance; import com.android.quickstep.views.RecentsView; Loading Loading @@ -88,10 +88,12 @@ public final class FallbackActivityInterface extends } @Override public ActivityInitListener createActivityInitListener( Predicate<Boolean> onInitListener) { return new ActivityInitListener<>((activity, alreadyOnHome) -> onInitListener.test(alreadyOnHome), RecentsActivity.ACTIVITY_TRACKER); public ActivityLifecycleListener createActivityLifecycleListener( @Nullable Predicate<Boolean> onInitListener, @Nullable Runnable onDestroyListener) { return new ActivityLifecycleListener<>( (activity, alreadyOnHome) -> onInitListener.test(alreadyOnHome), onDestroyListener, RecentsActivity.ACTIVITY_TRACKER); } @Nullable Loading
quickstep/src/com/android/quickstep/LauncherActivityInterface.java +6 −5 Original line number Diff line number Diff line Loading @@ -37,7 +37,7 @@ import androidx.annotation.UiThread; import com.android.launcher3.DeviceProfile; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherAnimUtils; import com.android.launcher3.LauncherInitListener; import com.android.launcher3.LauncherLifecycleListener; import com.android.launcher3.LauncherState; import com.android.launcher3.anim.PendingAnimation; import com.android.launcher3.statehandlers.DepthController; Loading @@ -49,7 +49,7 @@ import com.android.launcher3.uioverrides.QuickstepLauncher; import com.android.launcher3.util.DisplayController; import com.android.launcher3.util.NavigationMode; import com.android.quickstep.GestureState.GestureEndTarget; import com.android.quickstep.util.ActivityInitListener; import com.android.quickstep.util.ActivityLifecycleListener; import com.android.quickstep.util.AnimatorControllerWithResistance; import com.android.quickstep.util.LayoutUtils; import com.android.quickstep.views.RecentsView; Loading Loading @@ -136,9 +136,10 @@ public final class LauncherActivityInterface extends } @Override public ActivityInitListener createActivityInitListener(Predicate<Boolean> onInitListener) { return new LauncherInitListener((activity, alreadyOnHome) -> onInitListener.test(alreadyOnHome)); public ActivityLifecycleListener createActivityLifecycleListener( @Nullable Predicate<Boolean> onInitListener, @Nullable Runnable onDestroyListener) { return new LauncherLifecycleListener((activity, alreadyOnHome) -> onInitListener.test(alreadyOnHome), onDestroyListener); } @Override Loading