diff options
author | Mike Dodd <mdodd@google.com> | 2015-08-11 11:16:59 -0700 |
---|---|---|
committer | Mike Dodd <mdodd@google.com> | 2015-08-12 08:58:28 -0700 |
commit | 461a34b466cb4b13dbbc2ec6330b31e217b2ac4e (patch) | |
tree | bc4b489af52d0e2521e21167d2ad76a47256f348 /src/com/android/messaging/util/AccessibilityUtil.java | |
parent | 8b3e2b9c1b0a09423a7ba5d1091b9192106502f8 (diff) | |
download | android_packages_apps_Messaging-461a34b466cb4b13dbbc2ec6330b31e217b2ac4e.tar.gz android_packages_apps_Messaging-461a34b466cb4b13dbbc2ec6330b31e217b2ac4e.tar.bz2 android_packages_apps_Messaging-461a34b466cb4b13dbbc2ec6330b31e217b2ac4e.zip |
Initial checkin of AOSP Messaging app.
b/23110861
Change-Id: I9aa980d7569247d6b2ca78f5dcb4502e1eaadb8a
Diffstat (limited to 'src/com/android/messaging/util/AccessibilityUtil.java')
-rw-r--r-- | src/com/android/messaging/util/AccessibilityUtil.java | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/src/com/android/messaging/util/AccessibilityUtil.java b/src/com/android/messaging/util/AccessibilityUtil.java new file mode 100644 index 0000000..f6c64a9 --- /dev/null +++ b/src/com/android/messaging/util/AccessibilityUtil.java @@ -0,0 +1,170 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.messaging.util; + +import android.content.Context; +import android.content.res.Resources; +import android.support.v4.view.accessibility.AccessibilityEventCompat; +import android.support.v4.view.accessibility.AccessibilityRecordCompat; +import android.text.TextUtils; +import android.view.View; +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityManager; + +import com.android.messaging.Factory; +import com.android.messaging.R; + +import javax.annotation.Nullable; + +public class AccessibilityUtil { + public static String sContentDescriptionDivider; + + public static boolean isTouchExplorationEnabled(final Context context) { + final AccessibilityManager accessibilityManager = (AccessibilityManager) + context.getSystemService(Context.ACCESSIBILITY_SERVICE); + return accessibilityManager.isTouchExplorationEnabled(); + } + + public static StringBuilder appendContentDescription(final Context context, + final StringBuilder contentDescription, final String val) { + if (sContentDescriptionDivider == null) { + sContentDescriptionDivider = + context.getResources().getString(R.string.enumeration_comma); + } + if (contentDescription.length() != 0) { + contentDescription.append(sContentDescriptionDivider); + } + contentDescription.append(val); + return contentDescription; + } + + public static void announceForAccessibilityCompat( + final View view, @Nullable final AccessibilityManager accessibilityManager, + final int textResourceId) { + final String text = Factory.get().getApplicationContext().getResources().getString( + textResourceId); + announceForAccessibilityCompat(view, accessibilityManager, text); + } + + public static void announceForAccessibilityCompat( + final View view, @Nullable AccessibilityManager accessibilityManager, + final CharSequence text) { + final Context context = view.getContext().getApplicationContext(); + if (accessibilityManager == null) { + accessibilityManager = (AccessibilityManager) context.getSystemService( + Context.ACCESSIBILITY_SERVICE); + } + + if (!accessibilityManager.isEnabled()) { + return; + } + + // Jelly Bean added support for speaking text verbatim + final int eventType = OsUtil.isAtLeastJB() ? AccessibilityEvent.TYPE_ANNOUNCEMENT + : AccessibilityEvent.TYPE_VIEW_FOCUSED; + + // Construct an accessibility event with the minimum recommended + // attributes. An event without a class name or package may be dropped. + final AccessibilityEvent event = AccessibilityEvent.obtain(eventType); + event.getText().add(text); + event.setEnabled(view.isEnabled()); + event.setClassName(view.getClass().getName()); + event.setPackageName(context.getPackageName()); + + // JellyBean MR1 requires a source view to set the window ID. + final AccessibilityRecordCompat record = AccessibilityEventCompat.asRecord(event); + record.setSource(view); + + // Sends the event directly through the accessibility manager. If we only supported SDK 14+ + // we could have done: + // getParent().requestSendAccessibilityEvent(this, event); + accessibilityManager.sendAccessibilityEvent(event); + } + + /** + * Check to see if the current layout is Right-to-Left. This check is only supported for + * API 17+. + * For earlier versions, this method will just return false. + * @return boolean Boolean indicating whether the currently locale is RTL. + */ + public static boolean isLayoutRtl(final View view) { + if (OsUtil.isAtLeastJB_MR1()) { + return View.LAYOUT_DIRECTION_RTL == view.getLayoutDirection(); + } else { + return false; + } + } + + public static String getVocalizedPhoneNumber(final Resources res, final String phoneNumber) { + if (TextUtils.isEmpty(phoneNumber)) { + return ""; + } + final StringBuilder vocalizedPhoneNumber = new StringBuilder(); + for (final char c : phoneNumber.toCharArray()) { + getVocalizedNumber(res, c, vocalizedPhoneNumber); + } + return vocalizedPhoneNumber.toString(); + } + + public static void getVocalizedNumber(final Resources res, final char c, + final StringBuilder builder) { + switch (c) { + case '0': + builder.append(res.getString(R.string.content_description_for_number_zero)); + builder.append(" "); + return; + case '1': + builder.append(res.getString(R.string.content_description_for_number_one)); + builder.append(" "); + return; + case '2': + builder.append(res.getString(R.string.content_description_for_number_two)); + builder.append(" "); + return; + case '3': + builder.append(res.getString(R.string.content_description_for_number_three)); + builder.append(" "); + return; + case '4': + builder.append(res.getString(R.string.content_description_for_number_four)); + builder.append(" "); + return; + case '5': + builder.append(res.getString(R.string.content_description_for_number_five)); + builder.append(" "); + return; + case '6': + builder.append(res.getString(R.string.content_description_for_number_six)); + builder.append(" "); + return; + case '7': + builder.append(res.getString(R.string.content_description_for_number_seven)); + builder.append(" "); + return; + case '8': + builder.append(res.getString(R.string.content_description_for_number_eight)); + builder.append(" "); + return; + case '9': + builder.append(res.getString(R.string.content_description_for_number_nine)); + builder.append(" "); + return; + default: + builder.append(c); + return; + } + } +} |