Merge "Don't save the last media source for ephemeral user" into qt-dev
am: 4632be6d82

Change-Id: Ie843f469781f3683911b64a9cf14ac9fba7a56c0
diff --git a/service/src/com/android/car/CarMediaService.java b/service/src/com/android/car/CarMediaService.java
index f66df4b..1e85fde 100644
--- a/service/src/com/android/car/CarMediaService.java
+++ b/service/src/com/android/car/CarMediaService.java
@@ -203,7 +203,8 @@
                 mPackageUpdateFilter, null, null);
         mIsPackageUpdateReceiverRegistered = true;
 
-        mPrimaryMediaComponent = getLastMediaSource();
+        mPrimaryMediaComponent =
+                isCurrentUserEphemeral() ? getDefaultMediaSource() : getLastMediaSource();
         mActiveUserMediaController = null;
         String key = PLAYBACK_STATE_KEY + mCurrentUser;
         boolean startPlayback =
@@ -223,6 +224,10 @@
         mContext.startForegroundServiceAsUser(serviceStart, currentUser);
     }
 
+    private boolean isCurrentUserEphemeral() {
+        return mUserManager.getUserInfo(mCurrentUser).isEphemeral();
+    }
+
     @Override
     public void release() {
         mMediaSessionUpdater.unregisterCallbacks();
@@ -304,10 +309,9 @@
                 if (!unlocked) {
                     return;
                 }
-                // No need to handle user0, non current foreground user, or ephemeral user.
+                // No need to handle user0, non current foreground user.
                 if (userHandle == UserHandle.USER_SYSTEM
-                        || userHandle != ActivityManager.getCurrentUser()
-                        || mUserManager.getUserInfo(userHandle).isEphemeral()) {
+                        || userHandle != ActivityManager.getCurrentUser()) {
                     return;
                 }
                 if (mPendingInit) {
@@ -490,7 +494,9 @@
         if (mSharedPrefs != null) {
             if (mPrimaryMediaComponent != null && !TextUtils.isEmpty(
                     mPrimaryMediaComponent.flattenToString())) {
-                saveLastMediaSource(mPrimaryMediaComponent);
+                if (!isCurrentUserEphemeral()) {
+                    saveLastMediaSource(mPrimaryMediaComponent);
+                }
                 mRemovedMediaSourcePackage = null;
             }
         } else {
@@ -516,7 +522,9 @@
     private MediaController.Callback mMediaControllerCallback = new MediaController.Callback() {
         @Override
         public void onPlaybackStateChanged(PlaybackState state) {
-            savePlaybackState(state);
+            if (!isCurrentUserEphemeral()) {
+                savePlaybackState(state);
+            }
             // Try to start playback if the new state allows the play action
             maybeRestartPlayback(state);
         }
@@ -644,7 +652,10 @@
                 }
             }
         }
+        return getDefaultMediaSource();
+    }
 
+    private ComponentName getDefaultMediaSource() {
         String defaultMediaSource = mContext.getString(R.string.default_media_source);
         ComponentName defaultComponent = ComponentName.unflattenFromString(defaultMediaSource);
         if (isMediaService(defaultComponent)) {
@@ -700,12 +711,14 @@
         for (MediaController controller : mediaControllers) {
             if (matchPrimaryMediaSource(controller.getPackageName(), getClassName(controller))) {
                 mActiveUserMediaController = controller;
+                PlaybackState state = mActiveUserMediaController.getPlaybackState();
+                if (!isCurrentUserEphemeral()) {
+                    savePlaybackState(state);
+                }
                 // Specify Handler to receive callbacks on, to avoid defaulting to the calling
                 // thread; this method can be called from the MediaSessionManager callback.
                 // Using the version of this method without passing a handler causes a
                 // RuntimeException for failing to create a Handler.
-                PlaybackState state = mActiveUserMediaController.getPlaybackState();
-                savePlaybackState(state);
                 mActiveUserMediaController.registerCallback(mMediaControllerCallback, mHandler);
                 maybeRestartPlayback(state);
                 return;