Search in sources :

Example 1 with RecipientPresenter

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

the class RecipientPresenterTest method setUp.

@Before
public void setUp() throws Exception {
    Context context = ShadowApplication.getInstance().getApplicationContext();
    recipientMvpView = mock(RecipientMvpView.class);
    account = mock(Account.class);
    composePgpInlineDecider = mock(ComposePgpInlineDecider.class);
    replyToParser = mock(ReplyToParser.class);
    LoaderManager loaderManager = mock(LoaderManager.class);
    listener = mock(RecipientPresenter.RecipientsChangedListener.class);
    recipientPresenter = new RecipientPresenter(context, loaderManager, recipientMvpView, account, composePgpInlineDecider, replyToParser, listener);
    recipientPresenter.updateCryptoStatus();
}
Also used : Context(android.content.Context) Account(com.fsck.k9.Account) LoaderManager(android.app.LoaderManager) ComposePgpInlineDecider(com.fsck.k9.message.ComposePgpInlineDecider) ReplyToParser(com.fsck.k9.helper.ReplyToParser) Before(org.junit.Before)

Example 2 with RecipientPresenter

use of com.fsck.k9.activity.compose.RecipientPresenter 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)

Example 3 with RecipientPresenter

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

the class AttachmentPresenter method onClickAddAttachment.

public void onClickAddAttachment(RecipientPresenter recipientPresenter) {
    ComposeCryptoStatus currentCachedCryptoStatus = recipientPresenter.getCurrentCachedCryptoStatus();
    if (currentCachedCryptoStatus == null) {
        return;
    }
    AttachErrorState maybeAttachErrorState = currentCachedCryptoStatus.getAttachErrorStateOrNull();
    if (maybeAttachErrorState != null) {
        recipientPresenter.showPgpAttachError(maybeAttachErrorState);
        return;
    }
    attachmentMvpView.showPickAttachmentDialog(REQUEST_CODE_ATTACHMENT_URI);
}
Also used : AttachErrorState(com.fsck.k9.activity.compose.ComposeCryptoStatus.AttachErrorState)

Aggregations

ReplyToParser (com.fsck.k9.helper.ReplyToParser)2 ComposePgpInlineDecider (com.fsck.k9.message.ComposePgpInlineDecider)2 SuppressLint (android.annotation.SuppressLint)1 LoaderManager (android.app.LoaderManager)1 PendingIntent (android.app.PendingIntent)1 Context (android.content.Context)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 Account (com.fsck.k9.Account)1 AttachmentPresenter (com.fsck.k9.activity.compose.AttachmentPresenter)1 AttachmentMvpView (com.fsck.k9.activity.compose.AttachmentPresenter.AttachmentMvpView)1