Example usage for android.view.accessibility AccessibilityEvent getFromIndex

List of usage examples for android.view.accessibility AccessibilityEvent getFromIndex

Introduction

In this page you can find the example usage for android.view.accessibility AccessibilityEvent getFromIndex.

Prototype

public int getFromIndex() 

Source Link

Document

Gets the index of the first character of the changed sequence, or the beginning of a text selection or the index of the first visible item when scrolling.

Usage

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);
    }
}