1package com.android.ex.photo.util;
2
3import android.content.Context;
4import android.os.Build;
5import android.support.v4.view.accessibility.AccessibilityEventCompat;
6import android.support.v4.view.accessibility.AccessibilityRecordCompat;
7import android.view.View;
8import android.view.accessibility.AccessibilityEvent;
9import android.view.accessibility.AccessibilityManager;
10
11public class Util {
12    public static boolean isTouchExplorationEnabled(AccessibilityManager accessibilityManager) {
13        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
14            return accessibilityManager.isTouchExplorationEnabled();
15        } else {
16            return false;
17        }
18    }
19
20    /**
21     * Make an announcement which is related to some sort of a context change. Also see
22     * {@link android.view.View#announceForAccessibility}
23     * @param view The view that triggered the announcement
24     * @param accessibilityManager AccessibilityManager instance. If it is null, the method can
25     *          obtain an instance itself.
26     * @param text The announcement text
27     */
28    public static void announceForAccessibility(
29            final View view, AccessibilityManager accessibilityManager,
30            final CharSequence text) {
31        // Jelly Bean added support for speaking text verbatim
32        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
33            view.announceForAccessibility(text);
34            return;
35        }
36
37        final Context context = view.getContext().getApplicationContext();
38        if (accessibilityManager == null) {
39            accessibilityManager = (AccessibilityManager) context.getSystemService(
40                    Context.ACCESSIBILITY_SERVICE);
41        }
42
43        if (!accessibilityManager.isEnabled()) {
44            return;
45        }
46
47        final int eventType = AccessibilityEvent.TYPE_VIEW_FOCUSED;
48
49        // Construct an accessibility event with the minimum recommended
50        // attributes. An event without a class name or package may be dropped.
51        final AccessibilityEvent event = AccessibilityEvent.obtain(eventType);
52        event.getText().add(text);
53        event.setEnabled(view.isEnabled());
54        event.setClassName(view.getClass().getName());
55        event.setPackageName(context.getPackageName());
56
57        // JellyBean MR1 requires a source view to set the window ID.
58        final AccessibilityRecordCompat record = AccessibilityEventCompat.asRecord(event);
59        record.setSource(view);
60
61        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
62            view.getParent().requestSendAccessibilityEvent(view, event);
63        } else {
64            // Sends the event directly through the accessibility manager.
65            accessibilityManager.sendAccessibilityEvent(event);
66        }
67    }
68}
69