close database when cursor is closed for external provider
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
package org.sufficientlysecure.keychain.util;
|
||||
|
||||
|
||||
import android.database.Cursor;
|
||||
import android.database.sqlite.SQLiteCursor;
|
||||
import android.database.sqlite.SQLiteCursorDriver;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.database.sqlite.SQLiteDatabase.CursorFactory;
|
||||
import android.database.sqlite.SQLiteQuery;
|
||||
import android.util.Log;
|
||||
|
||||
import org.sufficientlysecure.keychain.Constants;
|
||||
|
||||
|
||||
public class CloseDatabaseCursorFactory implements CursorFactory {
|
||||
private static class CloseDatabaseCursor extends SQLiteCursor {
|
||||
CloseDatabaseCursor(SQLiteDatabase db, SQLiteCursorDriver driver, String editTable, SQLiteQuery query) {
|
||||
super(db, driver, editTable, query);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
final SQLiteDatabase db = getDatabase();
|
||||
super.close();
|
||||
if (db != null) {
|
||||
Log.d(Constants.TAG, "Closing cursor: " + db.getPath());
|
||||
try {
|
||||
db.close();
|
||||
} catch (Exception e) {
|
||||
Log.e(Constants.TAG, "Error closing db", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Cursor newCursor(SQLiteDatabase db, SQLiteCursorDriver masterQuery,
|
||||
String editTable, SQLiteQuery query) {
|
||||
return new CloseDatabaseCursor(db, masterQuery, editTable, query);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user