Merge "Add caption inset when moving to desktop" into udc-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
2eb911d3cb
@@ -164,21 +164,28 @@ class DesktopTasksController(
|
||||
}
|
||||
|
||||
/** Move a task with given `taskId` to desktop */
|
||||
fun moveToDesktop(taskId: Int) {
|
||||
shellTaskOrganizer.getRunningTaskInfo(taskId)?.let { task -> moveToDesktop(task) }
|
||||
fun moveToDesktop(taskId: Int, wct: WindowContainerTransaction = WindowContainerTransaction()) {
|
||||
shellTaskOrganizer.getRunningTaskInfo(taskId)?.let {
|
||||
task -> moveToDesktop(task, wct)
|
||||
}
|
||||
}
|
||||
|
||||
/** Move a task to desktop */
|
||||
fun moveToDesktop(task: RunningTaskInfo) {
|
||||
/**
|
||||
* Move a task to desktop
|
||||
*/
|
||||
fun moveToDesktop(
|
||||
task: RunningTaskInfo,
|
||||
wct: WindowContainerTransaction = WindowContainerTransaction()
|
||||
) {
|
||||
KtProtoLog.v(
|
||||
WM_SHELL_DESKTOP_MODE,
|
||||
"DesktopTasksController: moveToDesktop taskId=%d",
|
||||
task.taskId
|
||||
)
|
||||
val wct = WindowContainerTransaction()
|
||||
// Bring other apps to front first
|
||||
bringDesktopAppsToFront(task.displayId, wct)
|
||||
addMoveToDesktopChanges(wct, task.token)
|
||||
|
||||
if (Transitions.ENABLE_SHELL_TRANSITIONS) {
|
||||
transitions.startTransition(TRANSIT_CHANGE, wct, null /* handler */)
|
||||
} else {
|
||||
|
||||
@@ -113,7 +113,7 @@ public class CaptionWindowDecoration extends WindowDecoration<WindowDecorLinearL
|
||||
mRelayoutParams.reset();
|
||||
mRelayoutParams.mRunningTaskInfo = taskInfo;
|
||||
mRelayoutParams.mLayoutResId = R.layout.caption_window_decor;
|
||||
mRelayoutParams.mCaptionHeightId = R.dimen.freeform_decor_caption_height;
|
||||
mRelayoutParams.mCaptionHeightId = getCaptionHeightId();
|
||||
mRelayoutParams.mShadowRadiusId = shadowRadiusID;
|
||||
mRelayoutParams.mApplyStartTransactionOnDraw = applyStartTransactionOnDraw;
|
||||
|
||||
@@ -221,4 +221,9 @@ public class CaptionWindowDecoration extends WindowDecoration<WindowDecorLinearL
|
||||
closeDragResizeListener();
|
||||
super.close();
|
||||
}
|
||||
|
||||
@Override
|
||||
int getCaptionHeightId() {
|
||||
return R.dimen.freeform_decor_caption_height;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,6 +53,7 @@ import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.window.TransitionInfo;
|
||||
import android.window.WindowContainerToken;
|
||||
import android.window.WindowContainerTransaction;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -323,7 +324,13 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
|
||||
}
|
||||
} else if (id == R.id.desktop_button) {
|
||||
mDesktopModeController.ifPresent(c -> c.setDesktopModeActive(true));
|
||||
mDesktopTasksController.ifPresent(c -> c.moveToDesktop(mTaskId));
|
||||
if (mDesktopTasksController.isPresent()) {
|
||||
final WindowContainerTransaction wct = new WindowContainerTransaction();
|
||||
// App sometimes draws before the insets from WindowDecoration#relayout have
|
||||
// been added, so they must be added here
|
||||
mWindowDecorByTaskId.get(mTaskId).addCaptionInset(wct);
|
||||
mDesktopTasksController.get().moveToDesktop(mTaskId, wct);
|
||||
}
|
||||
decoration.closeHandleMenu();
|
||||
} else if (id == R.id.fullscreen_button) {
|
||||
mDesktopModeController.ifPresent(c -> c.setDesktopModeActive(false));
|
||||
|
||||
@@ -178,7 +178,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
|
||||
mRelayoutParams.reset();
|
||||
mRelayoutParams.mRunningTaskInfo = taskInfo;
|
||||
mRelayoutParams.mLayoutResId = windowDecorLayoutId;
|
||||
mRelayoutParams.mCaptionHeightId = R.dimen.freeform_decor_caption_height;
|
||||
mRelayoutParams.mCaptionHeightId = getCaptionHeightId();
|
||||
mRelayoutParams.mShadowRadiusId = shadowRadiusID;
|
||||
mRelayoutParams.mApplyStartTransactionOnDraw = applyStartTransactionOnDraw;
|
||||
|
||||
@@ -479,6 +479,11 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
int getCaptionHeightId() {
|
||||
return R.dimen.freeform_decor_caption_height;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add transition to mTransitionsPausingRelayout
|
||||
*/
|
||||
|
||||
@@ -304,6 +304,10 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
|
||||
}
|
||||
}
|
||||
|
||||
int getCaptionHeightId() {
|
||||
return Resources.ID_NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtains the {@link Display} instance for the display ID in {@link #mTaskInfo} if it exists or
|
||||
* registers {@link #mOnDisplaysChangedListener} if it doesn't.
|
||||
@@ -418,6 +422,21 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
|
||||
mSurfaceControlTransactionSupplier);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds caption inset source to a WCT
|
||||
*/
|
||||
public void addCaptionInset(WindowContainerTransaction wct) {
|
||||
final int captionHeightId = getCaptionHeightId();
|
||||
if (!ViewRootImpl.CAPTION_ON_SHELL || captionHeightId == Resources.ID_NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
final int captionHeight = loadDimensionPixelSize(mContext.getResources(), captionHeightId);
|
||||
final Rect captionInsets = new Rect(0, 0, 0, captionHeight);
|
||||
wct.addInsetsSource(mTaskInfo.token, mOwner, 0 /* index */, WindowInsets.Type.captionBar(),
|
||||
captionInsets);
|
||||
}
|
||||
|
||||
static class RelayoutParams {
|
||||
RunningTaskInfo mRunningTaskInfo;
|
||||
int mLayoutResId;
|
||||
|
||||
Reference in New Issue
Block a user