summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Phil Weaver <pweaver@google.com> 2016-10-27 16:22:05 -0700
committer Phil Weaver <pweaver@google.com> 2016-11-07 15:12:33 -0800
commit964c68e03a3a5034ab2a3533be450cc9abf9b2cb (patch)
tree0c8f47a8c819844996940def9c85ce9cfa5dfaba
parentb4ff25b4cd1cc7b86f33c5ccf292a8a899a21297 (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
-rw-r--r--core/java/android/view/ViewRootImpl.java7
-rw-r--r--core/java/com/android/internal/policy/PhoneWindow.java7
-rw-r--r--services/core/java/com/android/server/wm/AccessibilityController.java1
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java6
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