List of usage examples for android.view.accessibility AccessibilityEvent getFromIndex
public int getFromIndex()
From source file:com.android.screenspeak.eventprocessor.ProcessorPhoneticLetters.java
/** * Handle an event that indicates a text is being traversed at character * granularity./*from ww w . ja va 2 s . co m*/ */ private void processTraversalEvent(AccessibilityEvent event) { final CharSequence text = AccessibilityEventUtils.getEventTextOrDescription(event); if (TextUtils.isEmpty(text)) { return; } String letter; if ((event.getAction() == AccessibilityNodeInfoCompat.ACTION_NEXT_AT_MOVEMENT_GRANULARITY || event.getAction() == AccessibilityNodeInfoCompat.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY) && event.getFromIndex() >= 0 && event.getFromIndex() < text.length()) { letter = String.valueOf(text.charAt(event.getFromIndex())); } else { return; } String phoneticLetter = getPhoneticLetter(Locale.getDefault().toString(), letter); if (phoneticLetter != null) { postPhoneticLetterRunnable(phoneticLetter); } }
From source file:com.android.screenspeak.eventprocessor.ProcessorFocusAndSingleTap.java
private int getScrollDirection(AccessibilityEvent event) { //check scroll of AdapterViews if (event.getFromIndex() > mLastScrollFromIndex || event.getToIndex() > mLastScrollToIndex) { return MOVING_FORWARDS; } else if (event.getFromIndex() < mLastScrollFromIndex || event.getToIndex() < mLastScrollToIndex) { return MOVING_BACKWARDS; }//from w w w . j av a 2 s .c o m //check scroll of ScrollViews if (event.getScrollX() > mLastScrollX || event.getScrollY() > mLastScrollY) { return MOVING_FORWARDS; } else if (event.getScrollX() < mLastScrollX || event.getScrollY() < mLastScrollY) { return MOVING_BACKWARDS; } return MOVING_UNDEFINED_DIRECTION; }
From source file:com.android.talkback.eventprocessor.ProcessorFocusAndSingleTap.java
private @TraversalStrategy.SearchDirectionOrUnknown int getScrollDirection(AccessibilityEvent event) { //check scroll of AdapterViews if (event.getFromIndex() > mLastScrollFromIndex || event.getToIndex() > mLastScrollToIndex) { return TraversalStrategy.SEARCH_FOCUS_FORWARD; } else if (event.getFromIndex() < mLastScrollFromIndex || event.getToIndex() < mLastScrollToIndex) { return TraversalStrategy.SEARCH_FOCUS_BACKWARD; }// w w w .j a v a 2 s . c om //check scroll of ScrollViews if (event.getScrollX() > mLastScrollX || event.getScrollY() > mLastScrollY) { return TraversalStrategy.SEARCH_FOCUS_FORWARD; } else if (event.getScrollX() < mLastScrollX || event.getScrollY() < mLastScrollY) { return TraversalStrategy.SEARCH_FOCUS_BACKWARD; } return TraversalStrategy.SEARCH_FOCUS_UNKNOWN; }
From source file:com.google.android.marvin.mytalkback.ProcessorScrollPosition.java
private boolean shouldIgnoreScrollEvent(AccessibilityEvent event) { // Don't speak during full-screen read. if ((mFullScreenReadController != null) && mFullScreenReadController.isActive()) { return true; }//from w w w . ja v a2s .com final AccessibilityRecordCompat record = new AccessibilityRecordCompat(event); final AccessibilityNodeInfoCompat node = record.getSource(); if (node == null) { if (Build.VERSION.SDK_INT >= 14) { // Event is coming from another window. return true; } else { // We don't have enough information to ignore this event. return false; } } final int fromIndex = event.getFromIndex() + 1; final Integer cachedFromIndex = mCachedFromValues.get(node); if ((cachedFromIndex != null) && (cachedFromIndex == fromIndex)) { // The from index hasn't changed, which means the event is coming // from a re-layout or resize and should not be spoken. node.recycle(); return true; } // The behavior of put() for an existing key is unspecified, so we can't // recycle the old or new key nodes. mCachedFromValues.put(node, fromIndex); return false; }
From source file:Main.java
/** * @return If the <code>first</code> event is equal to the <code>second</code>. *///from w w w .j a v a2 s . c o m public static boolean eventEquals(AccessibilityEvent first, AccessibilityEvent second) { // TODO: The framework should implement AccessibilityEvent#equals() if (first == null || second == null) { return false; } if (first.getEventType() != second.getEventType()) { return false; } if (first.getPackageName() == null) { if (second.getPackageName() != null) { return false; } } else if (!first.getPackageName().equals(second.getPackageName())) { return false; } if (first.getClassName() == null) { if (second.getClassName() != null) { return false; } } else if (!first.getClassName().equals(second.getClassName())) { return false; } if (!first.getText().equals(second.getText())) { // The result of getText() is never null. return false; } if (first.getContentDescription() == null) { if (second.getContentDescription() != null) { return false; } } else if (!first.getContentDescription().equals(second.getContentDescription())) { return false; } if (first.getBeforeText() == null) { if (second.getBeforeText() != null) { return false; } } else if (!first.getBeforeText().equals(second.getBeforeText())) { return false; } if (first.getParcelableData() != null) { // Parcelable data may not implement equals() correctly. return false; } if (first.getAddedCount() != second.getAddedCount()) { return false; } if (first.isChecked() != second.isChecked()) { return false; } if (first.isEnabled() != second.isEnabled()) { return false; } if (first.getFromIndex() != second.getFromIndex()) { return false; } if (first.isFullScreen() != second.isFullScreen()) { return false; } if (first.getCurrentItemIndex() != second.getCurrentItemIndex()) { return false; } if (first.getItemCount() != second.getItemCount()) { return false; } if (first.isPassword() != second.isPassword()) { return false; } if (first.getRemovedCount() != second.getRemovedCount()) { return false; } if (first.getEventTime() != second.getEventTime()) { return false; } return true; }
From source file:com.google.android.marvin.mytalkback.ProcessorFocusAndSingleTap.java
private void handleViewScrolled(AccessibilityEvent event, AccessibilityRecordCompat record) { mLastViewScrolledEvent = event.getEventTime(); final AccessibilityNodeInfoCompat source = record.getSource(); if (source == null) { LogUtils.log(this, Log.ERROR, "Drop scroll with no source node"); return;/*from w ww . j ava 2 s . c o m*/ } // Only move focus if we've already seen the source. if (source.equals(mLastScrollSource)) { final boolean isMovingForward = (mLastScrollAction == AccessibilityNodeInfo.ACTION_SCROLL_FORWARD) || (event.getFromIndex() > mLastScrollFromIndex) || (event.getToIndex() > mLastScrollToIndex); final boolean wasScrollAction = (mLastScrollAction != 0); mHandler.followScrollDelayed(source, isMovingForward, wasScrollAction); // Performing a scroll action results in smooth scrolling, which may // send multiple events spaced at least 100ms apart. mHandler.clearScrollActionDelayed(); } else { setScrollActionImmediately(0); } if (mLastScrollSource != null) { mLastScrollSource.recycle(); } mLastScrollSource = source; mLastScrollFromIndex = record.getFromIndex(); mLastScrollToIndex = record.getToIndex(); }
From source file:com.android.screenspeak.formatter.EventSpeechRule.java
/** * Returns the value of a given <code>property</code> of an <code>event</code>. * * @param property The property//from ww w . j a va 2 s.c o m * @param event The event. * @return the value. */ private Object getPropertyValue(Context context, String property, AccessibilityEvent event) { final AccessibilityRecordCompat record = AccessibilityEventCompat.asRecord(event); if (property == null) { throw new IllegalArgumentException("Unknown property : " + property); } // TODO(AV): Don't do so many string comparisons here. switch (property) { case PROPERTY_EVENT_TYPE: return event.getEventType(); case PROPERTY_PACKAGE_NAME: return event.getPackageName(); case PROPERTY_CLASS_NAME: return event.getClassName(); case PROPERTY_CLASS_NAME_STRICT: return event.getClassName(); case PROPERTY_TEXT: return AccessibilityEventUtils.getEventAggregateText(event); case PROPERTY_BEFORE_TEXT: return event.getBeforeText(); case PROPERTY_CONTENT_DESCRIPTION: return event.getContentDescription(); case PROPERTY_CONTENT_DESCRIPTION_OR_TEXT: return AccessibilityEventUtils.getEventTextOrDescription(event); case PROPERTY_NODE_DESCRIPTION_OR_FALLBACK: return getNodeDescriptionOrFallback(event); case PROPERTY_EVENT_TIME: return event.getEventTime(); case PROPERTY_ITEM_COUNT: return event.getItemCount(); case PROPERTY_CURRENT_ITEM_INDEX: return event.getCurrentItemIndex(); case PROPERTY_FROM_INDEX: return event.getFromIndex(); case PROPERTY_TO_INDEX: return record.getToIndex(); case PROPERTY_SCROLLABLE: return record.isScrollable(); case PROPERTY_SCROLL_X: return record.getScrollX(); case PROPERTY_SCROLL_Y: return record.getScrollY(); case PROPERTY_RECORD_COUNT: return AccessibilityEventCompat.getRecordCount(event); case PROPERTY_CHECKED: return event.isChecked(); case PROPERTY_ENABLED: return event.isEnabled(); case PROPERTY_FULL_SCREEN: return event.isFullScreen(); case PROPERTY_PASSWORD: return event.isPassword(); case PROPERTY_ADDED_COUNT: return event.getAddedCount(); case PROPERTY_REMOVED_COUNT: return event.getRemovedCount(); case PROPERTY_VERSION_CODE: return PackageManagerUtils.getVersionCode(context, event.getPackageName()); case PROPERTY_VERSION_NAME: return PackageManagerUtils.getVersionName(context, event.getPackageName()); case PROPERTY_PLATFORM_RELEASE: return Build.VERSION.RELEASE; case PROPERTY_PLATFORM_SDK: return Build.VERSION.SDK_INT; default: throw new IllegalArgumentException("Unknown property : " + property); } }
From source file:com.android.talkback.formatter.EventSpeechRule.java
/** * Returns the value of a given <code>property</code> of an <code>event</code>. * * @param property The property/*from w ww.j a va 2 s .co m*/ * @param event The event. * @return the value. */ private Object getPropertyValue(Context context, String property, AccessibilityEvent event) { final AccessibilityRecordCompat record = AccessibilityEventCompat.asRecord(event); if (property == null) { throw new IllegalArgumentException("Unknown property : " + property); } // TODO: Don't do so many string comparisons here. switch (property) { case PROPERTY_EVENT_TYPE: return event.getEventType(); case PROPERTY_PACKAGE_NAME: return event.getPackageName(); case PROPERTY_CLASS_NAME: return event.getClassName(); case PROPERTY_CLASS_NAME_STRICT: return event.getClassName(); case PROPERTY_TEXT: return AccessibilityEventUtils.getEventAggregateText(event); case PROPERTY_BEFORE_TEXT: return event.getBeforeText(); case PROPERTY_CONTENT_DESCRIPTION: return event.getContentDescription(); case PROPERTY_CONTENT_DESCRIPTION_OR_TEXT: return AccessibilityEventUtils.getEventTextOrDescription(event); case PROPERTY_NODE_DESCRIPTION_OR_FALLBACK: return getNodeDescriptionOrFallback(event); case PROPERTY_EVENT_TIME: return event.getEventTime(); case PROPERTY_ITEM_COUNT: return event.getItemCount(); case PROPERTY_CURRENT_ITEM_INDEX: return event.getCurrentItemIndex(); case PROPERTY_FROM_INDEX: return event.getFromIndex(); case PROPERTY_TO_INDEX: return record.getToIndex(); case PROPERTY_SCROLLABLE: return record.isScrollable(); case PROPERTY_SCROLL_X: return record.getScrollX(); case PROPERTY_SCROLL_Y: return record.getScrollY(); case PROPERTY_RECORD_COUNT: return AccessibilityEventCompat.getRecordCount(event); case PROPERTY_CHECKED: return event.isChecked(); case PROPERTY_ENABLED: return event.isEnabled(); case PROPERTY_FULL_SCREEN: return event.isFullScreen(); case PROPERTY_PASSWORD: return event.isPassword(); case PROPERTY_ADDED_COUNT: return event.getAddedCount(); case PROPERTY_REMOVED_COUNT: return event.getRemovedCount(); case PROPERTY_VERSION_CODE: return PackageManagerUtils.getVersionCode(context, event.getPackageName()); case PROPERTY_VERSION_NAME: return PackageManagerUtils.getVersionName(context, event.getPackageName()); case PROPERTY_PLATFORM_RELEASE: return Build.VERSION.RELEASE; case PROPERTY_PLATFORM_SDK: return Build.VERSION.SDK_INT; default: throw new IllegalArgumentException("Unknown property : " + property); } }
From source file:com.google.android.marvin.mytalkback.formatter.EventSpeechRule.java
/** * Returns the value of a given <code>property</code> of an <code>event</code>. * * @param property The property/*from w w w. ja va 2 s . c om*/ * @param event The event. * @return the value. */ private Object getPropertyValue(Context context, String property, AccessibilityEvent event) { final AccessibilityRecordCompat record = new AccessibilityRecordCompat(event); // TODO(alanv): Don't do so many string comparisons here. if (PROPERTY_EVENT_TYPE.equals(property)) { return event.getEventType(); } else if (PROPERTY_PACKAGE_NAME.equals(property)) { return event.getPackageName(); } else if (PROPERTY_CLASS_NAME.equals(property)) { return event.getClassName(); } else if (PROPERTY_CLASS_NAME_STRICT.equals(property)) { return event.getClassName(); } else if (PROPERTY_TEXT.equals(property)) { return AccessibilityEventUtils.getEventAggregateText(event); } else if (PROPERTY_BEFORE_TEXT.equals(property)) { return event.getBeforeText(); } else if (PROPERTY_CONTENT_DESCRIPTION.equals(property)) { return event.getContentDescription(); } else if (PROPERTY_CONTENT_DESCRIPTION_OR_TEXT.equals(property)) { return AccessibilityEventUtils.getEventTextOrDescription(event); } else if (PROPERTY_NODE_DESCRIPTION_OR_FALLBACK.equals(property)) { return getNodeDescriptionOrFallback(event); } else if (PROPERTY_EVENT_TIME.equals(property)) { return event.getEventTime(); } else if (PROPERTY_ITEM_COUNT.equals(property)) { return event.getItemCount(); } else if (PROPERTY_CURRENT_ITEM_INDEX.equals(property)) { return event.getCurrentItemIndex(); } else if (PROPERTY_FROM_INDEX.equals(property)) { return event.getFromIndex(); } else if (PROPERTY_TO_INDEX.equals(property)) { return record.getToIndex(); } else if (PROPERTY_SCROLLABLE.equals(property)) { return record.isScrollable(); } else if (PROPERTY_SCROLL_X.equals(property)) { return record.getScrollX(); } else if (PROPERTY_SCROLL_Y.equals(property)) { return record.getScrollY(); } else if (PROPERTY_RECORD_COUNT.equals(property)) { return AccessibilityEventCompat.getRecordCount(event); } else if (PROPERTY_CHECKED.equals(property)) { return event.isChecked(); } else if (PROPERTY_ENABLED.equals(property)) { return event.isEnabled(); } else if (PROPERTY_FULL_SCREEN.equals(property)) { return event.isFullScreen(); } else if (PROPERTY_PASSWORD.equals(property)) { return event.isPassword(); } else if (PROPERTY_ADDED_COUNT.equals(property)) { return event.getAddedCount(); } else if (PROPERTY_REMOVED_COUNT.equals(property)) { return event.getRemovedCount(); } else if (PROPERTY_VERSION_CODE.equals(property)) { return PackageManagerUtils.getVersionCode(context, event.getPackageName()); } else if (PROPERTY_VERSION_NAME.equals(property)) { return PackageManagerUtils.getVersionName(context, event.getPackageName()); } else if (PROPERTY_PLATFORM_RELEASE.equals(property)) { return Build.VERSION.RELEASE; } else if (PROPERTY_PLATFORM_SDK.equals(property)) { return Build.VERSION.SDK_INT; } else { throw new IllegalArgumentException("Unknown property : " + property); } }