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;
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();
}
}

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();
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);
}

View file

@ -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) {

View file

@ -1,4 +1,16 @@
CREATE TABLE IF NOT EXISTS overridden_warnings (
_id INTEGER PRIMARY KEY AUTOINCREMENT,
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 = ?;