Mark receiver in mediarouter as not exported from API 33.
The receiver doesn't need to be exported because it's only
called by the RemotePlaybackClient in Androidx
in the same app and not by other apps.
Bug: 197817693
Test: Manual trying to call action from outside but it's private.
Change-Id: I2785b587ba2a644ee3e8e924fc489a820969242a
diff --git a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/RemotePlaybackClient.java b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/RemotePlaybackClient.java
index f59b93d..d35efb8 100644
--- a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/RemotePlaybackClient.java
+++ b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/RemotePlaybackClient.java
@@ -21,11 +21,14 @@
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
+import android.os.Build;
import android.os.Bundle;
import android.util.Log;
+import androidx.annotation.DoNotInline;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
import androidx.core.util.ObjectsCompat;
/**
@@ -77,8 +80,13 @@
actionFilter.addAction(ActionReceiver.ACTION_SESSION_STATUS_CHANGED);
actionFilter.addAction(ActionReceiver.ACTION_MESSAGE_RECEIVED);
mActionReceiver = new ActionReceiver();
- // TODO(b/197817693): Add flag to indicate whether the receiver should be exported.
- context.registerReceiver(mActionReceiver, actionFilter);
+
+ if (Build.VERSION.SDK_INT < 33) {
+ context.registerReceiver(mActionReceiver, actionFilter);
+ } else {
+ Api33.registerReceiver(context, mActionReceiver, actionFilter,
+ Context.RECEIVER_NOT_EXPORTED);
+ }
Intent itemStatusIntent = new Intent(ActionReceiver.ACTION_ITEM_STATUS_CHANGED);
itemStatusIntent.setPackage(context.getPackageName());
@@ -1052,4 +1060,13 @@
*/
void onMessageReceived(@NonNull String sessionId, @Nullable Bundle message);
}
+
+ @RequiresApi(33)
+ private static class Api33 {
+ @DoNotInline
+ static void registerReceiver(@NonNull Context context, @NonNull BroadcastReceiver receiver,
+ @NonNull IntentFilter filter, int flags) {
+ context.registerReceiver(receiver, filter, flags);
+ }
+ }
}