From 0e42c8945f8eac95b578fc782c0753da087a67c1 Mon Sep 17 00:00:00 2001 From: tonihei Date: Mon, 11 Mar 2024 05:03:54 -0700 Subject: [PATCH] Automatically add icon drawables for icon constants Having a default icon available allows apps to only specify the icon constant without having to define an icon drawable themselves as Media3 can fill in the icon resource for backwards compatibility. The switch util method allows R8 to easily remove unused icons, so having default icons won't affect APK size unless the constants are used to set up the CommandButtons. PiperOrigin-RevId: 614623909 --- RELEASENOTES.md | 2 + .../DemoMediaLibrarySessionCallback.kt | 33 ++- .../media3/session/CommandButton.java | 232 +++++++++++++++--- .../DefaultMediaNotificationProvider.java | 42 ++-- .../media3/session/LegacyConversions.java | 4 +- .../drawable-anydpi-v21/media3_icon_album.xml | 23 ++ .../media3_icon_artist.xml | 23 ++ .../drawable-anydpi-v21/media3_icon_block.xml | 23 ++ .../media3_icon_bookmark_filled.xml | 23 ++ .../media3_icon_bookmark_unfilled.xml | 23 ++ .../media3_icon_check_circle_filled.xml | 23 ++ .../media3_icon_check_circle_unfilled.xml | 23 ++ .../media3_icon_closed_captions.xml | 23 ++ .../media3_icon_closed_captions_off.xml | 23 ++ .../media3_icon_fast_forward.xml | 23 ++ .../drawable-anydpi-v21/media3_icon_feed.xml | 23 ++ .../media3_icon_flag_filled.xml | 24 ++ .../media3_icon_flag_unfilled.xml | 24 ++ .../media3_icon_heart_filled.xml | 23 ++ .../media3_icon_heart_unfilled.xml | 23 ++ .../drawable-anydpi-v21/media3_icon_minus.xml | 23 ++ .../media3_icon_minus_circle_filled.xml | 23 ++ .../media3_icon_minus_circle_unfilled.xml | 23 ++ .../drawable-anydpi-v21/media3_icon_next.xml | 23 ++ .../drawable-anydpi-v21/media3_icon_pause.xml | 23 ++ .../drawable-anydpi-v21/media3_icon_play.xml | 23 ++ .../media3_icon_playback_speed.xml | 23 ++ .../media3_icon_playback_speed_0_5.xml | 23 ++ .../media3_icon_playback_speed_0_8.xml | 23 ++ .../media3_icon_playback_speed_1_0.xml | 23 ++ .../media3_icon_playback_speed_1_2.xml | 23 ++ .../media3_icon_playback_speed_1_5.xml | 23 ++ .../media3_icon_playback_speed_1_8.xml | 23 ++ .../media3_icon_playback_speed_2_0.xml | 23 ++ .../media3_icon_playlist_add.xml | 23 ++ .../media3_icon_playlist_remove.xml | 23 ++ .../drawable-anydpi-v21/media3_icon_plus.xml | 23 ++ .../media3_icon_plus_circle_filled.xml | 23 ++ .../media3_icon_plus_circle_unfilled.xml | 23 ++ .../media3_icon_previous.xml | 23 ++ .../media3_icon_quality.xml | 23 ++ .../drawable-anydpi-v21/media3_icon_radio.xml | 23 ++ .../media3_icon_repeat_all.xml | 23 ++ .../media3_icon_repeat_off.xml | 24 ++ .../media3_icon_repeat_one.xml | 23 ++ .../media3_icon_rewind.xml | 23 ++ .../media3_icon_settings.xml | 23 ++ .../drawable-anydpi-v21/media3_icon_share.xml | 23 ++ .../media3_icon_shuffle_off.xml | 24 ++ .../media3_icon_shuffle_on.xml | 23 ++ .../media3_icon_shuffle_star.xml | 23 ++ .../media3_icon_signal.xml | 23 ++ .../media3_icon_skip_back.xml | 23 ++ .../media3_icon_skip_back_10.xml | 23 ++ .../media3_icon_skip_back_15.xml | 23 ++ .../media3_icon_skip_back_30.xml | 23 ++ .../media3_icon_skip_back_5.xml | 23 ++ .../media3_icon_skip_forward.xml | 23 ++ .../media3_icon_skip_forward_10.xml | 23 ++ .../media3_icon_skip_forward_15.xml | 23 ++ .../media3_icon_skip_forward_30.xml | 23 ++ .../media3_icon_skip_forward_5.xml | 23 ++ .../media3_icon_star_filled.xml | 23 ++ .../media3_icon_star_unfilled.xml | 23 ++ .../drawable-anydpi-v21/media3_icon_stop.xml | 23 ++ .../media3_icon_subtitles.xml | 23 ++ .../media3_icon_subtitles_off.xml | 23 ++ .../drawable-anydpi-v21/media3_icon_sync.xml | 23 ++ .../media3_icon_thumb_down_filled.xml | 23 ++ .../media3_icon_thumb_down_unfilled.xml | 23 ++ .../media3_icon_thumb_up_filled.xml | 23 ++ .../media3_icon_thumb_up_unfilled.xml | 23 ++ .../media3_icon_volume_down.xml | 23 ++ .../media3_icon_volume_off.xml | 24 ++ .../media3_icon_volume_up.xml | 24 ++ .../session/src/main/res/values/drawables.xml | 6 - .../media3/session/CommandButtonTest.java | 87 +++---- .../session/DefaultActionFactoryTest.java | 8 +- .../DefaultMediaNotificationProviderTest.java | 49 ++-- .../session/MediaSessionServiceTest.java | 12 +- ...lerCompatCallbackWithMediaSessionTest.java | 4 +- ...tateCompatActionsWithMediaSessionTest.java | 23 +- .../session/MediaControllerListenerTest.java | 4 +- ...lerListenerWithMediaSessionCompatTest.java | 8 +- .../media3/session/MediaControllerTest.java | 40 +-- .../session/MediaSessionCallbackTest.java | 7 +- .../session/MediaSessionServiceTest.java | 6 +- 87 files changed, 1967 insertions(+), 216 deletions(-) create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_album.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_artist.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_block.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_bookmark_filled.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_bookmark_unfilled.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_check_circle_filled.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_check_circle_unfilled.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_closed_captions.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_closed_captions_off.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_fast_forward.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_feed.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_flag_filled.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_flag_unfilled.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_heart_filled.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_heart_unfilled.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_minus.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_minus_circle_filled.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_minus_circle_unfilled.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_next.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_pause.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_play.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_0_5.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_0_8.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_1_0.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_1_2.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_1_5.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_1_8.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_2_0.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playlist_add.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playlist_remove.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_plus.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_plus_circle_filled.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_plus_circle_unfilled.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_previous.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_quality.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_radio.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_repeat_all.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_repeat_off.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_repeat_one.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_rewind.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_settings.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_share.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_shuffle_off.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_shuffle_on.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_shuffle_star.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_signal.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_back.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_back_10.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_back_15.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_back_30.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_back_5.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_forward.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_forward_10.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_forward_15.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_forward_30.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_forward_5.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_star_filled.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_star_unfilled.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_stop.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_subtitles.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_subtitles_off.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_sync.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_thumb_down_filled.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_thumb_down_unfilled.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_thumb_up_filled.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_thumb_up_unfilled.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_volume_down.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_volume_off.xml create mode 100644 libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_volume_up.xml diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 10b22b366d..b6c5d3cb7d 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -72,6 +72,8 @@ * Change default of `CommandButton.enabled` to `true` and ensure the value can stay false for controllers even if the associated command is available. + * Add icon constants for `CommandButton` that should be used instead of + custom icon resources. * UI: * Fallback to include audio track language name if `Locale` cannot identify a display name diff --git a/demos/session_service/src/main/java/androidx/media3/demo/session/DemoMediaLibrarySessionCallback.kt b/demos/session_service/src/main/java/androidx/media3/demo/session/DemoMediaLibrarySessionCallback.kt index 362ea7affc..9037290dd5 100644 --- a/demos/session_service/src/main/java/androidx/media3/demo/session/DemoMediaLibrarySessionCallback.kt +++ b/demos/session_service/src/main/java/androidx/media3/demo/session/DemoMediaLibrarySessionCallback.kt @@ -40,18 +40,17 @@ open class DemoMediaLibrarySessionCallback(context: Context) : MediaItemTree.initialize(context.assets) } + @OptIn(UnstableApi::class) // TODO: b/328238954 - Remove once new CommandButton icons are stable. private val customLayoutCommandButtons: List = listOf( - CommandButton.Builder() + CommandButton.Builder(CommandButton.ICON_SHUFFLE_OFF) .setDisplayName(context.getString(R.string.exo_controls_shuffle_on_description)) .setSessionCommand(SessionCommand(CUSTOM_COMMAND_TOGGLE_SHUFFLE_MODE_ON, Bundle.EMPTY)) - .setIconResId(R.drawable.exo_icon_shuffle_off) .build(), - CommandButton.Builder() + CommandButton.Builder(CommandButton.ICON_SHUFFLE_ON) .setDisplayName(context.getString(R.string.exo_controls_shuffle_off_description)) .setSessionCommand(SessionCommand(CUSTOM_COMMAND_TOGGLE_SHUFFLE_MODE_OFF, Bundle.EMPTY)) - .setIconResId(R.drawable.exo_icon_shuffle_on) - .build() + .build(), ) @OptIn(UnstableApi::class) // MediaSession.ConnectionResult.DEFAULT_SESSION_AND_LIBRARY_COMMANDS @@ -70,7 +69,7 @@ open class DemoMediaLibrarySessionCallback(context: Context) : @OptIn(UnstableApi::class) override fun onConnect( session: MediaSession, - controller: MediaSession.ControllerInfo + controller: MediaSession.ControllerInfo, ): MediaSession.ConnectionResult { if ( session.isMediaNotificationController(controller) || @@ -93,7 +92,7 @@ open class DemoMediaLibrarySessionCallback(context: Context) : session: MediaSession, controller: MediaSession.ControllerInfo, customCommand: SessionCommand, - args: Bundle + args: Bundle, ): ListenableFuture { if (CUSTOM_COMMAND_TOGGLE_SHUFFLE_MODE_ON == customCommand.customAction) { // Enable shuffling. @@ -101,7 +100,7 @@ open class DemoMediaLibrarySessionCallback(context: Context) : // Change the custom layout to contain the `Disable shuffling` command. session.setCustomLayout( session.mediaNotificationControllerInfo!!, - ImmutableList.of(customLayoutCommandButtons[1]) + ImmutableList.of(customLayoutCommandButtons[1]), ) return Futures.immediateFuture(SessionResult(SessionResult.RESULT_SUCCESS)) } else if (CUSTOM_COMMAND_TOGGLE_SHUFFLE_MODE_OFF == customCommand.customAction) { @@ -110,7 +109,7 @@ open class DemoMediaLibrarySessionCallback(context: Context) : // Change the custom layout to contain the `Enable shuffling` command. session.setCustomLayout( session.mediaNotificationControllerInfo!!, - ImmutableList.of(customLayoutCommandButtons[0]) + ImmutableList.of(customLayoutCommandButtons[0]), ) return Futures.immediateFuture(SessionResult(SessionResult.RESULT_SUCCESS)) } @@ -120,7 +119,7 @@ open class DemoMediaLibrarySessionCallback(context: Context) : override fun onGetLibraryRoot( session: MediaLibraryService.MediaLibrarySession, browser: MediaSession.ControllerInfo, - params: MediaLibraryService.LibraryParams? + params: MediaLibraryService.LibraryParams?, ): ListenableFuture> { return Futures.immediateFuture(LibraryResult.ofItem(MediaItemTree.getRootItem(), params)) } @@ -128,7 +127,7 @@ open class DemoMediaLibrarySessionCallback(context: Context) : override fun onGetItem( session: MediaLibraryService.MediaLibrarySession, browser: MediaSession.ControllerInfo, - mediaId: String + mediaId: String, ): ListenableFuture> { MediaItemTree.getItem(mediaId)?.let { return Futures.immediateFuture(LibraryResult.ofItem(it, /* params= */ null)) @@ -142,7 +141,7 @@ open class DemoMediaLibrarySessionCallback(context: Context) : parentId: String, page: Int, pageSize: Int, - params: MediaLibraryService.LibraryParams? + params: MediaLibraryService.LibraryParams?, ): ListenableFuture>> { val children = MediaItemTree.getChildren(parentId) if (children.isNotEmpty()) { @@ -154,7 +153,7 @@ open class DemoMediaLibrarySessionCallback(context: Context) : override fun onAddMediaItems( mediaSession: MediaSession, controller: MediaSession.ControllerInfo, - mediaItems: List + mediaItems: List, ): ListenableFuture> { return Futures.immediateFuture(resolveMediaItems(mediaItems)) } @@ -165,7 +164,7 @@ open class DemoMediaLibrarySessionCallback(context: Context) : browser: MediaSession.ControllerInfo, mediaItems: List, startIndex: Int, - startPositionMs: Long + startPositionMs: Long, ): ListenableFuture { if (mediaItems.size == 1) { // Try to expand a single item to a playlist. @@ -194,7 +193,7 @@ open class DemoMediaLibrarySessionCallback(context: Context) : private fun maybeExpandSingleItemToPlaylist( mediaItem: MediaItem, startIndex: Int, - startPositionMs: Long + startPositionMs: Long, ): MediaItemsWithStartPosition? { var playlist = listOf() var indexInPlaylist = startIndex @@ -223,7 +222,7 @@ open class DemoMediaLibrarySessionCallback(context: Context) : session: MediaLibraryService.MediaLibrarySession, browser: MediaSession.ControllerInfo, query: String, - params: MediaLibraryService.LibraryParams? + params: MediaLibraryService.LibraryParams?, ): ListenableFuture> { session.notifySearchResultChanged(browser, query, MediaItemTree.search(query).size, params) return Futures.immediateFuture(LibraryResult.ofVoid()) @@ -235,7 +234,7 @@ open class DemoMediaLibrarySessionCallback(context: Context) : query: String, page: Int, pageSize: Int, - params: MediaLibraryService.LibraryParams? + params: MediaLibraryService.LibraryParams?, ): ListenableFuture>> { return Futures.immediateFuture(LibraryResult.ofItemList(MediaItemTree.search(query), params)) } diff --git a/libraries/session/src/main/java/androidx/media3/session/CommandButton.java b/libraries/session/src/main/java/androidx/media3/session/CommandButton.java index e173565de6..42c30d88ab 100644 --- a/libraries/session/src/main/java/androidx/media3/session/CommandButton.java +++ b/libraries/session/src/main/java/androidx/media3/session/CommandButton.java @@ -49,6 +49,8 @@ import java.util.List; */ public final class CommandButton implements Bundleable { + // TODO: b/328238954 - Stabilize these constants and the corresponding methods, and deprecate the + // methods that do not use these constants. /** An icon constant for a button. Must be one of the {@code CommandButton.ICON_} constants. */ @UnstableApi @Documented @@ -406,8 +408,31 @@ public final class CommandButton implements Bundleable { private Bundle extras; private boolean enabled; - /** Creates a builder. */ + /** + * [will be deprecated] Use {@link #Builder(int)} instead to define the {@link Icon} for this + * button. A separate resource id via {@link #setIconResId(int)} is no longer required unless + * for {@link #ICON_UNDEFINED}. + */ public Builder() { + this(ICON_UNDEFINED); + } + + /** + * Creates a builder. + * + * @param icon The {@link Icon} that should be shown for this button. + */ + @UnstableApi + public Builder(@Icon int icon) { + this(icon, getIconResIdForIconConstant(icon)); + } + + // Internal version of constructor that assigns an additionally known icon resource id + // immediately. This is needed for R8 resource shrinking efficiency to know that the icon + // doesn't need to be resolved to any of the bundled icon drawables. + /* package */ Builder(@Icon int icon, @DrawableRes int iconResId) { + this.icon = icon; + this.iconResId = iconResId; displayName = ""; extras = Bundle.EMPTY; playerCommand = Player.COMMAND_INVALID; @@ -416,10 +441,12 @@ public final class CommandButton implements Bundleable { } /** - * Sets the {@link SessionCommand} that will be sent to the session when the button is clicked. - * Cannot set this if player command is already set via {@link #setPlayerCommand(int)}. + * Sets the {@link SessionCommand} that is required to be {@linkplain + * MediaController#isSessionCommandAvailable available} when the button is clicked. * - * @param sessionCommand The session command. + *

Cannot set this if a player command is already set via {@link #setPlayerCommand(int)}. + * + * @param sessionCommand The {@link SessionCommand}. * @return This builder for chaining. */ @CanIgnoreReturnValue @@ -434,11 +461,13 @@ public final class CommandButton implements Bundleable { } /** - * Sets the {@link Player.Command} that would be sent to the session when the button is clicked. - * Cannot set this if session command is already set via {@link + * Sets the {@link Player.Command} that is required to be {@linkplain + * MediaController#isCommandAvailable available} when the button is clicked. + * + *

Cannot set this if a session command is already set via {@link * #setSessionCommand(SessionCommand)}. * - * @param playerCommand The player command. + * @param playerCommand The {@link Player.Command}. * @return This builder for chaining. */ @CanIgnoreReturnValue @@ -452,30 +481,25 @@ public final class CommandButton implements Bundleable { } /** - * Sets the icon of this button. + * [will be deprecated] The icon should be defined with the constructor {@link Icon} parameter + * in {@link #Builder(int)} instead. Only in case the existing list of icons is not sufficient, + * use {@link #ICON_UNDEFINED} and set a separate resource id with {@link #setCustomIconResId}. + */ + @CanIgnoreReturnValue + public Builder setIconResId(@DrawableRes int resId) { + return setCustomIconResId(resId); + } + + /** + * Sets the resource id of an icon that is used when the predefined {@link Icon} is not + * available or set to {@link #ICON_UNDEFINED}. * - * @param icon The {@link Icon} that should be shown for this button. + * @param resId The resource id of a custom icon. * @return This builder for chaining. */ @UnstableApi @CanIgnoreReturnValue - public Builder setIcon(@Icon int icon) { - this.icon = icon; - return this; - } - - /** - * Sets the resource id of a bitmap (e.g. PNG) icon of this button. - * - *

Non-bitmap (e.g. VectorDrawable) may cause unexpected behavior in a {@link - * MediaController} app, so please avoid using it especially for the older platforms ({@code - * SDK_INT < 21}). - * - * @param resId The resource id of an icon. - * @return This builder for chaining. - */ - @CanIgnoreReturnValue - public Builder setIconResId(@DrawableRes int resId) { + public Builder setCustomIconResId(@DrawableRes int resId) { iconResId = resId; return this; } @@ -543,6 +567,154 @@ public final class CommandButton implements Bundleable { return new CommandButton( sessionCommand, playerCommand, icon, iconResId, iconUri, displayName, extras, enabled); } + + @DrawableRes + private static int getIconResIdForIconConstant(@Icon int icon) { + switch (icon) { + case ICON_PLAY: + return R.drawable.media3_icon_play; + case ICON_PAUSE: + return R.drawable.media3_icon_pause; + case ICON_STOP: + return R.drawable.media3_icon_stop; + case ICON_NEXT: + return R.drawable.media3_icon_next; + case ICON_PREVIOUS: + return R.drawable.media3_icon_previous; + case ICON_SKIP_FORWARD: + return R.drawable.media3_icon_skip_forward; + case ICON_SKIP_FORWARD_5: + return R.drawable.media3_icon_skip_forward_5; + case ICON_SKIP_FORWARD_10: + return R.drawable.media3_icon_skip_forward_10; + case ICON_SKIP_FORWARD_15: + return R.drawable.media3_icon_skip_forward_15; + case ICON_SKIP_FORWARD_30: + return R.drawable.media3_icon_skip_forward_30; + case ICON_SKIP_BACK: + return R.drawable.media3_icon_skip_back; + case ICON_SKIP_BACK_5: + return R.drawable.media3_icon_skip_back_5; + case ICON_SKIP_BACK_10: + return R.drawable.media3_icon_skip_back_10; + case ICON_SKIP_BACK_15: + return R.drawable.media3_icon_skip_back_15; + case ICON_SKIP_BACK_30: + return R.drawable.media3_icon_skip_back_30; + case ICON_FAST_FORWARD: + return R.drawable.media3_icon_fast_forward; + case ICON_REWIND: + return R.drawable.media3_icon_rewind; + case ICON_REPEAT_ALL: + return R.drawable.media3_icon_repeat_all; + case ICON_REPEAT_ONE: + return R.drawable.media3_icon_repeat_one; + case ICON_REPEAT_OFF: + return R.drawable.media3_icon_repeat_off; + case ICON_SHUFFLE_ON: + return R.drawable.media3_icon_shuffle_on; + case ICON_SHUFFLE_OFF: + return R.drawable.media3_icon_shuffle_off; + case ICON_SHUFFLE_STAR: + return R.drawable.media3_icon_shuffle_star; + case ICON_HEART_FILLED: + return R.drawable.media3_icon_heart_filled; + case ICON_HEART_UNFILLED: + return R.drawable.media3_icon_heart_unfilled; + case ICON_STAR_FILLED: + return R.drawable.media3_icon_star_filled; + case ICON_STAR_UNFILLED: + return R.drawable.media3_icon_star_unfilled; + case ICON_BOOKMARK_FILLED: + return R.drawable.media3_icon_bookmark_filled; + case ICON_BOOKMARK_UNFILLED: + return R.drawable.media3_icon_bookmark_unfilled; + case ICON_THUMB_UP_FILLED: + return R.drawable.media3_icon_thumb_up_filled; + case ICON_THUMB_UP_UNFILLED: + return R.drawable.media3_icon_thumb_up_unfilled; + case ICON_THUMB_DOWN_FILLED: + return R.drawable.media3_icon_thumb_down_filled; + case ICON_THUMB_DOWN_UNFILLED: + return R.drawable.media3_icon_thumb_down_unfilled; + case ICON_FLAG_FILLED: + return R.drawable.media3_icon_flag_filled; + case ICON_FLAG_UNFILLED: + return R.drawable.media3_icon_flag_unfilled; + case ICON_PLUS: + return R.drawable.media3_icon_plus; + case ICON_MINUS: + return R.drawable.media3_icon_minus; + case ICON_PLAYLIST_ADD: + return R.drawable.media3_icon_playlist_add; + case ICON_PLAYLIST_REMOVE: + return R.drawable.media3_icon_playlist_remove; + case ICON_BLOCK: + return R.drawable.media3_icon_block; + case ICON_PLUS_CIRCLE_FILLED: + return R.drawable.media3_icon_plus_circle_filled; + case ICON_PLUS_CIRCLE_UNFILLED: + return R.drawable.media3_icon_plus_circle_unfilled; + case ICON_MINUS_CIRCLE_FILLED: + return R.drawable.media3_icon_minus_circle_filled; + case ICON_MINUS_CIRCLE_UNFILLED: + return R.drawable.media3_icon_minus_circle_unfilled; + case ICON_CHECK_CIRCLE_FILLED: + return R.drawable.media3_icon_check_circle_filled; + case ICON_CHECK_CIRCLE_UNFILLED: + return R.drawable.media3_icon_check_circle_unfilled; + case ICON_PLAYBACK_SPEED: + return R.drawable.media3_icon_playback_speed; + case ICON_PLAYBACK_SPEED_0_5: + return R.drawable.media3_icon_playback_speed_0_5; + case ICON_PLAYBACK_SPEED_0_8: + return R.drawable.media3_icon_playback_speed_0_8; + case ICON_PLAYBACK_SPEED_1_0: + return R.drawable.media3_icon_playback_speed_1_0; + case ICON_PLAYBACK_SPEED_1_2: + return R.drawable.media3_icon_playback_speed_1_2; + case ICON_PLAYBACK_SPEED_1_5: + return R.drawable.media3_icon_playback_speed_1_5; + case ICON_PLAYBACK_SPEED_1_8: + return R.drawable.media3_icon_playback_speed_1_8; + case ICON_PLAYBACK_SPEED_2_0: + return R.drawable.media3_icon_playback_speed_2_0; + case ICON_SETTINGS: + return R.drawable.media3_icon_settings; + case ICON_QUALITY: + return R.drawable.media3_icon_quality; + case ICON_SUBTITLES: + return R.drawable.media3_icon_subtitles; + case ICON_SUBTITLES_OFF: + return R.drawable.media3_icon_subtitles_off; + case ICON_CLOSED_CAPTIONS: + return R.drawable.media3_icon_closed_captions; + case ICON_CLOSED_CAPTIONS_OFF: + return R.drawable.media3_icon_closed_captions_off; + case ICON_SYNC: + return R.drawable.media3_icon_sync; + case ICON_SHARE: + return R.drawable.media3_icon_share; + case ICON_VOLUME_UP: + return R.drawable.media3_icon_volume_up; + case ICON_VOLUME_DOWN: + return R.drawable.media3_icon_volume_down; + case ICON_VOLUME_OFF: + return R.drawable.media3_icon_volume_off; + case ICON_ARTIST: + return R.drawable.media3_icon_artist; + case ICON_ALBUM: + return R.drawable.media3_icon_album; + case ICON_RADIO: + return R.drawable.media3_icon_radio; + case ICON_SIGNAL: + return R.drawable.media3_icon_signal; + case ICON_FEED: + return R.drawable.media3_icon_feed; + default: + return 0; + } + } } /** The session command of the button. Will be {@code null} if {@link #playerCommand} is set. */ @@ -558,8 +730,8 @@ public final class CommandButton implements Bundleable { @UnstableApi public final @Icon int icon; /** - * The icon resource id of the button. Can be {@code 0} if the command is predefined and a custom - * icon isn't needed. + * The icon resource id of the button that is used when the predefined {@link #icon} is not + * available or set to {@link #ICON_UNDEFINED}. Can be {@code 0} if not needed. */ @DrawableRes public final int iconResId; @@ -767,7 +939,7 @@ public final class CommandButton implements Bundleable { sessionInterfaceVersion < 3 || bundle.getBoolean(FIELD_ENABLED, /* defaultValue= */ true); @Nullable Uri iconUri = bundle.getParcelable(FIELD_ICON_URI); @Icon int icon = bundle.getInt(FIELD_ICON, /* defaultValue= */ ICON_UNDEFINED); - Builder builder = new Builder(); + Builder builder = new Builder(icon, iconResId); if (sessionCommand != null) { builder.setSessionCommand(sessionCommand); } @@ -778,8 +950,6 @@ public final class CommandButton implements Bundleable { builder.setIconUri(iconUri); } return builder - .setIcon(icon) - .setIconResId(iconResId) .setDisplayName(displayName) .setExtras(extras == null ? Bundle.EMPTY : extras) .setEnabled(enabled) diff --git a/libraries/session/src/main/java/androidx/media3/session/DefaultMediaNotificationProvider.java b/libraries/session/src/main/java/androidx/media3/session/DefaultMediaNotificationProvider.java index 305909aa03..b4460fcd99 100644 --- a/libraries/session/src/main/java/androidx/media3/session/DefaultMediaNotificationProvider.java +++ b/libraries/session/src/main/java/androidx/media3/session/DefaultMediaNotificationProvider.java @@ -87,10 +87,10 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; * resource IDs are: * *

    - *
  • {@code media3_notification_play} - The play icon. - *
  • {@code media3_notification_pause} - The pause icon. - *
  • {@code media3_notification_seek_to_previous} - The previous icon. - *
  • {@code media3_notification_seek_to_next} - The next icon. + *
  • {@code media3_icon_play} - The play icon. + *
  • {@code media3_icon_pause} - The pause icon. + *
  • {@code media3_icon_previous} - The previous icon. + *
  • {@code media3_icon_next} - The next icon. *
  • {@code media3_notification_small_icon} - The {@link * NotificationCompat.Builder#setSmallIcon(int) small icon}. A different icon can be set with * {@link #setSmallIcon(int)}. @@ -458,9 +458,8 @@ public class DefaultMediaNotificationProvider implements MediaNotification.Provi Bundle commandButtonExtras = new Bundle(); commandButtonExtras.putInt(COMMAND_KEY_COMPACT_VIEW_INDEX, INDEX_UNSET); commandButtons.add( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_PREVIOUS) .setPlayerCommand(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM) - .setIconResId(R.drawable.media3_notification_seek_to_previous) .setDisplayName( context.getString(R.string.media3_controls_seek_to_previous_description)) .setExtras(commandButtonExtras) @@ -469,28 +468,29 @@ public class DefaultMediaNotificationProvider implements MediaNotification.Provi if (playerCommands.contains(COMMAND_PLAY_PAUSE)) { Bundle commandButtonExtras = new Bundle(); commandButtonExtras.putInt(COMMAND_KEY_COMPACT_VIEW_INDEX, INDEX_UNSET); - commandButtons.add( - new CommandButton.Builder() - .setPlayerCommand(COMMAND_PLAY_PAUSE) - .setIconResId( - showPauseButton - ? R.drawable.media3_notification_pause - : R.drawable.media3_notification_play) - .setExtras(commandButtonExtras) - .setDisplayName( - showPauseButton - ? context.getString(R.string.media3_controls_pause_description) - : context.getString(R.string.media3_controls_play_description)) - .build()); + if (showPauseButton) { + commandButtons.add( + new CommandButton.Builder(CommandButton.ICON_PAUSE) + .setPlayerCommand(COMMAND_PLAY_PAUSE) + .setExtras(commandButtonExtras) + .setDisplayName(context.getString(R.string.media3_controls_pause_description)) + .build()); + } else { + commandButtons.add( + new CommandButton.Builder(CommandButton.ICON_PLAY) + .setPlayerCommand(COMMAND_PLAY_PAUSE) + .setExtras(commandButtonExtras) + .setDisplayName(context.getString(R.string.media3_controls_play_description)) + .build()); + } } // Skip to next action. if (playerCommands.containsAny(COMMAND_SEEK_TO_NEXT, COMMAND_SEEK_TO_NEXT_MEDIA_ITEM)) { Bundle commandButtonExtras = new Bundle(); commandButtonExtras.putInt(COMMAND_KEY_COMPACT_VIEW_INDEX, INDEX_UNSET); commandButtons.add( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_NEXT) .setPlayerCommand(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM) - .setIconResId(R.drawable.media3_notification_seek_to_next) .setExtras(commandButtonExtras) .setDisplayName(context.getString(R.string.media3_controls_seek_to_next_description)) .build()); diff --git a/libraries/session/src/main/java/androidx/media3/session/LegacyConversions.java b/libraries/session/src/main/java/androidx/media3/session/LegacyConversions.java index f65cd6178e..106cacef79 100644 --- a/libraries/session/src/main/java/androidx/media3/session/LegacyConversions.java +++ b/libraries/session/src/main/java/androidx/media3/session/LegacyConversions.java @@ -1266,12 +1266,10 @@ import java.util.concurrent.TimeoutException; /* defaultValue= */ CommandButton.ICON_UNDEFINED) : CommandButton.ICON_UNDEFINED; CommandButton button = - new CommandButton.Builder() + new CommandButton.Builder(icon, customAction.getIcon()) .setSessionCommand(new SessionCommand(action, extras == null ? Bundle.EMPTY : extras)) .setDisplayName(customAction.getName()) .setEnabled(true) - .setIcon(icon) - .setIconResId(customAction.getIcon()) .build(); layout.add(button); } diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_album.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_album.xml new file mode 100644 index 0000000000..0675dbf161 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_album.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_artist.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_artist.xml new file mode 100644 index 0000000000..70f6b592c4 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_artist.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_block.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_block.xml new file mode 100644 index 0000000000..c668f75e0a --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_block.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_bookmark_filled.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_bookmark_filled.xml new file mode 100644 index 0000000000..c72139539d --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_bookmark_filled.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_bookmark_unfilled.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_bookmark_unfilled.xml new file mode 100644 index 0000000000..d5eb109db9 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_bookmark_unfilled.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_check_circle_filled.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_check_circle_filled.xml new file mode 100644 index 0000000000..475abe1659 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_check_circle_filled.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_check_circle_unfilled.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_check_circle_unfilled.xml new file mode 100644 index 0000000000..3dce145960 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_check_circle_unfilled.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_closed_captions.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_closed_captions.xml new file mode 100644 index 0000000000..bf20dec49b --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_closed_captions.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_closed_captions_off.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_closed_captions_off.xml new file mode 100644 index 0000000000..835b049300 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_closed_captions_off.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_fast_forward.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_fast_forward.xml new file mode 100644 index 0000000000..0fc49b7ea0 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_fast_forward.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_feed.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_feed.xml new file mode 100644 index 0000000000..5615008fb4 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_feed.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_flag_filled.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_flag_filled.xml new file mode 100644 index 0000000000..a8840a9a71 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_flag_filled.xml @@ -0,0 +1,24 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_flag_unfilled.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_flag_unfilled.xml new file mode 100644 index 0000000000..605cc9ae66 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_flag_unfilled.xml @@ -0,0 +1,24 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_heart_filled.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_heart_filled.xml new file mode 100644 index 0000000000..475a38e960 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_heart_filled.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_heart_unfilled.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_heart_unfilled.xml new file mode 100644 index 0000000000..67caeda980 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_heart_unfilled.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_minus.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_minus.xml new file mode 100644 index 0000000000..1d8a81208b --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_minus.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_minus_circle_filled.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_minus_circle_filled.xml new file mode 100644 index 0000000000..0acb2cd81e --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_minus_circle_filled.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_minus_circle_unfilled.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_minus_circle_unfilled.xml new file mode 100644 index 0000000000..4460267217 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_minus_circle_unfilled.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_next.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_next.xml new file mode 100644 index 0000000000..8311011b23 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_next.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_pause.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_pause.xml new file mode 100644 index 0000000000..1742b0aa24 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_pause.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_play.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_play.xml new file mode 100644 index 0000000000..e8074cdcc5 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_play.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed.xml new file mode 100644 index 0000000000..a2ab3877ff --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_0_5.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_0_5.xml new file mode 100644 index 0000000000..b326d62d23 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_0_5.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_0_8.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_0_8.xml new file mode 100644 index 0000000000..701e1ec8fe --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_0_8.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_1_0.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_1_0.xml new file mode 100644 index 0000000000..2b31699bee --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_1_0.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_1_2.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_1_2.xml new file mode 100644 index 0000000000..7cd316a42f --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_1_2.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_1_5.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_1_5.xml new file mode 100644 index 0000000000..d3c1ff429c --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_1_5.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_1_8.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_1_8.xml new file mode 100644 index 0000000000..f2e3d01881 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_1_8.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_2_0.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_2_0.xml new file mode 100644 index 0000000000..59945c0094 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playback_speed_2_0.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playlist_add.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playlist_add.xml new file mode 100644 index 0000000000..19e1b71c1c --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playlist_add.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playlist_remove.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playlist_remove.xml new file mode 100644 index 0000000000..4bf573a497 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_playlist_remove.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_plus.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_plus.xml new file mode 100644 index 0000000000..35818951c5 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_plus.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_plus_circle_filled.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_plus_circle_filled.xml new file mode 100644 index 0000000000..add0779bdf --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_plus_circle_filled.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_plus_circle_unfilled.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_plus_circle_unfilled.xml new file mode 100644 index 0000000000..9d91486136 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_plus_circle_unfilled.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_previous.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_previous.xml new file mode 100644 index 0000000000..6f6f5c62b6 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_previous.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_quality.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_quality.xml new file mode 100644 index 0000000000..642fe5faa8 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_quality.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_radio.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_radio.xml new file mode 100644 index 0000000000..348da8a6bb --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_radio.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_repeat_all.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_repeat_all.xml new file mode 100644 index 0000000000..f1d9ab9bc3 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_repeat_all.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_repeat_off.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_repeat_off.xml new file mode 100644 index 0000000000..6033841837 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_repeat_off.xml @@ -0,0 +1,24 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_repeat_one.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_repeat_one.xml new file mode 100644 index 0000000000..99c65e7b21 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_repeat_one.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_rewind.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_rewind.xml new file mode 100644 index 0000000000..d1c60e7ddd --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_rewind.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_settings.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_settings.xml new file mode 100644 index 0000000000..e4868b0314 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_settings.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_share.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_share.xml new file mode 100644 index 0000000000..6e97280a76 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_share.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_shuffle_off.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_shuffle_off.xml new file mode 100644 index 0000000000..3d70083d77 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_shuffle_off.xml @@ -0,0 +1,24 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_shuffle_on.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_shuffle_on.xml new file mode 100644 index 0000000000..dc32cb13e1 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_shuffle_on.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_shuffle_star.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_shuffle_star.xml new file mode 100644 index 0000000000..6d114fa011 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_shuffle_star.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_signal.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_signal.xml new file mode 100644 index 0000000000..c9327fee84 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_signal.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_back.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_back.xml new file mode 100644 index 0000000000..0263058dbe --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_back.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_back_10.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_back_10.xml new file mode 100644 index 0000000000..5d95499108 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_back_10.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_back_15.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_back_15.xml new file mode 100644 index 0000000000..543a13ecd9 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_back_15.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_back_30.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_back_30.xml new file mode 100644 index 0000000000..bc7f1adae1 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_back_30.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_back_5.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_back_5.xml new file mode 100644 index 0000000000..a28ac0deeb --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_back_5.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_forward.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_forward.xml new file mode 100644 index 0000000000..c04f93b477 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_forward.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_forward_10.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_forward_10.xml new file mode 100644 index 0000000000..3f38e943ea --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_forward_10.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_forward_15.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_forward_15.xml new file mode 100644 index 0000000000..aa6136231e --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_forward_15.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_forward_30.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_forward_30.xml new file mode 100644 index 0000000000..0c75329742 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_forward_30.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_forward_5.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_forward_5.xml new file mode 100644 index 0000000000..1f622d5049 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_skip_forward_5.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_star_filled.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_star_filled.xml new file mode 100644 index 0000000000..9c99def8bc --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_star_filled.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_star_unfilled.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_star_unfilled.xml new file mode 100644 index 0000000000..583bc5fced --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_star_unfilled.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_stop.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_stop.xml new file mode 100644 index 0000000000..a2bd219508 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_stop.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_subtitles.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_subtitles.xml new file mode 100644 index 0000000000..cbfd2e2e11 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_subtitles.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_subtitles_off.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_subtitles_off.xml new file mode 100644 index 0000000000..174ab51f74 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_subtitles_off.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_sync.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_sync.xml new file mode 100644 index 0000000000..a3381293a2 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_sync.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_thumb_down_filled.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_thumb_down_filled.xml new file mode 100644 index 0000000000..d67829f2e6 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_thumb_down_filled.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_thumb_down_unfilled.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_thumb_down_unfilled.xml new file mode 100644 index 0000000000..f2084e6d5e --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_thumb_down_unfilled.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_thumb_up_filled.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_thumb_up_filled.xml new file mode 100644 index 0000000000..aa1e558925 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_thumb_up_filled.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_thumb_up_unfilled.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_thumb_up_unfilled.xml new file mode 100644 index 0000000000..c34cc1f5c3 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_thumb_up_unfilled.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_volume_down.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_volume_down.xml new file mode 100644 index 0000000000..065008df50 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_volume_down.xml @@ -0,0 +1,23 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_volume_off.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_volume_off.xml new file mode 100644 index 0000000000..8cf1079337 --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_volume_off.xml @@ -0,0 +1,24 @@ + + + + diff --git a/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_volume_up.xml b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_volume_up.xml new file mode 100644 index 0000000000..22b80bb99e --- /dev/null +++ b/libraries/session/src/main/res/drawable-anydpi-v21/media3_icon_volume_up.xml @@ -0,0 +1,24 @@ + + + + diff --git a/libraries/session/src/main/res/values/drawables.xml b/libraries/session/src/main/res/values/drawables.xml index 701da2f8dd..12713d56e5 100644 --- a/libraries/session/src/main/res/values/drawables.xml +++ b/libraries/session/src/main/res/values/drawables.xml @@ -14,11 +14,5 @@ limitations under the License. --> - @android:drawable/ic_media_play - @android:drawable/ic_media_pause - @android:drawable/ic_media_next - @android:drawable/ic_media_previous - @android:drawable/ic_media_ff - @android:drawable/ic_media_rew @drawable/media3_icon_circular_play diff --git a/libraries/session/src/test/java/androidx/media3/session/CommandButtonTest.java b/libraries/session/src/test/java/androidx/media3/session/CommandButtonTest.java index 78c265f2c9..6f4b600f1d 100644 --- a/libraries/session/src/test/java/androidx/media3/session/CommandButtonTest.java +++ b/libraries/session/src/test/java/androidx/media3/session/CommandButtonTest.java @@ -34,7 +34,7 @@ public class CommandButtonTest { public void isButtonCommandAvailable_playerCommandAvailableOrUnavailableInPlayerCommands_isEnabledCorrectly() { CommandButton button = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button") .setIconResId(R.drawable.media3_notification_small_icon) .setPlayerCommand(Player.COMMAND_SEEK_TO_NEXT) @@ -56,7 +56,7 @@ public class CommandButtonTest { public void isButtonCommandAvailable_sessionCommandAvailableOrUnavailable_isEnabledCorrectly() { SessionCommand command1 = new SessionCommand("command1", Bundle.EMPTY); CommandButton button = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button") .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(command1) @@ -77,14 +77,14 @@ public class CommandButtonTest { @Test public void copyWithUnavailableButtonsDisabled() { CommandButton button1 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button1") .setIconResId(R.drawable.media3_notification_small_icon) .setPlayerCommand(Player.COMMAND_SEEK_TO_PREVIOUS) .build(); SessionCommand command2 = new SessionCommand("command2", Bundle.EMPTY); CommandButton button2 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button2") .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(command2) @@ -110,7 +110,7 @@ public class CommandButtonTest { public void getIconUri_returnsUri() { Uri uri = Uri.parse("content://test"); CommandButton button = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button1") .setIconResId(R.drawable.media3_notification_small_icon) .setIconUri(uri) @@ -123,7 +123,7 @@ public class CommandButtonTest { @Test public void getIconUri_returnsNullIfUnset() { CommandButton button = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button1") .setIconResId(R.drawable.media3_notification_small_icon) .setPlayerCommand(Player.COMMAND_SEEK_TO_PREVIOUS) @@ -136,7 +136,7 @@ public class CommandButtonTest { public void getIconUri_returnsUriAfterSerialisation() { Uri uri = Uri.parse("content://test"); CommandButton button = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button1") .setIconResId(R.drawable.media3_notification_small_icon) .setIconUri(uri) @@ -152,7 +152,7 @@ public class CommandButtonTest { @Test public void getIconUri_returnsNullIfUnsetAfterSerialisation() { CommandButton button = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button1") .setIconResId(R.drawable.media3_notification_small_icon) .setPlayerCommand(Player.COMMAND_SEEK_TO_PREVIOUS) @@ -167,14 +167,14 @@ public class CommandButtonTest { @Test public void equals() { assertThat( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button") .setIconResId(R.drawable.media3_notification_small_icon) .setIconUri(Uri.parse("content://test")) .setPlayerCommand(Player.COMMAND_SEEK_TO_NEXT) .build()) .isEqualTo( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button") .setIconResId(R.drawable.media3_notification_small_icon) .setIconUri(Uri.parse("content://test")) @@ -185,7 +185,7 @@ public class CommandButtonTest { @Test public void equals_minimalDifference_notEqual() { CommandButton button = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button") .setIconResId(R.drawable.media3_notification_small_icon) .setPlayerCommand(Player.COMMAND_SEEK_TO_NEXT) @@ -195,28 +195,28 @@ public class CommandButtonTest { .isEqualTo(CommandButton.fromBundle(button.toBundle(), MediaSessionStub.VERSION_INT)); assertThat(button) .isNotEqualTo( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button2") .setIconResId(R.drawable.media3_notification_small_icon) .setPlayerCommand(Player.COMMAND_SEEK_TO_NEXT) .build()); assertThat(button) .isNotEqualTo( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setPlayerCommand(Player.COMMAND_SEEK_TO_PREVIOUS) .setDisplayName("button") .setIconResId(R.drawable.media3_notification_small_icon) .build()); assertThat(button) .isNotEqualTo( - new CommandButton.Builder() - .setIconResId(R.drawable.media3_notification_play) + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) + .setIconResId(R.drawable.media3_icon_play) .setDisplayName("button") .setPlayerCommand(Player.COMMAND_SEEK_TO_NEXT) .build()); assertThat(button) .isNotEqualTo( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setEnabled(false) .setDisplayName("button") .setIconResId(R.drawable.media3_notification_small_icon) @@ -224,14 +224,14 @@ public class CommandButtonTest { .build()); assertThat(button) .isNotEqualTo( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setSessionCommand(new SessionCommand(Player.COMMAND_PLAY_PAUSE)) .setDisplayName("button") .setIconResId(R.drawable.media3_notification_small_icon) .build()); assertThat(button) .isNotEqualTo( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button") .setIconResId(R.drawable.media3_notification_small_icon) .setIconUri(Uri.parse("content://test")) @@ -239,8 +239,7 @@ public class CommandButtonTest { .build()); assertThat(button) .isNotEqualTo( - new CommandButton.Builder() - .setIcon(CommandButton.ICON_NEXT) + new CommandButton.Builder(CommandButton.ICON_NEXT) .setDisplayName("button") .setIconResId(R.drawable.media3_notification_small_icon) .setPlayerCommand(Player.COMMAND_SEEK_TO_NEXT) @@ -250,7 +249,7 @@ public class CommandButtonTest { @Test public void equals_differenceInExtras_ignored() { CommandButton.Builder builder = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button") .setPlayerCommand(Player.COMMAND_SEEK_TO_NEXT) .setIconResId(R.drawable.media3_notification_small_icon); @@ -268,40 +267,34 @@ public class CommandButtonTest { @Test public void equals_differencesInSessionCommand_notEqual() { assertThat( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_PLAY) .setSessionCommand(new SessionCommand(Player.COMMAND_PLAY_PAUSE)) .setDisplayName("button") - .setIconResId(R.drawable.media3_notification_play) .build()) .isNotEqualTo( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_PLAY) .setSessionCommand(new SessionCommand(Player.COMMAND_SEEK_BACK)) .setDisplayName("button") - .setIconResId(R.drawable.media3_notification_play) .build()); assertThat( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_PLAY) .setSessionCommand(new SessionCommand(Player.COMMAND_PLAY_PAUSE)) .setDisplayName("button") - .setIconResId(R.drawable.media3_notification_play) .build()) .isNotEqualTo( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_PLAY) .setSessionCommand(new SessionCommand("customAction", Bundle.EMPTY)) .setDisplayName("button") - .setIconResId(R.drawable.media3_notification_play) .build()); assertThat( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_PLAY) .setSessionCommand(new SessionCommand("customAction", Bundle.EMPTY)) .setDisplayName("button") - .setIconResId(R.drawable.media3_notification_play) .build()) .isNotEqualTo( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_PLAY) .setSessionCommand(new SessionCommand("customAction2", Bundle.EMPTY)) .setDisplayName("button") - .setIconResId(R.drawable.media3_notification_play) .build()); } @@ -310,44 +303,42 @@ public class CommandButtonTest { Bundle extras = new Bundle(); extras.putString("key", "value"); assertThat( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_PLAY) .setSessionCommand(new SessionCommand("customAction", Bundle.EMPTY)) .setDisplayName("button") - .setIconResId(R.drawable.media3_notification_play) .build()) .isEqualTo( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_PLAY) .setExtras(extras) .setSessionCommand(new SessionCommand("customAction", extras)) .setDisplayName("button") - .setIconResId(R.drawable.media3_notification_play) .build()); } @Test public void hashCode_equalButtons_sameHashcode() { assertThat( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button") .setIconResId(R.drawable.media3_notification_small_icon) .setPlayerCommand(Player.COMMAND_SEEK_TO_NEXT) .build() .hashCode()) .isEqualTo( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button") .setIconResId(R.drawable.media3_notification_small_icon) .setPlayerCommand(Player.COMMAND_SEEK_TO_NEXT) .build() .hashCode()); assertThat( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setIconResId(R.drawable.media3_notification_small_icon) .setPlayerCommand(Player.COMMAND_SEEK_TO_NEXT) .build() .hashCode()) .isNotEqualTo( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button") .setIconResId(R.drawable.media3_notification_small_icon) .setPlayerCommand(Player.COMMAND_SEEK_TO_NEXT) @@ -358,7 +349,7 @@ public class CommandButtonTest { @Test public void build_withoutSessionOrPlayerCommandSet_throwsIllegalStateException() { CommandButton.Builder builder = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button") .setIconResId(R.drawable.media3_notification_small_icon); assertThrows(IllegalStateException.class, builder::build); @@ -369,27 +360,27 @@ public class CommandButtonTest { Bundle extras = new Bundle(); extras.putString("key", "value"); CommandButton buttonWithSessionCommand = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_CLOSED_CAPTIONS) .setDisplayName("name") .setEnabled(true) - .setIcon(CommandButton.ICON_CLOSED_CAPTIONS) .setIconResId(R.drawable.media3_notification_small_icon) .setIconUri(Uri.parse("http://test.test")) .setExtras(extras) .setSessionCommand(new SessionCommand(SessionCommand.COMMAND_CODE_SESSION_SET_RATING)) .build(); CommandButton buttonWithPlayerCommand = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_CLOSED_CAPTIONS) .setDisplayName("name") .setEnabled(true) - .setIcon(CommandButton.ICON_CLOSED_CAPTIONS) .setIconResId(R.drawable.media3_notification_small_icon) .setIconUri(Uri.parse("http://test.test")) .setExtras(extras) .setPlayerCommand(Player.COMMAND_GET_METADATA) .build(); CommandButton buttonWithDefaultValues = - new CommandButton.Builder().setPlayerCommand(Player.COMMAND_PLAY_PAUSE).build(); + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) + .setPlayerCommand(Player.COMMAND_PLAY_PAUSE) + .build(); CommandButton restoredButtonWithSessionCommand = CommandButton.fromBundle(buttonWithSessionCommand.toBundle(), MediaSessionStub.VERSION_INT); @@ -408,7 +399,7 @@ public class CommandButtonTest { @Test public void fromBundle_withSessionInterfaceVersionLessThan3_setsEnabledToTrue() { CommandButton buttonWithEnabledFalse = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setEnabled(false) .setSessionCommand(new SessionCommand(SessionCommand.COMMAND_CODE_SESSION_SET_RATING)) .build(); diff --git a/libraries/session/src/test/java/androidx/media3/session/DefaultActionFactoryTest.java b/libraries/session/src/test/java/androidx/media3/session/DefaultActionFactoryTest.java index d4e904ccb7..60f7c2783a 100644 --- a/libraries/session/src/test/java/androidx/media3/session/DefaultActionFactoryTest.java +++ b/libraries/session/src/test/java/androidx/media3/session/DefaultActionFactoryTest.java @@ -124,10 +124,9 @@ public class DefaultActionFactoryTest { Bundle buttonBundle = new Bundle(); buttonBundle.putString("button-key", "button-value"); CommandButton customSessionCommand = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_PAUSE) .setSessionCommand(new SessionCommand("a", commandBundle)) .setExtras(buttonBundle) - .setIconResId(R.drawable.media3_notification_pause) .setDisplayName("name") .build(); @@ -138,7 +137,7 @@ public class DefaultActionFactoryTest { assertThat(shadowPendingIntent.getSavedIntent().getData()).isEqualTo(mediaSession.getUri()); assertThat(String.valueOf(notificationAction.title)).isEqualTo("name"); assertThat(notificationAction.getIconCompat().getResId()) - .isEqualTo(R.drawable.media3_notification_pause); + .isEqualTo(R.drawable.media3_icon_pause); assertThat(notificationAction.getExtras().size()).isEqualTo(0); assertThat(notificationAction.getActionIntent()).isNotNull(); } @@ -149,9 +148,8 @@ public class DefaultActionFactoryTest { DefaultActionFactory actionFactory = new DefaultActionFactory(Robolectric.setupService(TestService.class)); CommandButton customSessionCommand = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_PAUSE) .setPlayerCommand(Player.COMMAND_PLAY_PAUSE) - .setIconResId(R.drawable.media3_notification_pause) .setDisplayName("name") .build(); diff --git a/libraries/session/src/test/java/androidx/media3/session/DefaultMediaNotificationProviderTest.java b/libraries/session/src/test/java/androidx/media3/session/DefaultMediaNotificationProviderTest.java index 8b0a6177d1..6103c8601e 100644 --- a/libraries/session/src/test/java/androidx/media3/session/DefaultMediaNotificationProviderTest.java +++ b/libraries/session/src/test/java/androidx/media3/session/DefaultMediaNotificationProviderTest.java @@ -133,13 +133,11 @@ public class DefaultMediaNotificationProviderTest { assertThat(mediaButtonsWhenPlaying).hasSize(3); assertThat(mediaButtonsWhenPlaying.get(1).playerCommand).isEqualTo(Player.COMMAND_PLAY_PAUSE); - assertThat(mediaButtonsWhenPlaying.get(1).iconResId) - .isEqualTo(R.drawable.media3_notification_pause); + assertThat(mediaButtonsWhenPlaying.get(1).iconResId).isEqualTo(R.drawable.media3_icon_pause); assertThat(String.valueOf(mediaButtonsWhenPlaying.get(1).displayName)).isEqualTo("Pause"); assertThat(mediaButtonWhenPaused).hasSize(3); assertThat(mediaButtonWhenPaused.get(1).playerCommand).isEqualTo(Player.COMMAND_PLAY_PAUSE); - assertThat(mediaButtonWhenPaused.get(1).iconResId) - .isEqualTo(R.drawable.media3_notification_play); + assertThat(mediaButtonWhenPaused.get(1).iconResId).isEqualTo(R.drawable.media3_icon_play); assertThat(String.valueOf(mediaButtonWhenPaused.get(1).displayName)).isEqualTo("Play"); } @@ -151,7 +149,7 @@ public class DefaultMediaNotificationProviderTest { Commands commands = new Commands.Builder().addAllCommands().build(); SessionCommand customSessionCommand = new SessionCommand("", Bundle.EMPTY); CommandButton customCommandButton = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("displayName") .setIconResId(R.drawable.media3_icon_circular_play) .setSessionCommand(customSessionCommand) @@ -184,7 +182,7 @@ public class DefaultMediaNotificationProviderTest { Commands commands = new Commands.Builder().build(); SessionCommand customSessionCommand = new SessionCommand("action1", Bundle.EMPTY); CommandButton customCommandButton = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("displayName") .setIconResId(R.drawable.media3_icon_circular_play) .setSessionCommand(customSessionCommand) @@ -213,7 +211,7 @@ public class DefaultMediaNotificationProviderTest { new NotificationCompat.Builder( ApplicationProvider.getApplicationContext(), TEST_CHANNEL_ID); CommandButton commandButton1 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setPlayerCommand(Player.COMMAND_PLAY_PAUSE) .setDisplayName("displayName") .setIconResId(R.drawable.media3_icon_circular_play) @@ -221,7 +219,7 @@ public class DefaultMediaNotificationProviderTest { Bundle commandButton2Bundle = new Bundle(); commandButton2Bundle.putInt(DefaultMediaNotificationProvider.COMMAND_KEY_COMPACT_VIEW_INDEX, 0); CommandButton commandButton2 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("displayName") .setIconResId(R.drawable.media3_icon_circular_play) .setSessionCommand(new SessionCommand("action2", Bundle.EMPTY)) @@ -230,7 +228,7 @@ public class DefaultMediaNotificationProviderTest { Bundle commandButton3Bundle = new Bundle(); commandButton3Bundle.putInt(DefaultMediaNotificationProvider.COMMAND_KEY_COMPACT_VIEW_INDEX, 2); CommandButton commandButton3 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("displayName") .setIconResId(R.drawable.media3_icon_circular_play) .setSessionCommand(new SessionCommand("action3", Bundle.EMPTY)) @@ -239,7 +237,7 @@ public class DefaultMediaNotificationProviderTest { Bundle commandButton4Bundle = new Bundle(); commandButton4Bundle.putInt(DefaultMediaNotificationProvider.COMMAND_KEY_COMPACT_VIEW_INDEX, 1); CommandButton commandButton4 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("displayName") .setIconResId(R.drawable.media3_icon_circular_play) .setSessionCommand(new SessionCommand("action4", Bundle.EMPTY)) @@ -286,25 +284,25 @@ public class DefaultMediaNotificationProviderTest { new NotificationCompat.Builder( ApplicationProvider.getApplicationContext(), TEST_CHANNEL_ID); CommandButton commandButton1 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("displayName") .setIconResId(R.drawable.media3_icon_circular_play) .setSessionCommand(new SessionCommand("action1", Bundle.EMPTY)) .build(); CommandButton commandButton2 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setPlayerCommand(Player.COMMAND_PLAY_PAUSE) .setDisplayName("displayName") .setIconResId(R.drawable.media3_icon_circular_play) .build(); CommandButton commandButton3 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setPlayerCommand(Player.COMMAND_SEEK_TO_PREVIOUS) .setDisplayName("displayName") .setIconResId(R.drawable.media3_icon_circular_play) .build(); CommandButton commandButton4 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setPlayerCommand(Player.COMMAND_SEEK_TO_NEXT) .setDisplayName("displayName") .setIconResId(R.drawable.media3_icon_circular_play) @@ -352,19 +350,19 @@ public class DefaultMediaNotificationProviderTest { new NotificationCompat.Builder( ApplicationProvider.getApplicationContext(), TEST_CHANNEL_ID); CommandButton commandButton1 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("displayName") .setIconResId(R.drawable.media3_icon_circular_play) .setSessionCommand(new SessionCommand("action1", Bundle.EMPTY)) .build(); CommandButton commandButton2 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setPlayerCommand(Player.COMMAND_PLAY_PAUSE) .setDisplayName("displayName") .setIconResId(R.drawable.media3_icon_circular_play) .build(); CommandButton commandButton3 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setPlayerCommand(Player.COMMAND_SEEK_TO_PREVIOUS) .setDisplayName("displayName") .setIconResId(R.drawable.media3_icon_circular_play) @@ -408,7 +406,7 @@ public class DefaultMediaNotificationProviderTest { new NotificationCompat.Builder( ApplicationProvider.getApplicationContext(), TEST_CHANNEL_ID); CommandButton commandButton1 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("displayName") .setIconResId(R.drawable.media3_icon_circular_play) .setSessionCommand(new SessionCommand("action1", Bundle.EMPTY)) @@ -441,7 +439,7 @@ public class DefaultMediaNotificationProviderTest { Bundle commandButtonBundle1 = new Bundle(); commandButtonBundle1.putInt(DefaultMediaNotificationProvider.COMMAND_KEY_COMPACT_VIEW_INDEX, 2); CommandButton commandButton1 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("displayName") .setIconResId(R.drawable.media3_icon_circular_play) .setSessionCommand(new SessionCommand("action1", Bundle.EMPTY)) @@ -451,7 +449,7 @@ public class DefaultMediaNotificationProviderTest { commandButtonBundle2.putInt( DefaultMediaNotificationProvider.COMMAND_KEY_COMPACT_VIEW_INDEX, -1); CommandButton commandButton2 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("displayName2") .setIconResId(R.drawable.media3_icon_circular_play) .setSessionCommand(new SessionCommand("action1", Bundle.EMPTY)) @@ -491,7 +489,7 @@ public class DefaultMediaNotificationProviderTest { Bundle commandButtonBundle = new Bundle(); commandButtonBundle.putInt(DefaultMediaNotificationProvider.COMMAND_KEY_COMPACT_VIEW_INDEX, 1); CommandButton commandButton1 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("displayName") .setIconResId(R.drawable.media3_icon_circular_play) .setSessionCommand(new SessionCommand("action1", Bundle.EMPTY)) @@ -528,9 +526,8 @@ public class DefaultMediaNotificationProviderTest { Bundle commandButtonBundle = new Bundle(); commandButtonBundle.putString("testKey", "testValue"); CommandButton commandButton1 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_PLAY) .setDisplayName("displayName1") - .setIconResId(R.drawable.media3_notification_play) .setSessionCommand(new SessionCommand("action1", Bundle.EMPTY)) .setExtras(commandButtonBundle) .build(); @@ -633,20 +630,20 @@ public class DefaultMediaNotificationProviderTest { new TestExoPlayerBuilder(context).build()) .build(); CommandButton button1 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button1") .setIconResId(R.drawable.media3_notification_small_icon) .setPlayerCommand(Player.COMMAND_SEEK_TO_PREVIOUS) .build(); CommandButton button2 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button2") .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(new SessionCommand("command2", Bundle.EMPTY)) .build() .copyWithIsEnabled(true); CommandButton button3 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button3") .setIconResId(R.drawable.media3_notification_small_icon) .setPlayerCommand(Player.COMMAND_PLAY_PAUSE) diff --git a/libraries/session/src/test/java/androidx/media3/session/MediaSessionServiceTest.java b/libraries/session/src/test/java/androidx/media3/session/MediaSessionServiceTest.java index 7b84bd1ddd..7ca5925bd9 100644 --- a/libraries/session/src/test/java/androidx/media3/session/MediaSessionServiceTest.java +++ b/libraries/session/src/test/java/androidx/media3/session/MediaSessionServiceTest.java @@ -161,26 +161,26 @@ public class MediaSessionServiceTest { SessionCommand command3 = new SessionCommand("command3", Bundle.EMPTY); SessionCommand command4 = new SessionCommand("command4", Bundle.EMPTY); CommandButton button1 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("customAction1") .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(command1) .build(); CommandButton button2 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("customAction2") .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(command2) .build(); CommandButton button3 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("customAction3") .setEnabled(false) .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(command3) .build(); CommandButton button4 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("customAction4") .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(command4) @@ -265,13 +265,13 @@ public class MediaSessionServiceTest { SessionCommand command1 = new SessionCommand("command1", Bundle.EMPTY); SessionCommand command2 = new SessionCommand("command2", Bundle.EMPTY); CommandButton button1 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("customAction1") .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(command1) .build(); CommandButton button2 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("customAction2") .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(command2) diff --git a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerCompatCallbackWithMediaSessionTest.java b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerCompatCallbackWithMediaSessionTest.java index e24402f7aa..d09535c762 100644 --- a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerCompatCallbackWithMediaSessionTest.java +++ b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerCompatCallbackWithMediaSessionTest.java @@ -949,13 +949,13 @@ public class MediaControllerCompatCallbackWithMediaSessionTest { SessionCommand command2 = new SessionCommand("command2", extras2); ImmutableList customLayout = ImmutableList.of( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setSessionCommand(command1) .setDisplayName("command1") .setIconResId(1) .build() .copyWithIsEnabled(true), - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setSessionCommand(command2) .setDisplayName("command2") .setIconResId(2) diff --git a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerCompatPlaybackStateCompatActionsWithMediaSessionTest.java b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerCompatPlaybackStateCompatActionsWithMediaSessionTest.java index c17452c1f1..ced1f07d54 100644 --- a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerCompatPlaybackStateCompatActionsWithMediaSessionTest.java +++ b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerCompatPlaybackStateCompatActionsWithMediaSessionTest.java @@ -45,7 +45,6 @@ import androidx.media3.common.util.Consumer; import androidx.media3.exoplayer.ExoPlayer; import androidx.media3.session.MediaSession.ConnectionResult; import androidx.media3.session.MediaSession.ConnectionResult.AcceptedResultBuilder; -import androidx.media3.test.session.R; import androidx.media3.test.session.common.HandlerThreadTestRule; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -1451,20 +1450,17 @@ public class MediaControllerCompatPlaybackStateCompatActionsWithMediaSessionTest SessionCommand command3 = new SessionCommand("command3", Bundle.EMPTY); ImmutableList customLayout = ImmutableList.of( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_PLAY) .setDisplayName("button1") - .setIconResId(R.drawable.media3_notification_play) .setSessionCommand(command1) .build(), - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_PAUSE) .setDisplayName("button2") - .setIconResId(R.drawable.media3_notification_pause) .setSessionCommand(command2) .build(), - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_PAUSE) .setDisplayName("button3") .setEnabled(false) - .setIconResId(R.drawable.media3_notification_pause) .setSessionCommand(command3) .build()); MediaSession.Callback callback = @@ -1504,14 +1500,12 @@ public class MediaControllerCompatPlaybackStateCompatActionsWithMediaSessionTest SessionCommand command2 = new SessionCommand("command2", extras2); ImmutableList customLayout = ImmutableList.of( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_PLAY) .setDisplayName("button1") - .setIconResId(R.drawable.media3_notification_play) .setSessionCommand(command1) .build(), - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_PAUSE) .setDisplayName("button2") - .setIconResId(R.drawable.media3_notification_pause) .setSessionCommand(command2) .build()); MediaSession.Callback callback = @@ -1565,15 +1559,12 @@ public class MediaControllerCompatPlaybackStateCompatActionsWithMediaSessionTest SessionCommand command2 = new SessionCommand("command2", extras2); ImmutableList customLayout = ImmutableList.of( - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_PLAY) .setDisplayName("button1") - .setIconResId(R.drawable.media3_notification_play) .setSessionCommand(command1) .build(), - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_PAUSE) .setDisplayName("button2") - .setIcon(CommandButton.ICON_FAST_FORWARD) - .setIconResId(R.drawable.media3_notification_pause) .setSessionCommand(command2) .build()); MediaSession.Callback callback = diff --git a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerListenerTest.java b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerListenerTest.java index 7152ce25ef..e4c5582edc 100644 --- a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerListenerTest.java +++ b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerListenerTest.java @@ -2410,7 +2410,7 @@ public class MediaControllerListenerTest { Bundle extras1 = new Bundle(); extras1.putString("key", "value-1"); CommandButton button1 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setSessionCommand(new SessionCommand("action1", extras1)) .setDisplayName("actionName1") .setIconResId(1) @@ -2418,7 +2418,7 @@ public class MediaControllerListenerTest { Bundle extras2 = new Bundle(); extras2.putString("key", "value-2"); CommandButton button2 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setSessionCommand(new SessionCommand("action2", extras2)) .setDisplayName("actionName2") .setIconResId(2) diff --git a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerListenerWithMediaSessionCompatTest.java b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerListenerWithMediaSessionCompatTest.java index 44e684b4cd..b4748270c6 100644 --- a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerListenerWithMediaSessionCompatTest.java +++ b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerListenerWithMediaSessionCompatTest.java @@ -394,16 +394,14 @@ public class MediaControllerListenerWithMediaSessionCompatTest { @Test public void getCustomLayout() throws Exception { CommandButton button1 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button1") .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(new SessionCommand("command1", Bundle.EMPTY)) .build(); CommandButton button2 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_FAST_FORWARD) .setDisplayName("button2") - .setIcon(CommandButton.ICON_FAST_FORWARD) - .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(new SessionCommand("command2", Bundle.EMPTY)) .build(); ConditionVariable onSetCustomLayoutCalled = new ConditionVariable(); @@ -443,7 +441,7 @@ public class MediaControllerListenerWithMediaSessionCompatTest { MediaConstants.EXTRAS_KEY_COMMAND_BUTTON_ICON_COMPAT, CommandButton.ICON_FAST_FORWARD); PlaybackStateCompat.CustomAction customAction2 = new PlaybackStateCompat.CustomAction.Builder( - "command2", "button2", /* icon= */ R.drawable.media3_notification_small_icon) + "command2", "button2", /* icon= */ R.drawable.media3_icon_fast_forward) .setExtras(extras2) .build(); PlaybackStateCompat.Builder playbackState1 = diff --git a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerTest.java b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerTest.java index 4f8b41ac9d..abfce29040 100644 --- a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerTest.java +++ b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerTest.java @@ -173,32 +173,32 @@ public class MediaControllerTest { RemoteMediaSession session = createRemoteMediaSession(TEST_GET_CUSTOM_LAYOUT, /* tokenExtras= */ null); CommandButton button1 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button1") .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(new SessionCommand("command1", Bundle.EMPTY)) .build(); CommandButton button2 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button2") .setEnabled(false) .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(new SessionCommand("command2", Bundle.EMPTY)) .build(); CommandButton button3 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button3") .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(new SessionCommand("command3", Bundle.EMPTY)) .build(); CommandButton button4 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button4") .setIconResId(R.drawable.media3_notification_small_icon) .setPlayerCommand(Player.COMMAND_PLAY_PAUSE) .build(); CommandButton button5 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button5") .setIconResId(R.drawable.media3_notification_small_icon) .setPlayerCommand(Player.COMMAND_GET_TRACKS) @@ -223,38 +223,38 @@ public class MediaControllerTest { RemoteMediaSession session = createRemoteMediaSession(TEST_GET_CUSTOM_LAYOUT, /* tokenExtras= */ null); CommandButton button1 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button1") .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(new SessionCommand("command1", Bundle.EMPTY)) .build(); CommandButton button2 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button2") .setEnabled(false) .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(new SessionCommand("command2", Bundle.EMPTY)) .build(); CommandButton button3 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button3") .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(new SessionCommand("command3", Bundle.EMPTY)) .build(); CommandButton button4 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button4") .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(new SessionCommand("command4", Bundle.EMPTY)) .build(); CommandButton button5 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button5") .setIconResId(R.drawable.media3_notification_small_icon) .setPlayerCommand(Player.COMMAND_PLAY_PAUSE) .build(); CommandButton button6 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button6") .setIconResId(R.drawable.media3_notification_small_icon) .setPlayerCommand(Player.COMMAND_GET_TRACKS) @@ -314,26 +314,26 @@ public class MediaControllerTest { throws Exception { RemoteMediaSession session = createRemoteMediaSession(TEST_GET_CUSTOM_LAYOUT, null); CommandButton button1 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button1") .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(new SessionCommand("command1", Bundle.EMPTY)) .build(); CommandButton button2 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button2") .setEnabled(false) .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(new SessionCommand("command2", Bundle.EMPTY)) .build(); CommandButton button3 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button3") .setIconResId(R.drawable.media3_notification_small_icon) .setPlayerCommand(Player.COMMAND_PLAY_PAUSE) .build(); CommandButton button4 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button4") .setIconResId(R.drawable.media3_notification_small_icon) .setPlayerCommand(Player.COMMAND_GET_TRACKS) @@ -409,7 +409,7 @@ public class MediaControllerTest { throws Exception { RemoteMediaSession session = createRemoteMediaSession(TEST_GET_CUSTOM_LAYOUT, null); CommandButton button = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button") .setIconResId(R.drawable.media3_notification_small_icon) .setPlayerCommand(Player.COMMAND_PLAY_PAUSE) @@ -457,26 +457,26 @@ public class MediaControllerTest { RemoteMediaSession session = createRemoteMediaSession(TEST_GET_CUSTOM_LAYOUT, /* tokenExtras= */ null); CommandButton button1 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button1") .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(new SessionCommand("command1", Bundle.EMPTY)) .build(); CommandButton button2 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button2") .setEnabled(false) .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(new SessionCommand("command2", Bundle.EMPTY)) .build(); CommandButton button3 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button3") .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(new SessionCommand("command3", Bundle.EMPTY)) .build(); CommandButton button4 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button4") .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(new SessionCommand("command4", Bundle.EMPTY)) diff --git a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionCallbackTest.java b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionCallbackTest.java index cca0b652f1..ca0fcd16d6 100644 --- a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionCallbackTest.java +++ b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionCallbackTest.java @@ -41,7 +41,6 @@ import androidx.media3.common.StarRating; import androidx.media3.exoplayer.ExoPlayer; import androidx.media3.session.MediaSession.ConnectionResult.AcceptedResultBuilder; import androidx.media3.session.MediaSession.ControllerInfo; -import androidx.media3.test.session.R; import androidx.media3.test.session.common.HandlerThreadTestRule; import androidx.media3.test.session.common.MainLooperTestRule; import androidx.media3.test.session.common.TestHandler; @@ -153,17 +152,15 @@ public class MediaSessionCallbackTest { public void onConnect_acceptWithMissingSessionCommand_buttonDisabledAndPermissionDenied() throws Exception { CommandButton button1 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_PLAY) .setDisplayName("button1") - .setIconResId(R.drawable.media3_notification_play) .setSessionCommand(new SessionCommand("command1", Bundle.EMPTY)) .setEnabled(true) .build(); CommandButton button1Disabled = button1.copyWithIsEnabled(false); CommandButton button2 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_PAUSE) .setDisplayName("button2") - .setIconResId(R.drawable.media3_notification_pause) .setSessionCommand(new SessionCommand("command2", Bundle.EMPTY)) .setEnabled(true) .build(); diff --git a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionServiceTest.java b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionServiceTest.java index ebf8f709ef..73f55b153d 100644 --- a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionServiceTest.java +++ b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionServiceTest.java @@ -242,19 +242,19 @@ public class MediaSessionServiceTest { SessionCommand command2 = new SessionCommand("command2", Bundle.EMPTY); SessionCommand command3 = new SessionCommand("command3", Bundle.EMPTY); CommandButton button1 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button1") .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(command1) .build(); CommandButton button2 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button2") .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(command2) .build(); CommandButton button3 = - new CommandButton.Builder() + new CommandButton.Builder(CommandButton.ICON_UNDEFINED) .setDisplayName("button3") .setIconResId(R.drawable.media3_notification_small_icon) .setSessionCommand(command3)