Skip handling recents toggle if a task is locked.

- When a task is locked, the logic will still try to start the recents
  activity (but will fail since it's a lock mode violation).  Nothing
  resets the state, so the button will stop responding.  Instead, skip
  handling of the button until the user unlocks the task.  Also add a
  final fallback for resetting the waiting state, whenever an app
  transition completes.

Bug: 65059121
Test: Launch app after pinning app, tap the recents button, and then
      un-pin and try to re-enter recents.

Change-Id: I0215957f041241b5a61d7fd5b784410368bbd996
This commit is contained in:
Winson Chung
2017-08-29 14:56:01 -07:00
parent 02584a23b3
commit ee70fbd1f6
2 changed files with 19 additions and 2 deletions

View File

@@ -565,6 +565,13 @@ public class Recents extends SystemUI
mImpl.showPrevAffiliatedTask();
}
@Override
public void appTransitionFinished() {
// Fallback, reset the flag once an app transition ends
EventBus.getDefault().send(new SetWaitingForTransitionStartEvent(
false /* waitingForTransitionStart */));
}
/**
* Updates on configuration change.
*/

View File

@@ -376,6 +376,12 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener
}
public void toggleRecents(int growTarget) {
// Skip preloading if the task is locked
SystemServicesProxy ssp = Recents.getSystemServices();
if (ssp.isScreenPinningActive()) {
return;
}
// Skip this toggle if we are already waiting to trigger recents via alt-tab
if (mFastAltTabTrigger.isDozing()) {
return;
@@ -391,7 +397,6 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener
mTriggeredFromAltTab = false;
try {
SystemServicesProxy ssp = Recents.getSystemServices();
MutableBoolean isHomeStackVisible = new MutableBoolean(true);
long elapsedTime = SystemClock.elapsedRealtime() - mLastToggleTime;
@@ -454,11 +459,16 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener
}
public void preloadRecents() {
// Skip preloading if the task is locked
SystemServicesProxy ssp = Recents.getSystemServices();
if (ssp.isScreenPinningActive()) {
return;
}
// Preload only the raw task list into a new load plan (which will be consumed by the
// RecentsActivity) only if there is a task to animate to. Post this to ensure that we
// don't block the touch feedback on the nav bar button which triggers this.
mHandler.post(() -> {
SystemServicesProxy ssp = Recents.getSystemServices();
MutableBoolean isHomeStackVisible = new MutableBoolean(true);
if (!ssp.isRecentsActivityVisible(isHomeStackVisible)) {
ActivityManager.RunningTaskInfo runningTask = ssp.getRunningTask();