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

Commit 04dbbab7 authored by Bishoy Gendy's avatar Bishoy Gendy
Browse files

Refactor report user interaction in MediaSessionService

Bug: 295518668
Test: Manual Playback
Change-Id: I2f0bde0a426b83cb2a8bd9fc69d767dcf6efeaaf
parent 2ceb1c52
Loading
Loading
Loading
Loading
+11 −14
Original line number Diff line number Diff line
@@ -105,7 +105,6 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
@@ -154,7 +153,7 @@ public class MediaSessionService extends SystemService implements Monitor {
    private UsageStatsManagerInternal mUsageStatsManagerInternal;

    /* Maps uid with all user engaging session tokens associated to it */
    private final Map<Integer, Set<MediaSession.Token>> mUserEngagingSessions = new HashMap<>();
    private final SparseArray<Set<MediaSession.Token>> mUserEngagingSessions = new SparseArray<>();

    // 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.
@@ -625,29 +624,27 @@ public class MediaSessionService extends SystemService implements Monitor {

        String packageName = record.getPackageName();
        int sessionUid = record.getUid();
        String actionToLog = null;
        MediaSession.Token token = ((MediaSessionRecord) record).getSessionToken();
        if (userEngaged) {
            if (!mUserEngagingSessions.containsKey(sessionUid)) {
            if (!mUserEngagingSessions.contains(sessionUid)) {
                mUserEngagingSessions.put(sessionUid, new HashSet<>());
                actionToLog = "start";
                reportUserInteractionEvent(/* action= */ "start", record.getUserId(), packageName);
            }
            mUserEngagingSessions.get(sessionUid).add(token);
        } else if (mUserEngagingSessions.containsKey(sessionUid)) {
        } else if (mUserEngagingSessions.contains(sessionUid)) {
            mUserEngagingSessions.get(sessionUid).remove(token);
            if (mUserEngagingSessions.get(sessionUid).isEmpty()) {
                actionToLog = "stop";
                reportUserInteractionEvent(/* action= */ "stop", record.getUserId(), packageName);
                mUserEngagingSessions.remove(sessionUid);
            }
        }
    }

        if (actionToLog != null) {
    private void reportUserInteractionEvent(String action, int userId, String packageName) {
        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);
        }
        extras.putString(UsageStatsManager.EXTRA_EVENT_ACTION, action);
        mUsageStatsManagerInternal.reportUserInteractionEvent(packageName, userId, extras);
    }

    void tempAllowlistTargetPkgIfPossible(int targetUid, String targetPackage,