summaryrefslogtreecommitdiffstats
path: root/src/com/android/messaging/util/AccessibilityUtil.java
diff options
context:
space:
mode:
authorMike Dodd <mdodd@google.com>2015-08-11 11:16:59 -0700
committerMike Dodd <mdodd@google.com>2015-08-12 08:58:28 -0700
commit461a34b466cb4b13dbbc2ec6330b31e217b2ac4e (patch)
treebc4b489af52d0e2521e21167d2ad76a47256f348 /src/com/android/messaging/util/AccessibilityUtil.java
parent8b3e2b9c1b0a09423a7ba5d1091b9192106502f8 (diff)
downloadandroid_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.java170
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;
+ }
+ }
+}