summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorRhed Jao <rhedjao@google.com>2018-09-13 01:44:13 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2018-09-13 01:44:13 +0000
commitf78014e7be1964f0643b4fd3fb8118b500e023d0 (patch)
tree32ab3db12aa86fd98faf943cbcc058eb2493c023 /core/java
parent37f3eae16b5774bee8f8fce496b310da20797935 (diff)
parente972881f59fe3f0d280a0dd9beb0c963390ad818 (diff)
Merge "Adding a11y ui minimum timeout api."
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/accessibilityservice/AccessibilityServiceInfo.java39
-rw-r--r--core/java/android/provider/Settings.java23
-rw-r--r--core/java/android/view/accessibility/AccessibilityManager.java21
-rw-r--r--core/java/android/view/accessibility/IAccessibilityManager.aidl2
-rw-r--r--core/java/android/view/accessibility/IAccessibilityManagerClient.aidl2
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);
}