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:
@@ -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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user