Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5cd7d7f7 authored by Jean-Michel Trivi's avatar Jean-Michel Trivi
Browse files

NotificationPlayer: fix error listener, sync in playback thread

The error and completion listeners should be set before
  MediaPlayer.prepare() is called, in case of an error
  during prepare.
Move the sleep to synchronize the playback of the notification
  and the ducking from the MediaPlayer to the playback thread.

Test: play a notification during media playback
Bug: 35855841
Change-Id: I42f01f485f533c1cc84b9d927f0dc594cdb7ec8f
parent 538d5a3d
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -91,6 +91,8 @@ public class NotificationPlayer implements OnCompletionListener, OnErrorListener
                    player.setAudioAttributes(mCmd.attributes);
                    player.setDataSource(mCmd.context, mCmd.uri);
                    player.setLooping(mCmd.looping);
                    player.setOnCompletionListener(NotificationPlayer.this);
                    player.setOnErrorListener(NotificationPlayer.this);
                    player.prepare();
                    if ((mCmd.uri != null) && (mCmd.uri.getEncodedPath() != null)
                            && (mCmd.uri.getEncodedPath().length() > 0)) {
@@ -118,12 +120,15 @@ public class NotificationPlayer implements OnCompletionListener, OnErrorListener
                    //  can lead to AudioFocus being released too early, before the second sound is
                    //  done playing. This class should be modified to use a single thread, on which
                    //  command are issued, and on which it receives the completion callbacks.
                    player.setOnCompletionListener(NotificationPlayer.this);
                    player.setOnErrorListener(NotificationPlayer.this);
                    if (DEBUG)  { Log.d(mTag, "notification will be delayed by "
                            + mNotificationRampTimeMs + "ms"); }
                    player.setStartDelayMs(mNotificationRampTimeMs);
                    try {
                        Thread.sleep(mNotificationRampTimeMs);
                        player.start();
                    } catch (InterruptedException e) {
                        Log.e(mTag, "Exception while sleeping to sync notification playback "
                                + " with ducking", e);
                    }
                    if (mPlayer != null) {
                        mPlayer.release();
                    }