package com.hannesdorfmann.mosby3.sample.mail.write;
import android.annotation.TargetApi;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.EditText;
import android.widget.Toast;
import butterknife.BindView;
import butterknife.OnClick;
import com.hannesdorfmann.mosby3.mvp.viewstate.RestorableViewState;
import com.hannesdorfmann.mosby3.sample.mail.IntentStarter;
import com.hannesdorfmann.mosby3.sample.mail.MailApplication;
import com.hannesdorfmann.mosby3.sample.mail.R;
import com.hannesdorfmann.mosby3.sample.mail.base.view.BaseViewStateActivity;
import com.hannesdorfmann.mosby3.sample.mail.dagger.NavigationModule;
import com.hannesdorfmann.mosby3.sample.mail.model.contact.Person;
import com.hannesdorfmann.mosby3.sample.mail.model.mail.Label;
import com.hannesdorfmann.mosby3.sample.mail.model.mail.Mail;
import com.hannesdorfmann.mosby3.sample.mail.utils.BuildUtils;
import java.util.Date;
import java.util.regex.Pattern;
import javax.inject.Inject;
/**
* @author Hannes Dorfmann
*/
@TargetApi(21) public class WriteActivity extends BaseViewStateActivity<WriteView, WritePresenter, WriteViewState>
implements WriteView {
public static final String KEY_REPLAY_MAIL =
"com.hannesdorfmann.mosby.sample.mail.write.REPLAY_MAIL";
@BindView(R.id.loadingOverlay) View loadingOverlay;
@BindView(R.id.authOverlay) View authOverlay;
@BindView(R.id.toolbar) Toolbar toolbar;
@BindView(R.id.message) EditText message;
@BindView(R.id.subject) EditText subject;
@BindView(R.id.receiver) EditText receiver;
@Inject IntentStarter intentStarter;
private WriteComponent writeComponent;
private Pattern emailPattern = Pattern.compile("^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
+ "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$");
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_write);
if (BuildUtils.isMinApi21()) {
getWindow().getEnterTransition()
.excludeTarget(R.id.toolbar, true)
.excludeTarget(android.R.id.statusBarBackground, true)
.excludeTarget(android.R.id.navigationBarBackground, true);
}
toolbar.setNavigationIcon(getBackArrowDrawable());
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
if (BuildUtils.isMinApi21()) {
finishAfterTransition();
} else {
finish();
}
}
});
Mail replayMail = getIntent().getParcelableExtra(KEY_REPLAY_MAIL);
if (replayMail != null) {
if (TextUtils.isEmpty(receiver.getText().toString())) {
receiver.setText(replayMail.getSender().getEmail());
}
if (TextUtils.isEmpty(subject.getText().toString())) {
subject.setText("RE: " + replayMail.getSubject());
}
}
}
@TargetApi(21) private Drawable getBackArrowDrawable() {
if (BuildUtils.isMinApi21()) {
return getResources().getDrawable(R.drawable.ic_action_back, getTheme());
} else {
return getResources().getDrawable(R.drawable.ic_action_back);
}
}
@Override public WriteViewState createViewState() {
return new WriteViewState();
}
@Override public WritePresenter createPresenter() {
return writeComponent.presenter();
}
@Override public void onNewViewStateInstance() {
showForm();
}
@Override public void showForm() {
getViewState().setStateShowForm();
loadingOverlay.setVisibility(View.GONE);
authOverlay.setVisibility(View.GONE);
}
@Override public void showLoading() {
getViewState().setStateShowLoading();
authOverlay.setVisibility(View.GONE);
loadingOverlay.setVisibility(View.VISIBLE);
if (!restoringViewState) {
loadingOverlay.setAlpha(0f);
loadingOverlay.animate().alpha(1f).setDuration(200).start();
}
}
@Override public void showError(Throwable e) {
Toast.makeText(this, R.string.error_sending_mail, Toast.LENGTH_SHORT).show();
showForm();
}
@Override public void showAuthenticationRequired() {
getViewState().setStateAuthenticationRequired();
loadingOverlay.setVisibility(View.GONE);
authOverlay.setVisibility(View.VISIBLE);
}
@OnClick(R.id.authView) public void onAuthViewClicked() {
intentStarter.showAuthentication(this);
}
@OnClick(R.id.send) public void onSendClicked() {
String email = receiver.getText().toString();
if (TextUtils.isEmpty(email) || !emailPattern.matcher(email).matches()) {
Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake);
receiver.startAnimation(shake);
return;
}
String sub = subject.getText().toString();
if (TextUtils.isEmpty(sub)) {
Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake);
subject.startAnimation(shake);
return;
}
Person receiver = null;
if (email.equals(Person.BARNEY.getEmail())) {
receiver = Person.BARNEY;
} else if (email.equals(Person.LILY.getEmail())) {
receiver = Person.LILY;
} else if (email.equals(Person.MARSHALL.getEmail())) {
receiver = Person.MARSHALL;
} else if (email.equals(Person.ROBIN.getEmail())) {
receiver = Person.ROBIN;
} else {
String name = email.split("@")[0];
receiver = new Person(23, name, email, R.drawable.unknown, null, 0);
}
String text = message.getText().toString();
Mail mail = new Mail().date(new Date())
.label(Label.SENT)
.sender(Person.TED)
.receiver(receiver)
.subject(sub)
.text(text);
presenter.writeMail(getApplicationContext(), mail);
}
@Override public void finishBecauseSuccessful() {
if (BuildUtils.isMinApi21()) {
finishAfterTransition();
} else {
finish();
}
}
protected void injectDependencies() {
writeComponent = DaggerWriteComponent.builder()
.mailAppComponent(MailApplication.getMailComponents())
.navigationModule(new NavigationModule())
.build();
writeComponent.inject(this);
}
}