summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
Diffstat (limited to 'libs')
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/keyguard/KeyguardTransitionHandler.java32
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java5
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/unfold/UnfoldTransitionHandlerTest.java6
3 files changed, 38 insertions, 5 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/keyguard/KeyguardTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/keyguard/KeyguardTransitionHandler.java
index 2ef92adb90f5..13c0ac4bbaa7 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/keyguard/KeyguardTransitionHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/keyguard/KeyguardTransitionHandler.java
@@ -16,7 +16,10 @@
package com.android.wm.shell.keyguard;
+import static android.app.ActivityTaskManager.INVALID_TASK_ID;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_DREAM;
+import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
+import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.view.WindowManager.KEYGUARD_VISIBILITY_TRANSIT_FLAGS;
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY;
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_OCCLUDING;
@@ -27,6 +30,7 @@ import static com.android.wm.shell.util.TransitionUtil.isOpeningType;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.app.ActivityManager;
import android.os.Binder;
import android.os.Handler;
import android.os.IBinder;
@@ -165,10 +169,16 @@ public class KeyguardTransitionHandler implements Transitions.TransitionHandler
if (sct != null) {
finishTransaction.merge(sct);
}
+ final WindowContainerTransaction mergedWct =
+ new WindowContainerTransaction();
+ if (wct != null) {
+ mergedWct.merge(wct, true);
+ }
+ maybeDismissFreeformOccludingKeyguard(mergedWct, info);
// Post our finish callback to let startAnimation finish first.
mMainExecutor.executeDelayed(() -> {
mStartedTransitions.remove(transition);
- finishCallback.onTransitionFinished(wct);
+ finishCallback.onTransitionFinished(mergedWct);
}, 0);
}
});
@@ -260,6 +270,26 @@ public class KeyguardTransitionHandler implements Transitions.TransitionHandler
}
}
+ private void maybeDismissFreeformOccludingKeyguard(
+ WindowContainerTransaction wct, TransitionInfo info) {
+ if ((info.getFlags() & TRANSIT_FLAG_KEYGUARD_OCCLUDING) == 0) {
+ return;
+ }
+ // There's a window occluding the Keyguard, find it and if it's in freeform mode, change it
+ // to fullscreen.
+ for (int i = 0; i < info.getChanges().size(); i++) {
+ final TransitionInfo.Change change = info.getChanges().get(i);
+ final ActivityManager.RunningTaskInfo taskInfo = change.getTaskInfo();
+ if (taskInfo != null && taskInfo.taskId != INVALID_TASK_ID
+ && taskInfo.getWindowingMode() == WINDOWING_MODE_FREEFORM
+ && taskInfo.isFocused && change.getContainer() != null) {
+ wct.setWindowingMode(change.getContainer(), WINDOWING_MODE_FULLSCREEN);
+ wct.setBounds(change.getContainer(), null);
+ return;
+ }
+ }
+ }
+
private static class FakeFinishCallback extends IRemoteTransitionFinishedCallback.Stub {
@Override
public void onTransitionFinished(
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java
index b4d0a31dc8c1..c74b3f30e52d 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java
@@ -21,6 +21,7 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.view.WindowManager.TRANSIT_CHANGE;
import static android.view.WindowManager.TRANSIT_CLOSE;
import static android.view.WindowManager.TRANSIT_FIRST_CUSTOM;
+import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_OCCLUDING;
import static android.view.WindowManager.TRANSIT_KEYGUARD_OCCLUDE;
import static android.view.WindowManager.TRANSIT_OPEN;
import static android.view.WindowManager.TRANSIT_SLEEP;
@@ -1104,7 +1105,9 @@ public class Transitions implements RemoteCallable<Transitions>,
}
}
}
- if (request.getType() == TRANSIT_KEYGUARD_OCCLUDE && request.getTriggerTask() != null
+ final boolean isOccludingKeyguard = request.getType() == TRANSIT_KEYGUARD_OCCLUDE
+ || ((request.getFlags() & TRANSIT_FLAG_KEYGUARD_OCCLUDING) != 0);
+ if (isOccludingKeyguard && request.getTriggerTask() != null
&& request.getTriggerTask().getWindowingMode() == WINDOWING_MODE_FREEFORM) {
// This freeform task is on top of keyguard, so its windowing mode should be changed to
// fullscreen.
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/unfold/UnfoldTransitionHandlerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/unfold/UnfoldTransitionHandlerTest.java
index 63a685e0f0e6..1d94c9c31de2 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/unfold/UnfoldTransitionHandlerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/unfold/UnfoldTransitionHandlerTest.java
@@ -92,7 +92,7 @@ public class UnfoldTransitionHandlerTest {
TransitionRequestInfo.DisplayChange displayChange = new TransitionRequestInfo.DisplayChange(
Display.DEFAULT_DISPLAY).setPhysicalDisplayChanged(true);
TransitionRequestInfo requestInfo = new TransitionRequestInfo(TRANSIT_CHANGE,
- triggerTaskInfo, /* remoteTransition= */ null, displayChange);
+ triggerTaskInfo, /* remoteTransition= */ null, displayChange, 0 /* flags */);
WindowContainerTransaction result = mUnfoldTransitionHandler.handleRequest(mTransition,
requestInfo);
@@ -106,7 +106,7 @@ public class UnfoldTransitionHandlerTest {
TransitionRequestInfo.DisplayChange displayChange = new TransitionRequestInfo.DisplayChange(
Display.DEFAULT_DISPLAY).setPhysicalDisplayChanged(false);
TransitionRequestInfo requestInfo = new TransitionRequestInfo(TRANSIT_CHANGE,
- triggerTaskInfo, /* remoteTransition= */ null, displayChange);
+ triggerTaskInfo, /* remoteTransition= */ null, displayChange, 0 /* flags */);
WindowContainerTransaction result = mUnfoldTransitionHandler.handleRequest(mTransition,
requestInfo);
@@ -212,7 +212,7 @@ public class UnfoldTransitionHandlerTest {
TransitionRequestInfo.DisplayChange displayChange = new TransitionRequestInfo.DisplayChange(
Display.DEFAULT_DISPLAY).setPhysicalDisplayChanged(true);
return new TransitionRequestInfo(TRANSIT_CHANGE,
- triggerTaskInfo, /* remoteTransition= */ null, displayChange);
+ triggerTaskInfo, /* remoteTransition= */ null, displayChange, 0 /* flags */);
}
private static class TestShellUnfoldProgressProvider implements ShellUnfoldProgressProvider,