diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java index c9cbba1330..1a901f1271 100644 --- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java @@ -55,6 +55,7 @@ import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ValueAnimator; import android.annotation.TargetApi; +import android.app.Activity; import android.app.ActivityManager; import android.content.Context; import android.content.Intent; @@ -96,6 +97,7 @@ import com.android.quickstep.GestureState.GestureEndTarget; import com.android.quickstep.RemoteTargetGluer.RemoteTargetHandle; import com.android.quickstep.util.ActiveGestureLog; import com.android.quickstep.util.ActivityInitListener; +import com.android.launcher3.util.ActivityLifecycleCallbacksAdapter; import com.android.quickstep.util.AnimatorControllerWithResistance; import com.android.quickstep.util.InputConsumerProxy; import com.android.quickstep.util.InputProxyHandlerFactory; @@ -153,6 +155,17 @@ public abstract class AbsSwipeUpHandler, protected MultiStateCallback mStateCallback; protected boolean mCanceled; private boolean mRecentsViewScrollLinked = false; + private final ActivityLifecycleCallbacksAdapter mLifecycleCallbacks = + new ActivityLifecycleCallbacksAdapter() { + @Override + public void onActivityDestroyed(Activity activity) { + if (mActivity != activity) { + return; + } + mRecentsView = null; + mActivity = null; + } + }; private static int getFlagForIndex(int index, String name) { if (DEBUG_STATES) { @@ -416,6 +429,7 @@ public abstract class AbsSwipeUpHandler, setupRecentsViewUi(); linkRecentsViewScroll(); + mActivity.registerActivityLifecycleCallbacks(mLifecycleCallbacks); return true; } @@ -1542,6 +1556,9 @@ public abstract class AbsSwipeUpHandler, private void reset() { mStateCallback.setStateOnUiThread(STATE_HANDLER_INVALIDATED); + if (mActivity != null) { + mActivity.unregisterActivityLifecycleCallbacks(mLifecycleCallbacks); + } } /** diff --git a/src/com/android/launcher3/util/ActivityLifecycleCallbacksAdapter.java b/src/com/android/launcher3/util/ActivityLifecycleCallbacksAdapter.java new file mode 100644 index 0000000000..baa8418242 --- /dev/null +++ b/src/com/android/launcher3/util/ActivityLifecycleCallbacksAdapter.java @@ -0,0 +1,29 @@ +package com.android.launcher3.util; + +import android.app.Activity; +import android.app.Application.ActivityLifecycleCallbacks; +import android.os.Bundle; + +public interface ActivityLifecycleCallbacksAdapter extends ActivityLifecycleCallbacks { + + default void onActivityCreated(Activity activity, Bundle bundle) { + } + + default void onActivityDestroyed(Activity activity) { + } + + default void onActivityPaused(Activity activity) { + } + + default void onActivityResumed(Activity activity) { + } + + default void onActivitySaveInstanceState(Activity activity, Bundle bundle) { + } + + default void onActivityStarted(Activity activity) { + } + + default void onActivityStopped(Activity activity) { + } +}