From 49bd548e230604a93ce7f12c6d8c4e13a6a176d6 Mon Sep 17 00:00:00 2001 From: Santiago Seifert Date: Thu, 11 Feb 2021 15:50:14 +0000 Subject: [PATCH] Replace Handler with Executor This change addresses API council feedback around the new setOnRtpRxNoticeListener method. Bug: 168585020 Test: Manually built the tree. Test: Tests pending as per b/169965769. Change-Id: Ie8291df9b10960f78bdfdd5986767e896a953abf Merged-In: Ie8291df9b10960f78bdfdd5986767e896a953abf --- core/api/system-current.txt | 2 +- media/java/android/media/MediaPlayer.java | 30 +++++++++-------------- 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 7b7518d053452..a5f3062b4d1ba 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -5097,7 +5097,7 @@ package android.media { } public class MediaPlayer implements android.media.AudioRouting android.media.VolumeAutomation { - method @RequiresPermission(android.Manifest.permission.BIND_IMS_SERVICE) public void setOnRtpRxNoticeListener(@NonNull android.content.Context, @NonNull android.media.MediaPlayer.OnRtpRxNoticeListener, @Nullable android.os.Handler); + method @RequiresPermission(android.Manifest.permission.BIND_IMS_SERVICE) public void setOnRtpRxNoticeListener(@NonNull android.content.Context, @NonNull java.util.concurrent.Executor, @NonNull android.media.MediaPlayer.OnRtpRxNoticeListener); } public static interface MediaPlayer.OnRtpRxNoticeListener { diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java index c51c9dd06c24f..f3cee17ab2380 100644 --- a/media/java/android/media/MediaPlayer.java +++ b/media/java/android/media/MediaPlayer.java @@ -19,6 +19,7 @@ package android.media; import static android.Manifest.permission.BIND_IMS_SERVICE; import static android.content.pm.PackageManager.PERMISSION_GRANTED; +import android.annotation.CallbackExecutor; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; @@ -91,6 +92,7 @@ import java.util.Scanner; import java.util.Set; import java.util.UUID; import java.util.Vector; +import java.util.concurrent.Executor; /** @@ -2172,7 +2174,7 @@ public class MediaPlayer extends PlayerBase mOnVideoSizeChangedListener = null; mOnTimedTextListener = null; mOnRtpRxNoticeListener = null; - mOnRtpRxNoticeHandler = null; + mOnRtpRxNoticeExecutor = null; synchronized (mTimeProviderLock) { if (mTimeProvider != null) { mTimeProvider.close(); @@ -3711,7 +3713,6 @@ public class MediaPlayer extends PlayerBase case MEDIA_RTP_RX_NOTICE: final OnRtpRxNoticeListener rtpRxNoticeListener = mOnRtpRxNoticeListener; - final Handler rtpRxNoticeHandler = mOnRtpRxNoticeHandler; if (rtpRxNoticeListener == null) { return; } @@ -3730,14 +3731,9 @@ public class MediaPlayer extends PlayerBase } finally { parcel.recycle(); } - if (rtpRxNoticeHandler == null) { - rtpRxNoticeListener.onRtpRxNotice(mMediaPlayer, noticeType, data); - } else { - rtpRxNoticeHandler.post( - () -> - rtpRxNoticeListener - .onRtpRxNotice(mMediaPlayer, noticeType, data)); - } + mOnRtpRxNoticeExecutor.execute(() -> + rtpRxNoticeListener + .onRtpRxNotice(mMediaPlayer, noticeType, data)); } return; @@ -4305,28 +4301,26 @@ public class MediaPlayer extends PlayerBase * * @see OnRtpRxNoticeListener * - * @param listener the listener called after a notice from RTP Rx - * @param handler the {@link Handler} that receives RTP Tx events. If null is passed, - * notifications will be posted on the thread that created this MediaPlayer - * instance. If the creating thread does not have a {@link Looper}, then - * notifications will be posted on the main thread. + * @param listener the listener called after a notice from RTP Rx. + * @param executor the {@link Executor} on which to post RTP Tx events. * @hide */ @SystemApi @RequiresPermission(BIND_IMS_SERVICE) public void setOnRtpRxNoticeListener( @NonNull Context context, - @NonNull OnRtpRxNoticeListener listener, @Nullable Handler handler) { + @NonNull @CallbackExecutor Executor executor, + @NonNull OnRtpRxNoticeListener listener) { Objects.requireNonNull(context); Preconditions.checkArgument( context.checkSelfPermission(BIND_IMS_SERVICE) == PERMISSION_GRANTED, BIND_IMS_SERVICE + " permission not granted."); mOnRtpRxNoticeListener = Objects.requireNonNull(listener); - mOnRtpRxNoticeHandler = handler; + mOnRtpRxNoticeExecutor = Objects.requireNonNull(executor); } private OnRtpRxNoticeListener mOnRtpRxNoticeListener; - private Handler mOnRtpRxNoticeHandler; + private Executor mOnRtpRxNoticeExecutor; /** * Register a callback to be invoked when a selected track has timed metadata available.