Removing extra binder call on state or visibility change

> fixing a bug where we do not match task events against managed user

Bug: 78585335
Change-Id: I9183e81ea63f8ab51f45d5140301d281234caf2b
This commit is contained in:
Sunny Goyal
2018-05-09 12:09:59 -07:00
parent cf4f8c0c2e
commit 6b4b9b5d71
3 changed files with 39 additions and 17 deletions

View File

@@ -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;
}

View File

@@ -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<UserHandle> allUsers = UserManagerCompat.getInstance(context).getUserProfiles();
for (int i = allUsers.size() - 1; i >= 0; i--) {
if (currentUserId == allUsers.get(i).getIdentifier()) {
return true;
}
}
return false;
}
}

View File

@@ -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<T extends BaseActivity> 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<T extends BaseActivity> 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<T extends BaseActivity> 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<T extends BaseActivity> 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<T extends BaseActivity> 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<T extends BaseActivity> 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;
}
}