From e0711c64b84cd86a75f00ff659af19ea52d41f7f Mon Sep 17 00:00:00 2001 From: olly Date: Tue, 29 Jan 2019 13:18:25 +0000 Subject: [PATCH] DatabaseFileProvidingContext: Support older API levels On older API levels it's also necessary to implement openOrCreateDatabase, to be called by SQLiteOpenHelper. PiperOrigin-RevId: 231387559 --- .../database/ExoDatabaseProvider.java | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/database/ExoDatabaseProvider.java b/library/core/src/main/java/com/google/android/exoplayer2/database/ExoDatabaseProvider.java index 49c16ebbbf..9306b22353 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/database/ExoDatabaseProvider.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/database/ExoDatabaseProvider.java @@ -18,6 +18,7 @@ package com.google.android.exoplayer2.database; import android.content.Context; import android.content.ContextWrapper; import android.database.Cursor; +import android.database.DatabaseErrorHandler; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; @@ -107,10 +108,7 @@ public final class ExoDatabaseProvider extends SQLiteOpenHelper implements Datab // TODO: This is fragile. Stop using it if/when SQLiteOpenHelper can be instantiated without a // context [Internal ref: b/123351819], or by injecting a Context into all components that need // to instantiate an ExoDatabaseProvider. - /** - * A {@link Context} that only implements {@link #getDatabasePath(String)}. This is the only - * method used by {@link SQLiteOpenHelper}. - */ + /** A {@link Context} that implements methods called by {@link SQLiteOpenHelper}. */ private static class DatabaseFileProvidingContext extends ContextWrapper { private final File file; @@ -125,5 +123,28 @@ public final class ExoDatabaseProvider extends SQLiteOpenHelper implements Datab public File getDatabasePath(String name) { return file; } + + @Override + public SQLiteDatabase openOrCreateDatabase( + String name, int mode, SQLiteDatabase.CursorFactory factory) { + return openOrCreateDatabase(name, mode, factory, /* errorHandler= */ null); + } + + @Override + public SQLiteDatabase openOrCreateDatabase( + String name, + int mode, + SQLiteDatabase.CursorFactory factory, + DatabaseErrorHandler errorHandler) { + File databasePath = getDatabasePath(name); + int flags = SQLiteDatabase.CREATE_IF_NECESSARY; + if ((mode & MODE_ENABLE_WRITE_AHEAD_LOGGING) != 0) { + flags |= SQLiteDatabase.ENABLE_WRITE_AHEAD_LOGGING; + } + if ((mode & MODE_NO_LOCALIZED_COLLATORS) != 0) { + flags |= SQLiteDatabase.NO_LOCALIZED_COLLATORS; + } + return SQLiteDatabase.openDatabase(databasePath.getPath(), factory, flags, errorHandler); + } } }