Merge "Show captions on tablets even when display windowing mode is fullscreen." into tm-qpr-dev am: 488a69bfc4

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19817715

Change-Id: Ib000a4eb7a4d1fdf0f154aa8ae4c2d3518cb8784
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Matt Sziklay
2022-09-16 23:07:12 +00:00
committed by Automerger Merge Worker
3 changed files with 32 additions and 23 deletions

View File

@@ -16,8 +16,6 @@
package com.android.wm.shell.fullscreen; 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.TASK_LISTENER_TYPE_FULLSCREEN;
import static com.android.wm.shell.ShellTaskOrganizer.taskListenerTypeToString; import static com.android.wm.shell.ShellTaskOrganizer.taskListenerTypeToString;
@@ -107,13 +105,14 @@ public class FullscreenTaskListener<T extends AutoCloseable>
if (Transitions.ENABLE_SHELL_TRANSITIONS) return; if (Transitions.ENABLE_SHELL_TRANSITIONS) return;
updateRecentsForVisibleFullscreenTask(taskInfo); updateRecentsForVisibleFullscreenTask(taskInfo);
if (shouldShowWindowDecor(taskInfo) && mWindowDecorViewModelOptional.isPresent()) { if (mWindowDecorViewModelOptional.isPresent()) {
SurfaceControl.Transaction t = new SurfaceControl.Transaction(); SurfaceControl.Transaction t = new SurfaceControl.Transaction();
state.mWindowDecoration = state.mWindowDecoration =
mWindowDecorViewModelOptional.get().createWindowDecoration(taskInfo, mWindowDecorViewModelOptional.get().createWindowDecoration(taskInfo,
leash, t, t); leash, t, t);
t.apply(); t.apply();
} else { }
if (state.mWindowDecoration == null) {
mSyncQueue.runInSync(t -> { mSyncQueue.runInSync(t -> {
// Reset several properties back to fullscreen (PiP, for example, leaves all these // Reset several properties back to fullscreen (PiP, for example, leaves all these
// properties in a bad state). // properties in a bad state).
@@ -178,13 +177,12 @@ public class FullscreenTaskListener<T extends AutoCloseable>
public void createWindowDecoration(TransitionInfo.Change change, public void createWindowDecoration(TransitionInfo.Change change,
SurfaceControl.Transaction startT, SurfaceControl.Transaction finishT) { SurfaceControl.Transaction startT, SurfaceControl.Transaction finishT) {
final State<T> state = createOrUpdateTaskState(change.getTaskInfo(), change.getLeash()); final State<T> state = createOrUpdateTaskState(change.getTaskInfo(), change.getLeash());
if (!mWindowDecorViewModelOptional.isPresent() if (!mWindowDecorViewModelOptional.isPresent()) return;
|| !shouldShowWindowDecor(state.mTaskInfo)) { T newWindowDecor = mWindowDecorViewModelOptional.get().createWindowDecoration(
return;
}
state.mWindowDecoration = mWindowDecorViewModelOptional.get().createWindowDecoration(
state.mTaskInfo, state.mLeash, startT, finishT); 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 startT,
SurfaceControl.Transaction finishT, SurfaceControl.Transaction finishT,
@Nullable AutoCloseable windowDecor) { @Nullable AutoCloseable windowDecor) {
if (!mWindowDecorViewModelOptional.isPresent() if (!mWindowDecorViewModelOptional.isPresent()) {
|| !shouldShowWindowDecor(change.getTaskInfo())) {
return false; return false;
} }
final State<T> state = createOrUpdateTaskState(change.getTaskInfo(), change.getLeash()); 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); state.mTaskInfo, startT, finishT, state.mWindowDecoration);
return true; return true;
} else { } else {
state.mWindowDecoration = mWindowDecorViewModelOptional.get().createWindowDecoration( T newWindowDecor = mWindowDecorViewModelOptional.get().createWindowDecoration(
state.mTaskInfo, state.mLeash, startT, finishT); state.mTaskInfo, state.mLeash, startT, finishT);
if (newWindowDecor != null) {
state.mWindowDecoration = newWindowDecor;
}
return false; return false;
} }
} }
@@ -336,10 +336,5 @@ public class FullscreenTaskListener<T extends AutoCloseable>
return TAG + ":" + taskListenerTypeToString(TASK_LISTENER_TYPE_FULLSCREEN); return TAG + ":" + taskListenerTypeToString(TASK_LISTENER_TYPE_FULLSCREEN);
} }
private static boolean shouldShowWindowDecor(RunningTaskInfo taskInfo) {
return taskInfo.getConfiguration().windowConfiguration.getDisplayWindowingMode()
== WINDOWING_MODE_FREEFORM;
}
} }

View File

@@ -36,6 +36,7 @@ import com.android.wm.shell.R;
import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.SyncTransactionQueue; 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.freeform.FreeformTaskTransitionStarter;
import com.android.wm.shell.transition.Transitions; import com.android.wm.shell.transition.Transitions;
@@ -80,6 +81,7 @@ public class CaptionWindowDecorViewModel implements WindowDecorViewModel<Caption
SurfaceControl taskSurface, SurfaceControl taskSurface,
SurfaceControl.Transaction startT, SurfaceControl.Transaction startT,
SurfaceControl.Transaction finishT) { SurfaceControl.Transaction finishT) {
if (!shouldShowWindowDecor(taskInfo)) return null;
final CaptionWindowDecoration windowDecoration = new CaptionWindowDecoration( final CaptionWindowDecoration windowDecoration = new CaptionWindowDecoration(
mContext, mContext,
mDisplayController, mDisplayController,
@@ -101,9 +103,12 @@ public class CaptionWindowDecorViewModel implements WindowDecorViewModel<Caption
@Override @Override
public CaptionWindowDecoration adoptWindowDecoration(AutoCloseable windowDecor) { public CaptionWindowDecoration adoptWindowDecoration(AutoCloseable windowDecor) {
return (windowDecor instanceof CaptionWindowDecoration) if (!(windowDecor instanceof CaptionWindowDecoration)) return null;
? (CaptionWindowDecoration) windowDecor final CaptionWindowDecoration captionWindowDecor = (CaptionWindowDecoration) windowDecor;
: null; if (!shouldShowWindowDecor(captionWindowDecor.mTaskInfo)) {
return null;
}
return captionWindowDecor;
} }
@Override @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;
}
} }

View File

@@ -42,6 +42,7 @@ public interface WindowDecorViewModel<T extends AutoCloseable> {
/** /**
* Creates a window decoration for the given task. * 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 taskInfo the initial task info of the task
* @param taskSurface the surface 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 * @param finishT the finish transaction to restore states after the transition
* @return the window decoration object * @return the window decoration object
*/ */
T createWindowDecoration( @Nullable T createWindowDecoration(
ActivityManager.RunningTaskInfo taskInfo, ActivityManager.RunningTaskInfo taskInfo,
SurfaceControl taskSurface, SurfaceControl taskSurface,
SurfaceControl.Transaction startT, SurfaceControl.Transaction startT,
@@ -57,11 +58,12 @@ public interface WindowDecorViewModel<T extends AutoCloseable> {
/** /**
* Adopts the window decoration if possible. * 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 * @param windowDecor the potential window decoration to adopt
* @return the window decoration if it can be adopted, or {@code null} otherwise. * @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 * Notifies a task info update on the given task, with the window decoration created previously