diff options
| author | 2022-09-16 22:39:07 +0000 | |
|---|---|---|
| committer | 2022-09-16 22:39:07 +0000 | |
| commit | 488a69bfc46df63c392a30dfefd112e4cb69a1ce (patch) | |
| tree | fd3d35f5e9c33e65736595deed686f97f9e633d8 | |
| parent | b25a29ed883e39142f5cc9cd45bb26fe35b8feae (diff) | |
| parent | e4a9f826067b8c9f0aa2795bdc994566992c9027 (diff) | |
Merge "Show captions on tablets even when display windowing mode is fullscreen." into tm-qpr-dev
3 files changed, 32 insertions, 23 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/fullscreen/FullscreenTaskListener.java b/libs/WindowManager/Shell/src/com/android/wm/shell/fullscreen/FullscreenTaskListener.java index 6ccf976e460c..7d1259a732c9 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/fullscreen/FullscreenTaskListener.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/fullscreen/FullscreenTaskListener.java @@ -16,8 +16,6 @@ package com.android.wm.shell.fullscreen; -import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; - import static com.android.wm.shell.ShellTaskOrganizer.TASK_LISTENER_TYPE_FULLSCREEN; import static com.android.wm.shell.ShellTaskOrganizer.taskListenerTypeToString; @@ -107,13 +105,14 @@ public class FullscreenTaskListener<T extends AutoCloseable> if (Transitions.ENABLE_SHELL_TRANSITIONS) return; updateRecentsForVisibleFullscreenTask(taskInfo); - if (shouldShowWindowDecor(taskInfo) && mWindowDecorViewModelOptional.isPresent()) { + if (mWindowDecorViewModelOptional.isPresent()) { SurfaceControl.Transaction t = new SurfaceControl.Transaction(); state.mWindowDecoration = mWindowDecorViewModelOptional.get().createWindowDecoration(taskInfo, leash, t, t); t.apply(); - } else { + } + if (state.mWindowDecoration == null) { mSyncQueue.runInSync(t -> { // Reset several properties back to fullscreen (PiP, for example, leaves all these // properties in a bad state). @@ -178,13 +177,12 @@ public class FullscreenTaskListener<T extends AutoCloseable> public void createWindowDecoration(TransitionInfo.Change change, SurfaceControl.Transaction startT, SurfaceControl.Transaction finishT) { final State<T> state = createOrUpdateTaskState(change.getTaskInfo(), change.getLeash()); - if (!mWindowDecorViewModelOptional.isPresent() - || !shouldShowWindowDecor(state.mTaskInfo)) { - return; - } - - state.mWindowDecoration = mWindowDecorViewModelOptional.get().createWindowDecoration( + if (!mWindowDecorViewModelOptional.isPresent()) return; + T newWindowDecor = mWindowDecorViewModelOptional.get().createWindowDecoration( state.mTaskInfo, state.mLeash, startT, finishT); + if (newWindowDecor != null) { + state.mWindowDecoration = newWindowDecor; + } } /** @@ -202,8 +200,7 @@ public class FullscreenTaskListener<T extends AutoCloseable> SurfaceControl.Transaction startT, SurfaceControl.Transaction finishT, @Nullable AutoCloseable windowDecor) { - if (!mWindowDecorViewModelOptional.isPresent() - || !shouldShowWindowDecor(change.getTaskInfo())) { + if (!mWindowDecorViewModelOptional.isPresent()) { return false; } final State<T> state = createOrUpdateTaskState(change.getTaskInfo(), change.getLeash()); @@ -214,8 +211,11 @@ public class FullscreenTaskListener<T extends AutoCloseable> state.mTaskInfo, startT, finishT, state.mWindowDecoration); return true; } else { - state.mWindowDecoration = mWindowDecorViewModelOptional.get().createWindowDecoration( + T newWindowDecor = mWindowDecorViewModelOptional.get().createWindowDecoration( state.mTaskInfo, state.mLeash, startT, finishT); + if (newWindowDecor != null) { + state.mWindowDecoration = newWindowDecor; + } return false; } } @@ -336,10 +336,5 @@ public class FullscreenTaskListener<T extends AutoCloseable> return TAG + ":" + taskListenerTypeToString(TASK_LISTENER_TYPE_FULLSCREEN); } - private static boolean shouldShowWindowDecor(RunningTaskInfo taskInfo) { - return taskInfo.getConfiguration().windowConfiguration.getDisplayWindowingMode() - == WINDOWING_MODE_FREEFORM; - } - } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecorViewModel.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecorViewModel.java index 83aa539d24d6..e8a2cb160880 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecorViewModel.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecorViewModel.java @@ -36,6 +36,7 @@ import com.android.wm.shell.R; import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.SyncTransactionQueue; +import com.android.wm.shell.desktopmode.DesktopMode; import com.android.wm.shell.freeform.FreeformTaskTransitionStarter; import com.android.wm.shell.transition.Transitions; @@ -80,6 +81,7 @@ public class CaptionWindowDecorViewModel implements WindowDecorViewModel<Caption SurfaceControl taskSurface, SurfaceControl.Transaction startT, SurfaceControl.Transaction finishT) { + if (!shouldShowWindowDecor(taskInfo)) return null; final CaptionWindowDecoration windowDecoration = new CaptionWindowDecoration( mContext, mDisplayController, @@ -101,9 +103,12 @@ public class CaptionWindowDecorViewModel implements WindowDecorViewModel<Caption @Override public CaptionWindowDecoration adoptWindowDecoration(AutoCloseable windowDecor) { - return (windowDecor instanceof CaptionWindowDecoration) - ? (CaptionWindowDecoration) windowDecor - : null; + if (!(windowDecor instanceof CaptionWindowDecoration)) return null; + final CaptionWindowDecoration captionWindowDecor = (CaptionWindowDecoration) windowDecor; + if (!shouldShowWindowDecor(captionWindowDecor.mTaskInfo)) { + return null; + } + return captionWindowDecor; } @Override @@ -231,4 +236,11 @@ public class CaptionWindowDecorViewModel implements WindowDecorViewModel<Caption } } } + + private boolean shouldShowWindowDecor(RunningTaskInfo taskInfo) { + if (taskInfo.getWindowingMode() == WINDOWING_MODE_FREEFORM) return true; + return DesktopMode.IS_SUPPORTED + && mDisplayController.getDisplayContext(taskInfo.displayId) + .getResources().getConfiguration().smallestScreenWidthDp >= 600; + } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecorViewModel.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecorViewModel.java index c234949572bf..d9697d288ab6 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecorViewModel.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecorViewModel.java @@ -42,6 +42,7 @@ public interface WindowDecorViewModel<T extends AutoCloseable> { /** * Creates a window decoration for the given task. + * Can be {@code null} for Fullscreen tasks but not Freeform ones. * * @param taskInfo the initial task info of the task * @param taskSurface the surface of the task @@ -49,7 +50,7 @@ public interface WindowDecorViewModel<T extends AutoCloseable> { * @param finishT the finish transaction to restore states after the transition * @return the window decoration object */ - T createWindowDecoration( + @Nullable T createWindowDecoration( ActivityManager.RunningTaskInfo taskInfo, SurfaceControl taskSurface, SurfaceControl.Transaction startT, @@ -57,11 +58,12 @@ public interface WindowDecorViewModel<T extends AutoCloseable> { /** * Adopts the window decoration if possible. + * May be {@code null} if a window decor is not needed or the given one is incompatible. * * @param windowDecor the potential window decoration to adopt * @return the window decoration if it can be adopted, or {@code null} otherwise. */ - T adoptWindowDecoration(@Nullable AutoCloseable windowDecor); + @Nullable T adoptWindowDecoration(@Nullable AutoCloseable windowDecor); /** * Notifies a task info update on the given task, with the window decoration created previously |