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

Commit 59bdbf46 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Update signature on remove sensor privacy listener API" into sc-dev

parents b3533c83 6c8326f0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3118,7 +3118,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
@@ -966,6 +966,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) {
@@ -1300,10 +1313,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);
                    }
                }
            }