Merge "Update signature on remove sensor privacy listener API" into sc-dev am: 59bdbf467f am: 368439e9f1

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14649887

Change-Id: I187daef0a1127bf762a2812ae3e4ddbfb9fe3d51
This commit is contained in:
TreeHugger Robot
2021-05-22 02:23:58 +00:00
committed by Automerger Merge Worker
4 changed files with 35 additions and 7 deletions

View File

@@ -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 {

View File

@@ -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);

View File

@@ -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();
}

View File

@@ -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);
}
}
}