summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java2
-rw-r--r--services/core/java/com/android/server/media/MediaSessionService.java46
-rw-r--r--services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java3
3 files changed, 39 insertions, 12 deletions
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java
index f9f56ee4d134..266093229186 100644
--- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java
+++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java
@@ -316,6 +316,8 @@ public class FingerprintAuthenticationClient
if (getBiometricContext().isAwake()) {
mALSProbeCallback.getProbe().enable();
+ } else {
+ mALSProbeCallback.getProbe().disable();
}
} catch (RemoteException e) {
Slog.e(TAG, "Remote exception", e);
diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java
index f02a3fff12f5..1ebc856af2d8 100644
--- a/services/core/java/com/android/server/media/MediaSessionService.java
+++ b/services/core/java/com/android/server/media/MediaSessionService.java
@@ -197,6 +197,16 @@ public class MediaSessionService extends SystemService implements Monitor {
@GuardedBy("mLock")
private final Map<Integer, Set<Notification>> mMediaNotifications = new HashMap<>();
+ /**
+ * Holds all {@link MediaSessionRecordImpl} which we've reported as being {@link
+ * ActivityManagerInternal#startForegroundServiceDelegate user engaged}.
+ *
+ * <p>This map simply prevents invoking {@link
+ * ActivityManagerInternal#startForegroundServiceDelegate} more than once per session.
+ */
+ @GuardedBy("mLock")
+ private final Set<MediaSessionRecordImpl> mFgsAllowedMediaSessionRecords = new HashSet<>();
+
// The FullUserRecord of the current users. (i.e. The foreground user that isn't a profile)
// It's always not null after the MediaSessionService is started.
private FullUserRecord mCurrentFullUserRecord;
@@ -704,15 +714,23 @@ public class MediaSessionService extends SystemService implements Monitor {
int uid = mediaSessionRecord.getUid();
for (Notification mediaNotification : mMediaNotifications.getOrDefault(uid, Set.of())) {
if (mediaSessionRecord.isLinkedToNotification(mediaNotification)) {
- startFgsDelegate(mediaSessionRecord.getForegroundServiceDelegationOptions());
+ startFgsDelegateLocked(mediaSessionRecord);
return;
}
}
}
}
- private void startFgsDelegate(
- ForegroundServiceDelegationOptions foregroundServiceDelegationOptions) {
+ @GuardedBy("mLock")
+ private void startFgsDelegateLocked(MediaSessionRecordImpl mediaSessionRecord) {
+ ForegroundServiceDelegationOptions foregroundServiceDelegationOptions =
+ mediaSessionRecord.getForegroundServiceDelegationOptions();
+ if (foregroundServiceDelegationOptions == null) {
+ return; // This record doesn't support FGS. Typically a MediaSession2 record.
+ }
+ if (!mFgsAllowedMediaSessionRecords.add(mediaSessionRecord)) {
+ return; // This record is already FGS-started.
+ }
final long token = Binder.clearCallingIdentity();
try {
Log.i(
@@ -754,12 +772,21 @@ public class MediaSessionService extends SystemService implements Monitor {
}
}
- stopFgsDelegate(foregroundServiceDelegationOptions);
+ stopFgsDelegateLocked(mediaSessionRecord);
}
}
- private void stopFgsDelegate(
- ForegroundServiceDelegationOptions foregroundServiceDelegationOptions) {
+ @GuardedBy("mLock")
+ private void stopFgsDelegateLocked(MediaSessionRecordImpl mediaSessionRecord) {
+ ForegroundServiceDelegationOptions foregroundServiceDelegationOptions =
+ mediaSessionRecord.getForegroundServiceDelegationOptions();
+ if (foregroundServiceDelegationOptions == null) {
+ return; // This record doesn't support FGS. Typically a MediaSession2 record.
+ }
+ if (!mFgsAllowedMediaSessionRecords.remove(mediaSessionRecord)) {
+ return; // This record is not FGS-started. No need to stop it.
+ }
+
final long token = Binder.clearCallingIdentity();
try {
Log.i(
@@ -3209,11 +3236,8 @@ public class MediaSessionService extends SystemService implements Monitor {
mMediaNotifications.get(uid).add(postedNotification);
for (MediaSessionRecordImpl mediaSessionRecord :
mUserEngagedSessionsForFgs.getOrDefault(uid, Set.of())) {
- ForegroundServiceDelegationOptions foregroundServiceDelegationOptions =
- mediaSessionRecord.getForegroundServiceDelegationOptions();
- if (foregroundServiceDelegationOptions != null
- && mediaSessionRecord.isLinkedToNotification(postedNotification)) {
- startFgsDelegate(foregroundServiceDelegationOptions);
+ if (mediaSessionRecord.isLinkedToNotification(postedNotification)) {
+ startFgsDelegateLocked(mediaSessionRecord);
return;
}
}
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java
index 40de1b253dea..182d60328440 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java
@@ -320,7 +320,7 @@ public class FingerprintAuthenticationClientTest {
}
@Test
- public void luxProbeNotEnabledOnStartWhenNotWake() throws RemoteException {
+ public void luxProbeDisabledOnStartWhenNotWake() throws RemoteException {
luxProbeEnabledOnStart(false /* isAwake */);
}
@@ -337,6 +337,7 @@ public class FingerprintAuthenticationClientTest {
.getValue().toAidlContext());
verify(mLuxProbe, isAwake ? times(1) : never()).enable();
+ verify(mLuxProbe, isAwake ? never() : times(1)).disable();
}
@Test