summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Toni Heidenreich <tonihei@google.com> 2025-02-03 09:41:37 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2025-02-03 09:41:37 -0800
commitffa39ec14b437d729b6d847ff6d325da1b7bdf2c (patch)
tree40b1e5435cade5788827e66afe72f2e803911a09
parent5bf5afe0e346936a30283625c3e2e04395343535 (diff)
parent51d5a3d6f158d9bf5b6a7c517e15bb42be43d048 (diff)
Merge "Start user-engaged timeout after creating a session" into main
-rw-r--r--services/core/java/com/android/server/media/MediaSessionRecord.java25
1 files changed, 18 insertions, 7 deletions
diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java
index d873075a19e4..7834e26125f2 100644
--- a/services/core/java/com/android/server/media/MediaSessionRecord.java
+++ b/services/core/java/com/android/server/media/MediaSessionRecord.java
@@ -234,13 +234,25 @@ public class MediaSessionRecord extends MediaSessionRecordImpl implements IBinde
};
@GuardedBy("mLock")
- private @UserEngagementState int mUserEngagementState = USER_DISENGAGED;
-
- @IntDef({USER_PERMANENTLY_ENGAGED, USER_TEMPORARILY_ENGAGED, USER_DISENGAGED})
+ private @UserEngagementState int mUserEngagementState = USER_ENGAGEMENT_UNSET;
+
+ @IntDef({
+ USER_ENGAGEMENT_UNSET,
+ USER_PERMANENTLY_ENGAGED,
+ USER_TEMPORARILY_ENGAGED,
+ USER_DISENGAGED
+ })
@Retention(RetentionPolicy.SOURCE)
private @interface UserEngagementState {}
/**
+ * Indicates that the {@link UserEngagementState} is not yet set.
+ *
+ * @see #updateUserEngagedStateIfNeededLocked(boolean)
+ */
+ private static final int USER_ENGAGEMENT_UNSET = -1;
+
+ /**
* Indicates that the session is {@linkplain MediaSession#isActive() active} and in one of the
* {@linkplain PlaybackState#isActive() active states}.
*
@@ -1054,11 +1066,10 @@ public class MediaSessionRecord extends MediaSessionRecordImpl implements IBinde
}
int oldUserEngagedState = mUserEngagementState;
int newUserEngagedState;
- if (!isActive() || mPlaybackState == null) {
- newUserEngagedState = USER_DISENGAGED;
- } else if (mPlaybackState.isActive()) {
+ if (isActive() && mPlaybackState != null && mPlaybackState.isActive()) {
newUserEngagedState = USER_PERMANENTLY_ENGAGED;
} else if (oldUserEngagedState == USER_PERMANENTLY_ENGAGED
+ || oldUserEngagedState == USER_ENGAGEMENT_UNSET
|| (oldUserEngagedState == USER_TEMPORARILY_ENGAGED && !isTimeoutExpired)) {
newUserEngagedState = USER_TEMPORARILY_ENGAGED;
} else {
@@ -1079,7 +1090,7 @@ public class MediaSessionRecord extends MediaSessionRecordImpl implements IBinde
boolean wasUserEngaged = oldUserEngagedState != USER_DISENGAGED;
boolean isNowUserEngaged = newUserEngagedState != USER_DISENGAGED;
- if (wasUserEngaged != isNowUserEngaged) {
+ if (oldUserEngagedState == USER_ENGAGEMENT_UNSET || wasUserEngaged != isNowUserEngaged) {
mHandler.post(
() ->
mService.onSessionUserEngagementStateChange(