From ef71f605f3290be8c5d2158ead21ae6f9ead2d86 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Fri, 29 Apr 2016 13:51:08 -0400 Subject: [PATCH] Don't crash settings when out of space. Change-Id: I2e36fe845601558d789f38ae9f70d1a1684d8fd4 Fixes: 28198128 --- src/com/android/settings/search/Index.java | 57 ++++++++++++---------- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/src/com/android/settings/search/Index.java b/src/com/android/settings/search/Index.java index d4fc6f81d5a..fd67ea63c7a 100644 --- a/src/com/android/settings/search/Index.java +++ b/src/com/android/settings/search/Index.java @@ -31,6 +31,7 @@ import android.database.DatabaseUtils; import android.database.MergeCursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; +import android.database.sqlite.SQLiteFullException; import android.net.Uri; import android.os.AsyncTask; import android.provider.SearchIndexableData; @@ -1194,35 +1195,39 @@ public class Index { @Override protected Void doInBackground(UpdateData... params) { - final List dataToUpdate = params[0].dataToUpdate; - final List dataToDelete = params[0].dataToDelete; - final Map> nonIndexableKeys = params[0].nonIndexableKeys; - - final boolean forceUpdate = params[0].forceUpdate; - final boolean fullIndex = params[0].fullIndex; - - final SQLiteDatabase database = getWritableDatabase(); - if (database == null) { - Log.e(LOG_TAG, "Cannot update Index as I cannot get a writable database"); - return null; - } - final String localeStr = Locale.getDefault().toString(); - try { - database.beginTransaction(); - if (dataToDelete.size() > 0) { - processDataToDelete(database, localeStr, dataToDelete); + final List dataToUpdate = params[0].dataToUpdate; + final List dataToDelete = params[0].dataToDelete; + final Map> nonIndexableKeys = params[0].nonIndexableKeys; + + final boolean forceUpdate = params[0].forceUpdate; + final boolean fullIndex = params[0].fullIndex; + + final SQLiteDatabase database = getWritableDatabase(); + if (database == null) { + Log.e(LOG_TAG, "Cannot update Index as I cannot get a writable database"); + return null; } - if (dataToUpdate.size() > 0) { - processDataToUpdate(database, localeStr, dataToUpdate, nonIndexableKeys, - forceUpdate); + final String localeStr = Locale.getDefault().toString(); + + try { + database.beginTransaction(); + if (dataToDelete.size() > 0) { + processDataToDelete(database, localeStr, dataToDelete); + } + if (dataToUpdate.size() > 0) { + processDataToUpdate(database, localeStr, dataToUpdate, nonIndexableKeys, + forceUpdate); + } + database.setTransactionSuccessful(); + } finally { + database.endTransaction(); } - database.setTransactionSuccessful(); - } finally { - database.endTransaction(); - } - if (fullIndex) { - IndexDatabaseHelper.setLocaleIndexed(mContext, localeStr); + if (fullIndex) { + IndexDatabaseHelper.setLocaleIndexed(mContext, localeStr); + } + } catch (SQLiteFullException e) { + Log.e(LOG_TAG, "Unable to index search, out of space", e); } return null;