diff options
4 files changed, 40 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java index 3f9f95cf8370..abccf99579b7 100644 --- a/services/core/java/com/android/server/wm/AccessibilityController.java +++ b/services/core/java/com/android/server/wm/AccessibilityController.java @@ -1245,6 +1245,16 @@ final class AccessibilityController { } } + for (int i = dc.mShellRoots.size() - 1; i >= 0; --i) { + final WindowInfo info = dc.mShellRoots.valueAt(i).getWindowInfo(); + if (info == null) { + continue; + } + info.layer = addedWindows.size(); + windows.add(info); + addedWindows.add(info.token); + } + // Remove child/parent references to windows that were not added. final int windowCount = windows.size(); for (int i = 0; i < windowCount; i++) { diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index b01accab8fd9..e26163247020 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -26,7 +26,6 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW; import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; -import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY; import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY; import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSET; @@ -574,7 +573,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo /** Corner radius that windows should have in order to match the display. */ private final float mWindowCornerRadius; - private final SparseArray<ShellRoot> mShellRoots = new SparseArray<>(); + final SparseArray<ShellRoot> mShellRoots = new SparseArray<>(); RemoteInsetsControlTarget mRemoteInsetsControlTarget = null; private final IBinder.DeathRecipient mRemoteInsetsDeath = () -> { diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java index 20738ed29470..803bec8941a8 100644 --- a/services/core/java/com/android/server/wm/DockedStackDividerController.java +++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java @@ -45,6 +45,11 @@ public class DockedStackDividerController { void setTouchRegion(Rect touchRegion) { mTouchRegion.set(touchRegion); + // We need to report touchable region changes to accessibility. + if (mDisplayContent.mWmService.mAccessibilityController != null) { + mDisplayContent.mWmService.mAccessibilityController.onSomeWindowResizedOrMovedLocked( + mDisplayContent.getDisplayId()); + } } void getTouchRegion(Rect outRegion) { diff --git a/services/core/java/com/android/server/wm/ShellRoot.java b/services/core/java/com/android/server/wm/ShellRoot.java index 701feff8c6be..0b1760dc5a1c 100644 --- a/services/core/java/com/android/server/wm/ShellRoot.java +++ b/services/core/java/com/android/server/wm/ShellRoot.java @@ -23,12 +23,14 @@ import static com.android.server.wm.WindowManagerService.MAX_ANIMATION_DURATION; import android.annotation.NonNull; import android.graphics.Point; +import android.graphics.Rect; import android.os.IBinder; import android.os.RemoteException; import android.util.Slog; import android.view.DisplayInfo; import android.view.IWindow; import android.view.SurfaceControl; +import android.view.WindowInfo; import android.view.animation.Animation; /** @@ -102,5 +104,27 @@ public class ShellRoot { mToken.startAnimation(mToken.getPendingTransaction(), adapter, false /* hidden */, ANIMATION_TYPE_WINDOW_ANIMATION, null /* animationFinishedCallback */); } + + WindowInfo getWindowInfo() { + if (mToken.windowType != TYPE_DOCK_DIVIDER) { + return null; + } + if (!mDisplayContent.getDefaultTaskDisplayArea().isSplitScreenModeActivated()) { + return null; + } + WindowInfo windowInfo = WindowInfo.obtain(); + windowInfo.displayId = mToken.getDisplayArea().getDisplayContent().mDisplayId; + windowInfo.type = mToken.windowType; + windowInfo.layer = mToken.getWindowLayerFromType(); + windowInfo.token = mClient.asBinder(); + windowInfo.title = "Splitscreen Divider"; + windowInfo.focused = false; + windowInfo.inPictureInPicture = false; + windowInfo.hasFlagWatchOutsideTouch = false; + final Rect regionRect = new Rect(); + mDisplayContent.getDockedDividerController().getTouchRegion(regionRect); + windowInfo.regionInScreen.set(regionRect); + return windowInfo; + } } |