summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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(