diff --git a/quickstep/src/com/android/quickstep/RecentsModel.java b/quickstep/src/com/android/quickstep/RecentsModel.java index 7676a70eda..9c2c8b3130 100644 --- a/quickstep/src/com/android/quickstep/RecentsModel.java +++ b/quickstep/src/com/android/quickstep/RecentsModel.java @@ -15,6 +15,8 @@ */ package com.android.quickstep; +import static com.android.quickstep.TaskUtils.checkCurrentOrManagedUserId; + import android.annotation.TargetApi; import android.app.ActivityManager; import android.content.ComponentCallbacks2; @@ -190,7 +192,7 @@ public class RecentsModel extends TaskStackChangeListener { @Override public void onTaskStackChangedBackground() { int userId = UserHandle.myUserId(); - if (!mPreloadTasksInBackground || !checkCurrentUserId(userId, false /* debug */)) { + if (!mPreloadTasksInBackground || !checkCurrentOrManagedUserId(userId, mContext)) { // TODO: Only register this for the current user return; } diff --git a/quickstep/src/com/android/quickstep/TaskUtils.java b/quickstep/src/com/android/quickstep/TaskUtils.java index f9628d7a8d..d7fad439c5 100644 --- a/quickstep/src/com/android/quickstep/TaskUtils.java +++ b/quickstep/src/com/android/quickstep/TaskUtils.java @@ -47,6 +47,8 @@ import com.android.quickstep.views.TaskView; import com.android.systemui.shared.recents.model.Task; import com.android.systemui.shared.system.RemoteAnimationTargetCompat; +import java.util.List; + /** * Contains helpful methods for retrieving data from {@link Task}s. */ @@ -207,4 +209,17 @@ public class TaskUtils { } return false; } + + public static boolean checkCurrentOrManagedUserId(int currentUserId, Context context) { + if (currentUserId == UserHandle.myUserId()) { + return true; + } + List allUsers = UserManagerCompat.getInstance(context).getUserProfiles(); + for (int i = allUsers.size() - 1; i >= 0; i--) { + if (currentUserId == allUsers.get(i).getIdentifier()) { + return true; + } + } + return false; + } } diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 8c3e1a270a..92f8aefff0 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -21,6 +21,7 @@ import static com.android.launcher3.anim.Interpolators.ACCEL; import static com.android.launcher3.anim.Interpolators.ACCEL_2; import static com.android.launcher3.anim.Interpolators.FAST_OUT_SLOW_IN; import static com.android.launcher3.anim.Interpolators.LINEAR; +import static com.android.quickstep.TaskUtils.checkCurrentOrManagedUserId; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; @@ -122,13 +123,19 @@ public abstract class RecentsView extends PagedView impl private final TaskStackChangeListener mTaskStackListener = new TaskStackChangeListener() { @Override public void onTaskSnapshotChanged(int taskId, ThumbnailData snapshot) { + if (!mHandleTaskStackChanges) { + return; + } updateThumbnail(taskId, snapshot); } @Override public void onActivityPinned(String packageName, int userId, int taskId, int stackId) { + if (!mHandleTaskStackChanges) { + return; + } // Check this is for the right user - if (!checkCurrentUserId(userId, false /* debug */)) { + if (!checkCurrentOrManagedUserId(userId, getContext())) { return; } @@ -141,20 +148,24 @@ public abstract class RecentsView extends PagedView impl @Override public void onActivityUnpinned() { + if (!mHandleTaskStackChanges) { + return; + } // TODO: Re-enable layout transitions for addition of the unpinned task reloadIfNeeded(); } @Override public void onTaskRemoved(int taskId) { + if (!mHandleTaskStackChanges) { + return; + } TaskView taskView = getTaskView(taskId); if (taskView != null) { dismissTask(taskView, true /* animate */, false /* removeTask */); } } - }; - private TaskStackChangeListener mTaskStackClearFlagListener = new TaskStackChangeListener() { @Override public void onPinnedStackAnimationStarted() { // Needed for activities that auto-enter PiP, which will not trigger a remote @@ -173,7 +184,7 @@ public abstract class RecentsView extends PagedView impl private boolean mRunningTaskIconScaledDown = false; private boolean mOverviewStateEnabled; - private boolean mTaskStackListenerRegistered; + private boolean mHandleTaskStackChanges; private Runnable mNextPageSwitchRunnable; private boolean mSwipeDownShouldLaunchApp; @@ -260,7 +271,7 @@ public abstract class RecentsView extends PagedView impl super.onAttachedToWindow(); updateTaskStackListenerState(); mActivity.addMultiWindowModeChangedListener(mMultiWindowModeChangedListener); - ActivityManagerWrapper.getInstance().registerTaskStackListener(mTaskStackClearFlagListener); + ActivityManagerWrapper.getInstance().registerTaskStackListener(mTaskStackListener); } @Override @@ -268,8 +279,7 @@ public abstract class RecentsView extends PagedView impl super.onDetachedFromWindow(); updateTaskStackListenerState(); mActivity.removeMultiWindowModeChangedListener(mMultiWindowModeChangedListener); - ActivityManagerWrapper.getInstance().unregisterTaskStackListener( - mTaskStackClearFlagListener); + ActivityManagerWrapper.getInstance().unregisterTaskStackListener(mTaskStackListener); } @Override @@ -433,18 +443,13 @@ public abstract class RecentsView extends PagedView impl } private void updateTaskStackListenerState() { - boolean registerStackListener = mOverviewStateEnabled && isAttachedToWindow() + boolean handleTaskStackChanges = mOverviewStateEnabled && isAttachedToWindow() && getWindowVisibility() == VISIBLE; - if (registerStackListener != mTaskStackListenerRegistered) { - if (registerStackListener) { - ActivityManagerWrapper.getInstance() - .registerTaskStackListener(mTaskStackListener); + if (handleTaskStackChanges != mHandleTaskStackChanges) { + mHandleTaskStackChanges = handleTaskStackChanges; + if (handleTaskStackChanges) { reloadIfNeeded(); - } else { - ActivityManagerWrapper.getInstance() - .unregisterTaskStackListener(mTaskStackListener); } - mTaskStackListenerRegistered = registerStackListener; } }