Loading services/core/java/com/android/server/wm/AppTransition.java +5 −1 Original line number Diff line number Diff line Loading @@ -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; } Loading services/core/java/com/android/server/wm/WindowContainer.java +9 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -2696,8 +2697,15 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< @Nullable ArrayList<WindowContainer> sources) { final Task task = asTask(); if (task != null && !enter && !task.isHomeOrRecentsRootTask()) { 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); AnimationAdapter adapter = adapters.first; Loading services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +29 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 = Loading Loading
services/core/java/com/android/server/wm/AppTransition.java +5 −1 Original line number Diff line number Diff line Loading @@ -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; } Loading
services/core/java/com/android/server/wm/WindowContainer.java +9 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -2696,8 +2697,15 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< @Nullable ArrayList<WindowContainer> sources) { final Task task = asTask(); if (task != null && !enter && !task.isHomeOrRecentsRootTask()) { 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); AnimationAdapter adapter = adapters.first; Loading
services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +29 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 = Loading