From cf21d91b7649ab404ff42f154417575c225607e5 Mon Sep 17 00:00:00 2001 From: Salvador Martinez Date: Wed, 27 Jul 2016 16:40:54 -0700 Subject: [PATCH] Force talkback to read imei # digit by digit Made changes to the file so that it uses Spannables instead of just strings. This will allow us to tell Android Talkback how we would like the strings read. Fixes: 30402792 Change-Id: I893a2cbf3de092f81d927bad36523efb08dd7265 --- .../settings/deviceinfo/ImeiInformation.java | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/deviceinfo/ImeiInformation.java b/src/com/android/settings/deviceinfo/ImeiInformation.java index 714521221f2..9ea54eac9ef 100644 --- a/src/com/android/settings/deviceinfo/ImeiInformation.java +++ b/src/com/android/settings/deviceinfo/ImeiInformation.java @@ -21,8 +21,13 @@ import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; +import android.text.Spannable; +import android.text.SpannableString; +import android.text.SpannableStringBuilder; +import android.text.Spanned; import android.text.TextUtils; +import android.text.style.TtsSpan; import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.internal.telephony.Phone; import com.android.internal.telephony.PhoneConstants; @@ -80,7 +85,7 @@ public class ImeiInformation extends SettingsPreferenceFragment { if (phone.getLteOnCdmaMode() == PhoneConstants.LTE_ON_CDMA_TRUE) { // Show ICC ID and IMEI for LTE device setSummaryText(KEY_ICC_ID, phone.getIccSerialNumber()); - setSummaryText(KEY_IMEI, phone.getImei()); + setSummaryTextAsDigit(KEY_IMEI, phone.getImei()); } else { // device is not GSM/UMTS, do not display GSM/UMTS features // check Null in case no specified preference in overlay xml @@ -88,8 +93,8 @@ public class ImeiInformation extends SettingsPreferenceFragment { removePreferenceFromScreen(KEY_ICC_ID); } } else { - setSummaryText(KEY_IMEI, phone.getImei()); - setSummaryText(KEY_IMEI_SV, phone.getDeviceSvn()); + setSummaryTextAsDigit(KEY_IMEI, phone.getImei()); + setSummaryTextAsDigit(KEY_IMEI_SV, phone.getDeviceSvn()); // device is not CDMA, do not display CDMA features // check Null in case no specified preference in overlay xml removePreferenceFromScreen(KEY_PRL_VERSION); @@ -128,10 +133,23 @@ public class ImeiInformation extends SettingsPreferenceFragment { } private void setSummaryText(String key, String text) { + setSummaryText(key, text, false /* forceDigit */); + } + + private void setSummaryTextAsDigit(String key, String text) { + setSummaryText(key, text, true /* forceDigit */); + } + + private void setSummaryText(String key, CharSequence text, boolean forceDigit) { final Preference preference = findPreference(key); if (TextUtils.isEmpty(text)) { text = getResources().getString(R.string.device_info_default); + } else if (forceDigit && TextUtils.isDigitsOnly(text)) { + final Spannable spannable = new SpannableStringBuilder(text); + final TtsSpan span = new TtsSpan.DigitsBuilder(text.toString()).build(); + spannable.setSpan(span, 0, spannable.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + text = spannable; } if (preference != null) {