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:
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user