Notification playback: pause on release

When releasing a MediaPlayer outside of a playback
completion (back to back notifications), pause and
wait 100ms before releasing the player.

Bug: 193832902
Test: create back-to-back notifications, check for glitch
Change-Id: Ib8baba4bf2b41e75b526e8490b6c2f31c85c193c
This commit is contained in:
Jean-Michel Trivi
2021-08-09 15:15:28 -07:00
parent df1723afdf
commit c69743ea16
2 changed files with 24 additions and 3 deletions

View File

@@ -102,6 +102,13 @@ public abstract class PlayerBase {
mState = AudioPlaybackConfiguration.PLAYER_STATE_IDLE;
};
/** @hide */
public int getPlayerIId() {
synchronized (mLock) {
return mPlayerIId;
}
}
/**
* Call from derived class when instantiation / initialization is successful
*/

View File

@@ -139,7 +139,7 @@ public class NotificationPlayer implements OnCompletionListener, OnErrorListener
+ " with ducking", e);
}
player.start();
if (DEBUG) { Log.d(mTag, "player.start"); }
if (DEBUG) { Log.d(mTag, "player.start piid:" + player.getPlayerIId()); }
} catch (Exception e) {
if (player != null) {
player.release();
@@ -155,7 +155,13 @@ public class NotificationPlayer implements OnCompletionListener, OnErrorListener
mPlayer = player;
}
if (mp != null) {
if (DEBUG) { Log.d(mTag, "mPlayer.release"); }
if (DEBUG) {
Log.d(mTag, "mPlayer.pause+release piid:" + player.getPlayerIId());
}
mp.pause();
try {
Thread.sleep(100);
} catch (InterruptedException ie) { }
mp.release();
}
this.notify();
@@ -244,6 +250,10 @@ public class NotificationPlayer implements OnCompletionListener, OnErrorListener
try {
mp.stop();
} catch (Exception e) { }
if (DEBUG) {
Log.i(mTag, "About to release MediaPlayer piid:"
+ mp.getPlayerIId() + " due to notif cancelled");
}
mp.release();
synchronized(mQueueAudioFocusLock) {
if (mAudioManagerWithAudioFocus != null) {
@@ -284,7 +294,7 @@ public class NotificationPlayer implements OnCompletionListener, OnErrorListener
public void onCompletion(MediaPlayer mp) {
synchronized(mQueueAudioFocusLock) {
if (mAudioManagerWithAudioFocus != null) {
if (DEBUG) Log.d(mTag, "onCompletion() abandonning AudioFocus");
if (DEBUG) Log.d(mTag, "onCompletion() abandoning AudioFocus");
mAudioManagerWithAudioFocus.abandonAudioFocus(null);
mAudioManagerWithAudioFocus = null;
} else {
@@ -310,6 +320,10 @@ public class NotificationPlayer implements OnCompletionListener, OnErrorListener
}
}
if (mp != null) {
if (DEBUG) {
Log.i("NotificationPlayer", "About to release MediaPlayer piid:"
+ mp.getPlayerIId() + " due to onCompletion");
}
mp.release();
}
}