Fix bug #19313587 Settings unusable when userdata is full
- take care of low storage space use case: do not start and Index update if we are is low storage space situation. Change-Id: Ifa5bb618d087826c004b06aa7821b9634038734c
This commit is contained in:
@@ -43,6 +43,7 @@ import android.os.RemoteException;
|
||||
import android.os.ServiceManager;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
import android.os.storage.StorageManager;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceFragment;
|
||||
import android.preference.PreferenceManager;
|
||||
@@ -532,7 +533,12 @@ public class SettingsActivity extends Activity
|
||||
getFragmentManager().addOnBackStackChangedListener(this);
|
||||
|
||||
if (mIsShowingDashboard) {
|
||||
// Run the Index update only if we have some space
|
||||
if (!Utils.isLowStorage(this)) {
|
||||
Index.getInstance(getApplicationContext()).update();
|
||||
} else {
|
||||
Log.w(LOG_TAG, "Cannot update the Indexer as we are running low on storage space!");
|
||||
}
|
||||
}
|
||||
|
||||
if (savedState != null) {
|
||||
|
@@ -52,6 +52,7 @@ import android.os.IBinder;
|
||||
import android.os.RemoteException;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
import android.os.storage.StorageManager;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceFrameLayout;
|
||||
import android.preference.PreferenceGroup;
|
||||
@@ -1071,4 +1072,15 @@ public final class Utils {
|
||||
return inflater.inflate(resId, parent, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return if we are running low on storage space or not.
|
||||
*
|
||||
* @param context The context
|
||||
* @return true if we are running low on storage space
|
||||
*/
|
||||
public static boolean isLowStorage(Context context) {
|
||||
final StorageManager sm = StorageManager.from(context);
|
||||
return (sm.getStorageBytesUntilLow(context.getFilesDir()) < 0);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -30,6 +30,7 @@ import android.database.Cursor;
|
||||
import android.database.DatabaseUtils;
|
||||
import android.database.MergeCursor;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.database.sqlite.SQLiteException;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.provider.SearchIndexableData;
|
||||
@@ -501,7 +502,12 @@ public class Index {
|
||||
}
|
||||
|
||||
private SQLiteDatabase getWritableDatabase() {
|
||||
try {
|
||||
return IndexDatabaseHelper.getInstance(mContext).getWritableDatabase();
|
||||
} catch (SQLiteException e) {
|
||||
Log.e(LOG_TAG, "Cannot open writable database", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static Uri buildUriForXmlResources(String authority) {
|
||||
@@ -1172,6 +1178,10 @@ public class Index {
|
||||
final boolean forceUpdate = params[0].forceUpdate;
|
||||
|
||||
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 {
|
||||
@@ -1292,8 +1302,12 @@ public class Index {
|
||||
values.put(IndexDatabaseHelper.SavedQueriesColums.TIME_STAMP, now);
|
||||
|
||||
final SQLiteDatabase database = getWritableDatabase();
|
||||
if (database == null) {
|
||||
Log.e(LOG_TAG, "Cannot save Search queries as I cannot get a writable database");
|
||||
return -1L;
|
||||
}
|
||||
|
||||
long lastInsertedRowId = -1;
|
||||
long lastInsertedRowId = -1L;
|
||||
try {
|
||||
// First, delete all saved queries that are the same
|
||||
database.delete(Tables.TABLE_SAVED_QUERIES,
|
||||
|
Reference in New Issue
Block a user