Show correct icon for maximize button
Should show restore icon when task is in freeform immersive or when task
is maximized.
Bug: 380437450
Flag: EXEMPT bugfix
Test: Maximize and enter immersive, checking icon
Change-Id: I156a4f9e63c97c2761c7c5d0bf260a29f7e3b032
diff --git a/libs/WindowManager/Shell/res/drawable/decor_desktop_mode_immersive_button_dark.xml b/libs/WindowManager/Shell/res/drawable/decor_desktop_mode_immersive_button_dark.xml
deleted file mode 100644
index f3800e0..0000000
--- a/libs/WindowManager/Shell/res/drawable/decor_desktop_mode_immersive_button_dark.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ Copyright (C) 2024 The Android Open Source Project
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:height="24dp"
- android:width="24dp"
- android:viewportWidth="24"
- android:viewportHeight="24">
- <path
- android:fillColor="#000000"
- android:pathData="M5,5H10V7H7V10H5V5M14,5H19V10H17V7H14V5M17,14H19V19H14V17H17V14M10,17V19H5V14H7V17H10Z"/>
-</vector>
diff --git a/libs/WindowManager/Shell/res/drawable/decor_desktop_mode_immersive_exit_button_dark.xml b/libs/WindowManager/Shell/res/drawable/decor_desktop_mode_immersive_exit_button_dark.xml
deleted file mode 100644
index 5260450..0000000
--- a/libs/WindowManager/Shell/res/drawable/decor_desktop_mode_immersive_exit_button_dark.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ Copyright (C) 2024 The Android Open Source Project
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="960"
- android:viewportHeight="960"
- android:tint="?attr/colorControlNormal">
- <path
- android:fillColor="@android:color/white"
- android:pathData="M240,840L240,720L120,720L120,640L320,640L320,840L240,840ZM640,840L640,640L840,640L840,720L720,720L720,840L640,840ZM120,320L120,240L240,240L240,120L320,120L320,320L120,320ZM640,320L640,120L720,120L720,240L840,240L840,320L640,320Z"/>
-</vector>
diff --git a/libs/WindowManager/Shell/res/drawable/decor_desktop_mode_immersive_or_maximize_exit_button_dark.xml b/libs/WindowManager/Shell/res/drawable/decor_desktop_mode_immersive_or_maximize_exit_button_dark.xml
new file mode 100644
index 0000000..b6289e2
--- /dev/null
+++ b/libs/WindowManager/Shell/res/drawable/decor_desktop_mode_immersive_or_maximize_exit_button_dark.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2024 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="960"
+ android:viewportHeight="960"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/black"
+ android:pathData="M520,560L600,560L600,560ZM320,720Q287,720 263.5,696.5Q240,673 240,640L240,160Q240,127 263.5,103.5Q287,80 320,80L800,80Q833,80 856.5,103.5Q880,127 880,160L880,640Q880,673 856.5,696.5Q833,720 800,720L320,720ZM320,640L800,640Q800,640 800,640Q800,640 800,640L800,160Q800,160 800,160Q800,160 800,160L320,160Q320,160 320,160Q320,160 320,160L320,640Q320,640 320,640Q320,640 320,640ZM160,880Q127,880 103.5,856.5Q80,833 80,800L80,240L160,240L160,800Q160,800 160,800Q160,800 160,800L720,800L720,880L160,880ZM320,160L320,160Q320,160 320,160Q320,160 320,160L320,640Q320,640 320,640Q320,640 320,640L320,640Q320,640 320,640Q320,640 320,640L320,160Q320,160 320,160Q320,160 320,160Z"/>
+</vector>
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java
index 1263176..f6345cb 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java
@@ -98,6 +98,7 @@
import com.android.wm.shell.common.SyncTransactionQueue;
import com.android.wm.shell.desktopmode.CaptionState;
import com.android.wm.shell.desktopmode.DesktopModeEventLogger;
+import com.android.wm.shell.desktopmode.DesktopModeUtils;
import com.android.wm.shell.desktopmode.DesktopUserRepositories;
import com.android.wm.shell.desktopmode.WindowDecorCaptionHandleRepository;
import com.android.wm.shell.shared.annotations.ShellBackgroundThread;
@@ -517,7 +518,7 @@
} else {
mWindowDecorViewHolder.bindData(new AppHeaderViewHolder.HeaderData(
mTaskInfo,
- TaskInfoKt.getRequestingImmersive(mTaskInfo),
+ DesktopModeUtils.isTaskMaximized(mTaskInfo, mDisplayController),
inFullImmersive,
hasGlobalFocus,
/* maximizeHoverEnabled= */ canOpenMaximizeMenu(
@@ -1700,7 +1701,7 @@
.isTaskInFullImmersiveState(mTaskInfo.taskId);
asAppHeader(mWindowDecorViewHolder).bindData(new AppHeaderViewHolder.HeaderData(
mTaskInfo,
- TaskInfoKt.getRequestingImmersive(mTaskInfo),
+ DesktopModeUtils.isTaskMaximized(mTaskInfo, mDisplayController),
inFullImmersive,
isFocused(),
/* maximizeHoverEnabled= */ canOpenMaximizeMenu(animatingTaskResizeOrReposition)));
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/viewholder/AppHeaderViewHolder.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/viewholder/AppHeaderViewHolder.kt
index d943918..c9b9002 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/viewholder/AppHeaderViewHolder.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/viewholder/AppHeaderViewHolder.kt
@@ -79,7 +79,7 @@
data class HeaderData(
val taskInfo: RunningTaskInfo,
- val isRequestingImmersive: Boolean,
+ val isTaskMaximized: Boolean,
val inFullImmersiveState: Boolean,
val hasGlobalFocus: Boolean,
val enableMaximizeLongClick: Boolean,
@@ -163,7 +163,7 @@
override fun bindData(data: HeaderData) {
bindData(
data.taskInfo,
- data.isRequestingImmersive,
+ data.isTaskMaximized,
data.inFullImmersiveState,
data.hasGlobalFocus,
data.enableMaximizeLongClick
@@ -172,7 +172,7 @@
private fun bindData(
taskInfo: RunningTaskInfo,
- isRequestingImmersive: Boolean,
+ isTaskMaximized: Boolean,
inFullImmersiveState: Boolean,
hasGlobalFocus: Boolean,
enableMaximizeLongClick: Boolean,
@@ -180,7 +180,7 @@
if (DesktopModeFlags.ENABLE_THEMED_APP_HEADERS.isTrue()) {
bindDataWithThemedHeaders(
taskInfo,
- isRequestingImmersive,
+ isTaskMaximized,
inFullImmersiveState,
hasGlobalFocus,
enableMaximizeLongClick,
@@ -225,7 +225,7 @@
private fun bindDataWithThemedHeaders(
taskInfo: RunningTaskInfo,
- requestingImmersive: Boolean,
+ isTaskMaximized: Boolean,
inFullImmersiveState: Boolean,
hasGlobalFocus: Boolean,
enableMaximizeLongClick: Boolean,
@@ -283,7 +283,7 @@
drawableInsets = maximizeDrawableInsets
)
)
- setIcon(getMaximizeButtonIcon(requestingImmersive, inFullImmersiveState))
+ setIcon(getMaximizeButtonIcon(isTaskMaximized, inFullImmersiveState))
}
// Close button.
closeWindowButton.apply {
@@ -358,34 +358,19 @@
@DrawableRes
private fun getMaximizeButtonIcon(
- requestingImmersive: Boolean,
+ isTaskMaximized: Boolean,
inFullImmersiveState: Boolean
): Int = when {
- shouldShowEnterFullImmersiveIcon(requestingImmersive, inFullImmersiveState) -> {
- R.drawable.decor_desktop_mode_immersive_button_dark
- }
- shouldShowExitFullImmersiveIcon(requestingImmersive, inFullImmersiveState) -> {
- R.drawable.decor_desktop_mode_immersive_exit_button_dark
+ shouldShowExitFullImmersiveOrMaximizeIcon(isTaskMaximized, inFullImmersiveState) -> {
+ R.drawable.decor_desktop_mode_immersive_or_maximize_exit_button_dark
}
else -> R.drawable.decor_desktop_mode_maximize_button_dark
}
- private fun shouldShowEnterFullImmersiveIcon(
- requestingImmersive: Boolean,
+ private fun shouldShowExitFullImmersiveOrMaximizeIcon(
+ isTaskMaximized: Boolean,
inFullImmersiveState: Boolean
- ): Boolean = Flags.enableFullyImmersiveInDesktop()
- && requestingImmersive && !inFullImmersiveState
-
- private fun shouldShowExitFullImmersiveIcon(
- requestingImmersive: Boolean,
- inFullImmersiveState: Boolean
- ): Boolean = isInFullImmersiveStateAndRequesting(requestingImmersive, inFullImmersiveState)
-
- private fun isInFullImmersiveStateAndRequesting(
- requestingImmersive: Boolean,
- inFullImmersiveState: Boolean
- ): Boolean = Flags.enableFullyImmersiveInDesktop()
- && requestingImmersive && inFullImmersiveState
+ ): Boolean = (Flags.enableFullyImmersiveInDesktop() && inFullImmersiveState) || isTaskMaximized
private fun getHeaderStyle(header: Header): HeaderStyle {
return HeaderStyle(