From f6051654302b28a40f49df2fa3821a1b41de11e0 Mon Sep 17 00:00:00 2001 From: olly Date: Tue, 26 Oct 2021 13:45:46 +0100 Subject: [PATCH] Add database module PiperOrigin-RevId: 405626096 --- core_settings.gradle | 3 ++ .../android/exoplayer2/demo/DemoUtil.java | 4 +- docs/downloading-media.md | 2 +- library/all/build.gradle | 1 + library/core/build.gradle | 1 + .../offline/ActionFileUpgradeUtilTest.java | 6 +-- .../offline/DefaultDownloadIndexTest.java | 10 ++--- library/database/README.md | 10 +++++ library/database/build.gradle | 44 +++++++++++++++++++ library/database/src/main/AndroidManifest.xml | 19 ++++++++ .../database/DatabaseIOException.java | 0 .../exoplayer2/database/DatabaseProvider.java | 0 .../database/DefaultDatabaseProvider.java | 0 .../database/ExoDatabaseProvider.java | 0 .../database/StandaloneDatabaseProvider.java | 0 .../exoplayer2/database/VersionTable.java | 5 +++ .../exoplayer2/database/package-info.java | 0 library/database/src/test/AndroidManifest.xml | 19 ++++++++ .../exoplayer2/database/VersionTableTest.java | 0 library/datasource/build.gradle | 1 + .../playbacktests/gts/DashDownloadTest.java | 6 ++- 21 files changed, 118 insertions(+), 13 deletions(-) create mode 100644 library/database/README.md create mode 100644 library/database/build.gradle create mode 100644 library/database/src/main/AndroidManifest.xml rename library/{common => database}/src/main/java/com/google/android/exoplayer2/database/DatabaseIOException.java (100%) rename library/{common => database}/src/main/java/com/google/android/exoplayer2/database/DatabaseProvider.java (100%) rename library/{common => database}/src/main/java/com/google/android/exoplayer2/database/DefaultDatabaseProvider.java (100%) rename library/{common => database}/src/main/java/com/google/android/exoplayer2/database/ExoDatabaseProvider.java (100%) rename library/{common => database}/src/main/java/com/google/android/exoplayer2/database/StandaloneDatabaseProvider.java (100%) rename library/{common => database}/src/main/java/com/google/android/exoplayer2/database/VersionTable.java (97%) rename library/{common => database}/src/main/java/com/google/android/exoplayer2/database/package-info.java (100%) create mode 100644 library/database/src/test/AndroidManifest.xml rename library/{common => database}/src/test/java/com/google/android/exoplayer2/database/VersionTableTest.java (100%) diff --git a/core_settings.gradle b/core_settings.gradle index 1f22196a33..83ec79ef72 100644 --- a/core_settings.gradle +++ b/core_settings.gradle @@ -51,6 +51,9 @@ project(modulePrefix + 'library-ui').projectDir = new File(rootDir, 'library/ui' include modulePrefix + 'extension-leanback' project(modulePrefix + 'extension-leanback').projectDir = new File(rootDir, 'extensions/leanback') +include modulePrefix + 'library-database' +project(modulePrefix + 'library-database').projectDir = new File(rootDir, 'library/database') + include modulePrefix + 'library-datasource' project(modulePrefix + 'library-datasource').projectDir = new File(rootDir, 'library/datasource') include modulePrefix + 'extension-cronet' diff --git a/demos/main/src/main/java/com/google/android/exoplayer2/demo/DemoUtil.java b/demos/main/src/main/java/com/google/android/exoplayer2/demo/DemoUtil.java index a4193184bc..62c3a5a005 100644 --- a/demos/main/src/main/java/com/google/android/exoplayer2/demo/DemoUtil.java +++ b/demos/main/src/main/java/com/google/android/exoplayer2/demo/DemoUtil.java @@ -19,7 +19,7 @@ import android.content.Context; import com.google.android.exoplayer2.DefaultRenderersFactory; import com.google.android.exoplayer2.RenderersFactory; import com.google.android.exoplayer2.database.DatabaseProvider; -import com.google.android.exoplayer2.database.ExoDatabaseProvider; +import com.google.android.exoplayer2.database.StandaloneDatabaseProvider; import com.google.android.exoplayer2.ext.cronet.CronetDataSource; import com.google.android.exoplayer2.ext.cronet.CronetUtil; import com.google.android.exoplayer2.offline.ActionFileUpgradeUtil; @@ -194,7 +194,7 @@ public final class DemoUtil { private static synchronized DatabaseProvider getDatabaseProvider(Context context) { if (databaseProvider == null) { - databaseProvider = new ExoDatabaseProvider(context); + databaseProvider = new StandaloneDatabaseProvider(context); } return databaseProvider; } diff --git a/docs/downloading-media.md b/docs/downloading-media.md index e724d0cd4a..6bef8a25d6 100644 --- a/docs/downloading-media.md +++ b/docs/downloading-media.md @@ -63,7 +63,7 @@ which can be returned by `getDownloadManager()` in your `DownloadService`: ~~~ // Note: This should be a singleton in your app. -databaseProvider = new ExoDatabaseProvider(context); +databaseProvider = new StandaloneDatabaseProvider(context); // A download cache should not evict media, so should use a NoopCacheEvictor. downloadCache = new SimpleCache( diff --git a/library/all/build.gradle b/library/all/build.gradle index 8daf11eea7..96c7ff8683 100644 --- a/library/all/build.gradle +++ b/library/all/build.gradle @@ -15,6 +15,7 @@ apply from: "$gradle.ext.exoplayerSettingsDir/common_library_config.gradle" dependencies { api project(modulePrefix + 'library-common') + api project(modulePrefix + 'library-database') api project(modulePrefix + 'library-datasource') api project(modulePrefix + 'library-decoder') api project(modulePrefix + 'library-extractor') diff --git a/library/core/build.gradle b/library/core/build.gradle index 524948cc1e..1ee7c8a289 100644 --- a/library/core/build.gradle +++ b/library/core/build.gradle @@ -40,6 +40,7 @@ dependencies { api project(modulePrefix + 'library-datasource') api project(modulePrefix + 'library-decoder') api project(modulePrefix + 'library-extractor') + api project(modulePrefix + 'library-database') implementation 'androidx.annotation:annotation:' + androidxAnnotationVersion implementation 'androidx.core:core:' + androidxCoreVersion compileOnly 'com.google.code.findbugs:jsr305:' + jsr305Version diff --git a/library/core/src/test/java/com/google/android/exoplayer2/offline/ActionFileUpgradeUtilTest.java b/library/core/src/test/java/com/google/android/exoplayer2/offline/ActionFileUpgradeUtilTest.java index 05c0bcc780..239762c57f 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/offline/ActionFileUpgradeUtilTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/offline/ActionFileUpgradeUtilTest.java @@ -20,7 +20,7 @@ import static com.google.common.truth.Truth.assertThat; import android.net.Uri; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; -import com.google.android.exoplayer2.database.ExoDatabaseProvider; +import com.google.android.exoplayer2.database.StandaloneDatabaseProvider; import com.google.android.exoplayer2.testutil.TestUtil; import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.Util; @@ -40,13 +40,13 @@ public class ActionFileUpgradeUtilTest { private static final long NOW_MS = 1234; private File tempFile; - private ExoDatabaseProvider databaseProvider; + private StandaloneDatabaseProvider databaseProvider; private DefaultDownloadIndex downloadIndex; @Before public void setUp() throws Exception { tempFile = Util.createTempFile(ApplicationProvider.getApplicationContext(), "ExoPlayerTest"); - databaseProvider = new ExoDatabaseProvider(ApplicationProvider.getApplicationContext()); + databaseProvider = new StandaloneDatabaseProvider(ApplicationProvider.getApplicationContext()); downloadIndex = new DefaultDownloadIndex(databaseProvider); } diff --git a/library/core/src/test/java/com/google/android/exoplayer2/offline/DefaultDownloadIndexTest.java b/library/core/src/test/java/com/google/android/exoplayer2/offline/DefaultDownloadIndexTest.java index 988b5127ec..96bd6bbf76 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/offline/DefaultDownloadIndexTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/offline/DefaultDownloadIndexTest.java @@ -29,7 +29,7 @@ import androidx.annotation.Nullable; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; import com.google.android.exoplayer2.database.DatabaseIOException; -import com.google.android.exoplayer2.database.ExoDatabaseProvider; +import com.google.android.exoplayer2.database.StandaloneDatabaseProvider; import com.google.android.exoplayer2.database.VersionTable; import com.google.android.exoplayer2.testutil.DownloadBuilder; import com.google.android.exoplayer2.testutil.TestUtil; @@ -51,12 +51,12 @@ public class DefaultDownloadIndexTest { private static final String EMPTY_NAME = ""; - private ExoDatabaseProvider databaseProvider; + private StandaloneDatabaseProvider databaseProvider; private DefaultDownloadIndex downloadIndex; @Before public void setUp() { - databaseProvider = new ExoDatabaseProvider(ApplicationProvider.getApplicationContext()); + databaseProvider = new StandaloneDatabaseProvider(ApplicationProvider.getApplicationContext()); downloadIndex = new DefaultDownloadIndex(databaseProvider); } @@ -222,7 +222,7 @@ public class DefaultDownloadIndexTest { @Test public void downloadIndex_upgradesFromVersion2() throws IOException { Context context = ApplicationProvider.getApplicationContext(); - File databaseFile = context.getDatabasePath(ExoDatabaseProvider.DATABASE_NAME); + File databaseFile = context.getDatabasePath(StandaloneDatabaseProvider.DATABASE_NAME); try (FileOutputStream output = new FileOutputStream(databaseFile)) { output.write(TestUtil.getByteArray(context, "media/offline/exoplayer_internal_v2.db")); } @@ -251,7 +251,7 @@ public class DefaultDownloadIndexTest { ImmutableList.of(), /* customCacheKey= */ "customCacheKey"); - databaseProvider = new ExoDatabaseProvider(context); + databaseProvider = new StandaloneDatabaseProvider(context); downloadIndex = new DefaultDownloadIndex(databaseProvider); assertEqual(downloadIndex.getDownload("http://www.test.com/manifest.mpd"), dashDownload); diff --git a/library/database/README.md b/library/database/README.md new file mode 100644 index 0000000000..22afea406c --- /dev/null +++ b/library/database/README.md @@ -0,0 +1,10 @@ +# Common module + +Provides database functionality for use by other media modules. Application code +will not normally need to depend on this module directly. + +## Links + +* [Javadoc][] + +[Javadoc]: https://exoplayer.dev/doc/reference/index.html diff --git a/library/database/build.gradle b/library/database/build.gradle new file mode 100644 index 0000000000..9c73e24c68 --- /dev/null +++ b/library/database/build.gradle @@ -0,0 +1,44 @@ +// Copyright (C) 2021 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +apply from: "$gradle.ext.exoplayerSettingsDir/common_library_config.gradle" + +android { + buildTypes { + debug { + testCoverageEnabled = true + } + } +} + +dependencies { + implementation project(modulePrefix + 'library-common') + implementation 'androidx.annotation:annotation:' + androidxAnnotationVersion + compileOnly 'org.jetbrains.kotlin:kotlin-annotations-jvm:' + kotlinAnnotationsVersion + testImplementation 'androidx.test:core:' + androidxTestCoreVersion + testImplementation 'androidx.test.ext:junit:' + androidxTestJUnitVersion + testImplementation 'com.google.truth:truth:' + truthVersion + testImplementation 'org.robolectric:robolectric:' + robolectricVersion + testImplementation project(modulePrefix + 'testutils') +} + +ext { + javadocTitle = 'Database module' +} +apply from: '../../javadoc_library.gradle' + +ext { + releaseArtifactId = 'exoplayer-database' + releaseDescription = 'The ExoPlayer database module.' +} +apply from: '../../publish.gradle' diff --git a/library/database/src/main/AndroidManifest.xml b/library/database/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..482b3ea14d --- /dev/null +++ b/library/database/src/main/AndroidManifest.xml @@ -0,0 +1,19 @@ + + + + + + diff --git a/library/common/src/main/java/com/google/android/exoplayer2/database/DatabaseIOException.java b/library/database/src/main/java/com/google/android/exoplayer2/database/DatabaseIOException.java similarity index 100% rename from library/common/src/main/java/com/google/android/exoplayer2/database/DatabaseIOException.java rename to library/database/src/main/java/com/google/android/exoplayer2/database/DatabaseIOException.java diff --git a/library/common/src/main/java/com/google/android/exoplayer2/database/DatabaseProvider.java b/library/database/src/main/java/com/google/android/exoplayer2/database/DatabaseProvider.java similarity index 100% rename from library/common/src/main/java/com/google/android/exoplayer2/database/DatabaseProvider.java rename to library/database/src/main/java/com/google/android/exoplayer2/database/DatabaseProvider.java diff --git a/library/common/src/main/java/com/google/android/exoplayer2/database/DefaultDatabaseProvider.java b/library/database/src/main/java/com/google/android/exoplayer2/database/DefaultDatabaseProvider.java similarity index 100% rename from library/common/src/main/java/com/google/android/exoplayer2/database/DefaultDatabaseProvider.java rename to library/database/src/main/java/com/google/android/exoplayer2/database/DefaultDatabaseProvider.java diff --git a/library/common/src/main/java/com/google/android/exoplayer2/database/ExoDatabaseProvider.java b/library/database/src/main/java/com/google/android/exoplayer2/database/ExoDatabaseProvider.java similarity index 100% rename from library/common/src/main/java/com/google/android/exoplayer2/database/ExoDatabaseProvider.java rename to library/database/src/main/java/com/google/android/exoplayer2/database/ExoDatabaseProvider.java diff --git a/library/common/src/main/java/com/google/android/exoplayer2/database/StandaloneDatabaseProvider.java b/library/database/src/main/java/com/google/android/exoplayer2/database/StandaloneDatabaseProvider.java similarity index 100% rename from library/common/src/main/java/com/google/android/exoplayer2/database/StandaloneDatabaseProvider.java rename to library/database/src/main/java/com/google/android/exoplayer2/database/StandaloneDatabaseProvider.java diff --git a/library/common/src/main/java/com/google/android/exoplayer2/database/VersionTable.java b/library/database/src/main/java/com/google/android/exoplayer2/database/VersionTable.java similarity index 97% rename from library/common/src/main/java/com/google/android/exoplayer2/database/VersionTable.java rename to library/database/src/main/java/com/google/android/exoplayer2/database/VersionTable.java index d6d2a1cb7d..a55767bd3e 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/database/VersionTable.java +++ b/library/database/src/main/java/com/google/android/exoplayer2/database/VersionTable.java @@ -20,6 +20,7 @@ import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import androidx.annotation.IntDef; +import com.google.android.exoplayer2.ExoPlayerLibraryInfo; import com.google.android.exoplayer2.util.Util; import java.lang.annotation.Documented; import java.lang.annotation.Retention; @@ -31,6 +32,10 @@ import java.lang.annotation.RetentionPolicy; */ public final class VersionTable { + static { + ExoPlayerLibraryInfo.registerModule("goog.exo.database"); + } + /** Returned by {@link #getVersion(SQLiteDatabase, int, String)} if the version is unset. */ public static final int VERSION_UNSET = -1; /** Version of tables used for offline functionality. */ diff --git a/library/common/src/main/java/com/google/android/exoplayer2/database/package-info.java b/library/database/src/main/java/com/google/android/exoplayer2/database/package-info.java similarity index 100% rename from library/common/src/main/java/com/google/android/exoplayer2/database/package-info.java rename to library/database/src/main/java/com/google/android/exoplayer2/database/package-info.java diff --git a/library/database/src/test/AndroidManifest.xml b/library/database/src/test/AndroidManifest.xml new file mode 100644 index 0000000000..482b3ea14d --- /dev/null +++ b/library/database/src/test/AndroidManifest.xml @@ -0,0 +1,19 @@ + + + + + + diff --git a/library/common/src/test/java/com/google/android/exoplayer2/database/VersionTableTest.java b/library/database/src/test/java/com/google/android/exoplayer2/database/VersionTableTest.java similarity index 100% rename from library/common/src/test/java/com/google/android/exoplayer2/database/VersionTableTest.java rename to library/database/src/test/java/com/google/android/exoplayer2/database/VersionTableTest.java diff --git a/library/datasource/build.gradle b/library/datasource/build.gradle index 98de23a80e..4bd29fb1c2 100644 --- a/library/datasource/build.gradle +++ b/library/datasource/build.gradle @@ -32,6 +32,7 @@ android { dependencies { implementation project(modulePrefix + 'library-common') + implementation project(modulePrefix + 'library-database') implementation 'androidx.annotation:annotation:' + androidxAnnotationVersion compileOnly 'com.google.code.findbugs:jsr305:' + jsr305Version compileOnly 'com.google.errorprone:error_prone_annotations:' + errorProneVersion diff --git a/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DashDownloadTest.java b/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DashDownloadTest.java index 0518fec094..9f54167f62 100644 --- a/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DashDownloadTest.java +++ b/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DashDownloadTest.java @@ -21,7 +21,7 @@ import android.net.Uri; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.rule.ActivityTestRule; import com.google.android.exoplayer2.MediaItem; -import com.google.android.exoplayer2.database.ExoDatabaseProvider; +import com.google.android.exoplayer2.database.StandaloneDatabaseProvider; import com.google.android.exoplayer2.offline.StreamKey; import com.google.android.exoplayer2.source.dash.DashUtil; import com.google.android.exoplayer2.source.dash.manifest.AdaptationSet; @@ -72,7 +72,9 @@ public final class DashDownloadTest { tempFolder = Util.createTempDirectory(testRule.getActivity(), "ExoPlayerTest"); cache = new SimpleCache( - tempFolder, new NoOpCacheEvictor(), new ExoDatabaseProvider(testRule.getActivity())); + tempFolder, + new NoOpCacheEvictor(), + new StandaloneDatabaseProvider(testRule.getActivity())); httpDataSourceFactory = new DefaultHttpDataSource.Factory(); offlineDataSourceFactory = new CacheDataSource.Factory().setCache(cache); }