RESTRICT AUTOMERGE: Fix snapshot starting window stuck if the task never gain focus

The tasksnapshot starting window could stuck on task if the task never
gain focus, this could happen when launch multiple tasks to front, e.g.
split screen, or add snapshot starting window to a pip task.

As using task focus to judge the task snapshot removal may error-prone.
(i.e. unexpected window focus in/lost, non-focusable task window..)

To ensure the tasksnapshot removal works stable in this stage, extanding
MAX_DELAY_REMOVAL_TIME_IME_VISIBLE timeout from 450ms to 600ms
(Includes the worst time perviod from tasksnapshot drawn to the task window
focused around 150ms) would be safer and keeps the behavior of original
fixed Bug 192065018.

Bug: 201264769
Test: atest ActivityRecordTests
Test: manual launch apps from Recents.
Test: enter pip, power on/off, verify starting window is removed.
Test: manual enter split screen, verify starting window is removed.
Merged-In: Ieb5a5e781f5da4228cfc493031b4ad17f2d31a77
Change-Id: Ieb5a5e781f5da4228cfc493031b4ad17f2d31a77
This commit is contained in:
Ming-Shin Lu 2021-09-29 19:05:14 +08:00
parent 6e3c154990
commit a4f760bee7
3 changed files with 2 additions and 17 deletions

View File

@ -123,7 +123,7 @@ public class TaskSnapshotWindow {
* Ideally the delay time will be shorter when receiving
* {@link StartingSurfaceDrawer#onImeDrawnOnTask(int)}.
*/
private static final long MAX_DELAY_REMOVAL_TIME_IME_VISIBLE = 450;
private static final long MAX_DELAY_REMOVAL_TIME_IME_VISIBLE = 600;
//tmp vars for unused relayout params
private static final Point TMP_SURFACE_SIZE = new Point();

View File

@ -2253,17 +2253,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
}
}
void removeStartingWindowIfNeeded() {
// Removing the task snapshot after the task is actually focused (see
// Task#onWindowFocusChanged). Since some of the app contents may draw in this time and
// requires more times to draw finish, in case flicking may happen when removing the task
// snapshot too early. (i.e. Showing IME.)
if ((mStartingData instanceof SnapshotStartingData) && !getTask().isFocused()) {
return;
}
removeStartingWindow();
}
void removeStartingWindow() {
removeStartingWindowAnimation(true /* prepareAnimation */);
}
@ -5835,7 +5824,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
// own stuff.
win.cancelAnimation();
}
removeStartingWindowIfNeeded();
removeStartingWindow();
updateReportedVisibilityLocked();
}

View File

@ -5206,10 +5206,6 @@ class Task extends WindowContainer<WindowContainer> {
* @param hasFocus
*/
void onWindowFocusChanged(boolean hasFocus) {
final ActivityRecord topAct = getTopVisibleActivity();
if (topAct != null && (topAct.mStartingData instanceof SnapshotStartingData)) {
topAct.removeStartingWindowIfNeeded();
}
updateShadowsRadius(hasFocus, getSyncTransaction());
// TODO(b/180525887): Un-comment once there is resolution on the bug.
// dispatchTaskInfoChangedIfNeeded(false /* force */);