From 3e00320bac30fd1e9975121e26511d42cc5605af Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Thu, 5 Jul 2018 20:25:05 +0200 Subject: [PATCH] Correctly fold user packet queries and display verification status --- .../keychain/model/UserPacket.java | 20 +++++++++++++++---- .../ui/keyview/LinkedIdViewFragment.java | 4 +++- .../keychain/UserPackets.sq | 14 ++++++++----- 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/model/UserPacket.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/model/UserPacket.java index cf33fc66d..1b4e81c3e 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/model/UserPacket.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/model/UserPacket.java @@ -1,6 +1,8 @@ package org.sufficientlysecure.keychain.model; +import android.support.annotation.NonNull; + import com.google.auto.value.AutoValue; import org.sufficientlysecure.keychain.UserPacketsModel; import org.sufficientlysecure.keychain.pgp.CanonicalizedKeyRing.VerificationStatus; @@ -10,16 +12,21 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.Certs; @AutoValue public abstract class UserPacket implements UserPacketsModel { public static final Factory FACTORY = new Factory<>(AutoValue_UserPacket::new); - public static final SelectUserIdsByMasterKeyIdMapper USER_ID_MAPPER = - FACTORY.selectUserIdsByMasterKeyIdMapper(AutoValue_UserPacket_UserId::new, Certification.FACTORY); - public static final SelectUserAttributesByTypeAndMasterKeyIdMapper USER_ATTRIBUTE_MAPPER = - FACTORY.selectUserAttributesByTypeAndMasterKeyIdMapper(AutoValue_UserPacket_UserAttribute::new, Certification.FACTORY); + public static final SelectUserIdsByMasterKeyIdMapper USER_ID_MAPPER = + FACTORY.selectUserIdsByMasterKeyIdMapper(AutoValue_UserPacket_UserId::new); + public static final SelectUserAttributesByTypeAndMasterKeyIdMapper USER_ATTRIBUTE_MAPPER = + FACTORY.selectUserAttributesByTypeAndMasterKeyIdMapper(AutoValue_UserPacket_UserAttribute::new); @AutoValue public static abstract class UserId implements SelectUserIdsByMasterKeyIdModel { public boolean isVerified() { return verified() == VerificationStatus.VERIFIED_SECRET; } + + @NonNull + public VerificationStatus verified() { + return CustomColumnAdapters.VERIFICATON_STATUS_ADAPTER.decode(verified_int()); + } } @AutoValue @@ -27,5 +34,10 @@ public abstract class UserPacket implements UserPacketsModel { public boolean isVerified() { return verified() == VerificationStatus.VERIFIED_SECRET; } + + @NonNull + public VerificationStatus verified() { + return CustomColumnAdapters.VERIFICATON_STATUS_ADAPTER.decode(verified_int()); + } } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/keyview/LinkedIdViewFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/keyview/LinkedIdViewFragment.java index 493403ca5..b30087fd7 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/keyview/LinkedIdViewFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/keyview/LinkedIdViewFragment.java @@ -225,6 +225,8 @@ public class LinkedIdViewFragment extends CryptoOperationFragment implements OnB vProgress = root.findViewById(R.id.linked_cert_progress); vText = root.findViewById(R.id.linked_cert_text); + + vKeySpinner.setShowNone(R.string.choice_select_cert); } enum VerifyState { @@ -244,7 +246,6 @@ public class LinkedIdViewFragment extends CryptoOperationFragment implements OnB if (!isSecret) { showButton(2); if (!vKeySpinner.isSingleEntry()) { - vKeySpinner.setShowNone(R.string.choice_select_cert); vKeySpinnerContainer.setVisibility(View.VISIBLE); } } else { @@ -264,6 +265,7 @@ public class LinkedIdViewFragment extends CryptoOperationFragment implements OnB vProgress.setDisplayedChild(0); vText.setText(context.getString(R.string.linked_text_confirming)); vKeySpinnerContainer.setVisibility(View.GONE); + vButtonConfirm.setEnabled(false); break; } } diff --git a/OpenKeychain/src/main/sqldelight/org/sufficientlysecure/keychain/UserPackets.sq b/OpenKeychain/src/main/sqldelight/org/sufficientlysecure/keychain/UserPackets.sq index 85f8551e0..81b5d94e9 100644 --- a/OpenKeychain/src/main/sqldelight/org/sufficientlysecure/keychain/UserPackets.sq +++ b/OpenKeychain/src/main/sqldelight/org/sufficientlysecure/keychain/UserPackets.sq @@ -17,28 +17,32 @@ CREATE TABLE IF NOT EXISTS user_packets( ); selectUserIdsByMasterKeyId: -SELECT user_packets.master_key_id, user_packets.rank, user_id, name, email, comment, is_primary, is_revoked, certs.verified +SELECT user_packets.master_key_id, user_packets.rank, user_id, name, email, comment, is_primary, is_revoked, MIN(certs.verified) AS verified_int FROM user_packets LEFT JOIN certs ON ( user_packets.master_key_id = certs.master_key_id AND user_packets.rank = certs.rank AND certs.verified > 0 ) WHERE user_packets.type IS NULL AND user_packets.is_revoked = 0 AND user_packets.master_key_id IN ? + GROUP BY user_packets.master_key_id, user_packets.rank ORDER BY user_packets.master_key_id ASC,user_packets.rank ASC; selectUserIdsByMasterKeyIdAndVerification: -SELECT user_packets.master_key_id, user_packets.rank, user_id, name, email, comment, is_primary, is_revoked, certs.verified +SELECT user_packets.master_key_id, user_packets.rank, user_id, name, email, comment, is_primary, is_revoked, MIN(certs.verified) AS verified_int FROM user_packets LEFT JOIN certs ON ( user_packets.master_key_id = certs.master_key_id AND user_packets.rank = certs.rank AND certs.verified > 0 ) WHERE user_packets.type IS NULL AND user_packets.is_revoked = 0 AND user_packets.master_key_id = ? AND certs.verified = ? + GROUP BY user_packets.rank ORDER BY user_packets.rank ASC; selectUserAttributesByTypeAndMasterKeyId: -SELECT user_packets.master_key_id, user_packets.rank, attribute_data, is_primary, is_revoked, certs.verified +SELECT user_packets.master_key_id, user_packets.rank, attribute_data, is_primary, is_revoked, MIN(certs.verified) AS verified_int FROM user_packets LEFT JOIN certs ON ( user_packets.master_key_id = certs.master_key_id AND user_packets.rank = certs.rank AND certs.verified > 0 ) WHERE user_packets.type = ? AND user_packets.is_revoked = 0 AND user_packets.master_key_id = ? + GROUP BY user_packets.rank ORDER BY user_packets.rank ASC; selectSpecificUserAttribute: -SELECT user_packets.master_key_id, user_packets.rank, attribute_data, is_primary, is_revoked, certs.verified +SELECT user_packets.master_key_id, user_packets.rank, attribute_data, is_primary, is_revoked, MIN(certs.verified) AS verified_int FROM user_packets LEFT JOIN certs ON ( user_packets.master_key_id = certs.master_key_id AND user_packets.rank = certs.rank AND certs.verified > 0 ) - WHERE user_packets.type = ? AND user_packets.master_key_id = ? AND user_packets.rank = ?; + WHERE user_packets.type = ? AND user_packets.master_key_id = ? AND user_packets.rank = ? + GROUP BY user_packets.master_key_id, user_packets.rank;