Merge "Ignoring specific db exception DO NOT MERGE" into ub-now-porkchop
diff --git a/src/com/android/launcher3/WidgetPreviewLoader.java b/src/com/android/launcher3/WidgetPreviewLoader.java
index 5aa7190..2eadf40 100644
--- a/src/com/android/launcher3/WidgetPreviewLoader.java
+++ b/src/com/android/launcher3/WidgetPreviewLoader.java
@@ -12,6 +12,7 @@
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteDiskIOException;
 import android.database.sqlite.SQLiteOpenHelper;
+import android.database.sqlite.SQLiteReadOnlyDatabaseException;
 import android.graphics.Bitmap;
 import android.graphics.Bitmap.Config;
 import android.graphics.BitmapFactory;
@@ -26,8 +27,8 @@
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.os.AsyncTask;
+import android.os.Build;
 import android.util.Log;
-
 import com.android.launcher3.compat.AppWidgetManagerCompat;
 
 import java.io.ByteArrayOutputStream;
@@ -165,14 +166,24 @@
                 LauncherAppState.getSharedPreferencesKey(), Context.MODE_PRIVATE);
         final String lastVersionName = sp.getString(ANDROID_INCREMENTAL_VERSION_NAME_KEY, null);
         final String versionName = android.os.Build.VERSION.INCREMENTAL;
+        final boolean isLollipopOrGreater = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
         if (!versionName.equals(lastVersionName)) {
-            // clear all the previews whenever the system version changes, to ensure that previews
-            // are up-to-date for any apps that might have been updated with the system
-            clearDb();
-
-            SharedPreferences.Editor editor = sp.edit();
-            editor.putString(ANDROID_INCREMENTAL_VERSION_NAME_KEY, versionName);
-            editor.commit();
+            try {
+                // clear all the previews whenever the system version changes, to ensure that
+                // previews are up-to-date for any apps that might have been updated with the system
+                clearDb();
+            } catch (SQLiteReadOnlyDatabaseException e) {
+                if (isLollipopOrGreater) {
+                    // Workaround for Bug. 18554839, if we fail to clear the db due to the read-only
+                    // issue, then ignore this error and leave the old previews
+                } else {
+                    throw e;
+                }
+            } finally {
+                SharedPreferences.Editor editor = sp.edit();
+                editor.putString(ANDROID_INCREMENTAL_VERSION_NAME_KEY, versionName);
+                editor.commit();
+            }
         }
     }