[Android] MediaDatabase: work around devices with broken /data
Edward Wang
git at videolan.org
Tue Sep 10 01:09:05 CEST 2013
vlc-ports/android | branch: 0.1.x-bugfix | Edward Wang <edward.c.wang at compdigitec.com> | Mon Aug 26 17:15:30 2013 +0000| [bb3ac1a9cece2ed38671f9a48ed9b506a6fe0b49] | committer: Jean-Baptiste Kempf
MediaDatabase: work around devices with broken /data
Allow these devices to at least start up and play files
(cherry picked from commit b53d25f4f0d42803bc3ba1a324951efb879f2713)
Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>
> http://git.videolan.org/gitweb.cgi/vlc-ports/android.git/?a=commit;h=bb3ac1a9cece2ed38671f9a48ed9b506a6fe0b49
---
.../src/org/videolan/vlc/MediaDatabase.java | 32 ++++++++++++++++++++
.../src/org/videolan/vlc/VLCApplication.java | 4 +--
2 files changed, 34 insertions(+), 2 deletions(-)
diff --git a/vlc-android/src/org/videolan/vlc/MediaDatabase.java b/vlc-android/src/org/videolan/vlc/MediaDatabase.java
index ebf1a46..0bc505e 100644
--- a/vlc-android/src/org/videolan/vlc/MediaDatabase.java
+++ b/vlc-android/src/org/videolan/vlc/MediaDatabase.java
@@ -35,6 +35,7 @@ import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
@@ -111,6 +112,37 @@ public class MediaDatabase {
super(context, DB_NAME, null, DB_VERSION);
}
+ @Override
+ public SQLiteDatabase getWritableDatabase() {
+ SQLiteDatabase db;
+ try {
+ return super.getWritableDatabase();
+ } catch(SQLiteException e) {
+ try {
+ db = SQLiteDatabase.openOrCreateDatabase(VLCApplication.getAppContext().getDatabasePath(DB_NAME), null);
+ } catch(SQLiteException e2) {
+ Log.w(TAG, "SQLite database could not be created! Media library cannot be saved.");
+ db = SQLiteDatabase.create(null);
+ }
+ }
+ int version = db.getVersion();
+ if (version != DB_VERSION) {
+ db.beginTransaction();
+ try {
+ if (version == 0) {
+ onCreate(db);
+ } else {
+ onUpgrade(db, version, DB_VERSION);
+ }
+ db.setVersion(DB_VERSION);
+ db.setTransactionSuccessful();
+ } finally {
+ db.endTransaction();
+ }
+ }
+ return db;
+ }
+
public void dropMediaTableQuery(SQLiteDatabase db) {
String query = "DROP TABLE " + MEDIA_TABLE_NAME + ";";
db.execSQL(query);
diff --git a/vlc-android/src/org/videolan/vlc/VLCApplication.java b/vlc-android/src/org/videolan/vlc/VLCApplication.java
index 604d592..f713f84 100644
--- a/vlc-android/src/org/videolan/vlc/VLCApplication.java
+++ b/vlc-android/src/org/videolan/vlc/VLCApplication.java
@@ -70,10 +70,10 @@ public class VLCApplication extends Application {
getBaseContext().getResources().getDisplayMetrics());
}
+ instance = this;
+
// Initialize the database soon enough to avoid any race condition and crash
MediaDatabase.getInstance(this);
-
- instance = this;
}
/**
More information about the Android
mailing list