diff options
| author | 2016-10-27 16:22:05 -0700 | |
|---|---|---|
| committer | 2016-11-07 15:12:33 -0800 | |
| commit | 964c68e03a3a5034ab2a3533be450cc9abf9b2cb (patch) | |
| tree | 0c8f47a8c819844996940def9c85ce9cfa5dfaba | |
| parent | b4ff25b4cd1cc7b86f33c5ccf292a8a899a21297 (diff) | |
Send accessibility event on window title change.
Forcing the layout params to be sent to
WindowManagerService, and from there to accessibility
to generate the event.
Bug: 27857482
Test: Adding corresponding CTS.
Change-Id: I24fc97e16b95799259e4c472b6f1052a1dd00a56
4 files changed, 20 insertions, 1 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 5a6cf7dfaa23..cdd8b6a4a5c7 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -5611,6 +5611,13 @@ public final class ViewRootImpl implements ViewParent, } } + /** + * Notify that the window title changed + */ + public void onWindowTitleChanged() { + mAttachInfo.mForceReportNewAttributes = true; + } + public void handleDispatchWindowShown() { mAttachInfo.mTreeObserver.dispatchOnWindowShown(); } diff --git a/core/java/com/android/internal/policy/PhoneWindow.java b/core/java/com/android/internal/policy/PhoneWindow.java index 878f3a69a504..50621f482d4f 100644 --- a/core/java/com/android/internal/policy/PhoneWindow.java +++ b/core/java/com/android/internal/policy/PhoneWindow.java @@ -540,6 +540,13 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { WindowManager.LayoutParams params = getAttributes(); if (!TextUtils.equals(title, params.accessibilityTitle)) { params.accessibilityTitle = TextUtils.stringOrSpannedString(title); + if (mDecor != null) { + // ViewRootImpl will make sure the change propagates to WindowManagerService + ViewRootImpl vr = mDecor.getViewRootImpl(); + if (vr != null) { + vr.onWindowTitleChanged(); + } + } dispatchWindowAttributesChanged(getAttributes()); } } diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java index 670b9ccdf5f6..869e20745a48 100644 --- a/services/core/java/com/android/server/wm/AccessibilityController.java +++ b/services/core/java/com/android/server/wm/AccessibilityController.java @@ -1034,7 +1034,6 @@ final class AccessibilityController { boolean focusedWindowAdded = false; final int visibleWindowCount = visibleWindows.size(); - int skipRemainingWindowsForTaskId = -1; HashSet<Integer> skipRemainingWindowsForTasks = new HashSet<>(); for (int i = visibleWindowCount - 1; i >= 0; i--) { final WindowState windowState = visibleWindows.valueAt(i); diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 77237526faf4..a533d8406717 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -1932,6 +1932,12 @@ public class WindowManagerService extends IWindowManager.Stub || (flagChanges & FLAG_DISMISS_KEYGUARD) != 0)) { win.mAppToken.checkKeyguardFlagsChanged(); } + if (((attrChanges & LayoutParams.ACCESSIBILITY_TITLE_CHANGED) != 0) + && (mAccessibilityController != null) + && (win.getDisplayId() == DEFAULT_DISPLAY)) { + // No move or resize, but the controller checks for title changes as well + mAccessibilityController.onSomeWindowResizedOrMovedLocked(); + } } if (DEBUG_LAYOUT) Slog.v(TAG_WM, "Relayout " + win + ": viewVisibility=" + viewVisibility |