summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/media/MediaSessionService.java53
1 files changed, 30 insertions, 23 deletions
diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java
index 8cb5cef38ec6..f97f6d2350bc 100644
--- a/services/core/java/com/android/server/media/MediaSessionService.java
+++ b/services/core/java/com/android/server/media/MediaSessionService.java
@@ -105,6 +105,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
/**
@@ -151,7 +152,9 @@ public class MediaSessionService extends SystemService implements Monitor {
private boolean mHasFeatureLeanback;
private ActivityManagerInternal mActivityManagerInternal;
private UsageStatsManagerInternal mUsageStatsManagerInternal;
- private final Set<Integer> mUserEngagingSessions = new HashSet<>();
+
+ /* Maps uid with all user engaging session tokens associated to it */
+ private final Map<Integer, Set<MediaSession.Token>> mUserEngagingSessions = new HashMap<>();
// 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.
@@ -615,32 +618,36 @@ public class MediaSessionService extends SystemService implements Monitor {
}
private void reportMediaInteractionEvent(MediaSessionRecordImpl record, boolean userEngaged) {
- if (!android.app.usage.Flags.userInteractionTypeApi()) {
- return;
- }
+ if (!android.app.usage.Flags.userInteractionTypeApi()
+ || !(record instanceof MediaSessionRecord)) {
+ return;
+ }
- String packageName = record.getPackageName();
- int sessionUid = record.getUid();
- String actionToLog = null;
- if (userEngaged) {
- if (!mUserEngagingSessions.contains(sessionUid)) {
- actionToLog = "start";
- }
- mUserEngagingSessions.add(sessionUid);
- } else {
- if (mUserEngagingSessions.contains(sessionUid)) {
- actionToLog = "stop";
- }
+ String packageName = record.getPackageName();
+ int sessionUid = record.getUid();
+ String actionToLog = null;
+ MediaSession.Token token = ((MediaSessionRecord) record).getSessionToken();
+ if (userEngaged) {
+ if (!mUserEngagingSessions.containsKey(sessionUid)) {
+ mUserEngagingSessions.put(sessionUid, new HashSet<>());
+ actionToLog = "start";
+ }
+ mUserEngagingSessions.get(sessionUid).add(token);
+ } else if (mUserEngagingSessions.containsKey(sessionUid)) {
+ mUserEngagingSessions.get(sessionUid).remove(token);
+ if (mUserEngagingSessions.get(sessionUid).isEmpty()) {
+ actionToLog = "stop";
mUserEngagingSessions.remove(sessionUid);
}
+ }
- if (actionToLog != null) {
- PersistableBundle extras = new PersistableBundle();
- extras.putString(UsageStatsManager.EXTRA_EVENT_CATEGORY, "android.media");
- extras.putString(UsageStatsManager.EXTRA_EVENT_ACTION, actionToLog);
- mUsageStatsManagerInternal.reportUserInteractionEvent(
- packageName, record.getUserId(), extras);
- }
+ if (actionToLog != null) {
+ PersistableBundle extras = new PersistableBundle();
+ extras.putString(UsageStatsManager.EXTRA_EVENT_CATEGORY, "android.media");
+ extras.putString(UsageStatsManager.EXTRA_EVENT_ACTION, actionToLog);
+ mUsageStatsManagerInternal.reportUserInteractionEvent(
+ packageName, record.getUserId(), extras);
+ }
}
void tempAllowlistTargetPkgIfPossible(int targetUid, String targetPackage,