Search in sources :

Example 1 with ReplyToPresenter

use of com.fsck.k9.activity.compose.ReplyToPresenter in project k-9 by k9mail.

the class MessageCompose method onCreate.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (UpgradeDatabases.actionUpgradeDatabases(this, getIntent())) {
        finish();
        return;
    }
    requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    setLayout(R.layout.message_compose);
    ViewStub contentContainer = findViewById(R.id.message_compose_content);
    sizeFormatter = new SizeFormatter(getResources());
    ThemeManager themeManager = getThemeManager();
    int messageComposeThemeResourceId = themeManager.getMessageComposeThemeResourceId();
    ContextThemeWrapper themeContext = new ContextThemeWrapper(this, messageComposeThemeResourceId);
    LayoutInflater themedLayoutInflater = LayoutInflater.from(themeContext);
    contentContainer.setLayoutInflater(themedLayoutInflater);
    View contentView = contentContainer.inflate();
    // background color needs to be forced
    // TODO: Change themes to use appropriate background colors that don't need overriding.
    TypedValue outValue = new TypedValue();
    themeContext.getTheme().resolveAttribute(R.attr.messageViewBackgroundColor, outValue, true);
    contentView.setBackgroundColor(outValue.data);
    initializeActionBar();
    // on api level 15, setContentView() shows the progress bar for some reason...
    setProgressBarIndeterminateVisibility(false);
    final Intent intent = getIntent();
    String messageReferenceString = intent.getStringExtra(EXTRA_MESSAGE_REFERENCE);
    relatedMessageReference = MessageReference.parse(messageReferenceString);
    final String accountUuid = (relatedMessageReference != null) ? relatedMessageReference.getAccountUuid() : intent.getStringExtra(EXTRA_ACCOUNT);
    if (accountUuid != null) {
        account = preferences.getAccount(accountUuid);
    }
    if (account == null) {
        account = preferences.getDefaultAccount();
    }
    if (account == null) {
        /*
             * There are no accounts set up. This should not have happened. Prompt the
             * user to set up an account as an acceptable bailout.
             */
        MessageList.launch(this);
        changesMadeSinceLastSave = false;
        finish();
        return;
    }
    contacts = Contacts.getInstance(MessageCompose.this);
    chooseIdentityButton = findViewById(R.id.identity);
    chooseIdentityButton.setOnClickListener(this);
    ReplyToView replyToView = new ReplyToView(this);
    replyToPresenter = new ReplyToPresenter(replyToView);
    RecipientMvpView recipientMvpView = new RecipientMvpView(this);
    ComposePgpInlineDecider composePgpInlineDecider = new ComposePgpInlineDecider();
    ComposePgpEnableByDefaultDecider composePgpEnableByDefaultDecider = new ComposePgpEnableByDefaultDecider();
    OpenPgpApiManager openPgpApiManager = new OpenPgpApiManager(getApplicationContext(), this);
    recipientPresenter = new RecipientPresenter(getApplicationContext(), getSupportLoaderManager(), openPgpApiManager, recipientMvpView, account, composePgpInlineDecider, composePgpEnableByDefaultDecider, AutocryptStatusInteractor.getInstance(), new ReplyToParser(), DI.get(AutocryptDraftStateHeaderParser.class));
    recipientPresenter.asyncUpdateCryptoStatus();
    subjectView = findViewById(R.id.subject);
    subjectView.getInputExtras(true).putBoolean("allowEmoji", true);
    EditText upperSignature = findViewById(R.id.upper_signature);
    EditText lowerSignature = findViewById(R.id.lower_signature);
    QuotedMessageMvpView quotedMessageMvpView = new QuotedMessageMvpView(this);
    quotedMessagePresenter = new QuotedMessagePresenter(this, quotedMessageMvpView, account);
    attachmentPresenter = new AttachmentPresenter(getApplicationContext(), attachmentMvpView, getSupportLoaderManager(), this);
    messageContentView = findViewById(R.id.message_content);
    messageContentView.getInputExtras(true).putBoolean("allowEmoji", true);
    attachmentsView = findViewById(R.id.attachments);
    TextWatcher draftNeedsChangingTextWatcher = new SimpleTextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            changesMadeSinceLastSave = true;
        }
    };
    TextWatcher signTextWatcher = new SimpleTextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            changesMadeSinceLastSave = true;
            signatureChanged = true;
        }
    };
    replyToView.addTextChangedListener(draftNeedsChangingTextWatcher);
    recipientMvpView.addTextChangedListener(draftNeedsChangingTextWatcher);
    quotedMessageMvpView.addTextChangedListener(draftNeedsChangingTextWatcher);
    subjectView.addTextChangedListener(draftNeedsChangingTextWatcher);
    messageContentView.addTextChangedListener(draftNeedsChangingTextWatcher);
    /*
         * We set this to invisible by default. Other methods will turn it back on if it's
         * needed.
         */
    quotedMessagePresenter.showOrHideQuotedText(QuotedTextMode.NONE);
    subjectView.setOnFocusChangeListener(this);
    messageContentView.setOnFocusChangeListener(this);
    if (savedInstanceState != null) {
        /*
             * This data gets used in onCreate, so grab it here instead of onRestoreInstanceState
             */
        relatedMessageProcessed = savedInstanceState.getBoolean(STATE_KEY_SOURCE_MESSAGE_PROCED, false);
    }
    if (initFromIntent(intent)) {
        action = Action.COMPOSE;
        changesMadeSinceLastSave = true;
    } else {
        String action = intent.getAction();
        if (ACTION_COMPOSE.equals(action)) {
            this.action = Action.COMPOSE;
        } else if (ACTION_REPLY.equals(action)) {
            this.action = Action.REPLY;
        } else if (ACTION_REPLY_ALL.equals(action)) {
            this.action = Action.REPLY_ALL;
        } else if (ACTION_FORWARD.equals(action)) {
            this.action = Action.FORWARD;
        } else if (ACTION_FORWARD_AS_ATTACHMENT.equals(action)) {
            this.action = Action.FORWARD_AS_ATTACHMENT;
        } else if (ACTION_EDIT_DRAFT.equals(action)) {
            this.action = Action.EDIT_DRAFT;
        } else {
            // This shouldn't happen
            Timber.w("MessageCompose was started with an unsupported action");
            this.action = Action.COMPOSE;
        }
    }
    if (identity == null) {
        identity = account.getIdentity(0);
    }
    if (account.isSignatureBeforeQuotedText()) {
        signatureView = upperSignature;
        lowerSignature.setVisibility(View.GONE);
    } else {
        signatureView = lowerSignature;
        upperSignature.setVisibility(View.GONE);
    }
    updateSignature();
    signatureView.addTextChangedListener(signTextWatcher);
    if (!identity.getSignatureUse()) {
        signatureView.setVisibility(View.GONE);
    }
    requestReadReceipt = account.isMessageReadReceipt();
    updateFrom();
    replyToPresenter.setIdentity(identity);
    if (!relatedMessageProcessed) {
        if (action == Action.REPLY || action == Action.REPLY_ALL || action == Action.FORWARD || action == Action.FORWARD_AS_ATTACHMENT || action == Action.EDIT_DRAFT) {
            messageLoaderHelper = messageLoaderHelperFactory.createForMessageCompose(this, getSupportLoaderManager(), getSupportFragmentManager(), messageLoaderCallbacks);
            internalMessageHandler.sendEmptyMessage(MSG_PROGRESS_ON);
            if (action == Action.FORWARD_AS_ATTACHMENT) {
                messageLoaderHelper.asyncStartOrResumeLoadingMessageMetadata(relatedMessageReference);
            } else {
                Parcelable cachedDecryptionResult = intent.getParcelableExtra(EXTRA_MESSAGE_DECRYPTION_RESULT);
                messageLoaderHelper.asyncStartOrResumeLoadingMessage(relatedMessageReference, cachedDecryptionResult);
            }
        }
    }
    if (action == Action.REPLY || action == Action.REPLY_ALL) {
        relatedFlag = Flag.ANSWERED;
    } else if (action == Action.FORWARD || action == Action.FORWARD_AS_ATTACHMENT) {
        relatedFlag = Flag.FORWARDED;
    }
    if (action == Action.REPLY || action == Action.REPLY_ALL || action == Action.EDIT_DRAFT) {
        // change focus to message body.
        messageContentView.requestFocus();
    } else {
        // Explicitly set focus to "To:" input field (see issue 2998)
        recipientMvpView.requestFocusOnToField();
    }
    updateMessageFormat();
    // Set font size of input controls
    int fontSize = K9.getFontSizes().getMessageComposeInput();
    replyToView.setFontSizes(K9.getFontSizes(), fontSize);
    recipientMvpView.setFontSizes(K9.getFontSizes(), fontSize);
    quotedMessageMvpView.setFontSizes(K9.getFontSizes(), fontSize);
    K9.getFontSizes().setViewTextSize(subjectView, fontSize);
    K9.getFontSizes().setViewTextSize(messageContentView, fontSize);
    K9.getFontSizes().setViewTextSize(signatureView, fontSize);
    updateMessageFormat();
    setTitle();
    currentMessageBuilder = (MessageBuilder) getLastCustomNonConfigurationInstance();
    if (currentMessageBuilder != null) {
        setProgressBarIndeterminateVisibility(true);
        currentMessageBuilder.reattachCallback(this);
    }
    if (savedInstanceState == null) {
        checkAndRequestPermissions();
    }
}
Also used : ComposePgpInlineDecider(com.fsck.k9.message.ComposePgpInlineDecider) SizeFormatter(com.fsck.k9.ui.helper.SizeFormatter) ReplyToParser(com.fsck.k9.helper.ReplyToParser) RecipientMvpView(com.fsck.k9.activity.compose.RecipientMvpView) TextWatcher(android.text.TextWatcher) SimpleTextWatcher(com.fsck.k9.helper.SimpleTextWatcher) AttachmentPresenter(com.fsck.k9.activity.compose.AttachmentPresenter) ComposePgpEnableByDefaultDecider(com.fsck.k9.message.ComposePgpEnableByDefaultDecider) TypedValue(android.util.TypedValue) EditText(android.widget.EditText) RecipientPresenter(com.fsck.k9.activity.compose.RecipientPresenter) OpenPgpApiManager(org.openintents.openpgp.OpenPgpApiManager) PendingIntent(android.app.PendingIntent) Intent(android.content.Intent) Parcelable(android.os.Parcelable) ThemeManager(com.fsck.k9.ui.base.ThemeManager) QuotedMessageMvpView(com.fsck.k9.ui.compose.QuotedMessageMvpView) ImageView(android.widget.ImageView) RecipientMvpView(com.fsck.k9.activity.compose.RecipientMvpView) View(android.view.View) QuotedMessageMvpView(com.fsck.k9.ui.compose.QuotedMessageMvpView) TextView(android.widget.TextView) ReplyToView(com.fsck.k9.activity.compose.ReplyToView) AttachmentMvpView(com.fsck.k9.activity.compose.AttachmentPresenter.AttachmentMvpView) SuppressLint(android.annotation.SuppressLint) ViewStub(android.view.ViewStub) ReplyToView(com.fsck.k9.activity.compose.ReplyToView) ReplyToPresenter(com.fsck.k9.activity.compose.ReplyToPresenter) QuotedMessagePresenter(com.fsck.k9.ui.compose.QuotedMessagePresenter) SimpleTextWatcher(com.fsck.k9.helper.SimpleTextWatcher) ContextThemeWrapper(android.view.ContextThemeWrapper) LayoutInflater(android.view.LayoutInflater)

Aggregations

SuppressLint (android.annotation.SuppressLint)1 PendingIntent (android.app.PendingIntent)1 Intent (android.content.Intent)1 Parcelable (android.os.Parcelable)1 TextWatcher (android.text.TextWatcher)1 TypedValue (android.util.TypedValue)1 ContextThemeWrapper (android.view.ContextThemeWrapper)1 LayoutInflater (android.view.LayoutInflater)1 View (android.view.View)1 ViewStub (android.view.ViewStub)1 EditText (android.widget.EditText)1 ImageView (android.widget.ImageView)1 TextView (android.widget.TextView)1 AttachmentPresenter (com.fsck.k9.activity.compose.AttachmentPresenter)1 AttachmentMvpView (com.fsck.k9.activity.compose.AttachmentPresenter.AttachmentMvpView)1 RecipientMvpView (com.fsck.k9.activity.compose.RecipientMvpView)1 RecipientPresenter (com.fsck.k9.activity.compose.RecipientPresenter)1 ReplyToPresenter (com.fsck.k9.activity.compose.ReplyToPresenter)1 ReplyToView (com.fsck.k9.activity.compose.ReplyToView)1 ReplyToParser (com.fsck.k9.helper.ReplyToParser)1