diff options
| author | Rhed Jao <rhedjao@google.com> | 2018-09-13 01:44:13 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-09-13 01:44:13 +0000 |
| commit | f78014e7be1964f0643b4fd3fb8118b500e023d0 (patch) | |
| tree | 32ab3db12aa86fd98faf943cbcc058eb2493c023 /core/java | |
| parent | 37f3eae16b5774bee8f8fce496b310da20797935 (diff) | |
| parent | e972881f59fe3f0d280a0dd9beb0c963390ad818 (diff) | |
Merge "Adding a11y ui minimum timeout api."
Diffstat (limited to 'core/java')
5 files changed, 87 insertions, 0 deletions
diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java index f0a0e88310f9..759443dcf476 100644 --- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java +++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java @@ -76,6 +76,7 @@ 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 * @see AccessibilityService * @see android.view.accessibility.AccessibilityEvent * @see android.view.accessibility.AccessibilityManager @@ -426,6 +427,13 @@ public class AccessibilityServiceInfo implements Parcelable { public boolean crashed; /** + * The minimum timeout in milliseconds that UI controls need to remain on the screen. + * + * @see #setMinimumUiTimeoutMillis + */ + private int mMinimumUiTimeout; + + /** * The component name the accessibility service. */ private ComponentName mComponentName; @@ -529,6 +537,9 @@ 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, + 0); flags = asAttributes.getInt( com.android.internal.R.styleable.AccessibilityService_accessibilityFlags, 0); mSettingsActivityName = asAttributes.getString( @@ -598,6 +609,7 @@ public class AccessibilityServiceInfo implements Parcelable { packageNames = other.packageNames; feedbackType = other.feedbackType; notificationTimeout = other.notificationTimeout; + mMinimumUiTimeout = other.mMinimumUiTimeout; flags = other.flags; } @@ -755,6 +767,29 @@ public class AccessibilityServiceInfo implements Parcelable { return null; } + /** + * Set the minimum time that 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. + */ + public void setMinimumUiTimeoutMillis(int timeout) { + mMinimumUiTimeout = timeout; + } + + /** + * Get the minimum ui timeout. + * + * @see #setMinimumUiTimeoutMillis + * @return The timeout in milliseconds. + */ + public int getMinimumUiTimeoutMillis() { + return mMinimumUiTimeout; + } + /** {@hide} */ public boolean isDirectBootAware() { return ((flags & FLAG_FORCE_DIRECT_BOOT_AWARE) != 0) @@ -773,6 +808,7 @@ public class AccessibilityServiceInfo implements Parcelable { parcel.writeStringArray(packageNames); parcel.writeInt(feedbackType); parcel.writeLong(notificationTimeout); + parcel.writeInt(mMinimumUiTimeout); parcel.writeInt(flags); parcel.writeInt(crashed ? 1 : 0); parcel.writeParcelable(mComponentName, flagz); @@ -790,6 +826,7 @@ public class AccessibilityServiceInfo implements Parcelable { packageNames = parcel.readStringArray(); feedbackType = parcel.readInt(); notificationTimeout = parcel.readLong(); + mMinimumUiTimeout = parcel.readInt(); flags = parcel.readInt(); crashed = parcel.readInt() != 0; mComponentName = parcel.readParcelable(this.getClass().getClassLoader()); @@ -840,6 +877,8 @@ public class AccessibilityServiceInfo implements Parcelable { stringBuilder.append(", "); stringBuilder.append("notificationTimeout: ").append(notificationTimeout); stringBuilder.append(", "); + stringBuilder.append("minimumUiTimeout: ").append(mMinimumUiTimeout); + stringBuilder.append(", "); appendFlags(stringBuilder, flags); stringBuilder.append(", "); stringBuilder.append("id: ").append(getId()); diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index e0073985ce78..026195e64a97 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -6508,6 +6508,25 @@ 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 + * + * Type: int (0 for false, 1 for true) + * @hide + */ + public static final String ACCESSIBILITY_MINIMUM_UI_TIMEOUT_ENABLED = + "accessibility_minimum_ui_timeout_enabled"; + + /** + * Setting that specifies ui minimum timeout in milliseconds. + * + * @see #ACCESSIBILITY_MINIMUM_UI_TIMEOUT_ENABLED + * @hide + */ + public static final String ACCESSIBILITY_MINIMUM_UI_TIMEOUT_MS = + "accessibility_minimum_ui_timeout_ms"; + + /** * List of the enabled print services. * * N and beyond uses {@link #DISABLED_PRINT_SERVICES}. But this might be used in an upgrade @@ -8195,6 +8214,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, }; /** @@ -8349,6 +8370,8 @@ 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); } /** diff --git a/core/java/android/view/accessibility/AccessibilityManager.java b/core/java/android/view/accessibility/AccessibilityManager.java index c59c491be878..e88682ea6287 100644 --- a/core/java/android/view/accessibility/AccessibilityManager.java +++ b/core/java/android/view/accessibility/AccessibilityManager.java @@ -139,6 +139,8 @@ public final class AccessibilityManager { int mRelevantEventTypes = AccessibilityEvent.TYPES_ALL_MASK; + int mMinimumUiTimeout; + boolean mIsTouchExplorationEnabled; @UnsupportedAppUsage @@ -320,6 +322,11 @@ public final class AccessibilityManager { public void setRelevantEventTypes(int eventTypes) { mRelevantEventTypes = eventTypes; } + + @Override + public void setMinimumUiTimeout(int uiTimeout) { + mMinimumUiTimeout = uiTimeout; + } }; /** @@ -827,6 +834,19 @@ public final class AccessibilityManager { } /** + * Get the minimum 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. + */ + public int getMinimumUiTimeoutMillis() { + return mMinimumUiTimeout; + } + + /** * Get the preparers that are registered for an accessibility ID * * @param id The ID of interest @@ -1139,6 +1159,7 @@ public final class AccessibilityManager { final long userStateAndRelevantEvents = service.addClient(mClient, mUserId); setStateLocked(IntPair.first(userStateAndRelevantEvents)); mRelevantEventTypes = IntPair.second(userStateAndRelevantEvents); + mMinimumUiTimeout = service.getMinimumUiTimeout(); mService = service; } catch (RemoteException re) { Log.e(LOG_TAG, "AccessibilityManagerService is dead", re); diff --git a/core/java/android/view/accessibility/IAccessibilityManager.aidl b/core/java/android/view/accessibility/IAccessibilityManager.aidl index c93e2c15407b..3e2ef186f793 100644 --- a/core/java/android/view/accessibility/IAccessibilityManager.aidl +++ b/core/java/android/view/accessibility/IAccessibilityManager.aidl @@ -72,4 +72,6 @@ interface IAccessibilityManager { // System process only boolean sendFingerprintGesture(int gestureKeyCode); + + int getMinimumUiTimeout(); } diff --git a/core/java/android/view/accessibility/IAccessibilityManagerClient.aidl b/core/java/android/view/accessibility/IAccessibilityManagerClient.aidl index 9cc0315280c7..d2ddca3acae7 100644 --- a/core/java/android/view/accessibility/IAccessibilityManagerClient.aidl +++ b/core/java/android/view/accessibility/IAccessibilityManagerClient.aidl @@ -29,4 +29,6 @@ oneway interface IAccessibilityManagerClient { void notifyServicesStateChanged(); void setRelevantEventTypes(int eventTypes); + + void setMinimumUiTimeout(int uiTimeout); } |
