diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/daos/OverriddenWarningsDao.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/daos/OverriddenWarningsDao.java index 4560ee2a9..12554f1a3 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/daos/OverriddenWarningsDao.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/daos/OverriddenWarningsDao.java @@ -18,64 +18,42 @@ package org.sufficientlysecure.keychain.daos; -import android.arch.persistence.db.SupportSQLiteDatabase; -import android.arch.persistence.db.SupportSQLiteQuery; -import android.arch.persistence.db.SupportSQLiteQueryBuilder; -import android.content.ContentValues; import android.content.Context; -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; -import org.sufficientlysecure.keychain.provider.KeychainContract.OverriddenWarnings; +import com.squareup.sqldelight.SqlDelightQuery; import org.sufficientlysecure.keychain.KeychainDatabase; -import org.sufficientlysecure.keychain.KeychainDatabase.Tables; +import org.sufficientlysecure.keychain.OverriddenWarningsModel.DeleteByIdentifier; +import org.sufficientlysecure.keychain.OverriddenWarningsModel.InsertIdentifier; +import org.sufficientlysecure.keychain.model.OverriddenWarning; -public class OverriddenWarningsDao { - private final Context context; - private KeychainDatabase keychainDatabase; +public class OverriddenWarningsDao extends AbstractDao { + public static OverriddenWarningsDao create(Context context) { + KeychainDatabase database = KeychainDatabase.getInstance(context); + DatabaseNotifyManager databaseNotifyManager = DatabaseNotifyManager.create(context); - public static OverriddenWarningsDao createOverriddenWarningsRepository(Context context) { - return new OverriddenWarningsDao(context); + return new OverriddenWarningsDao(database, databaseNotifyManager); } - private OverriddenWarningsDao(Context context) { - this.context = context; - } - - private KeychainDatabase getDb() { - if (keychainDatabase == null) { - keychainDatabase = KeychainDatabase.getInstance(context); - } - return keychainDatabase; + private OverriddenWarningsDao(KeychainDatabase db, DatabaseNotifyManager databaseNotifyManager) { + super(db, databaseNotifyManager); } public boolean isWarningOverridden(String identifier) { - SupportSQLiteDatabase db = getDb().getReadableDatabase(); - SupportSQLiteQuery query = SupportSQLiteQueryBuilder - .builder(Tables.OVERRIDDEN_WARNINGS) - .columns(new String[] { "COUNT(*) FROM " }) - .selection(OverriddenWarnings.IDENTIFIER + " = ?", new String[] { identifier }) - .create(); - Cursor cursor = db.query(query); - - try { - cursor.moveToFirst(); - return cursor.getInt(0) > 0; - } finally { - cursor.close(); - } + SqlDelightQuery query = OverriddenWarning.FACTORY.selectCountByIdentifier(identifier); + Long result = mapSingleRow(query, OverriddenWarning.FACTORY.selectCountByIdentifierMapper()::map); + return result != null && result > 0; } public void putOverride(String identifier) { - SupportSQLiteDatabase db = getDb().getWritableDatabase(); - ContentValues cv = new ContentValues(); - cv.put(OverriddenWarnings.IDENTIFIER, identifier); - db.insert(Tables.OVERRIDDEN_WARNINGS, SQLiteDatabase.CONFLICT_REPLACE, cv); + InsertIdentifier statement = new InsertIdentifier(getWritableDb()); + statement.bind(identifier); + statement.executeInsert(); } public void deleteOverride(String identifier) { - SupportSQLiteDatabase db = getDb().getWritableDatabase(); - db.delete(Tables.OVERRIDDEN_WARNINGS, OverriddenWarnings.IDENTIFIER + " = ?", new String[] { identifier }); + DeleteByIdentifier statement = new DeleteByIdentifier(getWritableDb()); + statement.bind(identifier); + statement.executeInsert(); } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/model/OverriddenWarning.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/model/OverriddenWarning.java new file mode 100644 index 000000000..5de6b385b --- /dev/null +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/model/OverriddenWarning.java @@ -0,0 +1,14 @@ +package org.sufficientlysecure.keychain.model; + + +import com.google.auto.value.AutoValue; +import org.sufficientlysecure.keychain.KeySignaturesModel; +import org.sufficientlysecure.keychain.OverriddenWarningsModel; + + +@AutoValue +public abstract class OverriddenWarning implements OverriddenWarningsModel { + public static final Factory FACTORY = new Factory<>(AutoValue_OverriddenWarning::new); + + public static final Mapper MAPPER = new Mapper<>(FACTORY); +} diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java index db469587f..b173e65bc 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java @@ -470,7 +470,7 @@ public class OpenPgpService extends Service { SecurityProblem prioritySecurityProblem = securityProblem.getPrioritySecurityProblem(); if (prioritySecurityProblem.isIdentifiable()) { String identifier = prioritySecurityProblem.getIdentifier(); - boolean isOverridden = OverriddenWarningsDao.createOverriddenWarningsRepository(this) + boolean isOverridden = OverriddenWarningsDao.create(this) .isWarningOverridden(identifier); result.putExtra(OpenPgpApi.RESULT_OVERRIDE_CRYPTO_WARNING, isOverridden); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SecurityProblemPresenter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SecurityProblemPresenter.java index a13be8780..f1609f99a 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SecurityProblemPresenter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/SecurityProblemPresenter.java @@ -62,7 +62,7 @@ class SecurityProblemPresenter { SecurityProblemPresenter(Context context) { this.context = context; packageManager = context.getPackageManager(); - overriddenWarningsDao = OverriddenWarningsDao.createOverriddenWarningsRepository(context); + overriddenWarningsDao = OverriddenWarningsDao.create(context); } public void setView(RemoteSecurityProblemView view) { diff --git a/OpenKeychain/src/main/sqldelight/org/sufficientlysecure/keychain/OverriddenWarnings.sq b/OpenKeychain/src/main/sqldelight/org/sufficientlysecure/keychain/OverriddenWarnings.sq index 3736a0f85..f5afb017d 100644 --- a/OpenKeychain/src/main/sqldelight/org/sufficientlysecure/keychain/OverriddenWarnings.sq +++ b/OpenKeychain/src/main/sqldelight/org/sufficientlysecure/keychain/OverriddenWarnings.sq @@ -1,4 +1,16 @@ CREATE TABLE IF NOT EXISTS overridden_warnings ( _id INTEGER PRIMARY KEY AUTOINCREMENT, identifier TEXT NOT NULL UNIQUE -); \ No newline at end of file +); + +selectCountByIdentifier: +SELECT COUNT(*) + FROM overridden_warnings + WHERE identifier = ?; + +insertIdentifier: +INSERT OR IGNORE INTO overridden_warnings (identifier) VALUES (?); + +deleteByIdentifier: +DELETE FROM overridden_warnings + WHERE identifier = ?; \ No newline at end of file