From 155edc693eecb64d821a95567e719d0de7ee9c85 Mon Sep 17 00:00:00 2001 From: Phil Weaver Date: Thu, 9 Jun 2016 10:24:53 -0700 Subject: [PATCH] Improve accessibility window title behavior Un-reverts ag/1057448, but uses a version of Resources#getText that returns null rather than throw an exception when no title is available. This is the same call made before, so this change should be safer. Bug: 28744278 Change-Id: I8c123f4f6d74f796ab9e8ffcf955aaf881770da1 --- .../accessibility/AccessibilityWindowInfo.java | 4 +++- .../com/android/internal/policy/PhoneWindow.java | 14 ++++++++++---- .../android/server/policy/PhoneWindowManager.java | 9 +++++++-- .../android/server/wm/AccessibilityController.java | 3 --- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/core/java/android/view/accessibility/AccessibilityWindowInfo.java b/core/java/android/view/accessibility/AccessibilityWindowInfo.java index d0d4507e7b621..52f35de7e1894 100644 --- a/core/java/android/view/accessibility/AccessibilityWindowInfo.java +++ b/core/java/android/view/accessibility/AccessibilityWindowInfo.java @@ -16,6 +16,7 @@ package android.view.accessibility; +import android.annotation.Nullable; import android.graphics.Rect; import android.os.Parcel; import android.os.Parcelable; @@ -101,8 +102,9 @@ public final class AccessibilityWindowInfo implements Parcelable { /** * Gets the title of the window. * - * @return The title. + * @return The title of the window, or {@code null} if none is available. */ + @Nullable public CharSequence getTitle() { return mTitle; } diff --git a/core/java/com/android/internal/policy/PhoneWindow.java b/core/java/com/android/internal/policy/PhoneWindow.java index 18408aa72f5f5..9ad750d3a5994 100644 --- a/core/java/com/android/internal/policy/PhoneWindow.java +++ b/core/java/com/android/internal/policy/PhoneWindow.java @@ -528,16 +528,22 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { @Override public void setTitle(CharSequence title) { + setTitle(title, true); + } + + public void setTitle(CharSequence title, boolean updateAccessibilityTitle) { if (mTitleView != null) { mTitleView.setText(title); } else if (mDecorContentParent != null) { mDecorContentParent.setWindowTitle(title); } mTitle = title; - WindowManager.LayoutParams params = getAttributes(); - if (!TextUtils.equals(title, params.accessibilityTitle)) { - params.accessibilityTitle = TextUtils.stringOrSpannedString(title); - dispatchWindowAttributesChanged(getAttributes()); + if (updateAccessibilityTitle) { + WindowManager.LayoutParams params = getAttributes(); + if (!TextUtils.equals(title, params.accessibilityTitle)) { + params.accessibilityTitle = TextUtils.stringOrSpannedString(title); + dispatchWindowAttributesChanged(getAttributes()); + } } } diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 698774441cca6..568f94c9684fc 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -2589,8 +2589,13 @@ public class PhoneWindowManager implements WindowManagerPolicy { final PhoneWindow win = new PhoneWindow(context); win.setIsStartingWindow(true); - final Resources r = context.getResources(); - win.setTitle(r.getText(labelRes, nonLocalizedLabel)); + CharSequence label = context.getResources().getText(labelRes, null); + // Only change the accessibility title if the label is localized + if (label != null) { + win.setTitle(label, true); + } else { + win.setTitle(nonLocalizedLabel, false); + } win.setType( WindowManager.LayoutParams.TYPE_APPLICATION_STARTING); diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java index 101f56f49241f..8be5dfb3c7fda 100644 --- a/services/core/java/com/android/server/wm/AccessibilityController.java +++ b/services/core/java/com/android/server/wm/AccessibilityController.java @@ -1203,9 +1203,6 @@ final class AccessibilityController { window.layer = windowState.mLayer; window.token = windowState.mClient.asBinder(); window.title = windowState.mAttrs.accessibilityTitle; - if (window.title == null) { - window.title = windowState.mAttrs.getTitle(); - } window.accessibilityIdOfAnchor = windowState.mAttrs.accessibilityIdOfAnchor; WindowState attachedWindow = windowState.mAttachedWindow;