@NonNull @VisibleForTesting /*package*/ SQLiteDatabase getDatabase() { if (mInjectedDatabase != null) { return mInjectedDatabase; } else { try { return mDbHelper.getWritableDatabase(); } catch (SQLiteCantOpenDatabaseException e) { CAT.e(e); // that's bad, delete the database and try again, otherwise users may get stuck in a loop new JobStorageDatabaseErrorHandler().deleteDatabaseFile(DATABASE_NAME); return mDbHelper.getWritableDatabase(); } } }
/*package*/ void deleteDatabaseFile(String fileName) { if (fileName.equalsIgnoreCase(":memory:") || fileName.trim().length() == 0) { return; } CAT.e("deleting the database file: " + fileName); try { File databaseFile = new File(fileName); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { deleteApi16(databaseFile); } else { deleteApi14(JobManager.instance().getContext(), databaseFile); } } catch (Exception e) { /* print warning and ignore exception */ CAT.w(e, "delete failed: " + e.getMessage()); } }
@Test public void verifyDeleteWithApi14() { Context context = RuntimeEnvironment.application; JobStorage jobStorage = new JobStorage(context); SQLiteDatabase database = jobStorage.getDatabase(); assertThat(database).isNotNull(); assertThat(database.isOpen()).isTrue(); File file = new File(database.getPath()); assertThat(file.exists()).isTrue(); assertThat(file.isFile()).isTrue(); new JobStorageDatabaseErrorHandler().deleteApi14(context, file); assertThat(file.exists()).isFalse(); }
@Test public void verifyDeleteAfterCorruptionWhileOpen() { Context context = RuntimeEnvironment.application; JobStorage jobStorage = new JobStorage(context); SQLiteDatabase database = jobStorage.getDatabase(); assertThat(database).isNotNull(); assertThat(database.isOpen()).isTrue(); File file = new File(database.getPath()); assertThat(file.exists()).isTrue(); assertThat(file.isFile()).isTrue(); new JobStorageDatabaseErrorHandler().onCorruption(database); assertThat(file.exists()).isFalse(); }
private JobOpenHelper(Context context, String databasePath) { super(context, databasePath, null, DATABASE_VERSION, new JobStorageDatabaseErrorHandler()); }
deleteDatabaseFile(dbObj.getPath()); return; deleteDatabaseFile(p.second); deleteDatabaseFile(dbObj.getPath());
@Test public void verifyDeleteAfterCorruptionWhileClosed() { Context context = RuntimeEnvironment.application; JobStorage jobStorage = new JobStorage(context); SQLiteDatabase database = jobStorage.getDatabase(); assertThat(database).isNotNull(); assertThat(database.isOpen()).isTrue(); File file = new File(database.getPath()); assertThat(file.exists()).isTrue(); assertThat(file.isFile()).isTrue(); database.close(); new JobStorageDatabaseErrorHandler().onCorruption(database); assertThat(file.exists()).isFalse(); }
private JobOpenHelper(Context context, String databasePath) { super(context, databasePath, null, DATABASE_VERSION, new JobStorageDatabaseErrorHandler()); }
deleteDatabaseFile(dbObj.getPath()); return; deleteDatabaseFile(p.second); deleteDatabaseFile(dbObj.getPath());
@NonNull @VisibleForTesting /*package*/ SQLiteDatabase getDatabase() { if (mInjectedDatabase != null) { return mInjectedDatabase; } else { try { return mDbHelper.getWritableDatabase(); } catch (SQLiteCantOpenDatabaseException e) { CAT.e(e); // that's bad, delete the database and try again, otherwise users may get stuck in a loop new JobStorageDatabaseErrorHandler().deleteDatabaseFile(DATABASE_NAME); return mDbHelper.getWritableDatabase(); } } }
/*package*/ void deleteDatabaseFile(String fileName) { if (fileName.equalsIgnoreCase(":memory:") || fileName.trim().length() == 0) { return; } CAT.e("deleting the database file: " + fileName); try { File databaseFile = new File(fileName); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { deleteApi16(databaseFile); } else { deleteApi14(JobManager.instance().getContext(), databaseFile); } } catch (Exception e) { /* print warning and ignore exception */ CAT.w(e, "delete failed: " + e.getMessage()); } }