From ae7d7dc7e8b698e927edd5f9460b97f20317f949 Mon Sep 17 00:00:00 2001 From: ibaker Date: Fri, 25 Apr 2025 06:17:54 -0700 Subject: [PATCH] Enable scrubbing for local files in the demo app Scrubbing mode doesn't really work for assets loaded over the network. This also assumes `asset://`, `data://` and `android.resource://` URIs are 'local' but not `content://` - because these can be loaded by any arbitrary `ContentResolver` which may do higher latency/lower bandwidth remote loading. PiperOrigin-RevId: 751389438 --- .../media3/demo/main/PlayerActivity.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) 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 6be37323bd..f2f8b9bded 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 @@ -15,10 +15,12 @@ */ package androidx.media3.demo.main; +import android.content.ContentResolver; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; +import android.text.TextUtils; import android.util.Pair; import android.view.KeyEvent; import android.view.View; @@ -40,6 +42,7 @@ import androidx.media3.common.TrackSelectionParameters; import androidx.media3.common.Tracks; import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.Util; +import androidx.media3.datasource.DataSchemeDataSource; import androidx.media3.datasource.DataSource; import androidx.media3.exoplayer.ExoPlayer; import androidx.media3.exoplayer.RenderersFactory; @@ -502,6 +505,25 @@ public class PlayerActivity extends AppCompatActivity } lastSeenTracks = tracks; } + + @OptIn(markerClass = UnstableApi.class) // For PlayerView.setTimeBarScrubbingEnabled + @Override + public void onMediaItemTransition(@Nullable MediaItem mediaItem, int reason) { + if (playerView == null) { + return; + } + if (mediaItem == null) { + playerView.setTimeBarScrubbingEnabled(false); + return; + } + String uriScheme = mediaItem.localConfiguration.uri.getScheme(); + playerView.setTimeBarScrubbingEnabled( + TextUtils.isEmpty(uriScheme) + || uriScheme.equals(ContentResolver.SCHEME_FILE) + || uriScheme.equals("asset") + || uriScheme.equals(DataSchemeDataSource.SCHEME_DATA) + || uriScheme.equals(ContentResolver.SCHEME_ANDROID_RESOURCE)); + } } private class PlayerErrorMessageProvider implements ErrorMessageProvider {