diff options
| author | 2021-04-29 10:59:51 +0000 | |
|---|---|---|
| committer | 2021-04-29 10:59:51 +0000 | |
| commit | a8912937201b233a4e1e33f8cd93b7d49d149126 (patch) | |
| tree | 6b608cc1fed687c304e72b34e6ae76f58cfc18bd | |
| parent | e6d4fbb1890507943ffa94dd0b128ed471170121 (diff) | |
| parent | ea95fa9df70fe4e26b9d9179a540300a83b9449d (diff) | |
Merge "Don't attach IME screenshot when performing non-task transition" into sc-dev
3 files changed, 43 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java index 43326df1a143..d5a76199f7b8 100644 --- a/services/core/java/com/android/server/wm/AppTransition.java +++ b/services/core/java/com/android/server/wm/AppTransition.java @@ -1691,7 +1691,11 @@ public class AppTransition implements Dump { static boolean isTaskTransitOld(@TransitionOldType int transit) { return isTaskOpenTransitOld(transit) - || transit == TRANSIT_OLD_TASK_CLOSE + || isTaskCloseTransitOld(transit); + } + + static boolean isTaskCloseTransitOld(@TransitionOldType int transit) { + return transit == TRANSIT_OLD_TASK_CLOSE || transit == TRANSIT_OLD_TASK_TO_BACK; } diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java index bea733b0267e..b1c7e196b70c 100644 --- a/services/core/java/com/android/server/wm/WindowContainer.java +++ b/services/core/java/com/android/server/wm/WindowContainer.java @@ -37,6 +37,7 @@ import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_ORIENTATION; import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_SYNC_ENGINE; import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER; import static com.android.server.wm.AppTransition.MAX_APP_TRANSITION_DURATION; +import static com.android.server.wm.DisplayContent.IME_TARGET_LAYERING; import static com.android.server.wm.IdentifierProto.HASH_CODE; import static com.android.server.wm.IdentifierProto.TITLE; import static com.android.server.wm.IdentifierProto.USER_ID; @@ -2696,7 +2697,14 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< @Nullable ArrayList<WindowContainer> sources) { final Task task = asTask(); if (task != null && !enter && !task.isHomeOrRecentsRootTask()) { - mDisplayContent.showImeScreenshot(); + final InsetsControlTarget imeTarget = mDisplayContent.getImeTarget(IME_TARGET_LAYERING); + final boolean isImeLayeringTarget = imeTarget != null && imeTarget.getWindow() != null + && imeTarget.getWindow().getTask() == task; + // Attach and show the IME screenshot when the task is the IME target and performing + // task closing transition to the next task. + if (isImeLayeringTarget && AppTransition.isTaskCloseTransitOld(transit)) { + mDisplayContent.showImeScreenshot(); + } } final Pair<AnimationAdapter, AnimationAdapter> adapters = getAnimationAdapter(lp, transit, enter, isVoiceInteraction); diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java index e1eef762059e..e09606e3389f 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java @@ -54,6 +54,9 @@ import static android.view.WindowManager.LayoutParams.TYPE_SCREENSHOT; import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR; import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION; import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER; +import static android.view.WindowManager.TRANSIT_CLOSE; +import static android.view.WindowManager.TRANSIT_OLD_TASK_CLOSE; +import static android.view.WindowManager.TRANSIT_OLD_TRANSLUCENT_ACTIVITY_CLOSE; import static android.window.DisplayAreaOrganizer.FEATURE_WINDOWED_MAGNIFICATION; import static com.android.dx.mockito.inline.extended.ExtendedMockito.any; @@ -1909,6 +1912,32 @@ public class DisplayContentTests extends WindowTestsBase { verify(t).show(mDisplayContent.mImeScreenshot); } + @UseTestDisplay(addWindows = {W_INPUT_METHOD}, addAllCommonWindows = true) + @Test + public void testShowImeScreenshot() { + final Task rootTask = createTask(mDisplayContent); + final Task task = createTaskInRootTask(rootTask, 0 /* userId */); + final ActivityRecord activity = createActivityRecord(mDisplayContent, task); + final WindowState win = createWindow(null, TYPE_BASE_APPLICATION, activity, "win"); + task.getDisplayContent().prepareAppTransition(TRANSIT_CLOSE); + doReturn(true).when(task).okToAnimate(); + ArrayList<WindowContainer> sources = new ArrayList<>(); + sources.add(activity); + + mDisplayContent.setImeLayeringTarget(win); + spyOn(mDisplayContent); + + // Expecting the IME screenshot only be attached when performing task closing transition. + task.applyAnimation(null, TRANSIT_OLD_TASK_CLOSE, false /* enter */, + false /* isVoiceInteraction */, sources); + verify(mDisplayContent).showImeScreenshot(); + + clearInvocations(mDisplayContent); + activity.applyAnimation(null, TRANSIT_OLD_TRANSLUCENT_ACTIVITY_CLOSE, false /* enter */, + false /* isVoiceInteraction */, sources); + verify(mDisplayContent, never()).showImeScreenshot(); + } + @Test public void testRotateBounds_keepSamePhysicalPosition() { final DisplayContent dc = |