From a6f97cf46e8a77c6f00fcd12744f5bd056411fc8 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Sat, 23 Sep 2017 01:00:14 +0200 Subject: [PATCH] remember if key signatures table has been initialized --- .../org/sufficientlysecure/keychain/Constants.java | 2 ++ .../keychain/provider/KeyWritableRepository.java | 14 ++++++++++++-- .../keychain/provider/KeychainDatabase.java | 3 +++ .../keychain/util/Preferences.java | 11 +++++++++++ 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java index e484ede5a..7b3844e1d 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java @@ -146,6 +146,8 @@ public final class Constants { public static final String EXPERIMENTAL_SMARTPGP_VERIFY_AUTHORITY = "smartpgp_authorities_pref"; public static final String EXPERIMENTAL_SMARTPGP_AUTHORITIES = "smartpgp_authorities"; + public static final String KEY_SIGNATURES_TABLE_INITIALIZED = "key_signatures_table_initialized"; + public static final class Theme { public static final String LIGHT = "light"; public static final String DARK = "dark"; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeyWritableRepository.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeyWritableRepository.java index cbc6850c6..1b0484290 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeyWritableRepository.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeyWritableRepository.java @@ -68,6 +68,7 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.UserPackets; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.util.IterableIterator; import org.sufficientlysecure.keychain.util.Log; +import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Utf8Util; /** @@ -83,6 +84,8 @@ import org.sufficientlysecure.keychain.util.Utf8Util; public class KeyWritableRepository extends KeyRepository { private static final int MAX_CACHED_KEY_SIZE = 1024 * 50; + private final Context mContext; + public static KeyWritableRepository create(Context context) { LocalPublicKeyStorage localPublicKeyStorage = LocalPublicKeyStorage.getInstance(context); @@ -97,6 +100,8 @@ public class KeyWritableRepository extends KeyRepository { private KeyWritableRepository( Context context, LocalPublicKeyStorage localPublicKeyStorage, OperationLog log, int indent) { super(context.getContentResolver(), localPublicKeyStorage, log, indent); + + mContext = context; } private LongSparseArray getTrustedMasterKeys() { @@ -1015,8 +1020,9 @@ public class KeyWritableRepository extends KeyRepository { OperationLog log = new OperationLog(); Cursor cursor; - boolean needsSigningDbUpdate = false; // TODO remember if we ever refreshed all keys everything - if (needsSigningDbUpdate) { + Preferences preferences = Preferences.getPreferences(mContext); + boolean isTrustDbInitialized = preferences.isKeySignaturesTableInitialized(); + if (!isTrustDbInitialized) { cursor = mContentResolver.query(KeyRings.buildUnifiedKeyRingsUri(), new String[] { KeyRings.MASTER_KEY_ID }, null, null, null); } else { @@ -1050,6 +1056,10 @@ public class KeyWritableRepository extends KeyRepository { } } + if (!isTrustDbInitialized) { + preferences.setKeySignaturesTableInitialized(); + } + return new UpdateTrustResult(UpdateTrustResult.RESULT_OK, log); } finally { cursor.close(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainDatabase.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainDatabase.java index a90e2cd67..7dbd52b00 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainDatabase.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainDatabase.java @@ -42,6 +42,8 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.OverriddenWarni import org.sufficientlysecure.keychain.provider.KeychainContract.UpdatedKeysColumns; import org.sufficientlysecure.keychain.provider.KeychainContract.UserPacketsColumns; import org.sufficientlysecure.keychain.util.Log; +import org.sufficientlysecure.keychain.util.Preferences; + /** * SQLite Datatypes (from http://www.sqlite.org/datatype3.html) @@ -234,6 +236,7 @@ public class KeychainDatabase extends SQLiteOpenHelper { db.execSQL("CREATE INDEX verified_certs ON certs (" + CertsColumns.VERIFIED + ", " + CertsColumns.MASTER_KEY_ID + ");"); + Preferences.getPreferences(mContext).setKeySignaturesTableInitialized(); } @Override diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java index d5a7033df..263e95029 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java @@ -28,6 +28,7 @@ import android.annotation.SuppressLint; import android.content.ContentResolver; import android.content.Context; import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; import android.os.Parcel; import android.os.Parcelable; import android.preference.PreferenceManager; @@ -318,6 +319,16 @@ public class Preferences { getPreferredKeyserver()); } + public boolean isKeySignaturesTableInitialized() { + return mSharedPreferences.getBoolean(Pref.KEY_SIGNATURES_TABLE_INITIALIZED, false); + } + + public void setKeySignaturesTableInitialized() { + Editor editor = mSharedPreferences.edit(); + editor.putBoolean(Pref.KEY_SIGNATURES_TABLE_INITIALIZED, true); + editor.commit(); + } + public static class CloudSearchPrefs implements Parcelable { public final boolean searchKeyserver; public final boolean searchKeybase;