aboutsummaryrefslogtreecommitdiff
path: root/TestMediaApp/src/com/android/car/media/testmediaapp/TmaPlayer.java
diff options
context:
space:
mode:
Diffstat (limited to 'TestMediaApp/src/com/android/car/media/testmediaapp/TmaPlayer.java')
-rw-r--r--TestMediaApp/src/com/android/car/media/testmediaapp/TmaPlayer.java35
1 files changed, 33 insertions, 2 deletions
diff --git a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaPlayer.java b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaPlayer.java
index e75d028..24e12d9 100644
--- a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaPlayer.java
+++ b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaPlayer.java
@@ -17,6 +17,9 @@
package com.android.car.media.testmediaapp;
import static android.media.AudioManager.AUDIOFOCUS_GAIN;
+import static android.media.AudioManager.AUDIOFOCUS_LOSS;
+import static android.media.AudioManager.AUDIOFOCUS_LOSS_TRANSIENT;
+import static android.media.AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK;
import static android.media.AudioManager.AUDIOFOCUS_REQUEST_GRANTED;
import static android.support.v4.media.session.PlaybackStateCompat.ACTION_PAUSE;
import static android.support.v4.media.session.PlaybackStateCompat.ACTION_PLAY;
@@ -29,6 +32,7 @@ import static android.support.v4.media.session.PlaybackStateCompat.ACTION_SKIP_T
import static android.support.v4.media.session.PlaybackStateCompat.ERROR_CODE_APP_ERROR;
import static android.support.v4.media.session.PlaybackStateCompat.STATE_ERROR;
+import android.media.AudioManager.OnAudioFocusChangeListener;
import androidx.annotation.Nullable;
import android.app.PendingIntent;
@@ -77,6 +81,7 @@ public class TmaPlayer extends MediaSessionCompat.Callback {
@Nullable
private TmaMediaItem mActiveItem;
private int mNextEventIndex = -1;
+ private boolean mResumeOnFocusGain;
TmaPlayer(TmaBrowser browser, TmaLibrary library, AudioManager audioManager, Handler handler,
MediaSessionCompat session) {
@@ -87,8 +92,9 @@ public class TmaPlayer extends MediaSessionCompat.Callback {
mHandler = handler;
mSession = session;
- // TODO add focus listener ?
- mAudioFocusRequest = new AudioFocusRequest.Builder(AUDIOFOCUS_GAIN).build();
+ mAudioFocusRequest = new AudioFocusRequest.Builder(AUDIOFOCUS_GAIN)
+ .setOnAudioFocusChangeListener(this::onAudioFocusChange, mHandler)
+ .build();
}
/** Updates the state in the media session based on the given {@link TmaMediaEvent}. */
@@ -366,4 +372,29 @@ public class TmaPlayer extends MediaSessionCompat.Callback {
return actions;
}
+
+ private void onAudioFocusChange(int focusChange) {
+ // Adapted from samples at https://developer.android.com/guide/topics/media-apps/audio-focus
+ // Android Auto emulator tests rely on the app pausing and resuming in response to focus
+ // transient loss and focus gain, respectively.
+ switch (focusChange) {
+ case AUDIOFOCUS_GAIN:
+ if (mResumeOnFocusGain) {
+ mResumeOnFocusGain = false;
+ startPlayBack(/* requestAudioFocus= */ false);
+ }
+ break;
+ case AUDIOFOCUS_LOSS:
+ mResumeOnFocusGain = false;
+ pausePlayback();
+ break;
+ case AUDIOFOCUS_LOSS_TRANSIENT:
+ case AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
+ mResumeOnFocusGain = mIsPlaying;
+ pausePlayback();
+ break;
+ default:
+ Log.w(TAG, "Unknown audio focus change " + focusChange);
+ }
+ }
}