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