Search in sources :

Example 1 with KeysCardBinding

use of eu.siacs.conversations.databinding.KeysCardBinding in project Conversations by siacs.

the class TrustKeysActivity method populateView.

private void populateView() {
    setTitle(getString(R.string.trust_omemo_fingerprints));
    binding.ownKeysDetails.removeAllViews();
    binding.foreignKeys.removeAllViews();
    boolean hasOwnKeys = false;
    boolean hasForeignKeys = false;
    for (final String fingerprint : ownKeysToTrust.keySet()) {
        hasOwnKeys = true;
        addFingerprintRowWithListeners(binding.ownKeysDetails, mAccount, fingerprint, false, FingerprintStatus.createActive(ownKeysToTrust.get(fingerprint)), false, false, (buttonView, isChecked) -> {
            ownKeysToTrust.put(fingerprint, isChecked);
        // own fingerprints have no impact on locked status.
        });
    }
    synchronized (this.foreignKeysToTrust) {
        for (Map.Entry<Jid, Map<String, Boolean>> entry : foreignKeysToTrust.entrySet()) {
            hasForeignKeys = true;
            KeysCardBinding keysCardBinding = DataBindingUtil.inflate(getLayoutInflater(), R.layout.keys_card, binding.foreignKeys, false);
            final Jid jid = entry.getKey();
            keysCardBinding.foreignKeysTitle.setText(IrregularUnicodeDetector.style(this, jid));
            keysCardBinding.foreignKeysTitle.setOnClickListener(v -> switchToContactDetails(mAccount.getRoster().getContact(jid)));
            final Map<String, Boolean> fingerprints = entry.getValue();
            for (final String fingerprint : fingerprints.keySet()) {
                addFingerprintRowWithListeners(keysCardBinding.foreignKeysDetails, mAccount, fingerprint, false, FingerprintStatus.createActive(fingerprints.get(fingerprint)), false, false, (buttonView, isChecked) -> {
                    fingerprints.put(fingerprint, isChecked);
                    lockOrUnlockAsNeeded();
                });
            }
            if (fingerprints.size() == 0) {
                keysCardBinding.noKeysToAccept.setVisibility(View.VISIBLE);
                if (hasNoOtherTrustedKeys(jid)) {
                    if (!mAccount.getRoster().getContact(jid).mutualPresenceSubscription()) {
                        keysCardBinding.noKeysToAccept.setText(R.string.error_no_keys_to_trust_presence);
                    } else {
                        keysCardBinding.noKeysToAccept.setText(R.string.error_no_keys_to_trust_server_error);
                    }
                } else {
                    keysCardBinding.noKeysToAccept.setText(getString(R.string.no_keys_just_confirm, mAccount.getRoster().getContact(jid).getDisplayName()));
                }
            } else {
                keysCardBinding.noKeysToAccept.setVisibility(View.GONE);
            }
            binding.foreignKeys.addView(keysCardBinding.foreignKeysCard);
        }
    }
    if ((hasOwnKeys || foreignActuallyHasKeys()) && isCameraFeatureAvailable() && mUseCameraHintShown.compareAndSet(false, true)) {
        showCameraToast();
    }
    binding.ownKeysTitle.setText(mAccount.getJid().asBareJid().toEscapedString());
    binding.ownKeysCard.setVisibility(hasOwnKeys ? View.VISIBLE : View.GONE);
    binding.foreignKeys.setVisibility(hasForeignKeys ? View.VISIBLE : View.GONE);
    if (hasPendingKeyFetches()) {
        setFetching();
        lock();
    } else {
        if (!hasForeignKeys && hasNoOtherTrustedKeys()) {
            binding.keyErrorMessageCard.setVisibility(View.VISIBLE);
            boolean lastReportWasError = lastFetchReport == AxolotlService.FetchStatus.ERROR;
            boolean errorFetchingBundle = mAccount.getAxolotlService().fetchMapHasErrors(contactJids);
            boolean errorFetchingDeviceList = mAccount.getAxolotlService().hasErrorFetchingDeviceList(contactJids);
            boolean anyWithoutMutualPresenceSubscription = anyWithoutMutualPresenceSubscription(contactJids);
            if (errorFetchingDeviceList) {
                binding.keyErrorMessage.setVisibility(View.VISIBLE);
                binding.keyErrorMessage.setText(R.string.error_trustkey_device_list);
            } else if (errorFetchingBundle || lastReportWasError) {
                binding.keyErrorMessage.setVisibility(View.VISIBLE);
                binding.keyErrorMessage.setText(R.string.error_trustkey_bundle);
            } else {
                binding.keyErrorMessage.setVisibility(View.GONE);
            }
            this.binding.keyErrorHintMutual.setVisibility(anyWithoutMutualPresenceSubscription ? View.VISIBLE : View.GONE);
            Contact contact = mAccount.getRoster().getContact(contactJids.get(0));
            binding.keyErrorGeneral.setText(getString(R.string.error_trustkey_general, getString(R.string.app_name), contact.getDisplayName()));
            binding.ownKeysDetails.removeAllViews();
            if (OmemoSetting.isAlways()) {
                binding.disableButton.setVisibility(View.GONE);
            } else {
                binding.disableButton.setVisibility(View.VISIBLE);
                binding.disableButton.setOnClickListener(this::disableEncryptionDialog);
            }
            binding.ownKeysCard.setVisibility(View.GONE);
            binding.foreignKeys.removeAllViews();
            binding.foreignKeys.setVisibility(View.GONE);
        }
        lockOrUnlockAsNeeded();
        setDone();
    }
}
Also used : Jid(eu.siacs.conversations.xmpp.Jid) KeysCardBinding(eu.siacs.conversations.databinding.KeysCardBinding) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) HashMap(java.util.HashMap) Map(java.util.Map) Contact(eu.siacs.conversations.entities.Contact)

Aggregations

KeysCardBinding (eu.siacs.conversations.databinding.KeysCardBinding)1 Contact (eu.siacs.conversations.entities.Contact)1 Jid (eu.siacs.conversations.xmpp.Jid)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)1