From fe60d0d7b4588c7347f3aa0e01acd75b17c085a2 Mon Sep 17 00:00:00 2001 From: tonihei Date: Wed, 18 Oct 2023 06:15:30 -0700 Subject: [PATCH] Use DataSourceBitmapLoader by default This replaces the SimpleBitmapLoader that can now be deprecated as it's fully unused and doesn't provide any additional functionality. #minor-release PiperOrigin-RevId: 574454636 (cherry picked from commit db86932781b4a5f377d1f4c1414c3d6a74ede174) --- RELEASENOTES.md | 2 + .../demo/session/DemoPlaybackService.kt | 8 -- libraries/session/build.gradle | 1 + .../androidx/media3/session/MediaBrowser.java | 7 +- .../media3/session/MediaController.java | 7 +- .../media3/session/MediaLibraryService.java | 8 +- .../androidx/media3/session/MediaSession.java | 8 +- .../media3/session/SimpleBitmapLoader.java | 12 +- .../media3/session/CacheBitmapLoaderTest.java | 133 ++++++++++-------- .../session/SimpleBitmapLoaderTest.java | 1 + ...aSessionCompatCallbackAggregationTest.java | 3 +- ...aControllerWithMediaSessionCompatTest.java | 11 +- .../media3/session/MediaUtilsTest.java | 28 ++-- 13 files changed, 122 insertions(+), 107 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 7a99c0a74b..747207af2b 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -32,6 +32,8 @@ framework session, this has the effect that the `queue` button in the UI of Android Auto is not displayed (([#339](https://github.com/androidx/media/issues/339)). + * Use `DataSourceBitmapLoader` by default instead of `SimpleBitmapLoader` + ([#271](https://github.com/androidx/media/issues/271),[#327](https://github.com/androidx/media/issues/327)). * UI: * Downloads: * OkHttp Extension: diff --git a/demos/session_service/src/main/java/androidx/media3/demo/session/DemoPlaybackService.kt b/demos/session_service/src/main/java/androidx/media3/demo/session/DemoPlaybackService.kt index d60a3751b1..3bd5440bdd 100644 --- a/demos/session_service/src/main/java/androidx/media3/demo/session/DemoPlaybackService.kt +++ b/demos/session_service/src/main/java/androidx/media3/demo/session/DemoPlaybackService.kt @@ -27,11 +27,9 @@ import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.media3.common.AudioAttributes import androidx.media3.common.util.UnstableApi -import androidx.media3.datasource.DataSourceBitmapLoader import androidx.media3.demo.session.service.R import androidx.media3.exoplayer.ExoPlayer import androidx.media3.exoplayer.util.EventLogger -import androidx.media3.session.CacheBitmapLoader import androidx.media3.session.MediaLibraryService import androidx.media3.session.MediaSession import androidx.media3.session.MediaSession.ControllerInfo @@ -117,14 +115,8 @@ open class DemoPlaybackService : MediaLibraryService() { .build() player.addAnalyticsListener(EventLogger()) - // MediaLibrarySession.Builder.setCustomLayout - // MediaLibrarySession.Builder.setBitmapLoader - // CacheBitmapLoader - // DataSourceBitmapLoader - @OptIn(UnstableApi::class) mediaLibrarySession = MediaLibrarySession.Builder(this, player, createLibrarySessionCallback()) - .setBitmapLoader(CacheBitmapLoader(DataSourceBitmapLoader(/* context= */ this))) .also { builder -> getSingleTopActivity()?.let { builder.setSessionActivity(it) } } .build() } diff --git a/libraries/session/build.gradle b/libraries/session/build.gradle index 1ce3bbd8d9..abbe67b103 100644 --- a/libraries/session/build.gradle +++ b/libraries/session/build.gradle @@ -41,6 +41,7 @@ dependencies { api project(modulePrefix + 'lib-common') compileOnly 'com.google.errorprone:error_prone_annotations:' + errorProneVersion compileOnly 'org.checkerframework:checker-qual:' + checkerframeworkVersion + implementation project(modulePrefix + 'lib-datasource') implementation 'androidx.collection:collection:' + androidxCollectionVersion implementation 'androidx.media:media:' + androidxMediaVersion implementation 'androidx.core:core:' + androidxCoreVersion diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaBrowser.java b/libraries/session/src/main/java/androidx/media3/session/MediaBrowser.java index 1507ea183e..87165bdb51 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaBrowser.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaBrowser.java @@ -35,6 +35,7 @@ import androidx.media3.common.util.BitmapLoader; import androidx.media3.common.util.Consumer; import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.Util; +import androidx.media3.datasource.DataSourceBitmapLoader; import androidx.media3.session.MediaLibraryService.LibraryParams; import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.Futures; @@ -126,8 +127,8 @@ public final class MediaBrowser extends MediaController { /** * Sets a {@link BitmapLoader} for the {@link MediaBrowser} to decode bitmaps from compressed - * binary data. If not set, a {@link CacheBitmapLoader} that wraps a {@link SimpleBitmapLoader} - * will be used. + * binary data. If not set, a {@link CacheBitmapLoader} that wraps a {@link + * DataSourceBitmapLoader} will be used. * * @param bitmapLoader The bitmap loader. * @return The builder to allow chaining. @@ -168,7 +169,7 @@ public final class MediaBrowser extends MediaController { public ListenableFuture buildAsync() { MediaControllerHolder holder = new MediaControllerHolder<>(applicationLooper); if (token.isLegacySession() && bitmapLoader == null) { - bitmapLoader = new CacheBitmapLoader(new SimpleBitmapLoader()); + bitmapLoader = new CacheBitmapLoader(new DataSourceBitmapLoader(context)); } MediaBrowser browser = new MediaBrowser( diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaController.java b/libraries/session/src/main/java/androidx/media3/session/MediaController.java index a94c518790..3152f6a2ca 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaController.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaController.java @@ -58,6 +58,7 @@ import androidx.media3.common.util.Log; import androidx.media3.common.util.Size; import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.Util; +import androidx.media3.datasource.DataSourceBitmapLoader; import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; @@ -269,8 +270,8 @@ public class MediaController implements Player { /** * Sets a {@link BitmapLoader} for the {@link MediaController} to decode bitmaps from compressed - * binary data. If not set, a {@link CacheBitmapLoader} that wraps a {@link SimpleBitmapLoader} - * will be used. + * binary data. If not set, a {@link CacheBitmapLoader} that wraps a {@link + * DataSourceBitmapLoader} will be used. * * @param bitmapLoader The bitmap loader. * @return The builder to allow chaining. @@ -312,7 +313,7 @@ public class MediaController implements Player { MediaControllerHolder holder = new MediaControllerHolder<>(applicationLooper); if (token.isLegacySession() && bitmapLoader == null) { - bitmapLoader = new CacheBitmapLoader(new SimpleBitmapLoader()); + bitmapLoader = new CacheBitmapLoader(new DataSourceBitmapLoader(context)); } MediaController controller = new MediaController( diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaLibraryService.java b/libraries/session/src/main/java/androidx/media3/session/MediaLibraryService.java index d2d50ccf67..3a87c8a7a6 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaLibraryService.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaLibraryService.java @@ -38,6 +38,7 @@ import androidx.media3.common.Player; import androidx.media3.common.util.BitmapLoader; import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.Util; +import androidx.media3.datasource.DataSourceBitmapLoader; import androidx.media3.session.MediaSession.ControllerInfo; import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.Futures; @@ -453,15 +454,14 @@ public abstract class MediaLibraryService extends MediaSessionService { /** * Sets a {@link BitmapLoader} for the {@link MediaLibrarySession} to decode bitmaps from - * compressed binary data or load bitmaps from {@link Uri}. If not set, a {@link - * CacheBitmapLoader} with a {@link SimpleBitmapLoader} inside will be used. + * compressed binary data or load bitmaps from {@link Uri}. * *

The provided instance will likely be called repeatedly with the same request, so it * would be best if any provided instance does some caching. Simple caching can be added to * any {@link BitmapLoader} implementation by wrapping it in {@link CacheBitmapLoader} before * passing it to this method. * - *

If no instance is set, a {@link CacheBitmapLoader} with a {@link SimpleBitmapLoader} + *

If no instance is set, a {@link CacheBitmapLoader} with a {@link DataSourceBitmapLoader} * inside will be used. * * @param bitmapLoader The bitmap loader {@link BitmapLoader}. @@ -542,7 +542,7 @@ public abstract class MediaLibraryService extends MediaSessionService { @Override public MediaLibrarySession build() { if (bitmapLoader == null) { - bitmapLoader = new CacheBitmapLoader(new SimpleBitmapLoader()); + bitmapLoader = new CacheBitmapLoader(new DataSourceBitmapLoader(context)); } return new MediaLibrarySession( context, diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaSession.java b/libraries/session/src/main/java/androidx/media3/session/MediaSession.java index 42aa9b2b3d..be8e4e877d 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaSession.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaSession.java @@ -58,6 +58,7 @@ import androidx.media3.common.VideoSize; import androidx.media3.common.util.BitmapLoader; import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.Util; +import androidx.media3.datasource.DataSourceBitmapLoader; import androidx.media3.session.MediaLibraryService.LibraryParams; import androidx.media3.session.MediaLibraryService.MediaLibrarySession; import com.google.common.base.Objects; @@ -330,15 +331,14 @@ public class MediaSession { /** * Sets a {@link BitmapLoader} for the {@link MediaSession} to decode bitmaps from compressed - * binary data or load bitmaps from {@link Uri}. If not set, a {@link CacheBitmapLoader} with a - * {@link SimpleBitmapLoader} inside will be used. + * binary data or load bitmaps from {@link Uri}. * *

The provided instance will likely be called repeatedly with the same request, so it would * be best if any provided instance does some caching. Simple caching can be added to any {@link * BitmapLoader} implementation by wrapping it in {@link CacheBitmapLoader} before passing it to * this method. * - *

If no instance is set, a {@link CacheBitmapLoader} with a {@link SimpleBitmapLoader} + *

If no instance is set, a {@link CacheBitmapLoader} with a {@link DataSourceBitmapLoader} * inside will be used. * * @param bitmapLoader The bitmap loader {@link BitmapLoader}. @@ -416,7 +416,7 @@ public class MediaSession { @Override public MediaSession build() { if (bitmapLoader == null) { - bitmapLoader = new CacheBitmapLoader(new SimpleBitmapLoader()); + bitmapLoader = new CacheBitmapLoader(new DataSourceBitmapLoader(context)); } return new MediaSession( context, diff --git a/libraries/session/src/main/java/androidx/media3/session/SimpleBitmapLoader.java b/libraries/session/src/main/java/androidx/media3/session/SimpleBitmapLoader.java index 76d42b608e..a31eceb9d2 100644 --- a/libraries/session/src/main/java/androidx/media3/session/SimpleBitmapLoader.java +++ b/libraries/session/src/main/java/androidx/media3/session/SimpleBitmapLoader.java @@ -39,17 +39,9 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** - * A simple bitmap loader that delegates all tasks to an executor and supports fetching images from - * URIs with {@code file}, {@code http} and {@code https} schemes. - * - *

Loading tasks are delegated to an {@link ExecutorService} (or {@link - * ListeningExecutorService}) defined during construction. If no executor service is defined, all - * tasks are delegated to a single-thread executor service that is shared between instances of this - * class. - * - *

For HTTP(S) transfers, this class reads a resource only when the endpoint responds with an - * {@code HTTP 200} after sending the HTTP request. + * @deprecated Use {@link androidx.media3.datasource.DataSourceBitmapLoader} instead. */ +@Deprecated @UnstableApi public final class SimpleBitmapLoader implements BitmapLoader { diff --git a/libraries/session/src/test/java/androidx/media3/session/CacheBitmapLoaderTest.java b/libraries/session/src/test/java/androidx/media3/session/CacheBitmapLoaderTest.java index e1a80378fb..4247c7d61a 100644 --- a/libraries/session/src/test/java/androidx/media3/session/CacheBitmapLoaderTest.java +++ b/libraries/session/src/test/java/androidx/media3/session/CacheBitmapLoaderTest.java @@ -20,18 +20,22 @@ import static java.util.concurrent.TimeUnit.SECONDS; import static org.junit.Assert.assertThrows; import static org.robolectric.annotation.GraphicsMode.Mode.NATIVE; +import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.Matrix; import android.net.Uri; +import androidx.media3.datasource.DataSourceBitmapLoader; +import androidx.media3.datasource.HttpDataSource; import androidx.media3.test.utils.TestUtil; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; import com.google.common.util.concurrent.ListenableFuture; -import java.io.IOException; import java.util.concurrent.ExecutionException; import okhttp3.mockwebserver.MockResponse; import okhttp3.mockwebserver.MockWebServer; import okio.Buffer; +import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; @@ -54,21 +58,26 @@ public class CacheBitmapLoaderTest { @Rule public final TemporaryFolder tempFolder = new TemporaryFolder(); + private Context context; + + @Before + public void setUp() { + context = ApplicationProvider.getApplicationContext(); + } + @Test public void decodeBitmap_requestWithSameDataTwice_success() throws Exception { - CacheBitmapLoader cacheBitmapLoader = new CacheBitmapLoader(new SimpleBitmapLoader()); - byte[] imageData = - TestUtil.getByteArray(ApplicationProvider.getApplicationContext(), TEST_IMAGE_PATH); + CacheBitmapLoader cacheBitmapLoader = + new CacheBitmapLoader(new DataSourceBitmapLoader(context)); + byte[] imageData = TestUtil.getByteArray(context, TEST_IMAGE_PATH); + Bitmap expectedBitmap = + apply90DegreeExifRotation( + BitmapFactory.decodeByteArray(imageData, /* offset= */ 0, imageData.length)); // First request, no cached bitmap load request. ListenableFuture future1 = cacheBitmapLoader.decodeBitmap(imageData); - assertThat( - future1 - .get(10, SECONDS) - .sameAs( - BitmapFactory.decodeByteArray(imageData, /* offset= */ 0, imageData.length))) - .isTrue(); + assertThat(future1.get(10, SECONDS).sameAs(expectedBitmap)).isTrue(); // Second request, has cached bitmap load request. ListenableFuture future2 = cacheBitmapLoader.decodeBitmap(imageData); @@ -78,37 +87,33 @@ public class CacheBitmapLoaderTest { @Test public void decodeBitmap_requestWithDifferentData_success() throws Exception { - CacheBitmapLoader cacheBitmapLoader = new CacheBitmapLoader(new SimpleBitmapLoader()); - byte[] imageData1 = - TestUtil.getByteArray(ApplicationProvider.getApplicationContext(), TEST_IMAGE_PATH); - byte[] imageData2 = - TestUtil.getByteArray(ApplicationProvider.getApplicationContext(), SECOND_TEST_IMAGE_PATH); + CacheBitmapLoader cacheBitmapLoader = + new CacheBitmapLoader(new DataSourceBitmapLoader(context)); + byte[] imageData1 = TestUtil.getByteArray(context, TEST_IMAGE_PATH); + byte[] imageData2 = TestUtil.getByteArray(context, SECOND_TEST_IMAGE_PATH); + Bitmap expectedBitmap1 = + apply90DegreeExifRotation( + BitmapFactory.decodeByteArray(imageData1, /* offset= */ 0, imageData1.length)); + Bitmap expectedBitmap2 = + apply90DegreeExifRotation( + BitmapFactory.decodeByteArray(imageData2, /* offset= */ 0, imageData2.length)); // First request. ListenableFuture future1 = cacheBitmapLoader.decodeBitmap(imageData1); - assertThat( - future1 - .get(10, SECONDS) - .sameAs( - BitmapFactory.decodeByteArray(imageData1, /* offset= */ 0, imageData1.length))) - .isTrue(); + assertThat(future1.get(10, SECONDS).sameAs(expectedBitmap1)).isTrue(); // Second request. ListenableFuture future2 = cacheBitmapLoader.decodeBitmap(imageData2); - assertThat( - future2 - .get(10, SECONDS) - .sameAs( - BitmapFactory.decodeByteArray(imageData2, /* offset= */ 0, imageData2.length))) - .isTrue(); + assertThat(future2.get(10, SECONDS).sameAs(expectedBitmap2)).isTrue(); assertThat(future1).isNotSameInstanceAs(future2); } @Test public void decodeBitmap_requestWithSameDataTwice_throwsException() { - CacheBitmapLoader cacheBitmapLoader = new CacheBitmapLoader(new SimpleBitmapLoader()); + CacheBitmapLoader cacheBitmapLoader = + new CacheBitmapLoader(new DataSourceBitmapLoader(context)); // First request, no cached bitmap load request. ListenableFuture future1 = cacheBitmapLoader.decodeBitmap(new byte[0]); @@ -125,39 +130,35 @@ public class CacheBitmapLoaderTest { @Test public void loadBitmap_httpUri_requestWithSameUriTwice_success() throws Exception { - CacheBitmapLoader cacheBitmapLoader = new CacheBitmapLoader(new SimpleBitmapLoader()); - byte[] imageData = - TestUtil.getByteArray(ApplicationProvider.getApplicationContext(), TEST_IMAGE_PATH); + CacheBitmapLoader cacheBitmapLoader = + new CacheBitmapLoader(new DataSourceBitmapLoader(context)); + byte[] imageData = TestUtil.getByteArray(context, TEST_IMAGE_PATH); Buffer responseBody = new Buffer().write(imageData); MockWebServer mockWebServer = new MockWebServer(); mockWebServer.enqueue(new MockResponse().setResponseCode(200).setBody(responseBody)); Uri uri = Uri.parse(mockWebServer.url("test_path").toString()); + Bitmap expectedBitmap = + apply90DegreeExifRotation( + BitmapFactory.decodeByteArray(imageData, /* offset= */ 0, imageData.length)); // First request, no cached bitmap load request. Bitmap bitmap = cacheBitmapLoader.loadBitmap(uri).get(10, SECONDS); - assertThat( - bitmap.sameAs( - BitmapFactory.decodeByteArray(imageData, /* offset= */ 0, imageData.length))) - .isTrue(); + assertThat(bitmap.sameAs(expectedBitmap)).isTrue(); // Second request, has cached bitmap load request. bitmap = cacheBitmapLoader.loadBitmap(uri).get(10, SECONDS); - assertThat( - bitmap.sameAs( - BitmapFactory.decodeByteArray(imageData, /* offset= */ 0, imageData.length))) - .isTrue(); + assertThat(bitmap.sameAs(expectedBitmap)).isTrue(); assertThat(mockWebServer.getRequestCount()).isEqualTo(1); } @Test public void loadBitmap_httpUri_requestWithDifferentUri_success() throws Exception { - CacheBitmapLoader cacheBitmapLoader = new CacheBitmapLoader(new SimpleBitmapLoader()); - byte[] imageData1 = - TestUtil.getByteArray(ApplicationProvider.getApplicationContext(), TEST_IMAGE_PATH); - byte[] imageData2 = - TestUtil.getByteArray(ApplicationProvider.getApplicationContext(), SECOND_TEST_IMAGE_PATH); + CacheBitmapLoader cacheBitmapLoader = + new CacheBitmapLoader(new DataSourceBitmapLoader(context)); + byte[] imageData1 = TestUtil.getByteArray(context, TEST_IMAGE_PATH); + byte[] imageData2 = TestUtil.getByteArray(context, SECOND_TEST_IMAGE_PATH); Buffer responseBody1 = new Buffer().write(imageData1); Buffer responseBody2 = new Buffer().write(imageData2); MockWebServer mockWebServer = new MockWebServer(); @@ -165,28 +166,29 @@ public class CacheBitmapLoaderTest { mockWebServer.enqueue(new MockResponse().setResponseCode(200).setBody(responseBody2)); Uri uri1 = Uri.parse(mockWebServer.url("test_path_1").toString()); Uri uri2 = Uri.parse(mockWebServer.url("test_path_2").toString()); + Bitmap expectedBitmap1 = + apply90DegreeExifRotation( + BitmapFactory.decodeByteArray(imageData1, /* offset= */ 0, imageData1.length)); + Bitmap expectedBitmap2 = + apply90DegreeExifRotation( + BitmapFactory.decodeByteArray(imageData2, /* offset= */ 0, imageData2.length)); // First request. Bitmap bitmap = cacheBitmapLoader.loadBitmap(uri1).get(10, SECONDS); - assertThat( - bitmap.sameAs( - BitmapFactory.decodeByteArray(imageData1, /* offset= */ 0, imageData1.length))) - .isTrue(); + assertThat(bitmap.sameAs(expectedBitmap1)).isTrue(); // Second request. bitmap = cacheBitmapLoader.loadBitmap(uri2).get(10, SECONDS); - assertThat( - bitmap.sameAs( - BitmapFactory.decodeByteArray(imageData2, /* offset= */ 0, imageData2.length))) - .isTrue(); + assertThat(bitmap.sameAs(expectedBitmap2)).isTrue(); assertThat(mockWebServer.getRequestCount()).isEqualTo(2); } @Test - public void loadBitmap_httpUri_requestWithSameUriTwice_throwsException() throws Exception { - CacheBitmapLoader cacheBitmapLoader = new CacheBitmapLoader(new SimpleBitmapLoader()); + public void loadBitmap_httpUri_requestWithSameUriTwice_throwsException() { + CacheBitmapLoader cacheBitmapLoader = + new CacheBitmapLoader(new DataSourceBitmapLoader(context)); MockWebServer mockWebServer = new MockWebServer(); mockWebServer.enqueue(new MockResponse().setResponseCode(404)); Uri uri = Uri.parse(mockWebServer.url("test_path").toString()); @@ -201,10 +203,25 @@ public class CacheBitmapLoaderTest { assertThrows(ExecutionException.class, () -> future1.get(10, SECONDS)); ExecutionException executionException2 = assertThrows(ExecutionException.class, () -> future2.get(10, SECONDS)); - assertThat(executionException1).hasCauseThat().isInstanceOf(IOException.class); - assertThat(executionException2).hasCauseThat().isInstanceOf(IOException.class); - assertThat(executionException1).hasMessageThat().contains("Invalid response status"); - assertThat(executionException2).hasMessageThat().contains("Invalid response status"); + assertThat(executionException1) + .hasCauseThat() + .isInstanceOf(HttpDataSource.InvalidResponseCodeException.class); + assertThat(executionException2) + .hasCauseThat() + .isInstanceOf(HttpDataSource.InvalidResponseCodeException.class); assertThat(mockWebServer.getRequestCount()).isEqualTo(1); } + + private static Bitmap apply90DegreeExifRotation(Bitmap bitmap) { + Matrix rotationMatrix = new Matrix(); + rotationMatrix.postRotate(/* degrees= */ 90); + return Bitmap.createBitmap( + bitmap, + /* x= */ 0, + /* y= */ 0, + bitmap.getWidth(), + bitmap.getHeight(), + rotationMatrix, + /* filter= */ false); + } } diff --git a/libraries/session/src/test/java/androidx/media3/session/SimpleBitmapLoaderTest.java b/libraries/session/src/test/java/androidx/media3/session/SimpleBitmapLoaderTest.java index d348b6c1c1..8eccec7ce1 100644 --- a/libraries/session/src/test/java/androidx/media3/session/SimpleBitmapLoaderTest.java +++ b/libraries/session/src/test/java/androidx/media3/session/SimpleBitmapLoaderTest.java @@ -45,6 +45,7 @@ import org.junit.runner.RunWith; import org.robolectric.annotation.GraphicsMode; /** Tests for {@link SimpleBitmapLoader}. */ +@SuppressWarnings("deprecation") // Testing deprecated class @RunWith(AndroidJUnit4.class) @GraphicsMode(value = NATIVE) public class SimpleBitmapLoaderTest { diff --git a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerMediaSessionCompatCallbackAggregationTest.java b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerMediaSessionCompatCallbackAggregationTest.java index 3b714a7c00..baa3becabe 100644 --- a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerMediaSessionCompatCallbackAggregationTest.java +++ b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerMediaSessionCompatCallbackAggregationTest.java @@ -47,6 +47,7 @@ import androidx.media3.common.Timeline; import androidx.media3.common.Timeline.Window; import androidx.media3.common.util.BitmapLoader; import androidx.media3.common.util.Util; +import androidx.media3.datasource.DataSourceBitmapLoader; import androidx.media3.test.session.common.HandlerThreadTestRule; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -84,7 +85,7 @@ public class MediaControllerMediaSessionCompatCallbackAggregationTest { public void setUp() throws Exception { context = ApplicationProvider.getApplicationContext(); session = new RemoteMediaSessionCompat(DEFAULT_TEST_NAME, context); - bitmapLoader = new CacheBitmapLoader(new SimpleBitmapLoader()); + bitmapLoader = new CacheBitmapLoader(new DataSourceBitmapLoader(context)); } @After diff --git a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerWithMediaSessionCompatTest.java b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerWithMediaSessionCompatTest.java index c1ace7555d..a9d31c33c1 100644 --- a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerWithMediaSessionCompatTest.java +++ b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerWithMediaSessionCompatTest.java @@ -71,6 +71,7 @@ import androidx.media3.common.Player.State; import androidx.media3.common.Timeline; import androidx.media3.common.util.BitmapLoader; import androidx.media3.common.util.Util; +import androidx.media3.datasource.DataSourceBitmapLoader; import androidx.media3.test.session.common.HandlerThreadTestRule; import androidx.media3.test.session.common.MainLooperTestRule; import androidx.media3.test.session.common.MockActivity; @@ -126,7 +127,7 @@ public class MediaControllerWithMediaSessionCompatTest { public void setUp() throws Exception { context = ApplicationProvider.getApplicationContext(); session = new RemoteMediaSessionCompat(DEFAULT_TEST_NAME, context); - bitmapLoader = new CacheBitmapLoader(new SimpleBitmapLoader()); + bitmapLoader = new CacheBitmapLoader(new DataSourceBitmapLoader(context)); } @After @@ -986,8 +987,10 @@ public class MediaControllerWithMediaSessionCompatTest { MediaMetadata mediaMetadata = threadTestRule.getHandler().postAndSync(controller::getMediaMetadata); - assertThat(mediaMetadata.title).isEqualTo(testMediaDescriptionCompat.getTitle()); - assertThat(mediaMetadata.description).isEqualTo(testMediaDescriptionCompat.getDescription()); + assertThat(mediaMetadata.title.toString()) + .isEqualTo(testMediaDescriptionCompat.getTitle().toString()); + assertThat(mediaMetadata.description.toString()) + .isEqualTo(testMediaDescriptionCompat.getDescription().toString()); } @Test @@ -1653,7 +1656,7 @@ public class MediaControllerWithMediaSessionCompatTest { VolumeProviderCompat.VOLUME_CONTROL_ABSOLUTE, /* maxVolume= */ 100, /* currentVolume= */ 45, - /* routingSessionId= */ "route"); + /* routingControllerId= */ "route"); int testLocalStreamType = AudioManager.STREAM_ALARM; AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); diff --git a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaUtilsTest.java b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaUtilsTest.java index 138405b1c1..778cb584f3 100644 --- a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaUtilsTest.java +++ b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaUtilsTest.java @@ -60,6 +60,7 @@ import androidx.media3.common.Timeline; import androidx.media3.common.TrackGroup; import androidx.media3.common.Tracks; import androidx.media3.common.util.BitmapLoader; +import androidx.media3.datasource.DataSourceBitmapLoader; import androidx.media3.session.PlayerInfo.BundlingExclusions; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -85,7 +86,7 @@ public final class MediaUtilsTest { @Before public void setUp() { context = ApplicationProvider.getApplicationContext(); - bitmapLoader = new CacheBitmapLoader(new SimpleBitmapLoader()); + bitmapLoader = new CacheBitmapLoader(new DataSourceBitmapLoader(context)); } @Test @@ -99,7 +100,7 @@ public final class MediaUtilsTest { MediaItem mediaItem = MediaUtils.convertToMediaItem(browserItem); assertThat(mediaItem.mediaId).isEqualTo(mediaId); - assertThat(mediaItem.mediaMetadata.title).isEqualTo(title); + assertThat(mediaItem.mediaMetadata.title.toString()).isEqualTo(title); } @Test @@ -161,8 +162,8 @@ public final class MediaUtilsTest { MediaUtils.convertToMediaDescriptionCompat(mediaItem, /* artworkBitmap= */ null); assertThat(descriptionCompat.getMediaId()).isEqualTo(mediaId); - assertThat(descriptionCompat.getTitle()).isEqualTo(title); - assertThat(descriptionCompat.getDescription()).isEqualTo(description); + assertThat(descriptionCompat.getTitle().toString()).isEqualTo(title); + assertThat(descriptionCompat.getDescription().toString()).isEqualTo(description); assertThat( descriptionCompat .getExtras() @@ -203,8 +204,8 @@ public final class MediaUtilsTest { @Test public void convertToMediaMetadata_withTitle() { - CharSequence title = "title"; - assertThat(MediaUtils.convertToMediaMetadata(title).title).isEqualTo(title); + String title = "title"; + assertThat(MediaUtils.convertToMediaMetadata(title).title.toString()).isEqualTo(title); } @Test @@ -268,7 +269,7 @@ public final class MediaUtilsTest { mediaItem.mediaMetadata, "mediaId", Uri.parse("http://www.example.com"), - /* durotionsMs= */ C.TIME_UNSET, + /* durationMs= */ C.TIME_UNSET, /* artworkBitmap= */ null); assertThat( @@ -476,7 +477,7 @@ public final class MediaUtilsTest { @Test public void convertToSessionCommands_whenSessionIsNotReadyOnSdk21_disallowsRating() { SessionCommands sessionCommands = - MediaUtils.convertToSessionCommands(/* playbackState= */ null, /* isSessionReady= */ false); + MediaUtils.convertToSessionCommands(/* state= */ null, /* isSessionReady= */ false); assertThat(sessionCommands.contains(SessionCommand.COMMAND_CODE_SESSION_SET_RATING)).isFalse(); } @@ -946,7 +947,7 @@ public final class MediaUtilsTest { long currentPositionMs = MediaUtils.convertToCurrentPositionMs( /* playbackStateCompat= */ null, - /* currentMediaMetadata= */ null, + /* metadataCompat= */ null, /* timeDiffMs= */ C.TIME_UNSET); assertThat(currentPositionMs).isEqualTo(0); } @@ -1113,7 +1114,8 @@ public final class MediaUtilsTest { oldPlayerInfo, BundlingExclusions.NONE, newPlayerInfo, - new BundlingExclusions(/* isTimelineExcluded= */ true, /* areTracksExcluded= */ true), + new BundlingExclusions( + /* isTimelineExcluded= */ true, /* areCurrentTracksExcluded= */ true), availableCommands); assertThat(mergeResult.first.timeline).isSameInstanceAs(oldPlayerInfo.timeline); @@ -1155,7 +1157,8 @@ public final class MediaUtilsTest { oldPlayerInfo, BundlingExclusions.NONE, newPlayerInfo, - new BundlingExclusions(/* isTimelineExcluded= */ true, /* areTracksExcluded= */ true), + new BundlingExclusions( + /* isTimelineExcluded= */ true, /* areCurrentTracksExcluded= */ true), availableCommands); assertThat(mergeResult.first.timeline).isSameInstanceAs(Timeline.EMPTY); @@ -1197,7 +1200,8 @@ public final class MediaUtilsTest { oldPlayerInfo, BundlingExclusions.NONE, newPlayerInfo, - new BundlingExclusions(/* isTimelineExcluded= */ true, /* areTracksExcluded= */ true), + new BundlingExclusions( + /* isTimelineExcluded= */ true, /* areCurrentTracksExcluded= */ true), availableCommands); assertThat(mergeResult.first.timeline).isSameInstanceAs(oldPlayerInfo.timeline);