summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
author Tony Huang <tonyychuang@google.com> 2021-11-19 08:53:26 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2021-11-19 08:53:26 +0000
commitcd70dc3d47aebf7db5da9143ab2576564278decc (patch)
tree53ceb26d1f477384ea141f31addf2a1eaef71c05 /libs
parent4f590a93840e0cb0691b62905ef8312d6ae64ea0 (diff)
parent5611fc6c93fd73db2093f219f95c31be3c59bf47 (diff)
Merge "Fix split dismissed after click pip to split button" into sc-v2-dev am: 6a2ce827e2 am: 5611fc6c93
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16235342 Change-Id: I231cfa55010874edb1631bbed8dcb0519e8679a7
Diffstat (limited to 'libs')
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreen.java6
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java22
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java33
3 files changed, 54 insertions, 7 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreen.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreen.java
index e86462f666c9..02edaa00fac3 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreen.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreen.java
@@ -87,6 +87,12 @@ public interface SplitScreen {
*/
void onKeyguardVisibilityChanged(boolean showing);
+ /** Called when device waking up finished. */
+ void onFinishedWakingUp();
+
+ /** Called when device going to sleep finished. */
+ void onFinishedGoingToSleep();
+
/** Get a string representation of a stage type */
static String stageTypeToString(@StageType int stage) {
switch (stage) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java
index 34a8f99b4a46..6b42ed775fb7 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java
@@ -232,6 +232,14 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
mStageCoordinator.onKeyguardVisibilityChanged(showing);
}
+ public void onFinishedWakingUp() {
+ mStageCoordinator.onFinishedWakingUp();
+ }
+
+ public void onFinishedGoingToSleep() {
+ mStageCoordinator.onFinishedGoingToSleep();
+ }
+
public void exitSplitScreenOnHide(boolean exitSplitScreenOnHide) {
mStageCoordinator.exitSplitScreenOnHide(exitSplitScreenOnHide);
}
@@ -491,6 +499,20 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
SplitScreenController.this.onKeyguardVisibilityChanged(showing);
});
}
+
+ @Override
+ public void onFinishedWakingUp() {
+ mMainExecutor.execute(() -> {
+ SplitScreenController.this.onFinishedWakingUp();
+ });
+ }
+
+ @Override
+ public void onFinishedGoingToSleep() {
+ mMainExecutor.execute(() -> {
+ SplitScreenController.this.onFinishedGoingToSleep();
+ });
+ }
}
/**
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java
index d0fc91ca8cf3..a3726d46d2a4 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java
@@ -155,6 +155,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
private boolean mShouldUpdateRecents;
private boolean mExitSplitScreenOnHide;
private boolean mKeyguardOccluded;
+ private boolean mDeviceSleep;
@SplitScreen.StageType
private int mDismissTop = NO_DISMISS;
@@ -547,6 +548,17 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
}
}
+ void onFinishedWakingUp() {
+ if (mMainStage.isActive()) {
+ exitSplitScreenIfKeyguardOccluded();
+ }
+ mDeviceSleep = false;
+ }
+
+ void onFinishedGoingToSleep() {
+ mDeviceSleep = true;
+ }
+
void exitSplitScreenOnHide(boolean exitSplitScreenOnHide) {
mExitSplitScreenOnHide = exitSplitScreenOnHide;
}
@@ -575,6 +587,19 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
applyExitSplitScreen(childrenToTop, wct, exitReason);
}
+ private void exitSplitScreenIfKeyguardOccluded() {
+ final boolean mainStageVisible = mMainStageListener.mVisible;
+ final boolean oneStageVisible = mainStageVisible ^ mSideStageListener.mVisible;
+ if (mDeviceSleep && mKeyguardOccluded && oneStageVisible) {
+ // Only the stages include show-when-locked activity is visible while keyguard occluded.
+ // Dismiss split because there's show-when-locked activity showing on top of keyguard.
+ // Also make sure the task contains show-when-locked activity remains on top after split
+ // dismissed.
+ final StageTaskListener toTop = mainStageVisible ? mMainStage : mSideStage;
+ exitSplitScreen(toTop, EXIT_REASON_SCREEN_LOCKED_SHOW_ON_TOP);
+ }
+ }
+
private void applyExitSplitScreen(StageTaskListener childrenToTop,
WindowContainerTransaction wct, @ExitReason int exitReason) {
mRecentTasks.ifPresent(recentTasks -> {
@@ -790,14 +815,8 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
// like the cases keyguard showing or screen off.
exitSplitScreen(null /* childrenToTop */, EXIT_REASON_RETURN_HOME);
}
- } else if (mKeyguardOccluded) {
- // At least one of the stages is visible while keyguard occluded. Dismiss split because
- // there's show-when-locked activity showing on top of keyguard. Also make sure the
- // task contains show-when-locked activity remains on top after split dismissed.
- final StageTaskListener toTop =
- mainStageVisible ? mMainStage : (sideStageVisible ? mSideStage : null);
- exitSplitScreen(toTop, EXIT_REASON_SCREEN_LOCKED_SHOW_ON_TOP);
}
+ exitSplitScreenIfKeyguardOccluded();
mSyncQueue.runInSync(t -> {
// Same above, we only set root tasks and divider leash visibility when both stage