Loading api/current.txt +10 −4 Original line number Diff line number Diff line Loading @@ -769,6 +769,7 @@ package android { field public static final int insetRight = 16843192; // 0x10101b8 field public static final int insetTop = 16843193; // 0x10101b9 field public static final int installLocation = 16843447; // 0x10102b7 field public static final int interactiveUiTimeout = 16844181; // 0x1010595 field public static final int interpolator = 16843073; // 0x1010141 field public static final int isAlwaysSyncable = 16843571; // 0x1010333 field public static final int isAsciiCapable = 16843753; // 0x10103e9 Loading Loading @@ -941,7 +942,6 @@ package android { field public static final int minSdkVersion = 16843276; // 0x101020c field public static final int minWidth = 16843071; // 0x101013f field public static final int minimumHorizontalAngle = 16843901; // 0x101047d field public static final int minimumUiTimeout = 16844175; // 0x101058f field public static final int minimumVerticalAngle = 16843902; // 0x101047e field public static final int mipMap = 16843725; // 0x10103cd field public static final int mirrorForRtl = 16843726; // 0x10103ce Loading @@ -965,6 +965,7 @@ package android { field public static final int nextFocusRight = 16842978; // 0x10100e2 field public static final int nextFocusUp = 16842979; // 0x10100e3 field public static final int noHistory = 16843309; // 0x101022d field public static final int nonInteractiveUiTimeout = 16844175; // 0x101058f field public static final int normalScreens = 16843397; // 0x1010285 field public static final int notificationTimeout = 16843651; // 0x1010383 field public static final int numColumns = 16843032; // 0x1010118 Loading Loading @@ -2886,12 +2887,14 @@ package android.accessibilityservice { method public int getCapabilities(); method public deprecated java.lang.String getDescription(); method public java.lang.String getId(); method public int getMinimumUiTimeoutMillis(); method public int getInteractiveUiTimeoutMillis(); method public int getNonInteractiveUiTimeoutMillis(); method public android.content.pm.ResolveInfo getResolveInfo(); method public java.lang.String getSettingsActivityName(); method public java.lang.String loadDescription(android.content.pm.PackageManager); method public java.lang.CharSequence loadSummary(android.content.pm.PackageManager); method public void setMinimumUiTimeoutMillis(int); method public void setInteractiveUiTimeoutMillis(int); method public void setNonInteractiveUiTimeoutMillis(int); method public void writeToParcel(android.os.Parcel, int); field public static final int CAPABILITY_CAN_CONTROL_MAGNIFICATION = 16; // 0x10 field public static final int CAPABILITY_CAN_PERFORM_GESTURES = 32; // 0x20 Loading Loading @@ -50517,7 +50520,7 @@ package android.view.accessibility { method public deprecated java.util.List<android.content.pm.ServiceInfo> getAccessibilityServiceList(); method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getEnabledAccessibilityServiceList(int); method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getInstalledAccessibilityServiceList(); method public int getMinimumUiTimeoutMillis(); method public int getRecommendedTimeoutMillis(int, int); method public void interrupt(); method public static boolean isAccessibilityButtonSupported(); method public boolean isEnabled(); Loading @@ -50526,6 +50529,9 @@ package android.view.accessibility { method public boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener); method public boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener); method public void sendAccessibilityEvent(android.view.accessibility.AccessibilityEvent); field public static final int FLAG_CONTENT_CONTROLS = 4; // 0x4 field public static final int FLAG_CONTENT_ICONS = 1; // 0x1 field public static final int FLAG_CONTENT_TEXT = 2; // 0x2 } public static abstract interface AccessibilityManager.AccessibilityStateChangeListener { core/java/android/accessibilityservice/AccessibilityServiceInfo.java +63 −20 Original line number Diff line number Diff line Loading @@ -76,7 +76,8 @@ import java.util.List; * @attr ref android.R.styleable#AccessibilityService_notificationTimeout * @attr ref android.R.styleable#AccessibilityService_packageNames * @attr ref android.R.styleable#AccessibilityService_settingsActivity * @attr ref android.R.styleable#AccessibilityService_minimumUiTimeout * @attr ref android.R.styleable#AccessibilityService_nonInteractiveUiTimeout * @attr ref android.R.styleable#AccessibilityService_interactiveUiTimeout * @see AccessibilityService * @see android.view.accessibility.AccessibilityEvent * @see android.view.accessibility.AccessibilityManager Loading Loading @@ -434,11 +435,14 @@ public class AccessibilityServiceInfo implements Parcelable { public boolean crashed; /** * The minimum timeout in milliseconds that UI controls need to remain on the screen. * * @see #setMinimumUiTimeoutMillis * A recommended timeout in milliseconds for non-interactive controls. */ private int mNonInteractiveUiTimeout; /** * A recommended timeout in milliseconds for interactive controls. */ private int mMinimumUiTimeout; private int mInteractiveUiTimeout; /** * The component name the accessibility service. Loading Loading @@ -544,8 +548,11 @@ public class AccessibilityServiceInfo implements Parcelable { notificationTimeout = asAttributes.getInt( com.android.internal.R.styleable.AccessibilityService_notificationTimeout, 0); mMinimumUiTimeout = asAttributes.getInt( com.android.internal.R.styleable.AccessibilityService_minimumUiTimeout, mNonInteractiveUiTimeout = asAttributes.getInt( com.android.internal.R.styleable.AccessibilityService_nonInteractiveUiTimeout, 0); mInteractiveUiTimeout = asAttributes.getInt( com.android.internal.R.styleable.AccessibilityService_interactiveUiTimeout, 0); flags = asAttributes.getInt( com.android.internal.R.styleable.AccessibilityService_accessibilityFlags, 0); Loading Loading @@ -616,7 +623,8 @@ public class AccessibilityServiceInfo implements Parcelable { packageNames = other.packageNames; feedbackType = other.feedbackType; notificationTimeout = other.notificationTimeout; mMinimumUiTimeout = other.mMinimumUiTimeout; mNonInteractiveUiTimeout = other.mNonInteractiveUiTimeout; mInteractiveUiTimeout = other.mInteractiveUiTimeout; flags = other.flags; } Loading Loading @@ -775,26 +783,57 @@ public class AccessibilityServiceInfo implements Parcelable { } /** * Set the minimum time that controls need to remain on the screen to support the user. * Set the recommended time that non-interactive controls need to remain on the screen to * support the user. * <p> * <strong>This value can be dynamically set at runtime by * {@link AccessibilityService#setServiceInfo(AccessibilityServiceInfo)}.</strong> * </p> * * @param timeout The timeout in milliseconds. * * @see android.R.styleable#AccessibilityService_nonInteractiveUiTimeout */ public void setNonInteractiveUiTimeoutMillis(int timeout) { mNonInteractiveUiTimeout = timeout; } /** * Get the recommended timeout for non-interactive controls. * * @return The timeout in milliseconds. * * @see #setNonInteractiveUiTimeoutMillis(int) */ public int getNonInteractiveUiTimeoutMillis() { return mNonInteractiveUiTimeout; } /** * Set the recommended time that interactive controls need to remain on the screen to * support the user. * <p> * <strong>This value can be dynamically set at runtime by * {@link AccessibilityService#setServiceInfo(AccessibilityServiceInfo)}.</strong> * </p> * * @param timeout The timeout in milliseconds. * * @see android.R.styleable#AccessibilityService_interactiveUiTimeout */ public void setMinimumUiTimeoutMillis(int timeout) { mMinimumUiTimeout = timeout; public void setInteractiveUiTimeoutMillis(int timeout) { mInteractiveUiTimeout = timeout; } /** * Get the minimum ui timeout. * Get the recommended timeout for interactive controls. * * @see #setMinimumUiTimeoutMillis * @return The timeout in milliseconds. * * @see #setInteractiveUiTimeoutMillis(int) */ public int getMinimumUiTimeoutMillis() { return mMinimumUiTimeout; public int getInteractiveUiTimeoutMillis() { return mInteractiveUiTimeout; } /** {@hide} */ Loading @@ -815,7 +854,8 @@ public class AccessibilityServiceInfo implements Parcelable { parcel.writeStringArray(packageNames); parcel.writeInt(feedbackType); parcel.writeLong(notificationTimeout); parcel.writeInt(mMinimumUiTimeout); parcel.writeInt(mNonInteractiveUiTimeout); parcel.writeInt(mInteractiveUiTimeout); parcel.writeInt(flags); parcel.writeInt(crashed ? 1 : 0); parcel.writeParcelable(mComponentName, flagz); Loading @@ -833,7 +873,8 @@ public class AccessibilityServiceInfo implements Parcelable { packageNames = parcel.readStringArray(); feedbackType = parcel.readInt(); notificationTimeout = parcel.readLong(); mMinimumUiTimeout = parcel.readInt(); mNonInteractiveUiTimeout = parcel.readInt(); mInteractiveUiTimeout = parcel.readInt(); flags = parcel.readInt(); crashed = parcel.readInt() != 0; mComponentName = parcel.readParcelable(this.getClass().getClassLoader()); Loading Loading @@ -884,7 +925,9 @@ public class AccessibilityServiceInfo implements Parcelable { stringBuilder.append(", "); stringBuilder.append("notificationTimeout: ").append(notificationTimeout); stringBuilder.append(", "); stringBuilder.append("minimumUiTimeout: ").append(mMinimumUiTimeout); stringBuilder.append("nonInteractiveUiTimeout: ").append(mNonInteractiveUiTimeout); stringBuilder.append(", "); stringBuilder.append("interactiveUiTimeout: ").append(mInteractiveUiTimeout); stringBuilder.append(", "); appendFlags(stringBuilder, flags); stringBuilder.append(", "); Loading core/java/android/provider/Settings.java +13 −13 Original line number Diff line number Diff line Loading @@ -6568,23 +6568,22 @@ public final class Settings { public static final String MULTI_PRESS_TIMEOUT = "multi_press_timeout"; /** * Whether the user specifies a minimum ui timeout to override minimum ui timeout of * accessibility service * Setting that specifies recommended timeout in milliseconds for controls * which don't need user's interactions. * * Type: int (0 for false, 1 for true) * @hide */ public static final String ACCESSIBILITY_MINIMUM_UI_TIMEOUT_ENABLED = "accessibility_minimum_ui_timeout_enabled"; public static final String ACCESSIBILITY_NON_INTERACTIVE_UI_TIMEOUT_MS = "accessibility_non_interactive_ui_timeout_ms"; /** * Setting that specifies ui minimum timeout in milliseconds. * Setting that specifies recommended timeout in milliseconds for controls * which need user's interactions. * * @see #ACCESSIBILITY_MINIMUM_UI_TIMEOUT_ENABLED * @hide */ public static final String ACCESSIBILITY_MINIMUM_UI_TIMEOUT_MS = "accessibility_minimum_ui_timeout_ms"; public static final String ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS = "accessibility_interactive_ui_timeout_ms"; /** * List of the enabled print services. Loading Loading @@ -8319,8 +8318,8 @@ public final class Settings { ZEN_SETTINGS_SUGGESTION_VIEWED, CHARGING_SOUNDS_ENABLED, CHARGING_VIBRATION_ENABLED, ACCESSIBILITY_MINIMUM_UI_TIMEOUT_ENABLED, ACCESSIBILITY_MINIMUM_UI_TIMEOUT_MS, ACCESSIBILITY_NON_INTERACTIVE_UI_TIMEOUT_MS, ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS, NOTIFICATION_NEW_INTERRUPTION_MODEL, }; Loading Loading @@ -8477,8 +8476,9 @@ public final class Settings { VALIDATORS.put(ZEN_SETTINGS_SUGGESTION_VIEWED, BOOLEAN_VALIDATOR); VALIDATORS.put(CHARGING_SOUNDS_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(CHARGING_VIBRATION_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(ACCESSIBILITY_MINIMUM_UI_TIMEOUT_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(ACCESSIBILITY_MINIMUM_UI_TIMEOUT_MS, NON_NEGATIVE_INTEGER_VALIDATOR); VALIDATORS.put(ACCESSIBILITY_NON_INTERACTIVE_UI_TIMEOUT_MS, NON_NEGATIVE_INTEGER_VALIDATOR); VALIDATORS.put(ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS, NON_NEGATIVE_INTEGER_VALIDATOR); VALIDATORS.put(USER_SETUP_COMPLETE, BOOLEAN_VALIDATOR); VALIDATORS.put(ASSIST_GESTURE_SETUP_COMPLETE, BOOLEAN_VALIDATOR); VALIDATORS.put(NOTIFICATION_NEW_INTERRUPTION_MODEL, BOOLEAN_VALIDATOR); Loading core/java/android/view/accessibility/AccessibilityManager.java +77 −13 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.accessibilityservice.AccessibilityServiceInfo.FLAG_ENABLE_ import android.Manifest; import android.accessibilityservice.AccessibilityServiceInfo; import android.accessibilityservice.AccessibilityServiceInfo.FeedbackType; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; Loading Loading @@ -54,6 +55,8 @@ import android.view.accessibility.AccessibilityEvent.EventType; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.IntPair; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Collections; import java.util.List; Loading Loading @@ -117,6 +120,39 @@ public final class AccessibilityManager { public static final String ACTION_CHOOSE_ACCESSIBILITY_BUTTON = "com.android.internal.intent.action.CHOOSE_ACCESSIBILITY_BUTTON"; /** * Annotations for content flag of UI. * @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef(flag = true, prefix = { "FLAG_CONTENT_" }, value = { FLAG_CONTENT_ICONS, FLAG_CONTENT_TEXT, FLAG_CONTENT_CONTROLS }) public @interface ContentFlag {} /** * Use this flag to indicate the content of a UI that times out contains icons. * * @see #getRecommendedTimeoutMillis(int, int) */ public static final int FLAG_CONTENT_ICONS = 1; /** * Use this flag to indicate the content of a UI that times out contains text. * * @see #getRecommendedTimeoutMillis(int, int) */ public static final int FLAG_CONTENT_TEXT = 2; /** * Use this flag to indicate the content of a UI that times out contains interactive controls. * * @see #getRecommendedTimeoutMillis(int, int) */ public static final int FLAG_CONTENT_CONTROLS = 4; @UnsupportedAppUsage static final Object sInstanceSync = new Object(); Loading @@ -142,7 +178,8 @@ public final class AccessibilityManager { int mRelevantEventTypes = AccessibilityEvent.TYPES_ALL_MASK; int mMinimumUiTimeout; int mInteractiveUiTimeout; int mNonInteractiveUiTimeout; boolean mIsTouchExplorationEnabled; Loading Loading @@ -304,7 +341,9 @@ public final class AccessibilityManager { } @Override public void notifyServicesStateChanged() { public void notifyServicesStateChanged(long updatedUiTimeout) { updateUiTimeout(updatedUiTimeout); final ArrayMap<AccessibilityServicesStateChangeListener, Handler> listeners; synchronized (mLock) { if (mServicesStateChangeListeners.isEmpty()) { Loading @@ -326,11 +365,6 @@ public final class AccessibilityManager { public void setRelevantEventTypes(int eventTypes) { mRelevantEventTypes = eventTypes; } @Override public void setMinimumUiTimeout(int uiTimeout) { mMinimumUiTimeout = uiTimeout; } }; /** Loading Loading @@ -840,16 +874,35 @@ public final class AccessibilityManager { } /** * Get the minimum timeout for changes to the UI needed by this user. Controls should remain * Get the recommended timeout for changes to the UI needed by this user. Controls should remain * on the screen for at least this long to give users time to react. Some users may need * extra time to review the controls, or to reach them, or to activate assistive technology * to activate the controls automatically. * * @return The minimum ui timeout for the current user in milliseconds. * {@link Integer#MAX_VALUE} if timeout is infinite. * <p> * Use the combination of content flags to indicate contents of UI. For example, use * {@code FLAG_CONTENT_ICONS | FLAG_CONTENT_TEXT} for message notification which contains * icons and text, or use {@code FLAG_CONTENT_TEXT | FLAG_CONTENT_CONTROLS} for button dialog * which contains text and button controls. * <p/> * * @param originalTimeout The timeout appropriate for users with no accessibility needs. * @param uiContentFlags The combination of flags {@link #FLAG_CONTENT_ICONS}, * {@link #FLAG_CONTENT_TEXT} or {@Link #CONTENT_CONTROLS} to * indicate the contents of UI. * @return The recommended UI timeout for the current user in milliseconds. */ public int getMinimumUiTimeoutMillis() { return mMinimumUiTimeout; public int getRecommendedTimeoutMillis(int originalTimeout, @ContentFlag int uiContentFlags) { boolean hasControls = (uiContentFlags & FLAG_CONTENT_CONTROLS) != 0; boolean hasIconsOrText = (uiContentFlags & FLAG_CONTENT_ICONS) != 0 || (uiContentFlags & FLAG_CONTENT_TEXT) != 0; int recommendedTimeout = originalTimeout; if (hasControls) { recommendedTimeout = Math.max(recommendedTimeout, mInteractiveUiTimeout); } if (hasIconsOrText) { recommendedTimeout = Math.max(recommendedTimeout, mNonInteractiveUiTimeout); } return recommendedTimeout; } /** Loading Loading @@ -1192,7 +1245,7 @@ public final class AccessibilityManager { final long userStateAndRelevantEvents = service.addClient(mClient, mUserId); setStateLocked(IntPair.first(userStateAndRelevantEvents)); mRelevantEventTypes = IntPair.second(userStateAndRelevantEvents); mMinimumUiTimeout = service.getMinimumUiTimeout(); updateUiTimeout(service.getRecommendedTimeoutMillis()); mService = service; } catch (RemoteException re) { Log.e(LOG_TAG, "AccessibilityManagerService is dead", re); Loading Loading @@ -1265,6 +1318,17 @@ public final class AccessibilityManager { } } /** * Update interactive and non-interactive UI timeout. * * @param uiTimeout A pair of {@code int}s. First integer for interactive one, and second * integer for non-interactive one. */ private void updateUiTimeout(long uiTimeout) { mInteractiveUiTimeout = IntPair.first(uiTimeout); mNonInteractiveUiTimeout = IntPair.second(uiTimeout); } /** * Determines if the accessibility button within the system navigation area is supported. * Loading core/java/android/view/accessibility/IAccessibilityManager.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -76,5 +76,5 @@ interface IAccessibilityManager { // System process only boolean sendFingerprintGesture(int gestureKeyCode); int getMinimumUiTimeout(); long getRecommendedTimeoutMillis(); } Loading
api/current.txt +10 −4 Original line number Diff line number Diff line Loading @@ -769,6 +769,7 @@ package android { field public static final int insetRight = 16843192; // 0x10101b8 field public static final int insetTop = 16843193; // 0x10101b9 field public static final int installLocation = 16843447; // 0x10102b7 field public static final int interactiveUiTimeout = 16844181; // 0x1010595 field public static final int interpolator = 16843073; // 0x1010141 field public static final int isAlwaysSyncable = 16843571; // 0x1010333 field public static final int isAsciiCapable = 16843753; // 0x10103e9 Loading Loading @@ -941,7 +942,6 @@ package android { field public static final int minSdkVersion = 16843276; // 0x101020c field public static final int minWidth = 16843071; // 0x101013f field public static final int minimumHorizontalAngle = 16843901; // 0x101047d field public static final int minimumUiTimeout = 16844175; // 0x101058f field public static final int minimumVerticalAngle = 16843902; // 0x101047e field public static final int mipMap = 16843725; // 0x10103cd field public static final int mirrorForRtl = 16843726; // 0x10103ce Loading @@ -965,6 +965,7 @@ package android { field public static final int nextFocusRight = 16842978; // 0x10100e2 field public static final int nextFocusUp = 16842979; // 0x10100e3 field public static final int noHistory = 16843309; // 0x101022d field public static final int nonInteractiveUiTimeout = 16844175; // 0x101058f field public static final int normalScreens = 16843397; // 0x1010285 field public static final int notificationTimeout = 16843651; // 0x1010383 field public static final int numColumns = 16843032; // 0x1010118 Loading Loading @@ -2886,12 +2887,14 @@ package android.accessibilityservice { method public int getCapabilities(); method public deprecated java.lang.String getDescription(); method public java.lang.String getId(); method public int getMinimumUiTimeoutMillis(); method public int getInteractiveUiTimeoutMillis(); method public int getNonInteractiveUiTimeoutMillis(); method public android.content.pm.ResolveInfo getResolveInfo(); method public java.lang.String getSettingsActivityName(); method public java.lang.String loadDescription(android.content.pm.PackageManager); method public java.lang.CharSequence loadSummary(android.content.pm.PackageManager); method public void setMinimumUiTimeoutMillis(int); method public void setInteractiveUiTimeoutMillis(int); method public void setNonInteractiveUiTimeoutMillis(int); method public void writeToParcel(android.os.Parcel, int); field public static final int CAPABILITY_CAN_CONTROL_MAGNIFICATION = 16; // 0x10 field public static final int CAPABILITY_CAN_PERFORM_GESTURES = 32; // 0x20 Loading Loading @@ -50517,7 +50520,7 @@ package android.view.accessibility { method public deprecated java.util.List<android.content.pm.ServiceInfo> getAccessibilityServiceList(); method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getEnabledAccessibilityServiceList(int); method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getInstalledAccessibilityServiceList(); method public int getMinimumUiTimeoutMillis(); method public int getRecommendedTimeoutMillis(int, int); method public void interrupt(); method public static boolean isAccessibilityButtonSupported(); method public boolean isEnabled(); Loading @@ -50526,6 +50529,9 @@ package android.view.accessibility { method public boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener); method public boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener); method public void sendAccessibilityEvent(android.view.accessibility.AccessibilityEvent); field public static final int FLAG_CONTENT_CONTROLS = 4; // 0x4 field public static final int FLAG_CONTENT_ICONS = 1; // 0x1 field public static final int FLAG_CONTENT_TEXT = 2; // 0x2 } public static abstract interface AccessibilityManager.AccessibilityStateChangeListener {
core/java/android/accessibilityservice/AccessibilityServiceInfo.java +63 −20 Original line number Diff line number Diff line Loading @@ -76,7 +76,8 @@ import java.util.List; * @attr ref android.R.styleable#AccessibilityService_notificationTimeout * @attr ref android.R.styleable#AccessibilityService_packageNames * @attr ref android.R.styleable#AccessibilityService_settingsActivity * @attr ref android.R.styleable#AccessibilityService_minimumUiTimeout * @attr ref android.R.styleable#AccessibilityService_nonInteractiveUiTimeout * @attr ref android.R.styleable#AccessibilityService_interactiveUiTimeout * @see AccessibilityService * @see android.view.accessibility.AccessibilityEvent * @see android.view.accessibility.AccessibilityManager Loading Loading @@ -434,11 +435,14 @@ public class AccessibilityServiceInfo implements Parcelable { public boolean crashed; /** * The minimum timeout in milliseconds that UI controls need to remain on the screen. * * @see #setMinimumUiTimeoutMillis * A recommended timeout in milliseconds for non-interactive controls. */ private int mNonInteractiveUiTimeout; /** * A recommended timeout in milliseconds for interactive controls. */ private int mMinimumUiTimeout; private int mInteractiveUiTimeout; /** * The component name the accessibility service. Loading Loading @@ -544,8 +548,11 @@ public class AccessibilityServiceInfo implements Parcelable { notificationTimeout = asAttributes.getInt( com.android.internal.R.styleable.AccessibilityService_notificationTimeout, 0); mMinimumUiTimeout = asAttributes.getInt( com.android.internal.R.styleable.AccessibilityService_minimumUiTimeout, mNonInteractiveUiTimeout = asAttributes.getInt( com.android.internal.R.styleable.AccessibilityService_nonInteractiveUiTimeout, 0); mInteractiveUiTimeout = asAttributes.getInt( com.android.internal.R.styleable.AccessibilityService_interactiveUiTimeout, 0); flags = asAttributes.getInt( com.android.internal.R.styleable.AccessibilityService_accessibilityFlags, 0); Loading Loading @@ -616,7 +623,8 @@ public class AccessibilityServiceInfo implements Parcelable { packageNames = other.packageNames; feedbackType = other.feedbackType; notificationTimeout = other.notificationTimeout; mMinimumUiTimeout = other.mMinimumUiTimeout; mNonInteractiveUiTimeout = other.mNonInteractiveUiTimeout; mInteractiveUiTimeout = other.mInteractiveUiTimeout; flags = other.flags; } Loading Loading @@ -775,26 +783,57 @@ public class AccessibilityServiceInfo implements Parcelable { } /** * Set the minimum time that controls need to remain on the screen to support the user. * Set the recommended time that non-interactive controls need to remain on the screen to * support the user. * <p> * <strong>This value can be dynamically set at runtime by * {@link AccessibilityService#setServiceInfo(AccessibilityServiceInfo)}.</strong> * </p> * * @param timeout The timeout in milliseconds. * * @see android.R.styleable#AccessibilityService_nonInteractiveUiTimeout */ public void setNonInteractiveUiTimeoutMillis(int timeout) { mNonInteractiveUiTimeout = timeout; } /** * Get the recommended timeout for non-interactive controls. * * @return The timeout in milliseconds. * * @see #setNonInteractiveUiTimeoutMillis(int) */ public int getNonInteractiveUiTimeoutMillis() { return mNonInteractiveUiTimeout; } /** * Set the recommended time that interactive controls need to remain on the screen to * support the user. * <p> * <strong>This value can be dynamically set at runtime by * {@link AccessibilityService#setServiceInfo(AccessibilityServiceInfo)}.</strong> * </p> * * @param timeout The timeout in milliseconds. * * @see android.R.styleable#AccessibilityService_interactiveUiTimeout */ public void setMinimumUiTimeoutMillis(int timeout) { mMinimumUiTimeout = timeout; public void setInteractiveUiTimeoutMillis(int timeout) { mInteractiveUiTimeout = timeout; } /** * Get the minimum ui timeout. * Get the recommended timeout for interactive controls. * * @see #setMinimumUiTimeoutMillis * @return The timeout in milliseconds. * * @see #setInteractiveUiTimeoutMillis(int) */ public int getMinimumUiTimeoutMillis() { return mMinimumUiTimeout; public int getInteractiveUiTimeoutMillis() { return mInteractiveUiTimeout; } /** {@hide} */ Loading @@ -815,7 +854,8 @@ public class AccessibilityServiceInfo implements Parcelable { parcel.writeStringArray(packageNames); parcel.writeInt(feedbackType); parcel.writeLong(notificationTimeout); parcel.writeInt(mMinimumUiTimeout); parcel.writeInt(mNonInteractiveUiTimeout); parcel.writeInt(mInteractiveUiTimeout); parcel.writeInt(flags); parcel.writeInt(crashed ? 1 : 0); parcel.writeParcelable(mComponentName, flagz); Loading @@ -833,7 +873,8 @@ public class AccessibilityServiceInfo implements Parcelable { packageNames = parcel.readStringArray(); feedbackType = parcel.readInt(); notificationTimeout = parcel.readLong(); mMinimumUiTimeout = parcel.readInt(); mNonInteractiveUiTimeout = parcel.readInt(); mInteractiveUiTimeout = parcel.readInt(); flags = parcel.readInt(); crashed = parcel.readInt() != 0; mComponentName = parcel.readParcelable(this.getClass().getClassLoader()); Loading Loading @@ -884,7 +925,9 @@ public class AccessibilityServiceInfo implements Parcelable { stringBuilder.append(", "); stringBuilder.append("notificationTimeout: ").append(notificationTimeout); stringBuilder.append(", "); stringBuilder.append("minimumUiTimeout: ").append(mMinimumUiTimeout); stringBuilder.append("nonInteractiveUiTimeout: ").append(mNonInteractiveUiTimeout); stringBuilder.append(", "); stringBuilder.append("interactiveUiTimeout: ").append(mInteractiveUiTimeout); stringBuilder.append(", "); appendFlags(stringBuilder, flags); stringBuilder.append(", "); Loading
core/java/android/provider/Settings.java +13 −13 Original line number Diff line number Diff line Loading @@ -6568,23 +6568,22 @@ public final class Settings { public static final String MULTI_PRESS_TIMEOUT = "multi_press_timeout"; /** * Whether the user specifies a minimum ui timeout to override minimum ui timeout of * accessibility service * Setting that specifies recommended timeout in milliseconds for controls * which don't need user's interactions. * * Type: int (0 for false, 1 for true) * @hide */ public static final String ACCESSIBILITY_MINIMUM_UI_TIMEOUT_ENABLED = "accessibility_minimum_ui_timeout_enabled"; public static final String ACCESSIBILITY_NON_INTERACTIVE_UI_TIMEOUT_MS = "accessibility_non_interactive_ui_timeout_ms"; /** * Setting that specifies ui minimum timeout in milliseconds. * Setting that specifies recommended timeout in milliseconds for controls * which need user's interactions. * * @see #ACCESSIBILITY_MINIMUM_UI_TIMEOUT_ENABLED * @hide */ public static final String ACCESSIBILITY_MINIMUM_UI_TIMEOUT_MS = "accessibility_minimum_ui_timeout_ms"; public static final String ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS = "accessibility_interactive_ui_timeout_ms"; /** * List of the enabled print services. Loading Loading @@ -8319,8 +8318,8 @@ public final class Settings { ZEN_SETTINGS_SUGGESTION_VIEWED, CHARGING_SOUNDS_ENABLED, CHARGING_VIBRATION_ENABLED, ACCESSIBILITY_MINIMUM_UI_TIMEOUT_ENABLED, ACCESSIBILITY_MINIMUM_UI_TIMEOUT_MS, ACCESSIBILITY_NON_INTERACTIVE_UI_TIMEOUT_MS, ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS, NOTIFICATION_NEW_INTERRUPTION_MODEL, }; Loading Loading @@ -8477,8 +8476,9 @@ public final class Settings { VALIDATORS.put(ZEN_SETTINGS_SUGGESTION_VIEWED, BOOLEAN_VALIDATOR); VALIDATORS.put(CHARGING_SOUNDS_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(CHARGING_VIBRATION_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(ACCESSIBILITY_MINIMUM_UI_TIMEOUT_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(ACCESSIBILITY_MINIMUM_UI_TIMEOUT_MS, NON_NEGATIVE_INTEGER_VALIDATOR); VALIDATORS.put(ACCESSIBILITY_NON_INTERACTIVE_UI_TIMEOUT_MS, NON_NEGATIVE_INTEGER_VALIDATOR); VALIDATORS.put(ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS, NON_NEGATIVE_INTEGER_VALIDATOR); VALIDATORS.put(USER_SETUP_COMPLETE, BOOLEAN_VALIDATOR); VALIDATORS.put(ASSIST_GESTURE_SETUP_COMPLETE, BOOLEAN_VALIDATOR); VALIDATORS.put(NOTIFICATION_NEW_INTERRUPTION_MODEL, BOOLEAN_VALIDATOR); Loading
core/java/android/view/accessibility/AccessibilityManager.java +77 −13 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.accessibilityservice.AccessibilityServiceInfo.FLAG_ENABLE_ import android.Manifest; import android.accessibilityservice.AccessibilityServiceInfo; import android.accessibilityservice.AccessibilityServiceInfo.FeedbackType; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; Loading Loading @@ -54,6 +55,8 @@ import android.view.accessibility.AccessibilityEvent.EventType; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.IntPair; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Collections; import java.util.List; Loading Loading @@ -117,6 +120,39 @@ public final class AccessibilityManager { public static final String ACTION_CHOOSE_ACCESSIBILITY_BUTTON = "com.android.internal.intent.action.CHOOSE_ACCESSIBILITY_BUTTON"; /** * Annotations for content flag of UI. * @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef(flag = true, prefix = { "FLAG_CONTENT_" }, value = { FLAG_CONTENT_ICONS, FLAG_CONTENT_TEXT, FLAG_CONTENT_CONTROLS }) public @interface ContentFlag {} /** * Use this flag to indicate the content of a UI that times out contains icons. * * @see #getRecommendedTimeoutMillis(int, int) */ public static final int FLAG_CONTENT_ICONS = 1; /** * Use this flag to indicate the content of a UI that times out contains text. * * @see #getRecommendedTimeoutMillis(int, int) */ public static final int FLAG_CONTENT_TEXT = 2; /** * Use this flag to indicate the content of a UI that times out contains interactive controls. * * @see #getRecommendedTimeoutMillis(int, int) */ public static final int FLAG_CONTENT_CONTROLS = 4; @UnsupportedAppUsage static final Object sInstanceSync = new Object(); Loading @@ -142,7 +178,8 @@ public final class AccessibilityManager { int mRelevantEventTypes = AccessibilityEvent.TYPES_ALL_MASK; int mMinimumUiTimeout; int mInteractiveUiTimeout; int mNonInteractiveUiTimeout; boolean mIsTouchExplorationEnabled; Loading Loading @@ -304,7 +341,9 @@ public final class AccessibilityManager { } @Override public void notifyServicesStateChanged() { public void notifyServicesStateChanged(long updatedUiTimeout) { updateUiTimeout(updatedUiTimeout); final ArrayMap<AccessibilityServicesStateChangeListener, Handler> listeners; synchronized (mLock) { if (mServicesStateChangeListeners.isEmpty()) { Loading @@ -326,11 +365,6 @@ public final class AccessibilityManager { public void setRelevantEventTypes(int eventTypes) { mRelevantEventTypes = eventTypes; } @Override public void setMinimumUiTimeout(int uiTimeout) { mMinimumUiTimeout = uiTimeout; } }; /** Loading Loading @@ -840,16 +874,35 @@ public final class AccessibilityManager { } /** * Get the minimum timeout for changes to the UI needed by this user. Controls should remain * Get the recommended timeout for changes to the UI needed by this user. Controls should remain * on the screen for at least this long to give users time to react. Some users may need * extra time to review the controls, or to reach them, or to activate assistive technology * to activate the controls automatically. * * @return The minimum ui timeout for the current user in milliseconds. * {@link Integer#MAX_VALUE} if timeout is infinite. * <p> * Use the combination of content flags to indicate contents of UI. For example, use * {@code FLAG_CONTENT_ICONS | FLAG_CONTENT_TEXT} for message notification which contains * icons and text, or use {@code FLAG_CONTENT_TEXT | FLAG_CONTENT_CONTROLS} for button dialog * which contains text and button controls. * <p/> * * @param originalTimeout The timeout appropriate for users with no accessibility needs. * @param uiContentFlags The combination of flags {@link #FLAG_CONTENT_ICONS}, * {@link #FLAG_CONTENT_TEXT} or {@Link #CONTENT_CONTROLS} to * indicate the contents of UI. * @return The recommended UI timeout for the current user in milliseconds. */ public int getMinimumUiTimeoutMillis() { return mMinimumUiTimeout; public int getRecommendedTimeoutMillis(int originalTimeout, @ContentFlag int uiContentFlags) { boolean hasControls = (uiContentFlags & FLAG_CONTENT_CONTROLS) != 0; boolean hasIconsOrText = (uiContentFlags & FLAG_CONTENT_ICONS) != 0 || (uiContentFlags & FLAG_CONTENT_TEXT) != 0; int recommendedTimeout = originalTimeout; if (hasControls) { recommendedTimeout = Math.max(recommendedTimeout, mInteractiveUiTimeout); } if (hasIconsOrText) { recommendedTimeout = Math.max(recommendedTimeout, mNonInteractiveUiTimeout); } return recommendedTimeout; } /** Loading Loading @@ -1192,7 +1245,7 @@ public final class AccessibilityManager { final long userStateAndRelevantEvents = service.addClient(mClient, mUserId); setStateLocked(IntPair.first(userStateAndRelevantEvents)); mRelevantEventTypes = IntPair.second(userStateAndRelevantEvents); mMinimumUiTimeout = service.getMinimumUiTimeout(); updateUiTimeout(service.getRecommendedTimeoutMillis()); mService = service; } catch (RemoteException re) { Log.e(LOG_TAG, "AccessibilityManagerService is dead", re); Loading Loading @@ -1265,6 +1318,17 @@ public final class AccessibilityManager { } } /** * Update interactive and non-interactive UI timeout. * * @param uiTimeout A pair of {@code int}s. First integer for interactive one, and second * integer for non-interactive one. */ private void updateUiTimeout(long uiTimeout) { mInteractiveUiTimeout = IntPair.first(uiTimeout); mNonInteractiveUiTimeout = IntPair.second(uiTimeout); } /** * Determines if the accessibility button within the system navigation area is supported. * Loading
core/java/android/view/accessibility/IAccessibilityManager.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -76,5 +76,5 @@ interface IAccessibilityManager { // System process only boolean sendFingerprintGesture(int gestureKeyCode); int getMinimumUiTimeout(); long getRecommendedTimeoutMillis(); }