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

Commit 6c8326f0 authored by Evan Severson's avatar Evan Severson
Browse files

Update signature on remove sensor privacy listener API

If a listener can be registered for multiple sensors they should be able
to be removed individually.

Test: Build
Bug: 181681375
Change-Id: I04b867de8140adc8db0137e7d13c0f8d1a966a5e
parent 92c4b3d3
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3117,7 +3117,7 @@ package android.hardware {
    method @RequiresPermission(android.Manifest.permission.OBSERVE_SENSOR_PRIVACY) public void addSensorPrivacyListener(int, @NonNull android.hardware.SensorPrivacyManager.OnSensorPrivacyChangedListener);
    method @RequiresPermission(android.Manifest.permission.OBSERVE_SENSOR_PRIVACY) public void addSensorPrivacyListener(int, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.SensorPrivacyManager.OnSensorPrivacyChangedListener);
    method @RequiresPermission(android.Manifest.permission.OBSERVE_SENSOR_PRIVACY) public boolean isSensorPrivacyEnabled(int);
    method @RequiresPermission(android.Manifest.permission.OBSERVE_SENSOR_PRIVACY) public void removeSensorPrivacyListener(@NonNull android.hardware.SensorPrivacyManager.OnSensorPrivacyChangedListener);
    method @RequiresPermission(android.Manifest.permission.OBSERVE_SENSOR_PRIVACY) public void removeSensorPrivacyListener(int, @NonNull android.hardware.SensorPrivacyManager.OnSensorPrivacyChangedListener);
  }
  public static interface SensorPrivacyManager.OnSensorPrivacyChangedListener {
+2 −0
Original line number Diff line number Diff line
@@ -33,6 +33,8 @@ interface ISensorPrivacyManager {

    void removeSensorPrivacyListener(in ISensorPrivacyListener listener);

    void removeIndividualSensorPrivacyListener(int sensor, in ISensorPrivacyListener listener);

    boolean isSensorPrivacyEnabled();

    boolean isIndividualSensorPrivacyEnabled(int userId, int sensor);
+5 −3
Original line number Diff line number Diff line
@@ -286,13 +286,15 @@ public final class SensorPrivacyManager {
     */
    @SystemApi
    @RequiresPermission(Manifest.permission.OBSERVE_SENSOR_PRIVACY)
    public void removeSensorPrivacyListener(@NonNull OnSensorPrivacyChangedListener listener) {
    public void removeSensorPrivacyListener(@Sensors.Sensor int sensor,
            @NonNull OnSensorPrivacyChangedListener listener) {
        synchronized (mListeners) {
            for (int i = 0; i < mIndividualListeners.size(); i++) {
                Pair<OnSensorPrivacyChangedListener, Integer> pair = mIndividualListeners.keyAt(i);
                if (pair.first.equals(listener)) {
                if (pair.second == sensor && pair.first.equals(listener)) {
                    try {
                        mService.removeSensorPrivacyListener(mIndividualListeners.valueAt(i));
                        mService.removeIndividualSensorPrivacyListener(sensor,
                                mIndividualListeners.valueAt(i));
                    } catch (RemoteException e) {
                        throw e.rethrowFromSystemServer();
                    }
+27 −3
Original line number Diff line number Diff line
@@ -995,6 +995,19 @@ public final class SensorPrivacyService extends SystemService {
            mHandler.removeListener(listener);
        }

        /**
         * Unregisters a listener from sensor privacy state change notifications.
         */
        @Override
        public void removeIndividualSensorPrivacyListener(int sensor,
                ISensorPrivacyListener listener) {
            enforceObserveSensorPrivacyPermission();
            if (listener == null) {
                throw new NullPointerException("listener cannot be null");
            }
            mHandler.removeListener(sensor, listener);
        }

        @Override
        public void suppressIndividualSensorPrivacyReminders(int userId, String packageName,
                IBinder token, boolean suppress) {
@@ -1329,10 +1342,21 @@ public final class SensorPrivacyService extends SystemService {
                    deathRecipient.destroy();
                }
                mListeners.unregister(listener);
            }
        }

        public void removeListener(int sensor, ISensorPrivacyListener listener) {
            synchronized (mListenerLock) {
                DeathRecipient deathRecipient = mDeathRecipients.remove(listener);
                if (deathRecipient != null) {
                    deathRecipient.destroy();
                }

                for (int i = 0, numUsers = mIndividualSensorListeners.size(); i < numUsers; i++) {
                    for (int j = 0, numListeners = mIndividualSensorListeners.valueAt(i).size();
                            j < numListeners; j++) {
                        mIndividualSensorListeners.valueAt(i).valueAt(j).unregister(listener);
                    RemoteCallbackList callbacks =
                            mIndividualSensorListeners.valueAt(i).get(sensor);
                    if (callbacks != null) {
                        callbacks.unregister(listener);
                    }
                }
            }