Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a7bb6fbe authored by Dianne Hackborn's avatar Dianne Hackborn
Browse files

First quick implementation of auto assist data.

Introduce new AssistData class that contains all data
the framework automatically generates for assist.  Currently
populated with a very simple tree structure representing
the app's view hierarchy.

Reworked how we populate the class name for accessibility
info, so this is provided through a new method call on View
that subclasses can override.  This method is also used
to populate the class name in AssistData.

Change-Id: Ibd0acdc8354727d4291473283b5e4b70894905dc
parent b989c556
Loading
Loading
Loading
Loading
+53 −0
Original line number Diff line number Diff line
@@ -3920,6 +3920,46 @@ package android.app {
    field public java.lang.String serviceDetails;
  }
  public final class AssistData implements android.os.Parcelable {
    method public int describeContents();
    method public static android.app.AssistData getAssistData(android.os.Bundle);
    method public void getWindowAt(int, android.app.AssistData.ViewNode);
    method public int getWindowCount();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final java.lang.String ASSIST_KEY = "android:assist";
    field public static final android.os.Parcelable.Creator<android.app.AssistData> CREATOR;
  }
  public static class AssistData.ViewNode {
    ctor public AssistData.ViewNode();
    method public void getChildAt(int, android.app.AssistData.ViewNode);
    method public int getChildCount();
    method public java.lang.String getClassName();
    method public java.lang.String getContentDescription();
    method public android.os.Bundle getExtras();
    method public int getHeight();
    method public java.lang.String getHint();
    method public int getLeft();
    method public int getScrollX();
    method public int getScrollY();
    method public java.lang.String getText();
    method public int getTextSelectionEnd();
    method public int getTextSelectionStart();
    method public int getTop();
    method public int getVisibility();
    method public int getWidth();
    method public boolean isAccessibilityFocused();
    method public boolean isActivated();
    method public boolean isCheckable();
    method public boolean isChecked();
    method public boolean isClickable();
    method public boolean isEnabled();
    method public boolean isFocusable();
    method public boolean isFocused();
    method public boolean isLongClickable();
    method public boolean isSelected();
  }
  public class DatePickerDialog extends android.app.AlertDialog implements android.widget.DatePicker.OnDateChangedListener android.content.DialogInterface.OnClickListener {
    ctor public DatePickerDialog(android.content.Context, android.app.DatePickerDialog.OnDateSetListener, int, int, int);
    ctor public DatePickerDialog(android.content.Context, int, android.app.DatePickerDialog.OnDateSetListener, int, int, int);
@@ -33923,6 +33963,7 @@ package android.view {
    method public android.view.View focusSearch(int);
    method public void forceLayout();
    method public static int generateViewId();
    method public java.lang.CharSequence getAccessibilityClassName();
    method public int getAccessibilityLiveRegion();
    method public android.view.accessibility.AccessibilityNodeProvider getAccessibilityNodeProvider();
    method public int getAccessibilityTraversalAfter();
@@ -34148,6 +34189,7 @@ package android.view {
    method protected void onMeasure(int, int);
    method protected void onOverScrolled(int, int, boolean, boolean);
    method public void onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
    method public void onProvideAssistData(android.view.ViewAssistData, android.os.Bundle);
    method protected void onRestoreInstanceState(android.os.Parcelable);
    method public void onRtlPropertiesChanged(int);
    method protected android.os.Parcelable onSaveInstanceState();
@@ -34550,6 +34592,17 @@ package android.view {
    method public static android.animation.Animator createCircularReveal(android.view.View, int, int, float, float);
  }
  public abstract class ViewAssistData {
    ctor public ViewAssistData();
    method public abstract java.lang.CharSequence getHint();
    method public abstract java.lang.CharSequence getText();
    method public abstract int getTextSelectionEnd();
    method public abstract int getTextSelectionStart();
    method public abstract void setHint(java.lang.CharSequence);
    method public abstract void setText(java.lang.CharSequence);
    method public abstract void setText(java.lang.CharSequence, int, int);
  }
  public class ViewConfiguration {
    ctor public deprecated ViewConfiguration();
    method public static android.view.ViewConfiguration get(android.content.Context);
+53 −0
Original line number Diff line number Diff line
@@ -4010,6 +4010,46 @@ package android.app {
    field public java.lang.String serviceDetails;
  }
  public final class AssistData implements android.os.Parcelable {
    method public int describeContents();
    method public static android.app.AssistData getAssistData(android.os.Bundle);
    method public void getWindowAt(int, android.app.AssistData.ViewNode);
    method public int getWindowCount();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final java.lang.String ASSIST_KEY = "android:assist";
    field public static final android.os.Parcelable.Creator<android.app.AssistData> CREATOR;
  }
  public static class AssistData.ViewNode {
    ctor public AssistData.ViewNode();
    method public void getChildAt(int, android.app.AssistData.ViewNode);
    method public int getChildCount();
    method public java.lang.String getClassName();
    method public java.lang.String getContentDescription();
    method public android.os.Bundle getExtras();
    method public int getHeight();
    method public java.lang.String getHint();
    method public int getLeft();
    method public int getScrollX();
    method public int getScrollY();
    method public java.lang.String getText();
    method public int getTextSelectionEnd();
    method public int getTextSelectionStart();
    method public int getTop();
    method public int getVisibility();
    method public int getWidth();
    method public boolean isAccessibilityFocused();
    method public boolean isActivated();
    method public boolean isCheckable();
    method public boolean isChecked();
    method public boolean isClickable();
    method public boolean isEnabled();
    method public boolean isFocusable();
    method public boolean isFocused();
    method public boolean isLongClickable();
    method public boolean isSelected();
  }
  public class DatePickerDialog extends android.app.AlertDialog implements android.widget.DatePicker.OnDateChangedListener android.content.DialogInterface.OnClickListener {
    ctor public DatePickerDialog(android.content.Context, android.app.DatePickerDialog.OnDateSetListener, int, int, int);
    ctor public DatePickerDialog(android.content.Context, int, android.app.DatePickerDialog.OnDateSetListener, int, int, int);
@@ -36076,6 +36116,7 @@ package android.view {
    method public android.view.View focusSearch(int);
    method public void forceLayout();
    method public static int generateViewId();
    method public java.lang.CharSequence getAccessibilityClassName();
    method public int getAccessibilityLiveRegion();
    method public android.view.accessibility.AccessibilityNodeProvider getAccessibilityNodeProvider();
    method public int getAccessibilityTraversalAfter();
@@ -36301,6 +36342,7 @@ package android.view {
    method protected void onMeasure(int, int);
    method protected void onOverScrolled(int, int, boolean, boolean);
    method public void onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
    method public void onProvideAssistData(android.view.ViewAssistData, android.os.Bundle);
    method protected void onRestoreInstanceState(android.os.Parcelable);
    method public void onRtlPropertiesChanged(int);
    method protected android.os.Parcelable onSaveInstanceState();
@@ -36703,6 +36745,17 @@ package android.view {
    method public static android.animation.Animator createCircularReveal(android.view.View, int, int, float, float);
  }
  public abstract class ViewAssistData {
    ctor public ViewAssistData();
    method public abstract java.lang.CharSequence getHint();
    method public abstract java.lang.CharSequence getText();
    method public abstract int getTextSelectionEnd();
    method public abstract int getTextSelectionStart();
    method public abstract void setHint(java.lang.CharSequence);
    method public abstract void setText(java.lang.CharSequence);
    method public abstract void setText(java.lang.CharSequence, int, int);
  }
  public class ViewConfiguration {
    ctor public deprecated ViewConfiguration();
    method public static android.view.ViewConfiguration get(android.content.Context);
+5 −1
Original line number Diff line number Diff line
@@ -1534,13 +1534,17 @@ public class Activity extends ContextThemeWrapper
     * {@link Intent#ACTION_ASSIST} Intent with all of the context of the current
     * application.  You can override this method to place into the bundle anything
     * you would like to appear in the {@link Intent#EXTRA_ASSIST_CONTEXT} part
     * of the assist Intent.  The default implementation does nothing.
     * of the assist Intent.  The default implementation automatically generates a
     * {@link AssistData} from your activity and places it in to the Bundle; if you
     * don't want your UI reported to the assistant, don't call this default
     * implementation.
     *
     * <p>This function will be called after any global assist callbacks that had
     * been registered with {@link Application#registerOnProvideAssistDataListener
     * Application.registerOnProvideAssistDataListener}.
     */
    public void onProvideAssistData(Bundle data) {
        data.putParcelable(AssistData.ASSIST_KEY, new AssistData(this));
    }

    /**
+519 −0

File added.

Preview size limit exceeded, changes collapsed.

+22 −2
Original line number Diff line number Diff line
@@ -5430,7 +5430,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
     */
    public void onInitializeAccessibilityEventInternal(AccessibilityEvent event) {
        event.setSource(this);
        event.setClassName(View.class.getName());
        event.setClassName(getAccessibilityClassName());
        event.setPackageName(getContext().getPackageName());
        event.setEnabled(isEnabled());
        event.setContentDescription(mContentDescription);
@@ -5599,6 +5599,26 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
                (int) (position.right + 0.5f), (int) (position.bottom + 0.5f));
    }
    /**
     * Return the class name of this object to be used for accessibility purposes.
     * Subclasses should only override this if they are implementing something that
     * should be seen as a completely new class of view when used by accessibility,
     * unrelated to the class it is deriving from.  This is used to fill in
     * {@link AccessibilityNodeInfo#setClassName AccessibilityNodeInfo.setClassName}.
     */
    public CharSequence getAccessibilityClassName() {
        return View.class.getName();
    }
    /**
     * Called when assist data is being retrieved from a view as part of
     * {@link android.app.Activity#onProvideAssistData Activity.onProvideAssistData}.
     * @param data
     * @param extras
     */
    public void onProvideAssistData(ViewAssistData data, Bundle extras) {
    }
    /**
     * @see #onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo)
     *
@@ -5681,7 +5701,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
        info.setVisibleToUser(isVisibleToUser());
        info.setPackageName(mContext.getPackageName());
        info.setClassName(View.class.getName());
        info.setClassName(getAccessibilityClassName());
        info.setContentDescription(getContentDescription());
        info.setEnabled(isEnabled());
Loading