19ea7077cea45d719026934d33b9deecf4c2eca93Shri Bordepackage com.android.ex.photo.util;
29ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde
39ea7077cea45d719026934d33b9deecf4c2eca93Shri Bordeimport android.content.Context;
49ea7077cea45d719026934d33b9deecf4c2eca93Shri Bordeimport android.os.Build;
59ea7077cea45d719026934d33b9deecf4c2eca93Shri Bordeimport android.support.v4.view.accessibility.AccessibilityEventCompat;
69ea7077cea45d719026934d33b9deecf4c2eca93Shri Bordeimport android.support.v4.view.accessibility.AccessibilityRecordCompat;
79ea7077cea45d719026934d33b9deecf4c2eca93Shri Bordeimport android.view.View;
89ea7077cea45d719026934d33b9deecf4c2eca93Shri Bordeimport android.view.accessibility.AccessibilityEvent;
99ea7077cea45d719026934d33b9deecf4c2eca93Shri Bordeimport android.view.accessibility.AccessibilityManager;
109ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde
119ea7077cea45d719026934d33b9deecf4c2eca93Shri Bordepublic class Util {
129ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde    public static boolean isTouchExplorationEnabled(AccessibilityManager accessibilityManager) {
139ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
149ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde            return accessibilityManager.isTouchExplorationEnabled();
159ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        } else {
169ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde            return false;
179ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        }
189ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde    }
199ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde
209ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde    /**
219ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde     * Make an announcement which is related to some sort of a context change. Also see
229ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde     * {@link android.view.View#announceForAccessibility}
239ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde     * @param view The view that triggered the announcement
249ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde     * @param accessibilityManager AccessibilityManager instance. If it is null, the method can
259ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde     *          obtain an instance itself.
269ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde     * @param text The announcement text
279ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde     */
289ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde    public static void announceForAccessibility(
299ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde            final View view, AccessibilityManager accessibilityManager,
309ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde            final CharSequence text) {
319ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        // Jelly Bean added support for speaking text verbatim
329ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
339ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde            view.announceForAccessibility(text);
349ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde            return;
359ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        }
369ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde
379ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        final Context context = view.getContext().getApplicationContext();
389ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        if (accessibilityManager == null) {
399ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde            accessibilityManager = (AccessibilityManager) context.getSystemService(
409ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde                    Context.ACCESSIBILITY_SERVICE);
419ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        }
429ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde
439ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        if (!accessibilityManager.isEnabled()) {
449ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde            return;
459ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        }
469ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde
479ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        final int eventType = AccessibilityEvent.TYPE_VIEW_FOCUSED;
489ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde
499ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        // Construct an accessibility event with the minimum recommended
509ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        // attributes. An event without a class name or package may be dropped.
519ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        final AccessibilityEvent event = AccessibilityEvent.obtain(eventType);
529ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        event.getText().add(text);
539ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        event.setEnabled(view.isEnabled());
549ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        event.setClassName(view.getClass().getName());
559ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        event.setPackageName(context.getPackageName());
569ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde
579ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        // JellyBean MR1 requires a source view to set the window ID.
589ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        final AccessibilityRecordCompat record = AccessibilityEventCompat.asRecord(event);
599ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        record.setSource(view);
609ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde
619ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
629ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde            view.getParent().requestSendAccessibilityEvent(view, event);
639ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        } else {
649ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde            // Sends the event directly through the accessibility manager.
659ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde            accessibilityManager.sendAccessibilityEvent(event);
669ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde        }
679ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde    }
689ea7077cea45d719026934d33b9deecf4c2eca93Shri Borde}
69