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
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user