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

Commit c7575771 authored by Aurélien Pomini's avatar Aurélien Pomini
Browse files

Revert "Add API to get/listen to the color contrast setting"

Revert submission 20579497-color_contrast_api

Reason for revert: the contrast API will move to UiModeManager

Reverted changes: /q/submissionid:20579497-color_contrast_api

Bug: 259091608
Test: atest AccessibilityManagerTest

Change-Id: I2a6c4f5313a0328093ca8125302e43b20dbdd352
parent 4bb03bd9
Loading
Loading
Loading
Loading
+0 −7
Original line number Diff line number Diff line
@@ -54145,14 +54145,12 @@ package android.view.accessibility {
    method public void addAudioDescriptionRequestedChangeListener(@NonNull java.util.concurrent.Executor, @NonNull android.view.accessibility.AccessibilityManager.AudioDescriptionRequestedChangeListener);
    method public boolean addTouchExplorationStateChangeListener(@NonNull android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener);
    method public void addTouchExplorationStateChangeListener(@NonNull android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener, @Nullable android.os.Handler);
    method public void addUiContrastChangeListener(@NonNull java.util.concurrent.Executor, @NonNull android.view.accessibility.AccessibilityManager.UiContrastChangeListener);
    method @ColorInt public int getAccessibilityFocusColor();
    method public int getAccessibilityFocusStrokeWidth();
    method @Deprecated public 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 getRecommendedTimeoutMillis(int, int);
    method @FloatRange(from=-1.0F, to=1.0f) public float getUiContrast();
    method public void interrupt();
    method public static boolean isAccessibilityButtonSupported();
    method public boolean isAudioDescriptionRequested();
@@ -54164,7 +54162,6 @@ package android.view.accessibility {
    method public boolean removeAccessibilityStateChangeListener(@NonNull android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
    method public boolean removeAudioDescriptionRequestedChangeListener(@NonNull android.view.accessibility.AccessibilityManager.AudioDescriptionRequestedChangeListener);
    method public boolean removeTouchExplorationStateChangeListener(@NonNull android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener);
    method public void removeUiContrastChangeListener(@NonNull android.view.accessibility.AccessibilityManager.UiContrastChangeListener);
    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
@@ -54187,10 +54184,6 @@ package android.view.accessibility {
    method public void onTouchExplorationStateChanged(boolean);
  }
  public static interface AccessibilityManager.UiContrastChangeListener {
    method public void onUiContrastChanged(@FloatRange(from=-1.0F, to=1.0f) float);
  }
  public class AccessibilityNodeInfo implements android.os.Parcelable {
    ctor public AccessibilityNodeInfo();
    ctor public AccessibilityNodeInfo(@NonNull android.view.View);
+2 −117
Original line number Diff line number Diff line
@@ -25,7 +25,6 @@ import android.accessibilityservice.AccessibilityServiceInfo.FeedbackType;
import android.accessibilityservice.AccessibilityShortcutInfo;
import android.annotation.CallbackExecutor;
import android.annotation.ColorInt;
import android.annotation.FloatRange;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -76,7 +75,6 @@ import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.Executor;

/**
@@ -139,21 +137,6 @@ public final class AccessibilityManager {
    /** @hide */
    public static final int AUTOCLICK_DELAY_DEFAULT = 600;

    /**
     * The contrast is defined as a float in [-1, 1], with a default value of 0.
     * @hide
     */
    public static final float CONTRAST_MIN_VALUE = -1f;

    /** @hide */
    public static final float CONTRAST_MAX_VALUE = 1f;

    /** @hide */
    public static final float CONTRAST_DEFAULT_VALUE = 0f;

    /** @hide */
    public static final float CONTRAST_NOT_SET = Float.MIN_VALUE;

    /**
     * Activity action: Launch UI to manage which accessibility service or feature is assigned
     * to the navigation bar Accessibility button.
@@ -288,8 +271,6 @@ public final class AccessibilityManager {
    @UnsupportedAppUsage(trackingBug = 123768939L)
    boolean mIsHighTextContrastEnabled;

    private float mUiContrast;

    boolean mIsAudioDescriptionByDefaultRequested;

    // accessibility tracing state
@@ -314,9 +295,6 @@ public final class AccessibilityManager {
    private final ArrayMap<HighTextContrastChangeListener, Handler>
            mHighTextContrastStateChangeListeners = new ArrayMap<>();

    private final ArrayMap<UiContrastChangeListener, Executor>
            mUiContrastChangeListeners = new ArrayMap<>();

    private final ArrayMap<AccessibilityServicesStateChangeListener, Executor>
            mServicesStateChangeListeners = new ArrayMap<>();

@@ -411,21 +389,6 @@ public final class AccessibilityManager {
        void onHighTextContrastStateChanged(boolean enabled);
    }

    /**
     * Listener for the UI contrast. To listen for changes to
     * the UI contrast on the device, implement this interface and
     * register it with the system by calling {@link #addUiContrastChangeListener}.
     */
    public interface UiContrastChangeListener {

        /**
         * Called when the color contrast enabled state changes.
         *
         * @param uiContrast The color contrast as in {@link #getUiContrast}
         */
        void onUiContrastChanged(@FloatRange(from = -1.0f, to = 1.0f) float uiContrast);
    }

    /**
     * Listener for the audio description by default state. To listen for
     * changes to the audio description by default state on the device,
@@ -540,16 +503,6 @@ public final class AccessibilityManager {
                updateFocusAppearanceLocked(strokeWidth, color);
            }
        }

        @Override
        public void setUiContrast(float contrast) {
            synchronized (mLock) {
                // if value changed in the settings, update the cached value and notify listeners
                if (Math.abs(mUiContrast - contrast) < 1e-10) return;
                mUiContrast = contrast;
            }
            mHandler.obtainMessage(MyCallback.MSG_NOTIFY_CONTRAST_CHANGED).sendToTarget();
        }
    };

    /**
@@ -720,7 +673,7 @@ public final class AccessibilityManager {
    /**
     * Returns if the high text contrast in the system is enabled.
     * <p>
     * <strong>Note:</strong> You need to query this only if your application is
     * <strong>Note:</strong> You need to query this only if you application is
     * doing its own rendering and does not rely on the platform rendering pipeline.
     * </p>
     *
@@ -739,24 +692,6 @@ public final class AccessibilityManager {
        }
    }

    /**
     * Returns the color contrast for the user.
     * <p>
     * <strong>Note:</strong> You need to query this only if your application is
     * doing its own rendering and does not rely on the platform rendering pipeline.
     * </p>
     * @return The color contrast, float in [-1, 1] where
     *          0 corresponds to the default contrast
     *         -1 corresponds to the minimum contrast that the user can set
     *          1 corresponds to the maximum contrast that the user can set
     */
    @FloatRange(from = -1.0f, to = 1.0f)
    public float getUiContrast() {
        synchronized (mLock) {
            return mUiContrast;
        }
    }

    /**
     * Sends an {@link AccessibilityEvent}.
     *
@@ -1345,35 +1280,6 @@ public final class AccessibilityManager {
        }
    }

    /**
     * Registers a {@link UiContrastChangeListener} for the current user.
     *
     * @param executor The executor on which the listener should be called back.
     * @param listener The listener.
     */
    public void addUiContrastChangeListener(
            @NonNull @CallbackExecutor Executor executor,
            @NonNull UiContrastChangeListener listener) {
        Objects.requireNonNull(executor);
        Objects.requireNonNull(listener);
        synchronized (mLock) {
            mUiContrastChangeListeners.put(listener, executor);
        }
    }

    /**
     * Unregisters a {@link UiContrastChangeListener} for the current user.
     * If the listener was not registered, does nothing and returns.
     *
     * @param listener The listener to unregister.
     */
    public void removeUiContrastChangeListener(@NonNull UiContrastChangeListener listener) {
        Objects.requireNonNull(listener);
        synchronized (mLock) {
            mUiContrastChangeListeners.remove(listener);
        }
    }

    /**
     * Registers a {@link AudioDescriptionRequestedChangeListener}
     * for changes in the audio description by default state of the system.
@@ -2232,7 +2138,6 @@ public final class AccessibilityManager {
            mRelevantEventTypes = IntPair.second(userStateAndRelevantEvents);
            updateUiTimeout(service.getRecommendedTimeoutMillis());
            updateFocusAppearanceLocked(service.getFocusStrokeWidth(), service.getFocusColor());
            mUiContrast = service.getUiContrast();
            mService = service;
        } catch (RemoteException re) {
            Log.e(LOG_TAG, "AccessibilityManagerService is dead", re);
@@ -2310,22 +2215,6 @@ public final class AccessibilityManager {
        }
    }

    /**
     * Notifies the registered {@link UiContrastChangeListener}s if the value changed.
     */
    private void notifyUiContrastChanged() {
        final ArrayMap<UiContrastChangeListener, Executor> listeners;
        synchronized (mLock) {
            listeners = new ArrayMap<>(mUiContrastChangeListeners);
        }

        listeners.entrySet().forEach(entry -> {
            UiContrastChangeListener listener = entry.getKey();
            Executor executor = entry.getValue();
            executor.execute(() -> listener.onUiContrastChanged(mUiContrast));
        });
    }

    /**
     * Notifies the registered {@link AudioDescriptionStateChangeListener}s.
     */
@@ -2416,7 +2305,6 @@ public final class AccessibilityManager {

    private final class MyCallback implements Handler.Callback {
        public static final int MSG_SET_STATE = 1;
        public static final int MSG_NOTIFY_CONTRAST_CHANGED = 2;

        @Override
        public boolean handleMessage(Message message) {
@@ -2428,9 +2316,6 @@ public final class AccessibilityManager {
                        setStateLocked(state);
                    }
                } break;
                case MSG_NOTIFY_CONTRAST_CHANGED: {
                    notifyUiContrastChanged();
                }
            }
            return true;
        }
+0 −2
Original line number Diff line number Diff line
@@ -120,8 +120,6 @@ interface IAccessibilityManager {
    // Used by UiAutomation for tests on the InputFilter
    void injectInputEventToInputFilter(in InputEvent event);

    float getUiContrast();

    boolean startFlashNotificationSequence(String opPkg, int reason, IBinder token);
    boolean stopFlashNotificationSequence(String opPkg);
    boolean startFlashNotificationEvent(String opPkg, int reason, String reasonPkg);
+0 −2
Original line number Diff line number Diff line
@@ -31,6 +31,4 @@ oneway interface IAccessibilityManagerClient {
    void setRelevantEventTypes(int eventTypes);

    void setFocusAppearance(int strokeWidth, int color);

    void setUiContrast(float contrast);
}
+0 −51
Original line number Diff line number Diff line
@@ -26,11 +26,8 @@ import static android.accessibilityservice.AccessibilityTrace.FLAGS_USER_BROADCA
import static android.accessibilityservice.AccessibilityTrace.FLAGS_WINDOW_MAGNIFICATION_CONNECTION;
import static android.accessibilityservice.AccessibilityTrace.FLAGS_WINDOW_MANAGER_INTERNAL;
import static android.provider.Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED;
import static android.provider.Settings.Secure.CONTRAST_LEVEL;
import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_BUTTON;
import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_SHORTCUT_KEY;
import static android.view.accessibility.AccessibilityManager.CONTRAST_DEFAULT_VALUE;
import static android.view.accessibility.AccessibilityManager.CONTRAST_NOT_SET;
import static android.view.accessibility.AccessibilityManager.FlashNotificationReason;
import static android.view.accessibility.AccessibilityManager.ShortcutType;

@@ -1997,16 +1994,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
        return false;
    }

    private boolean readUiContrastLocked(AccessibilityUserState userState) {
        float contrast = Settings.Secure.getFloatForUser(mContext.getContentResolver(),
                CONTRAST_LEVEL, CONTRAST_DEFAULT_VALUE, userState.mUserId);
        if (Math.abs(userState.getUiContrastLocked() - contrast) >= 1e-10) {
            userState.setUiContrastLocked(contrast);
            return true;
        }
        return false;
    }

    /**
     * Performs {@link AccessibilityService}s delayed notification. The delay is configurable
     * and denotes the period after the last event before notifying the service.
@@ -2676,7 +2663,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
        somethingChanged |= readMagnificationCapabilitiesLocked(userState);
        somethingChanged |= readMagnificationFollowTypingLocked(userState);
        somethingChanged |= readAlwaysOnMagnificationLocked(userState);
        somethingChanged |= readUiContrastLocked(userState);
        return somethingChanged;
    }

@@ -3851,19 +3837,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
        return mProxyManager.isProxyed(displayId);
    }

    @Override public float getUiContrast() {
        if (mTraceManager.isA11yTracingEnabledForTypes(FLAGS_ACCESSIBILITY_MANAGER)) {
            mTraceManager.logTrace(LOG_TAG + ".getUiContrast", FLAGS_ACCESSIBILITY_MANAGER);
        }
        synchronized (mLock) {
            AccessibilityUserState userState = getCurrentUserStateLocked();
            float contrast = userState.getUiContrastLocked();
            if (contrast != CONTRAST_NOT_SET) return contrast;
            readUiContrastLocked(userState);
            return userState.getUiContrastLocked();
        }
    }

    @Override
    public boolean startFlashNotificationSequence(String opPkg,
            @FlashNotificationReason int reason, IBinder token) {
@@ -4350,9 +4323,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
        private final Uri mAlwaysOnMagnificationUri = Settings.Secure.getUriFor(
                Settings.Secure.ACCESSIBILITY_MAGNIFICATION_ALWAYS_ON_ENABLED);

        private final Uri mUiContrastUri = Settings.Secure.getUriFor(
                CONTRAST_LEVEL);

        public AccessibilityContentObserver(Handler handler) {
            super(handler);
        }
@@ -4395,8 +4365,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
                    mMagnificationFollowTypingUri, false, this, UserHandle.USER_ALL);
            contentResolver.registerContentObserver(
                    mAlwaysOnMagnificationUri, false, this, UserHandle.USER_ALL);
            contentResolver.registerContentObserver(
                    mUiContrastUri, false, this, UserHandle.USER_ALL);
        }

        @Override
@@ -4468,10 +4436,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
                    readMagnificationFollowTypingLocked(userState);
                } else if (mAlwaysOnMagnificationUri.equals(uri)) {
                    readAlwaysOnMagnificationLocked(userState);
                } else if (mUiContrastUri.equals(uri)) {
                    if (readUiContrastLocked(userState)) {
                        updateUiContrastLocked(userState);
                    }
                }
            }
        }
@@ -4788,22 +4752,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
                        userState.getFocusColorLocked());
            }));
        });
    }

    private void updateUiContrastLocked(AccessibilityUserState userState) {
        if (userState.mUserId != mCurrentUserId) {
            return;
        }
        if (mTraceManager.isA11yTracingEnabledForTypes(FLAGS_ACCESSIBILITY_SERVICE_CLIENT)) {
            mTraceManager.logTrace(LOG_TAG + ".updateUiContrastLocked",
                    FLAGS_ACCESSIBILITY_SERVICE_CLIENT, "userState=" + userState);
        }
        float contrast = userState.getUiContrastLocked();
        mMainHandler.post(() -> {
            broadcastToClients(userState, ignoreRemoteException(client -> {
                client.mCallback.setUiContrast(contrast);
            }));
        });
    }

    public AccessibilityTraceManager getTraceManager() {
Loading