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

Commit e972881f authored by Rhed Jao's avatar Rhed Jao
Browse files

Adding a11y ui minimum timeout api.

Bug: 111210981
Test: atest SettingsBackupTest
Test: atest AccessibilityManagerTest
Test: atest AccessibilityServiceInfoTest
Change-Id: I706d05f9b4a9e2daec06243493989b442be107db
parent b11dd14d
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -934,6 +934,7 @@ 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 = 16844174; // 0x101058e
    field public static final int minimumVerticalAngle = 16843902; // 0x101047e
    field public static final int mipMap = 16843725; // 0x10103cd
    field public static final int mirrorForRtl = 16843726; // 0x10103ce
@@ -2874,10 +2875,12 @@ 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 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 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
@@ -49486,6 +49489,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 void interrupt();
    method public static boolean isAccessibilityButtonSupported();
    method public boolean isEnabled();
+39 −0
Original line number Diff line number Diff line
@@ -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
@@ -425,6 +426,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.
     */
@@ -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());
+23 −0
Original line number Diff line number Diff line
@@ -6507,6 +6507,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.
         *
@@ -8186,6 +8205,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,
        };
        /**
@@ -8339,6 +8360,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);
        }
        /**
+21 −0
Original line number Diff line number Diff line
@@ -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;
        }
    };

    /**
@@ -826,6 +833,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
     *
@@ -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);
+2 −0
Original line number Diff line number Diff line
@@ -72,4 +72,6 @@ interface IAccessibilityManager {

    // System process only
    boolean sendFingerprintGesture(int gestureKeyCode);

    int getMinimumUiTimeout();
}
Loading