From e41f76ea8591b3869e8f7042a9b7a5effe3b7414 Mon Sep 17 00:00:00 2001 From: Hubert Mazur Date: Thu, 11 Apr 2024 09:06:25 +0200 Subject: [PATCH 1/4] Introduce a new optional argument for repeat mode Add a new string command line optional argument to allow the playback to run in loop. This would help to use the app in the automated video tests. The change does not enable the option view for switching the loop mode in the UI as providing an extra argument implies force, not optional, loop playback. The extra option is provided with "repeat_mode" key and one of the possible modes can be specified: NONE|ONE|ALL. The available options correspond to the Player API to ensure compability. --- .../androidx/media3/demo/main/IntentUtil.java | 16 ++++++++++++++++ .../media3/demo/main/PlayerActivity.java | 4 ++++ 2 files changed, 20 insertions(+) diff --git a/demos/main/src/main/java/androidx/media3/demo/main/IntentUtil.java b/demos/main/src/main/java/androidx/media3/demo/main/IntentUtil.java index 95d25a94b6..2b3f931083 100644 --- a/demos/main/src/main/java/androidx/media3/demo/main/IntentUtil.java +++ b/demos/main/src/main/java/androidx/media3/demo/main/IntentUtil.java @@ -27,6 +27,7 @@ import androidx.media3.common.MediaItem; import androidx.media3.common.MediaItem.ClippingConfiguration; import androidx.media3.common.MediaItem.SubtitleConfiguration; import androidx.media3.common.MediaMetadata; +import androidx.media3.common.Player; import androidx.media3.common.util.Util; import com.google.common.collect.ImmutableList; import java.util.ArrayList; @@ -66,6 +67,21 @@ public class IntentUtil { public static final String SUBTITLE_URI_EXTRA = "subtitle_uri"; public static final String SUBTITLE_MIME_TYPE_EXTRA = "subtitle_mime_type"; public static final String SUBTITLE_LANGUAGE_EXTRA = "subtitle_language"; + public static final String PLAYER_REPEAT_MODE_EXTRA = "repeat_mode"; + + public static @Player.RepeatMode int parseRepeatModeExtra(String repeatMode) { + switch (repeatMode) { + case "OFF": + return Player.REPEAT_MODE_OFF; + case "ONE": + return Player.REPEAT_MODE_ONE; + case "ALL": + return Player.REPEAT_MODE_ALL; + default: + throw new IllegalArgumentException("Argument " + repeatMode + + " does not match any of the repeat modes: OFF|ONE|ALL"); + } + } /** Creates a list of {@link MediaItem media items} from an {@link Intent}. */ public static List createMediaItemsFromIntent(Intent intent) { diff --git a/demos/main/src/main/java/androidx/media3/demo/main/PlayerActivity.java b/demos/main/src/main/java/androidx/media3/demo/main/PlayerActivity.java index 3c0da8d4dd..705d83e91e 100644 --- a/demos/main/src/main/java/androidx/media3/demo/main/PlayerActivity.java +++ b/demos/main/src/main/java/androidx/media3/demo/main/PlayerActivity.java @@ -293,6 +293,10 @@ public class PlayerActivity extends AppCompatActivity } player.setMediaItems(mediaItems, /* resetPosition= */ !haveStartPosition); player.prepare(); + String requestedRepeatModeExtra; + if ((requestedRepeatModeExtra = this.getIntent().getStringExtra(IntentUtil.PLAYER_REPEAT_MODE_EXTRA)) != null) { + player.setRepeatMode(IntentUtil.parseRepeatModeExtra(requestedRepeatModeExtra)); + } updateButtonVisibility(); return true; } From ee6961f9583548e5cd4453b6d9434970a7827b61 Mon Sep 17 00:00:00 2001 From: Marc Baechinger Date: Mon, 15 Apr 2024 10:54:32 +0200 Subject: [PATCH 2/4] Format with google-java-format --- .../src/main/java/androidx/media3/demo/main/IntentUtil.java | 4 ++-- .../main/java/androidx/media3/demo/main/PlayerActivity.java | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/demos/main/src/main/java/androidx/media3/demo/main/IntentUtil.java b/demos/main/src/main/java/androidx/media3/demo/main/IntentUtil.java index 2b3f931083..ab61e86f39 100644 --- a/demos/main/src/main/java/androidx/media3/demo/main/IntentUtil.java +++ b/demos/main/src/main/java/androidx/media3/demo/main/IntentUtil.java @@ -78,8 +78,8 @@ public class IntentUtil { case "ALL": return Player.REPEAT_MODE_ALL; default: - throw new IllegalArgumentException("Argument " + repeatMode + - " does not match any of the repeat modes: OFF|ONE|ALL"); + throw new IllegalArgumentException( + "Argument " + repeatMode + " does not match any of the repeat modes: OFF|ONE|ALL"); } } diff --git a/demos/main/src/main/java/androidx/media3/demo/main/PlayerActivity.java b/demos/main/src/main/java/androidx/media3/demo/main/PlayerActivity.java index 705d83e91e..c0c9db93b7 100644 --- a/demos/main/src/main/java/androidx/media3/demo/main/PlayerActivity.java +++ b/demos/main/src/main/java/androidx/media3/demo/main/PlayerActivity.java @@ -294,7 +294,9 @@ public class PlayerActivity extends AppCompatActivity player.setMediaItems(mediaItems, /* resetPosition= */ !haveStartPosition); player.prepare(); String requestedRepeatModeExtra; - if ((requestedRepeatModeExtra = this.getIntent().getStringExtra(IntentUtil.PLAYER_REPEAT_MODE_EXTRA)) != null) { + if ((requestedRepeatModeExtra = + this.getIntent().getStringExtra(IntentUtil.PLAYER_REPEAT_MODE_EXTRA)) + != null) { player.setRepeatMode(IntentUtil.parseRepeatModeExtra(requestedRepeatModeExtra)); } updateButtonVisibility(); From 20e98ca125296fe206c0c99667fe412ca3efe78f Mon Sep 17 00:00:00 2001 From: Marc Baechinger Date: Mon, 15 Apr 2024 10:56:50 +0200 Subject: [PATCH 3/4] Add release notes --- RELEASENOTES.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 90695c3c0e..e374ce3898 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -44,6 +44,8 @@ * Test Utilities: * Remove deprecated symbols: * Demo app: + * Allow setting repeat mode with Intent arguments from command line + ([#1266](https://github.com/androidx/media/pull/1266)). ## 1.4 From a6b540545d5625880e31368705820577df6852b2 Mon Sep 17 00:00:00 2001 From: Marc Baechinger Date: Mon, 15 Apr 2024 11:09:13 +0200 Subject: [PATCH 4/4] Minor cleanup --- RELEASENOTES.md | 2 +- .../java/androidx/media3/demo/main/IntentUtil.java | 3 ++- .../java/androidx/media3/demo/main/PlayerActivity.java | 10 ++++------ 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index e374ce3898..6a306c28cd 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -44,7 +44,7 @@ * Test Utilities: * Remove deprecated symbols: * Demo app: - * Allow setting repeat mode with Intent arguments from command line + * Allow setting repeat mode with `Intent` arguments from command line ([#1266](https://github.com/androidx/media/pull/1266)). ## 1.4 diff --git a/demos/main/src/main/java/androidx/media3/demo/main/IntentUtil.java b/demos/main/src/main/java/androidx/media3/demo/main/IntentUtil.java index ab61e86f39..7d88a62163 100644 --- a/demos/main/src/main/java/androidx/media3/demo/main/IntentUtil.java +++ b/demos/main/src/main/java/androidx/media3/demo/main/IntentUtil.java @@ -45,6 +45,7 @@ public class IntentUtil { public static final String ACTION_VIEW_LIST = "androidx.media3.demo.main.action.VIEW_LIST"; // Activity extras. + public static final String AV_ANALYSIS_MODE_EXTRA = "av_analysis_mode"; // copybara:strip public static final String PREFER_EXTENSION_DECODERS_EXTRA = "prefer_extension_decoders"; // Media item configuration extras. @@ -67,7 +68,7 @@ public class IntentUtil { public static final String SUBTITLE_URI_EXTRA = "subtitle_uri"; public static final String SUBTITLE_MIME_TYPE_EXTRA = "subtitle_mime_type"; public static final String SUBTITLE_LANGUAGE_EXTRA = "subtitle_language"; - public static final String PLAYER_REPEAT_MODE_EXTRA = "repeat_mode"; + public static final String REPEAT_MODE_EXTRA = "repeat_mode"; public static @Player.RepeatMode int parseRepeatModeExtra(String repeatMode) { switch (repeatMode) { diff --git a/demos/main/src/main/java/androidx/media3/demo/main/PlayerActivity.java b/demos/main/src/main/java/androidx/media3/demo/main/PlayerActivity.java index c0c9db93b7..9e066bd94a 100644 --- a/demos/main/src/main/java/androidx/media3/demo/main/PlayerActivity.java +++ b/demos/main/src/main/java/androidx/media3/demo/main/PlayerActivity.java @@ -262,8 +262,8 @@ public class PlayerActivity extends AppCompatActivity * @return Whether initialization was successful. */ protected boolean initializePlayer() { + Intent intent = getIntent(); if (player == null) { - Intent intent = getIntent(); mediaItems = createMediaItems(intent); if (mediaItems.isEmpty()) { @@ -293,11 +293,9 @@ public class PlayerActivity extends AppCompatActivity } player.setMediaItems(mediaItems, /* resetPosition= */ !haveStartPosition); player.prepare(); - String requestedRepeatModeExtra; - if ((requestedRepeatModeExtra = - this.getIntent().getStringExtra(IntentUtil.PLAYER_REPEAT_MODE_EXTRA)) - != null) { - player.setRepeatMode(IntentUtil.parseRepeatModeExtra(requestedRepeatModeExtra)); + String repeatModeExtra = intent.getStringExtra(IntentUtil.REPEAT_MODE_EXTRA); + if (repeatModeExtra != null) { + player.setRepeatMode(IntentUtil.parseRepeatModeExtra(repeatModeExtra)); } updateButtonVisibility(); return true;