Search in sources :

Example 1 with AxolotlService

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

the class XmppConnectionService method verifyFingerprints.

public boolean verifyFingerprints(Account account, List<XmppUri.Fingerprint> fingerprints) {
    final AxolotlService axolotlService = account.getAxolotlService();
    boolean verifiedSomething = false;
    for (XmppUri.Fingerprint fp : fingerprints) {
        if (fp.type == XmppUri.FingerprintType.OMEMO) {
            String fingerprint = "05" + fp.fingerprint.replaceAll("\\s", "");
            Log.d(Config.LOGTAG, "trying to verify own fp=" + fingerprint);
            FingerprintStatus fingerprintStatus = axolotlService.getFingerprintTrust(fingerprint);
            if (fingerprintStatus != null) {
                if (!fingerprintStatus.isVerified()) {
                    axolotlService.setFingerprintTrust(fingerprint, fingerprintStatus.toVerified());
                    verifiedSomething = true;
                }
            } else {
                axolotlService.preVerifyFingerprint(account, fingerprint);
                verifiedSomething = true;
            }
        }
    }
    return verifiedSomething;
}
Also used : AxolotlService(de.pixart.messenger.crypto.axolotl.AxolotlService) XmppUri(de.pixart.messenger.utils.XmppUri) FingerprintStatus(de.pixart.messenger.crypto.axolotl.FingerprintStatus)

Example 2 with AxolotlService

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

the class PresenceParser method processConferencePresence.

private void processConferencePresence(PresencePacket packet, Conversation conversation) {
    MucOptions mucOptions = conversation.getMucOptions();
    final Jid jid = conversation.getAccount().getJid();
    final Jid from = packet.getFrom();
    if (!from.isBareJid()) {
        final String type = packet.getAttribute("type");
        final Element x = packet.findChild("x", "http://jabber.org/protocol/muc#user");
        Avatar avatar = Avatar.parsePresence(packet.findChild("x", "vcard-temp:x:update"));
        final List<String> codes = getStatusCodes(x);
        if (type == null) {
            if (x != null) {
                Element item = x.findChild("item");
                if (item != null && !from.isBareJid()) {
                    mucOptions.setError(MucOptions.Error.NONE);
                    MucOptions.User user = parseItem(conversation, item, from);
                    if (codes.contains(MucOptions.STATUS_CODE_SELF_PRESENCE) || (codes.contains(MucOptions.STATUS_CODE_ROOM_CREATED) && jid.equals(item.getAttributeAsJid("jid")))) {
                        if (mucOptions.setOnline()) {
                            mXmppConnectionService.getAvatarService().clear(mucOptions);
                        }
                        mucOptions.setSelf(user);
                        mXmppConnectionService.persistSelfNick(user);
                        invokeRenameListener(mucOptions, true);
                    }
                    boolean isNew = mucOptions.updateUser(user);
                    final AxolotlService axolotlService = conversation.getAccount().getAxolotlService();
                    Contact contact = user.getContact();
                    if (isNew && user.getRealJid() != null && mucOptions.isPrivateAndNonAnonymous() && (contact == null || !contact.mutualPresenceSubscription()) && axolotlService.hasEmptyDeviceList(user.getRealJid())) {
                        axolotlService.fetchDeviceIds(user.getRealJid());
                    }
                    if (codes.contains(MucOptions.STATUS_CODE_ROOM_CREATED) && mucOptions.autoPushConfiguration()) {
                        Log.d(Config.LOGTAG, mucOptions.getAccount().getJid().toBareJid() + ": room '" + mucOptions.getConversation().getJid().toBareJid() + "' created. pushing default configuration");
                        mXmppConnectionService.pushConferenceConfiguration(mucOptions.getConversation(), IqGenerator.defaultRoomConfiguration(), null);
                    }
                    if (mXmppConnectionService.getPgpEngine() != null) {
                        Element signed = packet.findChild("x", "jabber:x:signed");
                        if (signed != null) {
                            Element status = packet.findChild("status");
                            String msg = status == null ? "" : status.getContent();
                            long keyId = mXmppConnectionService.getPgpEngine().fetchKeyId(mucOptions.getAccount(), msg, signed.getContent());
                            if (keyId != 0) {
                                user.setPgpKeyId(keyId);
                            }
                        }
                    }
                    if (avatar != null) {
                        avatar.owner = from;
                        if (mXmppConnectionService.getFileBackend().isAvatarCached(avatar)) {
                            if (user.setAvatar(avatar)) {
                                mXmppConnectionService.getAvatarService().clear(user);
                            }
                        } else if (mXmppConnectionService.isDataSaverDisabled()) {
                            mXmppConnectionService.fetchAvatar(mucOptions.getAccount(), avatar);
                        }
                    }
                }
            }
        } else if (type.equals("unavailable")) {
            if (codes.contains(MucOptions.STATUS_CODE_SHUTDOWN) && from.equals(mucOptions.getSelf().getFullJid())) {
                mucOptions.setError(MucOptions.Error.SHUTDOWN);
            } else if (codes.contains(MucOptions.STATUS_CODE_SELF_PRESENCE)) {
                if (codes.contains(MucOptions.STATUS_CODE_KICKED)) {
                    mucOptions.setError(MucOptions.Error.KICKED);
                } else if (codes.contains(MucOptions.STATUS_CODE_BANNED)) {
                    mucOptions.setError(MucOptions.Error.BANNED);
                } else if (codes.contains(MucOptions.STATUS_CODE_LOST_MEMBERSHIP)) {
                    mucOptions.setError(MucOptions.Error.MEMBERS_ONLY);
                } else if (codes.contains(MucOptions.STATUS_CODE_AFFILIATION_CHANGE)) {
                    mucOptions.setError(MucOptions.Error.MEMBERS_ONLY);
                } else if (codes.contains(MucOptions.STATUS_CODE_SHUTDOWN)) {
                    mucOptions.setError(MucOptions.Error.SHUTDOWN);
                } else if (!codes.contains(MucOptions.STATUS_CODE_CHANGED_NICK)) {
                    mucOptions.setError(MucOptions.Error.UNKNOWN);
                    Log.d(Config.LOGTAG, "unknown error in conference: " + packet);
                }
            } else if (!from.isBareJid()) {
                Element item = x.findChild("item");
                if (item != null) {
                    mucOptions.updateUser(parseItem(conversation, item, from));
                }
                MucOptions.User user = mucOptions.deleteUser(from);
                if (user != null) {
                    mXmppConnectionService.getAvatarService().clear(user);
                }
            }
        } else if (type.equals("error")) {
            final Element error = packet.findChild("error");
            if (error == null) {
                return;
            }
            if (error.hasChild("conflict")) {
                if (mucOptions.online()) {
                    invokeRenameListener(mucOptions, false);
                } else {
                    mucOptions.setError(MucOptions.Error.NICK_IN_USE);
                }
            } else if (error.hasChild("not-authorized")) {
                mucOptions.setError(MucOptions.Error.PASSWORD_REQUIRED);
            } else if (error.hasChild("forbidden")) {
                mucOptions.setError(MucOptions.Error.BANNED);
            } else if (error.hasChild("registration-required")) {
                mucOptions.setError(MucOptions.Error.MEMBERS_ONLY);
            } else {
                final String text = error.findChildContent("text");
                if (text != null && text.contains("attribute 'to'")) {
                    if (mucOptions.online()) {
                        invokeRenameListener(mucOptions, false);
                    } else {
                        mucOptions.setError(MucOptions.Error.INVALID_NICK);
                    }
                } else {
                    mucOptions.setError(MucOptions.Error.UNKNOWN);
                    Log.d(Config.LOGTAG, "unknown error in conference: " + packet);
                }
            }
        }
    }
}
Also used : AxolotlService(de.pixart.messenger.crypto.axolotl.AxolotlService) MucOptions(de.pixart.messenger.entities.MucOptions) Jid(de.pixart.messenger.xmpp.jid.Jid) Element(de.pixart.messenger.xml.Element) Avatar(de.pixart.messenger.xmpp.pep.Avatar) Contact(de.pixart.messenger.entities.Contact)

Example 3 with AxolotlService

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

the class Account method setJid.

public boolean setJid(final Jid next) {
    final Jid previousFull = this.jid;
    final Jid prev = this.jid != null ? this.jid.toBareJid() : null;
    final boolean changed = prev == null || (next != null && !prev.equals(next.toBareJid()));
    if (changed) {
        final AxolotlService oldAxolotlService = this.axolotlService;
        if (oldAxolotlService != null) {
            oldAxolotlService.destroy();
            this.jid = next;
            this.axolotlService = oldAxolotlService.makeNew();
        }
    }
    this.jid = next;
    return next != null && next.equals(previousFull);
}
Also used : AxolotlService(de.pixart.messenger.crypto.axolotl.AxolotlService) Jid(de.pixart.messenger.xmpp.jid.Jid)

Example 4 with AxolotlService

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

the class ConversationFragment method trustKeysIfNeeded.

protected boolean trustKeysIfNeeded(int requestCode, int attachmentChoice) {
    AxolotlService axolotlService = conversation.getAccount().getAxolotlService();
    final List<Jid> targets = axolotlService.getCryptoTargets(conversation);
    boolean hasUnaccepted = !conversation.getAcceptedCryptoTargets().containsAll(targets);
    boolean hasUndecidedOwn = !axolotlService.getKeysWithTrust(FingerprintStatus.createActiveUndecided()).isEmpty();
    boolean hasUndecidedContacts = !axolotlService.getKeysWithTrust(FingerprintStatus.createActiveUndecided(), targets).isEmpty();
    boolean hasPendingKeys = !axolotlService.findDevicesWithoutSession(conversation).isEmpty();
    boolean hasNoTrustedKeys = axolotlService.anyTargetHasNoTrustedKeys(targets);
    if (hasUndecidedOwn || hasUndecidedContacts || hasPendingKeys || hasNoTrustedKeys || hasUnaccepted) {
        axolotlService.createSessionsIfNeeded(conversation);
        Intent intent = new Intent(getActivity(), TrustKeysActivity.class);
        String[] contacts = new String[targets.size()];
        for (int i = 0; i < contacts.length; ++i) {
            contacts[i] = targets.get(i).toString();
        }
        intent.putExtra("contacts", contacts);
        intent.putExtra(EXTRA_ACCOUNT, conversation.getAccount().getJid().toBareJid().toString());
        intent.putExtra("choice", attachmentChoice);
        intent.putExtra("conversation", conversation.getUuid());
        startActivityForResult(intent, requestCode);
        return true;
    } else {
        return false;
    }
}
Also used : AxolotlService(de.pixart.messenger.crypto.axolotl.AxolotlService) Jid(de.pixart.messenger.xmpp.jid.Jid) PendingIntent(android.app.PendingIntent) Intent(android.content.Intent) SuppressLint(android.annotation.SuppressLint)

Example 5 with AxolotlService

use of de.pixart.messenger.crypto.axolotl.AxolotlService 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)

Aggregations

AxolotlService (de.pixart.messenger.crypto.axolotl.AxolotlService)17 Jid (de.pixart.messenger.xmpp.jid.Jid)7 Element (de.pixart.messenger.xml.Element)5 Contact (de.pixart.messenger.entities.Contact)4 XmppUri (de.pixart.messenger.utils.XmppUri)3 XmppConnection (de.pixart.messenger.xmpp.XmppConnection)3 Avatar (de.pixart.messenger.xmpp.pep.Avatar)3 SuppressLint (android.annotation.SuppressLint)2 PendingIntent (android.app.PendingIntent)2 Intent (android.content.Intent)2 ActionBar (android.support.v7.app.ActionBar)2 AlertDialog (android.support.v7.app.AlertDialog)2 MenuItem (android.view.MenuItem)2 View (android.view.View)2 OnClickListener (android.view.View.OnClickListener)2 ImageButton (android.widget.ImageButton)2 FingerprintStatus (de.pixart.messenger.crypto.axolotl.FingerprintStatus)2 Account (de.pixart.messenger.entities.Account)2 Activity (android.app.Activity)1 Builder (android.app.AlertDialog.Builder)1