clean up OverriddenWarnigsDao

This commit is contained in:
Vincent Breitmoser
2018-07-02 15:22:03 +02:00
parent 0f473c89d9
commit 70be2c8ba1
5 changed files with 49 additions and 45 deletions

View File

@@ -18,64 +18,42 @@
package org.sufficientlysecure.keychain.daos; 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.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;
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 { public class OverriddenWarningsDao extends AbstractDao {
private final Context context; public static OverriddenWarningsDao create(Context context) {
private KeychainDatabase keychainDatabase; KeychainDatabase database = KeychainDatabase.getInstance(context);
DatabaseNotifyManager databaseNotifyManager = DatabaseNotifyManager.create(context);
public static OverriddenWarningsDao createOverriddenWarningsRepository(Context context) { return new OverriddenWarningsDao(database, databaseNotifyManager);
return new OverriddenWarningsDao(context);
} }
private OverriddenWarningsDao(Context context) { private OverriddenWarningsDao(KeychainDatabase db, DatabaseNotifyManager databaseNotifyManager) {
this.context = context; super(db, databaseNotifyManager);
}
private KeychainDatabase getDb() {
if (keychainDatabase == null) {
keychainDatabase = KeychainDatabase.getInstance(context);
}
return keychainDatabase;
} }
public boolean isWarningOverridden(String identifier) { public boolean isWarningOverridden(String identifier) {
SupportSQLiteDatabase db = getDb().getReadableDatabase(); SqlDelightQuery query = OverriddenWarning.FACTORY.selectCountByIdentifier(identifier);
SupportSQLiteQuery query = SupportSQLiteQueryBuilder Long result = mapSingleRow(query, OverriddenWarning.FACTORY.selectCountByIdentifierMapper()::map);
.builder(Tables.OVERRIDDEN_WARNINGS) return result != null && result > 0;
.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();
}
} }
public void putOverride(String identifier) { public void putOverride(String identifier) {
SupportSQLiteDatabase db = getDb().getWritableDatabase(); InsertIdentifier statement = new InsertIdentifier(getWritableDb());
ContentValues cv = new ContentValues(); statement.bind(identifier);
cv.put(OverriddenWarnings.IDENTIFIER, identifier); statement.executeInsert();
db.insert(Tables.OVERRIDDEN_WARNINGS, SQLiteDatabase.CONFLICT_REPLACE, cv);
} }
public void deleteOverride(String identifier) { public void deleteOverride(String identifier) {
SupportSQLiteDatabase db = getDb().getWritableDatabase(); DeleteByIdentifier statement = new DeleteByIdentifier(getWritableDb());
db.delete(Tables.OVERRIDDEN_WARNINGS, OverriddenWarnings.IDENTIFIER + " = ?", new String[] { identifier }); statement.bind(identifier);
statement.executeInsert();
} }
} }

View File

@@ -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<OverriddenWarning> FACTORY = new Factory<>(AutoValue_OverriddenWarning::new);
public static final Mapper<OverriddenWarning> MAPPER = new Mapper<>(FACTORY);
}

View File

@@ -470,7 +470,7 @@ public class OpenPgpService extends Service {
SecurityProblem prioritySecurityProblem = securityProblem.getPrioritySecurityProblem(); SecurityProblem prioritySecurityProblem = securityProblem.getPrioritySecurityProblem();
if (prioritySecurityProblem.isIdentifiable()) { if (prioritySecurityProblem.isIdentifiable()) {
String identifier = prioritySecurityProblem.getIdentifier(); String identifier = prioritySecurityProblem.getIdentifier();
boolean isOverridden = OverriddenWarningsDao.createOverriddenWarningsRepository(this) boolean isOverridden = OverriddenWarningsDao.create(this)
.isWarningOverridden(identifier); .isWarningOverridden(identifier);
result.putExtra(OpenPgpApi.RESULT_OVERRIDE_CRYPTO_WARNING, isOverridden); result.putExtra(OpenPgpApi.RESULT_OVERRIDE_CRYPTO_WARNING, isOverridden);
} }

View File

@@ -62,7 +62,7 @@ class SecurityProblemPresenter {
SecurityProblemPresenter(Context context) { SecurityProblemPresenter(Context context) {
this.context = context; this.context = context;
packageManager = context.getPackageManager(); packageManager = context.getPackageManager();
overriddenWarningsDao = OverriddenWarningsDao.createOverriddenWarningsRepository(context); overriddenWarningsDao = OverriddenWarningsDao.create(context);
} }
public void setView(RemoteSecurityProblemView view) { public void setView(RemoteSecurityProblemView view) {

View File

@@ -2,3 +2,15 @@ CREATE TABLE IF NOT EXISTS overridden_warnings (
_id INTEGER PRIMARY KEY AUTOINCREMENT, _id INTEGER PRIMARY KEY AUTOINCREMENT,
identifier TEXT NOT NULL UNIQUE identifier TEXT NOT NULL UNIQUE
); );
selectCountByIdentifier:
SELECT COUNT(*)
FROM overridden_warnings
WHERE identifier = ?;
insertIdentifier:
INSERT OR IGNORE INTO overridden_warnings (identifier) VALUES (?);
deleteByIdentifier:
DELETE FROM overridden_warnings
WHERE identifier = ?;