Search in sources :

Example 1 with JingleFileTransferConnection

use of eu.siacs.conversations.xmpp.jingle.JingleFileTransferConnection in project Conversations by siacs.

the class ConversationFragment method populateContextMenu.

private void populateContextMenu(ContextMenu menu) {
    final Message m = this.selectedMessage;
    final Transferable t = m.getTransferable();
    Message relevantForCorrection = m;
    while (relevantForCorrection.mergeable(relevantForCorrection.next())) {
        relevantForCorrection = relevantForCorrection.next();
    }
    if (m.getType() != Message.TYPE_STATUS && m.getType() != Message.TYPE_RTP_SESSION) {
        if (m.getEncryption() == Message.ENCRYPTION_AXOLOTL_NOT_FOR_THIS_DEVICE || m.getEncryption() == Message.ENCRYPTION_AXOLOTL_FAILED) {
            return;
        }
        if (m.getStatus() == Message.STATUS_RECEIVED && t != null && (t.getStatus() == Transferable.STATUS_CANCELLED || t.getStatus() == Transferable.STATUS_FAILED)) {
            return;
        }
        final boolean deleted = m.isDeleted();
        final boolean encrypted = m.getEncryption() == Message.ENCRYPTION_DECRYPTION_FAILED || m.getEncryption() == Message.ENCRYPTION_PGP;
        final boolean receiving = m.getStatus() == Message.STATUS_RECEIVED && (t instanceof JingleFileTransferConnection || t instanceof HttpDownloadConnection);
        activity.getMenuInflater().inflate(R.menu.message_context, menu);
        menu.setHeaderTitle(R.string.message_options);
        MenuItem openWith = menu.findItem(R.id.open_with);
        MenuItem copyMessage = menu.findItem(R.id.copy_message);
        MenuItem copyLink = menu.findItem(R.id.copy_link);
        MenuItem quoteMessage = menu.findItem(R.id.quote_message);
        MenuItem retryDecryption = menu.findItem(R.id.retry_decryption);
        MenuItem correctMessage = menu.findItem(R.id.correct_message);
        MenuItem shareWith = menu.findItem(R.id.share_with);
        MenuItem sendAgain = menu.findItem(R.id.send_again);
        MenuItem copyUrl = menu.findItem(R.id.copy_url);
        MenuItem downloadFile = menu.findItem(R.id.download_file);
        MenuItem cancelTransmission = menu.findItem(R.id.cancel_transmission);
        MenuItem deleteFile = menu.findItem(R.id.delete_file);
        MenuItem showErrorMessage = menu.findItem(R.id.show_error_message);
        final boolean unInitiatedButKnownSize = MessageUtils.unInitiatedButKnownSize(m);
        final boolean showError = m.getStatus() == Message.STATUS_SEND_FAILED && m.getErrorMessage() != null && !Message.ERROR_MESSAGE_CANCELLED.equals(m.getErrorMessage());
        if (!m.isFileOrImage() && !encrypted && !m.isGeoUri() && !m.treatAsDownloadable() && !unInitiatedButKnownSize && t == null) {
            copyMessage.setVisible(true);
            quoteMessage.setVisible(!showError && MessageUtils.prepareQuote(m).length() > 0);
            String body = m.getMergedBody().toString();
            if (ShareUtil.containsXmppUri(body)) {
                copyLink.setTitle(R.string.copy_jabber_id);
                copyLink.setVisible(true);
            } else if (Patterns.AUTOLINK_WEB_URL.matcher(body).find()) {
                copyLink.setVisible(true);
            }
        }
        if (m.getEncryption() == Message.ENCRYPTION_DECRYPTION_FAILED && !deleted) {
            retryDecryption.setVisible(true);
        }
        if (!showError && relevantForCorrection.getType() == Message.TYPE_TEXT && !m.isGeoUri() && relevantForCorrection.isLastCorrectableMessage() && m.getConversation() instanceof Conversation) {
            correctMessage.setVisible(true);
        }
        if ((m.isFileOrImage() && !deleted && !receiving) || (m.getType() == Message.TYPE_TEXT && !m.treatAsDownloadable()) && !unInitiatedButKnownSize && t == null) {
            shareWith.setVisible(true);
        }
        if (m.getStatus() == Message.STATUS_SEND_FAILED) {
            sendAgain.setVisible(true);
        }
        if (m.hasFileOnRemoteHost() || m.isGeoUri() || m.treatAsDownloadable() || unInitiatedButKnownSize || t instanceof HttpDownloadConnection) {
            copyUrl.setVisible(true);
        }
        if (m.isFileOrImage() && deleted && m.hasFileOnRemoteHost()) {
            downloadFile.setVisible(true);
            downloadFile.setTitle(activity.getString(R.string.download_x_file, UIHelper.getFileDescriptionString(activity, m)));
        }
        final boolean waitingOfferedSending = m.getStatus() == Message.STATUS_WAITING || m.getStatus() == Message.STATUS_UNSEND || m.getStatus() == Message.STATUS_OFFERED;
        final boolean cancelable = (t != null && !deleted) || waitingOfferedSending && m.needsUploading();
        if (cancelable) {
            cancelTransmission.setVisible(true);
        }
        if (m.isFileOrImage() && !deleted && !cancelable) {
            String path = m.getRelativeFilePath();
            if (path == null || !path.startsWith("/") || FileBackend.isInDirectoryThatShouldNotBeScanned(getActivity(), path)) {
                deleteFile.setVisible(true);
                deleteFile.setTitle(activity.getString(R.string.delete_x_file, UIHelper.getFileDescriptionString(activity, m)));
            }
        }
        if (showError) {
            showErrorMessage.setVisible(true);
        }
        final String mime = m.isFileOrImage() ? m.getMimeType() : null;
        if ((m.isGeoUri() && GeoHelper.openInOsmAnd(getActivity(), m)) || (mime != null && mime.startsWith("audio/"))) {
            openWith.setVisible(true);
        }
    }
}
Also used : EditMessage(eu.siacs.conversations.ui.widget.EditMessage) Message(eu.siacs.conversations.entities.Message) Transferable(eu.siacs.conversations.entities.Transferable) MenuItem(android.view.MenuItem) Conversation(eu.siacs.conversations.entities.Conversation) JingleFileTransferConnection(eu.siacs.conversations.xmpp.jingle.JingleFileTransferConnection) HttpDownloadConnection(eu.siacs.conversations.http.HttpDownloadConnection)

Aggregations

MenuItem (android.view.MenuItem)1 Conversation (eu.siacs.conversations.entities.Conversation)1 Message (eu.siacs.conversations.entities.Message)1 Transferable (eu.siacs.conversations.entities.Transferable)1 HttpDownloadConnection (eu.siacs.conversations.http.HttpDownloadConnection)1 EditMessage (eu.siacs.conversations.ui.widget.EditMessage)1 JingleFileTransferConnection (eu.siacs.conversations.xmpp.jingle.JingleFileTransferConnection)1