Tweak the selection of media button session

Key events were sent to the session which the lastly activated player app has.
After this CL, key events will be sent to a session 1) which the app
making sounds has, or 2) which the lastly activated player app has.

Bug: 113240750
Test: manually
Change-Id: I6ac128458fd0d30c9e0ed3382939ca9e4e581e22
diff --git a/services/core/java/com/android/server/media/AudioPlayerStateMonitor.java b/services/core/java/com/android/server/media/AudioPlayerStateMonitor.java
index 603d7cf..eb706d7 100644
--- a/services/core/java/com/android/server/media/AudioPlayerStateMonitor.java
+++ b/services/core/java/com/android/server/media/AudioPlayerStateMonitor.java
@@ -142,7 +142,8 @@
 
     /**
      * Returns the sorted list of UIDs that have had active audio playback. (i.e. playing an
-     * audio/video) The UID whose audio playback becomes active at the last comes first.
+     * audio/video) The UID whose audio is currently playing comes first, then the UID whose audio
+     * playback becomes active at the last comes next.
      */
     public IntArray getSortedAudioPlaybackClientUids() {
         IntArray sortedAudioPlaybackClientUids = new IntArray();
@@ -253,6 +254,26 @@
                         mSortedAudioPlaybackClientUids.add(0, uid);
                     }
                 }
+
+                if (mActiveAudioUids.size() > 0
+                        && !mActiveAudioUids.contains(mSortedAudioPlaybackClientUids.get(0))) {
+                    int firstActiveUid = -1;
+                    int firatActiveUidIndex = -1;
+                    for (int i = 1; i < mSortedAudioPlaybackClientUids.size(); ++i) {
+                        int uid = mSortedAudioPlaybackClientUids.get(i);
+                        if (mActiveAudioUids.contains(uid)) {
+                            firatActiveUidIndex = i;
+                            firstActiveUid = uid;
+                            break;
+                        }
+                    }
+                    for (int i = firatActiveUidIndex; i > 0; --i) {
+                        mSortedAudioPlaybackClientUids.set(i,
+                                mSortedAudioPlaybackClientUids.get(i - 1));
+                    }
+                    mSortedAudioPlaybackClientUids.set(0, firstActiveUid);
+                }
+
                 // Notify the active state change of audio players.
                 for (AudioPlaybackConfiguration config : configs) {
                     final int pii = config.getPlayerInterfaceId();
diff --git a/services/core/java/com/android/server/media/MediaSessionServiceImpl.java b/services/core/java/com/android/server/media/MediaSessionServiceImpl.java
index cdfd948..a5f2217 100644
--- a/services/core/java/com/android/server/media/MediaSessionServiceImpl.java
+++ b/services/core/java/com/android/server/media/MediaSessionServiceImpl.java
@@ -171,7 +171,7 @@
         mAudioPlayerStateMonitor = AudioPlayerStateMonitor.getInstance(mContext);
         mAudioPlayerStateMonitor.registerListener(
                 (config, isRemoved) -> {
-                    if (isRemoved || !config.isActive() || config.getPlayerType()
+                    if (config.getPlayerType()
                             == AudioPlaybackConfiguration.PLAYER_TYPE_JAM_SOUNDPOOL) {
                         return;
                     }