diff options
| -rw-r--r-- | services/core/java/com/android/server/media/MediaSessionRecord.java | 25 |
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( |