Index: content/public/android/java/src/org/chromium/content/browser/accessibility/LollipopBrowserAccessibilityManager.java |
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/LollipopBrowserAccessibilityManager.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/LollipopBrowserAccessibilityManager.java |
index 841b211d199571b35db7a9b582357fa013c6d686..ef925f895ef0322f965141a051f04e5d343b0363 100644 |
--- a/content/public/android/java/src/org/chromium/content/browser/accessibility/LollipopBrowserAccessibilityManager.java |
+++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/LollipopBrowserAccessibilityManager.java |
@@ -5,7 +5,13 @@ |
package org.chromium.content.browser.accessibility; |
import android.annotation.TargetApi; |
+import android.content.BroadcastReceiver; |
+import android.content.Context; |
+import android.content.Intent; |
+import android.content.IntentFilter; |
import android.os.Build; |
+import android.text.SpannableString; |
+import android.text.style.LocaleSpan; |
import android.util.SparseArray; |
import android.view.accessibility.AccessibilityEvent; |
import android.view.accessibility.AccessibilityNodeInfo; |
@@ -14,6 +20,8 @@ import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction; |
import org.chromium.base.annotations.JNINamespace; |
import org.chromium.content.browser.ContentViewCore; |
+import java.util.Locale; |
+ |
/** |
* Subclass of BrowserAccessibilityManager for Lollipop. |
*/ |
@@ -22,10 +30,21 @@ import org.chromium.content.browser.ContentViewCore; |
public class LollipopBrowserAccessibilityManager extends KitKatBrowserAccessibilityManager { |
private static SparseArray<AccessibilityAction> sAccessibilityActionMap = |
new SparseArray<AccessibilityAction>(); |
+ private String mSystemLanguageTag; |
LollipopBrowserAccessibilityManager(long nativeBrowserAccessibilityManagerAndroid, |
ContentViewCore contentViewCore) { |
super(nativeBrowserAccessibilityManagerAndroid, contentViewCore); |
+ |
+ // Cache the system language and set up a listener for when it changes. |
+ IntentFilter filter = new IntentFilter(Intent.ACTION_LOCALE_CHANGED); |
+ mContentViewCore.getContext().registerReceiver(new BroadcastReceiver() { |
+ @Override |
+ public void onReceive(Context context, Intent intent) { |
+ mSystemLanguageTag = Locale.getDefault().toLanguageTag(); |
+ } |
+ }, filter); |
+ mSystemLanguageTag = Locale.getDefault().toLanguageTag(); |
} |
@Override |
@@ -123,4 +142,21 @@ public class LollipopBrowserAccessibilityManager extends KitKatBrowserAccessibil |
} |
node.addAction(action); |
} |
+ |
+ @Override |
+ protected CharSequence computeText(String text, boolean annotateAsLink, String language) { |
+ CharSequence charSequence = super.computeText(text, annotateAsLink, language); |
+ if (!language.isEmpty() && !language.equals(mSystemLanguageTag)) { |
+ SpannableString spannable; |
+ if (charSequence instanceof SpannableString) { |
+ spannable = (SpannableString) charSequence; |
+ } else { |
+ spannable = new SpannableString(charSequence); |
+ } |
+ Locale locale = Locale.forLanguageTag(language); |
+ spannable.setSpan(new LocaleSpan(locale), 0, spannable.length(), 0); |
+ return spannable; |
+ } |
+ return charSequence; |
+ } |
} |