Correctly fold user packet queries and display verification status

This commit is contained in:
Vincent Breitmoser
2018-07-05 20:25:05 +02:00
parent eda75276ce
commit 3e00320bac
3 changed files with 28 additions and 10 deletions

View File

@@ -1,6 +1,8 @@
package org.sufficientlysecure.keychain.model; package org.sufficientlysecure.keychain.model;
import android.support.annotation.NonNull;
import com.google.auto.value.AutoValue; import com.google.auto.value.AutoValue;
import org.sufficientlysecure.keychain.UserPacketsModel; import org.sufficientlysecure.keychain.UserPacketsModel;
import org.sufficientlysecure.keychain.pgp.CanonicalizedKeyRing.VerificationStatus; import org.sufficientlysecure.keychain.pgp.CanonicalizedKeyRing.VerificationStatus;
@@ -10,16 +12,21 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.Certs;
@AutoValue @AutoValue
public abstract class UserPacket implements UserPacketsModel { public abstract class UserPacket implements UserPacketsModel {
public static final Factory<UserPacket> FACTORY = new Factory<>(AutoValue_UserPacket::new); public static final Factory<UserPacket> FACTORY = new Factory<>(AutoValue_UserPacket::new);
public static final SelectUserIdsByMasterKeyIdMapper<UserId, Certification> USER_ID_MAPPER = public static final SelectUserIdsByMasterKeyIdMapper<UserId> USER_ID_MAPPER =
FACTORY.selectUserIdsByMasterKeyIdMapper(AutoValue_UserPacket_UserId::new, Certification.FACTORY); FACTORY.selectUserIdsByMasterKeyIdMapper(AutoValue_UserPacket_UserId::new);
public static final SelectUserAttributesByTypeAndMasterKeyIdMapper<UserAttribute, Certification> USER_ATTRIBUTE_MAPPER = public static final SelectUserAttributesByTypeAndMasterKeyIdMapper<UserAttribute> USER_ATTRIBUTE_MAPPER =
FACTORY.selectUserAttributesByTypeAndMasterKeyIdMapper(AutoValue_UserPacket_UserAttribute::new, Certification.FACTORY); FACTORY.selectUserAttributesByTypeAndMasterKeyIdMapper(AutoValue_UserPacket_UserAttribute::new);
@AutoValue @AutoValue
public static abstract class UserId implements SelectUserIdsByMasterKeyIdModel { public static abstract class UserId implements SelectUserIdsByMasterKeyIdModel {
public boolean isVerified() { public boolean isVerified() {
return verified() == VerificationStatus.VERIFIED_SECRET; return verified() == VerificationStatus.VERIFIED_SECRET;
} }
@NonNull
public VerificationStatus verified() {
return CustomColumnAdapters.VERIFICATON_STATUS_ADAPTER.decode(verified_int());
}
} }
@AutoValue @AutoValue
@@ -27,5 +34,10 @@ public abstract class UserPacket implements UserPacketsModel {
public boolean isVerified() { public boolean isVerified() {
return verified() == VerificationStatus.VERIFIED_SECRET; return verified() == VerificationStatus.VERIFIED_SECRET;
} }
@NonNull
public VerificationStatus verified() {
return CustomColumnAdapters.VERIFICATON_STATUS_ADAPTER.decode(verified_int());
}
} }
} }

View File

@@ -225,6 +225,8 @@ public class LinkedIdViewFragment extends CryptoOperationFragment implements OnB
vProgress = root.findViewById(R.id.linked_cert_progress); vProgress = root.findViewById(R.id.linked_cert_progress);
vText = root.findViewById(R.id.linked_cert_text); vText = root.findViewById(R.id.linked_cert_text);
vKeySpinner.setShowNone(R.string.choice_select_cert);
} }
enum VerifyState { enum VerifyState {
@@ -244,7 +246,6 @@ public class LinkedIdViewFragment extends CryptoOperationFragment implements OnB
if (!isSecret) { if (!isSecret) {
showButton(2); showButton(2);
if (!vKeySpinner.isSingleEntry()) { if (!vKeySpinner.isSingleEntry()) {
vKeySpinner.setShowNone(R.string.choice_select_cert);
vKeySpinnerContainer.setVisibility(View.VISIBLE); vKeySpinnerContainer.setVisibility(View.VISIBLE);
} }
} else { } else {
@@ -264,6 +265,7 @@ public class LinkedIdViewFragment extends CryptoOperationFragment implements OnB
vProgress.setDisplayedChild(0); vProgress.setDisplayedChild(0);
vText.setText(context.getString(R.string.linked_text_confirming)); vText.setText(context.getString(R.string.linked_text_confirming));
vKeySpinnerContainer.setVisibility(View.GONE); vKeySpinnerContainer.setVisibility(View.GONE);
vButtonConfirm.setEnabled(false);
break; break;
} }
} }

View File

@@ -17,28 +17,32 @@ CREATE TABLE IF NOT EXISTS user_packets(
); );
selectUserIdsByMasterKeyId: 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 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 ) 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 ? 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; ORDER BY user_packets.master_key_id ASC,user_packets.rank ASC;
selectUserIdsByMasterKeyIdAndVerification: 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 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 ) 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 = ? 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; ORDER BY user_packets.rank ASC;
selectUserAttributesByTypeAndMasterKeyId: 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 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 ) 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 = ? 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; ORDER BY user_packets.rank ASC;
selectSpecificUserAttribute: 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 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 ) 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;