Search in sources :

Example 1 with XmppAxolotlSession

use of de.pixart.messenger.crypto.axolotl.XmppAxolotlSession in project Pix-Art-Messenger by kriztan.

the class EditAccountActivity method updateAccountInformation.

private void updateAccountInformation(boolean init) {
    if (init) {
        this.binding.accountJid.getEditableText().clear();
        if (mUsernameMode) {
            this.binding.accountJid.getEditableText().append(this.mAccount.getJid().getLocalpart());
        } else {
            this.binding.accountJid.getEditableText().append(this.mAccount.getJid().toBareJid().toString());
        }
        this.mPassword.getEditableText().clear();
        this.mPassword.getEditableText().append(this.mAccount.getPassword());
        this.mPassword.setText(this.mAccount.getPassword());
        this.mHostname.setText("");
        this.mHostname.getEditableText().append(this.mAccount.getHostname());
        this.mPort.setText("");
        this.mPort.getEditableText().append(String.valueOf(this.mAccount.getPort()));
        this.mNamePort.setVisibility(mShowOptions ? View.VISIBLE : View.GONE);
    }
    final boolean editable = !mAccount.isOptionSet(Account.OPTION_LOGGED_IN_SUCCESSFULLY);
    this.binding.accountJid.setEnabled(editable);
    this.binding.accountJid.setFocusable(editable);
    this.binding.accountJid.setFocusableInTouchMode(editable);
    if (mAccount.isOptionSet(Account.OPTION_MAGIC_CREATE) || !mAccount.isOptionSet(Account.OPTION_LOGGED_IN_SUCCESSFULLY)) {
        this.binding.accountPasswordLayout.setPasswordVisibilityToggleEnabled(true);
    } else {
        this.binding.accountPasswordLayout.setPasswordVisibilityToggleEnabled(false);
    }
    if (!mInitMode) {
        this.mAvatar.setVisibility(View.VISIBLE);
        this.mAvatar.setImageBitmap(avatarService().get(this.mAccount, getPixel(Config.AVATAR_SIZE)));
        this.binding.accountJid.setEnabled(false);
    } else {
        this.mAvatar.setVisibility(View.GONE);
    }
    if (this.mAccount.isOptionSet(Account.OPTION_REGISTER)) {
        this.mRegisterNew.setVisibility(View.VISIBLE);
        this.mRegisterNew.setChecked(true);
    } else {
        this.mRegisterNew.setVisibility(View.GONE);
        this.mRegisterNew.setChecked(false);
    }
    if (this.mAccount.isOnlineAndConnected() && !this.mFetchingAvatar) {
        Features features = this.mAccount.getXmppConnection().getFeatures();
        this.binding.stats.setVisibility(View.VISIBLE);
        boolean showBatteryWarning = !xmppConnectionService.getPushManagementService().available(mAccount) && isOptimizingBattery();
        boolean showDataSaverWarning = isAffectedByDataSaver();
        showOsOptimizationWarning(showBatteryWarning, showDataSaverWarning);
        this.mSessionEst.setText(UIHelper.readableTimeDifferenceFull(this, this.mAccount.getXmppConnection().getLastSessionEstablished()));
        if (features.rosterVersioning()) {
            this.mServerInfoRosterVersion.setText(R.string.server_info_available);
        } else {
            this.mServerInfoRosterVersion.setText(R.string.server_info_unavailable);
        }
        if (features.carbons()) {
            this.mServerInfoCarbons.setText(R.string.server_info_available);
        } else {
            this.mServerInfoCarbons.setText(R.string.server_info_unavailable);
        }
        if (features.mam()) {
            this.mServerInfoMam.setText(R.string.server_info_available);
        } else {
            this.mServerInfoMam.setText(R.string.server_info_unavailable);
        }
        if (features.csi()) {
            this.mServerInfoCSI.setText(R.string.server_info_available);
        } else {
            this.mServerInfoCSI.setText(R.string.server_info_unavailable);
        }
        if (features.blocking()) {
            this.mServerInfoBlocking.setText(R.string.server_info_available);
        } else {
            this.mServerInfoBlocking.setText(R.string.server_info_unavailable);
        }
        if (features.sm()) {
            this.mServerInfoSm.setText(R.string.server_info_available);
        } else {
            this.mServerInfoSm.setText(R.string.server_info_unavailable);
        }
        if (features.pep()) {
            AxolotlService axolotlService = this.mAccount.getAxolotlService();
            if (axolotlService != null && axolotlService.isPepBroken()) {
                this.mServerInfoPep.setText(R.string.server_info_broken);
            } else if (features.pepPublishOptions() || features.pepOmemoWhitelisted()) {
                this.mServerInfoPep.setText(R.string.server_info_available);
            } else {
                this.mServerInfoPep.setText(R.string.server_info_partial);
            }
        } else {
            this.mServerInfoPep.setText(R.string.server_info_unavailable);
        }
        if (features.httpUpload(0)) {
            this.mServerInfoHttpUpload.setText(R.string.server_info_available);
        } else {
            this.mServerInfoHttpUpload.setText(R.string.server_info_unavailable);
        }
        this.mPushRow.setVisibility(xmppConnectionService.getPushManagementService().isStub() ? View.GONE : View.VISIBLE);
        if (xmppConnectionService.getPushManagementService().available(mAccount)) {
            this.mServerInfoPush.setText(R.string.server_info_available);
        } else {
            this.mServerInfoPush.setText(R.string.server_info_unavailable);
        }
        final long pgpKeyId = this.mAccount.getPgpId();
        if (pgpKeyId != 0 && Config.supportOpenPgp()) {
            OnClickListener openPgp = view -> launchOpenKeyChain(pgpKeyId);
            OnClickListener delete = view -> showDeletePgpDialog();
            this.mPgpFingerprintBox.setVisibility(View.VISIBLE);
            this.mPgpFingerprint.setText(OpenPgpUtils.convertKeyIdToHex(pgpKeyId));
            this.mPgpFingerprint.setOnClickListener(openPgp);
            if ("pgp".equals(messageFingerprint)) {
                this.getmPgpFingerprintDesc.setTextAppearance(this, R.style.TextAppearance_Conversations_Caption_Highlight);
            }
            this.getmPgpFingerprintDesc.setOnClickListener(openPgp);
            this.mPgpDeleteFingerprintButton.setOnClickListener(delete);
        } else {
            this.mPgpFingerprintBox.setVisibility(View.GONE);
        }
        final String otrFingerprint = this.mAccount.getOtrFingerprint();
        if (otrFingerprint != null && Config.supportOtr()) {
            if ("otr".equals(messageFingerprint)) {
                this.mOtrFingerprintDesc.setTextColor(ContextCompat.getColor(this, R.color.accent));
            }
            this.mOtrFingerprintBox.setVisibility(View.VISIBLE);
            this.mOtrFingerprint.setText(CryptoHelper.prettifyFingerprint(otrFingerprint));
            this.mOtrFingerprintToClipboardButton.setVisibility(View.VISIBLE);
            this.mOtrFingerprintToClipboardButton.setOnClickListener(v -> {
                if (copyTextToClipboard(CryptoHelper.prettifyFingerprint(otrFingerprint), R.string.otr_fingerprint)) {
                    Toast.makeText(EditAccountActivity.this, R.string.toast_message_otr_fingerprint, Toast.LENGTH_SHORT).show();
                }
            });
        } else {
            this.mOtrFingerprintBox.setVisibility(View.GONE);
        }
        final String ownAxolotlFingerprint = this.mAccount.getAxolotlService().getOwnFingerprint();
        if (ownAxolotlFingerprint != null && Config.supportOmemo()) {
            this.mAxolotlFingerprintBox.setVisibility(View.VISIBLE);
            if (ownAxolotlFingerprint.equals(messageFingerprint)) {
                this.mOwnFingerprintDesc.setTextAppearance(this, R.style.TextAppearance_Conversations_Caption_Highlight);
                this.mOwnFingerprintDesc.setText(R.string.omemo_fingerprint_selected_message);
            } else {
                this.mOwnFingerprintDesc.setTextAppearance(this, R.style.TextAppearance_Conversations_Caption);
                this.mOwnFingerprintDesc.setText(R.string.omemo_fingerprint);
            }
            this.mAxolotlFingerprint.setText(CryptoHelper.prettifyFingerprint(ownAxolotlFingerprint.substring(2)));
            this.mAxolotlFingerprintToClipboardButton.setVisibility(View.VISIBLE);
            this.mAxolotlFingerprintToClipboardButton.setOnClickListener(v -> copyOmemoFingerprint(ownAxolotlFingerprint));
        } else {
            this.mAxolotlFingerprintBox.setVisibility(View.GONE);
        }
        boolean hasKeys = false;
        keys.removeAllViews();
        for (XmppAxolotlSession session : mAccount.getAxolotlService().findOwnSessions()) {
            if (!session.getTrust().isCompromised()) {
                boolean highlight = session.getFingerprint().equals(messageFingerprint);
                addFingerprintRow(keys, session, highlight);
                hasKeys = true;
            }
        }
        if (hasKeys && Config.supportOmemo()) {
            this.binding.otherDeviceKeysCard.setVisibility(View.VISIBLE);
            Set<Integer> otherDevices = mAccount.getAxolotlService().getOwnDeviceIds();
            if (otherDevices == null || otherDevices.isEmpty()) {
                mClearDevicesButton.setVisibility(View.GONE);
            } else {
                mClearDevicesButton.setVisibility(View.VISIBLE);
            }
        } else {
            this.binding.otherDeviceKeysCard.setVisibility(View.GONE);
        }
    } else {
        final TextInputLayout errorLayout;
        if (this.mAccount.errorStatus()) {
            if (this.mAccount.getStatus() == Account.State.UNAUTHORIZED) {
                errorLayout = this.mPasswordLayout;
            } else if (mShowOptions && this.mAccount.getStatus() == Account.State.SERVER_NOT_FOUND && this.mHostname.getText().length() > 0) {
                errorLayout = this.mHostnameLayout;
            } else {
                errorLayout = this.mAccountJidLayout;
            }
            errorLayout.setError(getString(this.mAccount.getStatus().getReadableId()));
            if (init || !accountInfoEdited()) {
                errorLayout.requestFocus();
            }
        } else {
            errorLayout = null;
        }
        removeErrorsOnAllBut(errorLayout);
        this.binding.stats.setVisibility(View.GONE);
        this.binding.otherDeviceKeysCard.setVisibility(View.GONE);
    }
}
Also used : Builder(android.app.AlertDialog.Builder) ImageButton(android.widget.ImageButton) LinearLayout(android.widget.LinearLayout) Arrays(java.util.Arrays) Bundle(android.os.Bundle) KeyChain(android.security.KeyChain) URL(java.net.URL) Uri(android.net.Uri) ImageView(android.widget.ImageView) OnCheckedChangeListener(android.widget.CompoundButton.OnCheckedChangeListener) PendingIntent(android.app.PendingIntent) Account(de.pixart.messenger.entities.Account) TextInputLayout(android.support.design.widget.TextInputLayout) Jid(de.pixart.messenger.xmpp.jid.Jid) CheckBox(android.widget.CheckBox) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Handler(android.os.Handler) View(android.view.View) Button(android.widget.Button) XmppAxolotlSession(de.pixart.messenger.crypto.axolotl.XmppAxolotlSession) PreferenceManager(android.preference.PreferenceManager) XmppUri(de.pixart.messenger.utils.XmppUri) Log(android.util.Log) Presence(de.pixart.messenger.entities.Presence) ActivityEditAccountBinding(de.pixart.messenger.databinding.ActivityEditAccountBinding) XmppConnectionService(de.pixart.messenger.services.XmppConnectionService) TableLayout(android.widget.TableLayout) KeyChainAliasCallback(android.security.KeyChainAliasCallback) ContextCompat(android.support.v4.content.ContextCompat) Set(java.util.Set) BarcodeProvider(de.pixart.messenger.services.BarcodeProvider) PresenceTemplate(de.pixart.messenger.entities.PresenceTemplate) List(java.util.List) TextView(android.widget.TextView) ActivityNotFoundException(android.content.ActivityNotFoundException) RelativeLayout(android.widget.RelativeLayout) CryptoHelper(de.pixart.messenger.utils.CryptoHelper) AxolotlService(de.pixart.messenger.crypto.axolotl.AxolotlService) OnCaptchaRequested(de.pixart.messenger.services.XmppConnectionService.OnCaptchaRequested) XmppConnection(de.pixart.messenger.xmpp.XmppConnection) TextWatcher(android.text.TextWatcher) UIHelper(de.pixart.messenger.utils.UIHelper) OnKeyStatusUpdated(de.pixart.messenger.xmpp.OnKeyStatusUpdated) Element(de.pixart.messenger.xml.Element) InvalidJidException(de.pixart.messenger.xmpp.jid.InvalidJidException) Intent(android.content.Intent) Editable(android.text.Editable) MenuItem(android.view.MenuItem) IntentSender(android.content.IntentSender) R(de.pixart.messenger.R) Toast(android.widget.Toast) Menu(android.view.Menu) Settings(android.provider.Settings) Features(de.pixart.messenger.xmpp.XmppConnection.Features) Config(de.pixart.messenger.Config) ActionBar(android.support.v7.app.ActionBar) OnAccountUpdate(de.pixart.messenger.services.XmppConnectionService.OnAccountUpdate) CompoundButton(android.widget.CompoundButton) OnUpdateBlocklist(de.pixart.messenger.xmpp.OnUpdateBlocklist) Avatar(de.pixart.messenger.xmpp.pep.Avatar) DialogPresenceBinding(de.pixart.messenger.databinding.DialogPresenceBinding) KnownHostsAdapter(de.pixart.messenger.ui.adapter.KnownHostsAdapter) AlertDialog(android.support.v7.app.AlertDialog) SharedPreferences(android.content.SharedPreferences) PendingItem(de.pixart.messenger.ui.util.PendingItem) Bitmap(android.graphics.Bitmap) DataBindingUtil(android.databinding.DataBindingUtil) TableRow(android.widget.TableRow) Data(de.pixart.messenger.xmpp.forms.Data) Activity(android.app.Activity) EditText(android.widget.EditText) OnClickListener(android.view.View.OnClickListener) OpenPgpUtils(org.openintents.openpgp.util.OpenPgpUtils) PresenceTemplateAdapter(de.pixart.messenger.ui.adapter.PresenceTemplateAdapter) XmppAxolotlSession(de.pixart.messenger.crypto.axolotl.XmppAxolotlSession) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) AxolotlService(de.pixart.messenger.crypto.axolotl.AxolotlService) OnClickListener(android.view.View.OnClickListener) Features(de.pixart.messenger.xmpp.XmppConnection.Features) TextInputLayout(android.support.design.widget.TextInputLayout)

Example 2 with XmppAxolotlSession

use of de.pixart.messenger.crypto.axolotl.XmppAxolotlSession in project Pix-Art-Messenger by kriztan.

the class ContactDetailsActivity method populateView.

private void populateView() {
    if (contact == null) {
        return;
    }
    long mutedTill = mConversation.getLongAttribute(Conversation.ATTRIBUTE_MUTED_TILL, 0);
    if (mutedTill == Long.MAX_VALUE) {
        mNotifyStatusText.setText(R.string.notify_never);
        mNotifyStatusButton.setImageResource(R.drawable.ic_notifications_off_grey600_24dp);
    } else if (System.currentTimeMillis() < mutedTill) {
        mNotifyStatusText.setText(R.string.notify_paused);
        mNotifyStatusButton.setImageResource(R.drawable.ic_notifications_paused_grey600_24dp);
    } else {
        mNotifyStatusButton.setImageResource(R.drawable.ic_notifications_grey600_24dp);
        mNotifyStatusText.setText(R.string.notify_on_all_messages);
    }
    if (getSupportActionBar() != null) {
        final ActionBar ab = getSupportActionBar();
        if (ab != null) {
            ab.setCustomView(R.layout.ab_title);
            ab.setDisplayShowCustomEnabled(true);
            TextView abtitle = findViewById(android.R.id.text1);
            TextView absubtitle = findViewById(android.R.id.text2);
            abtitle.setText(contact.getDisplayName());
            abtitle.setSelected(true);
            abtitle.setClickable(false);
            absubtitle.setVisibility(View.GONE);
            absubtitle.setClickable(false);
        }
    }
    invalidateOptionsMenu();
    setTitle(contact.getDisplayName());
    if (contact.getServer().toString().toLowerCase().equals(accountJid.getDomainpart().toLowerCase())) {
        binding.contactDisplayName.setText(contact.getDisplayName());
    } else {
        binding.contactDisplayName.setText(contact.getDisplayJid());
    }
    if (contact.showInRoster()) {
        binding.detailsSendPresence.setVisibility(View.VISIBLE);
        binding.detailsReceivePresence.setVisibility(View.VISIBLE);
        binding.addContactButton.setVisibility(View.VISIBLE);
        binding.addContactButton.setText(getString(R.string.action_delete_contact));
        binding.addContactButton.getBackground().setColorFilter(getWarningButtonColor(), PorterDuff.Mode.MULTIPLY);
        binding.detailsSendPresence.setOnCheckedChangeListener(null);
        binding.detailsReceivePresence.setOnCheckedChangeListener(null);
        final AlertDialog.Builder deleteFromRosterDialog = new AlertDialog.Builder(ContactDetailsActivity.this);
        binding.addContactButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View view) {
                deleteFromRosterDialog.setNegativeButton(getString(R.string.cancel), null);
                deleteFromRosterDialog.setTitle(getString(R.string.action_delete_contact)).setMessage(getString(R.string.remove_contact_text, contact.getDisplayJid())).setPositiveButton(getString(R.string.delete), removeFromRoster).create().show();
            }
        });
        binding.detailsSendPresence.setOnCheckedChangeListener(null);
        binding.detailsReceivePresence.setOnCheckedChangeListener(null);
        List<String> statusMessages = contact.getPresences().getStatusMessages();
        if (statusMessages.size() == 0) {
            binding.statusMessage.setVisibility(View.GONE);
        } else {
            StringBuilder builder = new StringBuilder();
            binding.statusMessage.setVisibility(View.VISIBLE);
            int s = statusMessages.size();
            for (int i = 0; i < s; ++i) {
                if (s > 1) {
                    builder.append("• ");
                }
                builder.append(statusMessages.get(i));
                if (i < s - 1) {
                    builder.append("\n");
                }
            }
            binding.statusMessage.setText(builder);
        }
        String resources = contact.getPresences().getMostAvailableResource();
        if (resources.length() == 0) {
            binding.resource.setVisibility(View.GONE);
        } else {
            binding.resource.setVisibility(View.VISIBLE);
            binding.resource.setText(resources);
        }
        if (contact.getOption(Contact.Options.FROM)) {
            binding.detailsSendPresence.setText(R.string.send_presence_updates);
            binding.detailsSendPresence.setChecked(true);
        } else if (contact.getOption(Contact.Options.PENDING_SUBSCRIPTION_REQUEST)) {
            binding.detailsSendPresence.setChecked(false);
            binding.detailsSendPresence.setText(R.string.send_presence_updates);
        } else {
            binding.detailsSendPresence.setText(R.string.preemptively_grant);
            if (contact.getOption(Contact.Options.PREEMPTIVE_GRANT)) {
                binding.detailsSendPresence.setChecked(true);
            } else {
                binding.detailsSendPresence.setChecked(false);
            }
        }
        if (contact.getOption(Contact.Options.TO)) {
            binding.detailsReceivePresence.setText(R.string.receive_presence_updates);
            binding.detailsReceivePresence.setChecked(true);
        } else {
            binding.detailsReceivePresence.setText(R.string.ask_for_presence_updates);
            if (contact.getOption(Contact.Options.ASKING)) {
                binding.detailsReceivePresence.setChecked(true);
            } else {
                binding.detailsReceivePresence.setChecked(false);
            }
        }
        if (contact.getAccount().isOnlineAndConnected()) {
            binding.detailsReceivePresence.setEnabled(true);
            binding.detailsSendPresence.setEnabled(true);
        } else {
            binding.detailsReceivePresence.setEnabled(false);
            binding.detailsSendPresence.setEnabled(false);
        }
        binding.detailsSendPresence.setOnCheckedChangeListener(this.mOnSendCheckedChange);
        binding.detailsReceivePresence.setOnCheckedChangeListener(this.mOnReceiveCheckedChange);
    } else {
        binding.addContactButton.setVisibility(View.VISIBLE);
        binding.addContactButton.setText(getString(R.string.add_contact));
        binding.addContactButton.getBackground().clearColorFilter();
        binding.addContactButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View view) {
                showAddToRosterDialog(contact);
            }
        });
        binding.detailsSendPresence.setVisibility(View.GONE);
        binding.detailsReceivePresence.setVisibility(View.GONE);
        binding.statusMessage.setVisibility(View.GONE);
    }
    if (contact.isBlocked() && !this.showDynamicTags) {
        binding.detailsLastseen.setVisibility(View.VISIBLE);
        binding.detailsLastseen.setText(R.string.contact_blocked);
    } else {
        if (showLastSeen && contact.getLastseen() > 0 && contact.getPresences().allOrNonSupport(Namespace.IDLE)) {
            binding.detailsLastseen.setVisibility(View.VISIBLE);
            binding.detailsLastseen.setText(UIHelper.lastseen(getApplicationContext(), contact.isActive(), contact.getLastseen()));
        } else {
            binding.detailsLastseen.setVisibility(View.GONE);
        }
    }
    if (contact.getPresences().size() > 1) {
        binding.detailsContactjid.setText(contact.getDisplayJid() + " (" + contact.getPresences().size() + ")");
    } else {
        binding.detailsContactjid.setText(contact.getDisplayJid());
    }
    String account;
    if (Config.DOMAIN_LOCK != null) {
        account = contact.getAccount().getJid().getLocalpart();
    } else {
        account = contact.getAccount().getJid().toBareJid().toString();
    }
    binding.detailsAccount.setText(getString(R.string.using_account, account));
    binding.detailsContactBadge.setImageBitmap(avatarService().get(contact, getPixel(Config.AVATAR_SIZE)));
    binding.detailsContactBadge.setOnClickListener(this.onBadgeClick);
    if (xmppConnectionService.multipleAccounts()) {
        binding.detailsAccount.setVisibility(View.VISIBLE);
    } else {
        binding.detailsAccount.setVisibility(View.GONE);
    }
    binding.detailsContactKeys.removeAllViews();
    boolean hasKeys = false;
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if (Config.supportOtr()) {
        for (final String otrFingerprint : contact.getOtrFingerprints()) {
            hasKeys = true;
            View view = inflater.inflate(R.layout.contact_key, binding.detailsContactKeys, false);
            TextView key = view.findViewById(R.id.key);
            TextView keyType = view.findViewById(R.id.key_type);
            ImageButton removeButton = view.findViewById(R.id.button_remove);
            removeButton.setVisibility(View.VISIBLE);
            key.setText(CryptoHelper.prettifyFingerprint(otrFingerprint));
            if (otrFingerprint != null && otrFingerprint.equalsIgnoreCase(messageFingerprint)) {
                keyType.setText(R.string.otr_fingerprint_selected_message);
                keyType.setTextColor(ContextCompat.getColor(this, R.color.accent));
            } else {
                keyType.setText(R.string.otr_fingerprint);
            }
            binding.detailsContactKeys.addView(view);
            removeButton.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    confirmToDeleteFingerprint(otrFingerprint);
                }
            });
        }
    }
    final AxolotlService axolotlService = contact.getAccount().getAxolotlService();
    if (Config.supportOmemo() && axolotlService != null) {
        boolean skippedInactive = false;
        boolean showsInactive = false;
        for (final XmppAxolotlSession session : axolotlService.findSessionsForContact(contact)) {
            final FingerprintStatus trust = session.getTrust();
            hasKeys |= !trust.isCompromised();
            if (!trust.isActive()) {
                if (showInactiveOmemo) {
                    showsInactive = true;
                } else {
                    skippedInactive = true;
                    continue;
                }
            }
            if (!trust.isCompromised()) {
                boolean highlight = session.getFingerprint().equals(messageFingerprint);
                addFingerprintRow(binding.detailsContactKeys, session, highlight);
            }
        }
        if (showsInactive || skippedInactive) {
            binding.showInactiveDevices.setText(showsInactive ? R.string.hide_inactive_devices : R.string.show_inactive_devices);
            binding.showInactiveDevices.setVisibility(View.VISIBLE);
        } else {
            binding.showInactiveDevices.setVisibility(View.GONE);
        }
    } else {
        binding.showInactiveDevices.setVisibility(View.GONE);
    }
    binding.scanButton.setVisibility(hasKeys ? View.VISIBLE : View.GONE);
    if (hasKeys) {
        binding.scanButton.setOnClickListener((v) -> ScanActivity.scan(this));
    }
    if (Config.supportOpenPgp() && contact.getPgpKeyId() != 0) {
        hasKeys = true;
        View view = inflater.inflate(R.layout.contact_key, binding.detailsContactKeys, false);
        TextView key = view.findViewById(R.id.key);
        TextView keyType = view.findViewById(R.id.key_type);
        keyType.setText(R.string.openpgp_key_id);
        if ("pgp".equals(messageFingerprint)) {
            keyType.setTextColor(ContextCompat.getColor(this, R.color.accent));
        }
        key.setText(OpenPgpUtils.convertKeyIdToHex(contact.getPgpKeyId()));
        final OnClickListener openKey = new OnClickListener() {

            @Override
            public void onClick(View v) {
                launchOpenKeyChain(contact.getPgpKeyId());
            }
        };
        view.setOnClickListener(openKey);
        key.setOnClickListener(openKey);
        keyType.setOnClickListener(openKey);
        binding.detailsContactKeys.addView(view);
    }
    binding.keysWrapper.setVisibility(hasKeys ? View.VISIBLE : View.GONE);
    List<ListItem.Tag> tagList = contact.getTags(this);
    if (tagList.size() == 0 || !this.showDynamicTags) {
        binding.tags.setVisibility(View.GONE);
    } else {
        binding.tags.setVisibility(View.VISIBLE);
        binding.tags.removeAllViewsInLayout();
        for (final ListItem.Tag tag : tagList) {
            final TextView tv = (TextView) inflater.inflate(R.layout.list_item_tag, binding.tags, false);
            tv.setText(tag.getName());
            tv.setBackgroundColor(tag.getColor());
            binding.tags.addView(tv);
        }
    }
}
Also used : AlertDialog(android.support.v7.app.AlertDialog) FingerprintStatus(de.pixart.messenger.crypto.axolotl.FingerprintStatus) View(android.view.View) TextView(android.widget.TextView) XmppAxolotlSession(de.pixart.messenger.crypto.axolotl.XmppAxolotlSession) AxolotlService(de.pixart.messenger.crypto.axolotl.AxolotlService) ImageButton(android.widget.ImageButton) LayoutInflater(android.view.LayoutInflater) OnClickListener(android.view.View.OnClickListener) TextView(android.widget.TextView) ListItem(de.pixart.messenger.entities.ListItem) ActionBar(android.support.v7.app.ActionBar)

Example 3 with XmppAxolotlSession

use of de.pixart.messenger.crypto.axolotl.XmppAxolotlSession in project Pix-Art-Messenger by kriztan.

the class Account method getFingerprints.

private List<XmppUri.Fingerprint> getFingerprints() {
    ArrayList<XmppUri.Fingerprint> fingerprints = new ArrayList<>();
    final String otr = this.getOtrFingerprint();
    if (otr != null) {
        fingerprints.add(new XmppUri.Fingerprint(XmppUri.FingerprintType.OTR, otr));
    }
    if (axolotlService == null) {
        return fingerprints;
    }
    fingerprints.add(new XmppUri.Fingerprint(XmppUri.FingerprintType.OMEMO, axolotlService.getOwnFingerprint().substring(2), axolotlService.getOwnDeviceId()));
    for (XmppAxolotlSession session : axolotlService.findOwnSessions()) {
        if (session.getTrust().isVerified() && session.getTrust().isActive()) {
            fingerprints.add(new XmppUri.Fingerprint(XmppUri.FingerprintType.OMEMO, session.getFingerprint().substring(2).replaceAll("\\s", ""), session.getRemoteAddress().getDeviceId()));
        }
    }
    return fingerprints;
}
Also used : XmppAxolotlSession(de.pixart.messenger.crypto.axolotl.XmppAxolotlSession) XmppUri(de.pixart.messenger.utils.XmppUri) ArrayList(java.util.ArrayList) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList)

Aggregations

ActionBar (android.support.v7.app.ActionBar)2 AlertDialog (android.support.v7.app.AlertDialog)2 View (android.view.View)2 OnClickListener (android.view.View.OnClickListener)2 ImageButton (android.widget.ImageButton)2 TextView (android.widget.TextView)2 XmppAxolotlSession (de.pixart.messenger.crypto.axolotl.XmppAxolotlSession)2 Activity (android.app.Activity)1 Builder (android.app.AlertDialog.Builder)1 PendingIntent (android.app.PendingIntent)1 ActivityNotFoundException (android.content.ActivityNotFoundException)1 Intent (android.content.Intent)1 IntentSender (android.content.IntentSender)1 SharedPreferences (android.content.SharedPreferences)1 DataBindingUtil (android.databinding.DataBindingUtil)1 Bitmap (android.graphics.Bitmap)1 Uri (android.net.Uri)1 Bundle (android.os.Bundle)1 Handler (android.os.Handler)1 PreferenceManager (android.preference.PreferenceManager)1