diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java index 0320f50ce0..dc1c6a6600 100644 --- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java @@ -1002,7 +1002,7 @@ public abstract class AbsSwipeUpHandler, ActiveGestureLog.INSTANCE.addLog( /* event= */ "cancelRecentsAnimation", /* gestureEvent= */ CANCEL_RECENTS_ANIMATION); - mActivityInitListener.unregister(); + mActivityInitListener.unregister("AbsSwipeUpHandler.onRecentsAnimationCanceled"); // Cache the recents animation controller so we can defer its cleanup to after having // properly cleaned up the screenshot without accidentally using it. mDeferredCleanupRecentsAnimationController = mRecentsAnimationController; @@ -1964,7 +1964,7 @@ public abstract class AbsSwipeUpHandler, // Cleanup when switching handlers mInputConsumerProxy.unregisterOnTouchDownCallback(); - mActivityInitListener.unregister(); + mActivityInitListener.unregister("AbsSwipeUpHandler.cancelCurrentAnimation"); TaskStackChangeListeners.getInstance().unregisterTaskStackListener( mActivityRestartListener); mTaskSnapshotCache.clear(); @@ -1982,7 +1982,7 @@ public abstract class AbsSwipeUpHandler, mGestureEndCallback.run(); } - mActivityInitListener.unregister(); + mActivityInitListener.unregister("AbsSwipeUpHandler.invalidateHandler"); TaskStackChangeListeners.getInstance().unregisterTaskStackListener( mActivityRestartListener); mTaskSnapshotCache.clear(); @@ -2486,11 +2486,11 @@ public abstract class AbsSwipeUpHandler, /** * Registers a callback to run when the activity is ready. */ - public void initWhenReady() { + public void initWhenReady(String reasonString) { // Preload the plan RecentsModel.INSTANCE.get(mContext).getTasks(null); - mActivityInitListener.register(); + mActivityInitListener.register(reasonString); } private boolean shouldFadeOutTargetsForKeyboardQuickSwitch( diff --git a/quickstep/src/com/android/quickstep/OverviewCommandHelper.java b/quickstep/src/com/android/quickstep/OverviewCommandHelper.java index 56c9a00016..0db50bfe2d 100644 --- a/quickstep/src/com/android/quickstep/OverviewCommandHelper.java +++ b/quickstep/src/com/android/quickstep/OverviewCommandHelper.java @@ -310,7 +310,7 @@ public class OverviewCommandHelper { .newHandler(gestureState, cmd.createTime); interactionHandler.setGestureEndCallback( () -> onTransitionComplete(cmd, interactionHandler)); - interactionHandler.initWhenReady(); + interactionHandler.initWhenReady("OverviewCommandHelper: cmd.type=" + cmd.type); RecentsAnimationListener recentAnimListener = new RecentsAnimationListener() { @Override diff --git a/quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java b/quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java index 0f8cebae77..fbbfc16881 100644 --- a/quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java +++ b/quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java @@ -394,7 +394,8 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC mInteractionHandler = mHandlerFactory.newHandler(mGestureState, touchTimeMs); mInteractionHandler.setGestureEndCallback(this::onInteractionGestureFinished); mMotionPauseDetector.setOnMotionPauseListener(mInteractionHandler.getMotionPauseListener()); - mInteractionHandler.initWhenReady(); + mInteractionHandler.initWhenReady( + "OtherActivityInputConsumer.startTouchTrackingForWindowAnimation"); if (mTaskAnimationManager.isRecentsAnimationRunning()) { mActiveCallbacks = mTaskAnimationManager.continueRecentsAnimation(mGestureState); diff --git a/quickstep/src/com/android/quickstep/util/ActivityInitListener.java b/quickstep/src/com/android/quickstep/util/ActivityInitListener.java index aeec36f63c..5efbb4074a 100644 --- a/quickstep/src/com/android/quickstep/util/ActivityInitListener.java +++ b/quickstep/src/com/android/quickstep/util/ActivityInitListener.java @@ -57,16 +57,16 @@ public class ActivityInitListener implements * Registers the activity-created listener. If the activity is already created, then the * callback provided in the constructor will be called synchronously. */ - public void register() { + public void register(String reasonString) { mIsRegistered = true; - mActivityTracker.registerCallback(this); + mActivityTracker.registerCallback(this, reasonString); } /** * After calling this, we won't {@link #init} even when the activity is ready. */ - public void unregister() { - mActivityTracker.unregisterCallback(this); + public void unregister(String reasonString) { + mActivityTracker.unregisterCallback(this, reasonString); mIsRegistered = false; mOnInitListener = null; } diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index e7d2843b64..269603c6cb 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -2651,6 +2651,7 @@ public class Launcher extends StatefulActivity mModel.dumpState(prefix, fd, writer, args); mOverlayManager.dump(prefix, writer); + ACTIVITY_TRACKER.dump(prefix, writer); } /** diff --git a/src/com/android/launcher3/dragndrop/AddItemActivity.java b/src/com/android/launcher3/dragndrop/AddItemActivity.java index 213c45861c..29aa216a3b 100644 --- a/src/com/android/launcher3/dragndrop/AddItemActivity.java +++ b/src/com/android/launcher3/dragndrop/AddItemActivity.java @@ -258,7 +258,7 @@ public class AddItemActivity extends BaseActivity .addCategory(Intent.CATEGORY_HOME) .setPackage(getPackageName()) .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - Launcher.ACTIVITY_TRACKER.registerCallback(listener); + Launcher.ACTIVITY_TRACKER.registerCallback(listener, "AddItemActivity.onLongClick"); startActivity(homeIntent, ApiWrapper.createFadeOutAnimOptions(this).toBundle()); logCommand(LAUNCHER_ADD_EXTERNAL_ITEM_DRAGGED); mFinishOnPause = true; diff --git a/src/com/android/launcher3/util/ActivityTracker.java b/src/com/android/launcher3/util/ActivityTracker.java index 405d2bbdc6..95a051188a 100644 --- a/src/com/android/launcher3/util/ActivityTracker.java +++ b/src/com/android/launcher3/util/ActivityTracker.java @@ -18,10 +18,13 @@ package com.android.launcher3.util; import static com.android.launcher3.testing.shared.TestProtocol.GET_FROM_RECENTS_FAILURE; import static com.android.launcher3.testing.shared.TestProtocol.testLogD; +import android.util.Log; + import androidx.annotation.Nullable; import com.android.launcher3.BaseActivity; +import java.io.PrintWriter; import java.lang.ref.WeakReference; import java.util.concurrent.CopyOnWriteArrayList; @@ -31,6 +34,8 @@ import java.util.concurrent.CopyOnWriteArrayList; */ public final class ActivityTracker { + private static final String TAG = "ActivityTracker"; + private WeakReference mCurrentActivity = new WeakReference<>(null); private CopyOnWriteArrayList> mCallbacks = new CopyOnWriteArrayList<>(); @@ -57,12 +62,13 @@ public final class ActivityTracker { * * @param callback The callback to call init() on when the activity is ready. */ - public void registerCallback(SchedulerCallback callback) { + public void registerCallback(SchedulerCallback callback, String reasonString) { + Log.d(TAG, "Registering callback: " + callback + ", reason=" + reasonString); T activity = mCurrentActivity.get(); mCallbacks.add(callback); if (activity != null) { if (!callback.init(activity, activity.isStarted())) { - unregisterCallback(callback); + unregisterCallback(callback, "ActivityTracker.registerCallback: Intent handled"); } } } @@ -70,7 +76,8 @@ public final class ActivityTracker { /** * Unregisters a registered callback. */ - public void unregisterCallback(SchedulerCallback callback) { + public void unregisterCallback(SchedulerCallback callback, String reasonString) { + Log.d(TAG, "Unregistering callback: " + callback + ", reason=" + reasonString); mCallbacks.remove(callback); } @@ -87,16 +94,25 @@ public final class ActivityTracker { private boolean handleIntent(T activity, boolean alreadyOnHome) { boolean handled = false; + if (!mCallbacks.isEmpty()) { + Log.d(TAG, "handleIntent: mCallbacks=" + mCallbacks); + } for (SchedulerCallback cb : mCallbacks) { if (!cb.init(activity, alreadyOnHome)) { // Callback doesn't want any more updates - unregisterCallback(cb); + unregisterCallback(cb, "ActivityTracker.handleIntent: Intent handled"); } handled = true; } return handled; } + public void dump(String prefix, PrintWriter writer) { + writer.println(prefix + "ActivityTracker:"); + writer.println(prefix + "\tmCurrentActivity=" + mCurrentActivity.get()); + writer.println(prefix + "\tmCallbacks=" + mCallbacks); + } + public interface SchedulerCallback { /**