Introduce a way to turn a fullscreen window into freeform
Change the exitFreeformMode to toggleFreeformMode. Now the original
maximize button will work as maximize/restore button.
Test: go/wm-smoke
Test: Manual test.
Bug: 117075771
Bug: 124475503
Change-Id: I268d053ed0e665b8ac5e56019c6ae8f8b7ee1317
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 258819f..05aef68 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -3202,23 +3202,34 @@
}
@Override
- public void exitFreeformMode(IBinder token) {
+ public void toggleFreeformWindowingMode(IBinder token) {
synchronized (mGlobalLock) {
long ident = Binder.clearCallingIdentity();
try {
final ActivityRecord r = ActivityRecord.forTokenLocked(token);
if (r == null) {
throw new IllegalArgumentException(
- "exitFreeformMode: No activity record matching token=" + token);
+ "toggleFreeformWindowingMode: No activity record matching token="
+ + token);
}
final ActivityStack stack = r.getActivityStack();
- if (stack == null || !stack.inFreeformWindowingMode()) {
- throw new IllegalStateException(
- "exitFreeformMode: You can only go fullscreen from freeform.");
+ if (stack == null) {
+ throw new IllegalStateException("toggleFreeformWindowingMode: the activity "
+ + "doesn't have a stack");
}
- stack.setWindowingMode(WINDOWING_MODE_FULLSCREEN);
+ if (!stack.inFreeformWindowingMode()
+ && stack.getWindowingMode() != WINDOWING_MODE_FULLSCREEN) {
+ throw new IllegalStateException("toggleFreeformWindowingMode: You can only "
+ + "toggle between fullscreen and freeform.");
+ }
+
+ if (stack.inFreeformWindowingMode()) {
+ stack.setWindowingMode(WINDOWING_MODE_FULLSCREEN);
+ } else {
+ stack.setWindowingMode(WINDOWING_MODE_FREEFORM);
+ }
} finally {
Binder.restoreCallingIdentity(ident);
}