package org.flisolsaocarlos.flisolapp.ui;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import org.flisolsaocarlos.flisolapp.BuildConfig;
import org.flisolsaocarlos.flisolapp.R;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class AboutAppActivity extends Activity implements View.OnClickListener {
final static int MAX_NAME_LENGHT = 70;
final static int MAX_SUBJECT_LENGHT = 150;
final static int MAX_MESSAGE_LENGHT = 400;
final static String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
+ "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
private TextView versionNameTxt;
private Button licenseBtn, submitBtn;
private EditText nameEdt, emailEdt, subjectEdt, messageEdt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.about_app_layout);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setIcon(R.drawable.ic_launcher_white);
versionNameTxt = (TextView) findViewById(R.id.versionName);
final String versionName = BuildConfig.VERSION_NAME;
versionNameTxt.setText(versionName);
licenseBtn = (Button) findViewById(R.id.licenseBtn);
licenseBtn.setOnClickListener(this);
submitBtn = (Button) findViewById(R.id.submitBtn);
submitBtn.setOnClickListener(this);
nameEdt = (EditText) findViewById(R.id.nameEdit);
emailEdt = (EditText) findViewById(R.id.emailEdit);
subjectEdt = (EditText) findViewById(R.id.subjectEdit);
messageEdt = (EditText) findViewById(R.id.messageEdit);
}
public void onClick(View view) {
switch (view.getId()) {
case R.id.licenseBtn:
Intent i = new Intent(Intent.ACTION_VIEW);
final String licenseUrl = getResources().getString(R.string.license_link);
i.setData(Uri.parse(licenseUrl));
startActivity(i);
break;
case R.id.submitBtn:
final String name = nameEdt.getText().toString();
if ( (name.isEmpty()) && (name.length() < MAX_NAME_LENGHT) ) {
nameEdt.setError(getResources().getString(R.string.invalid_name));
break;
}
final String email = emailEdt.getText().toString();
if (!isValidEmail(email)) {
emailEdt.setError(getResources().getString(R.string.invalid_email));
break;
}
final String subject = subjectEdt.getText().toString();
if ( (subject.isEmpty()) && (subject.length() < MAX_SUBJECT_LENGHT) ) {
subjectEdt.setError(getResources().getString(R.string.invalid_subject));
break;
}
final String message = messageEdt.getText().toString();
if ( (message.isEmpty()) && (message.length() < MAX_MESSAGE_LENGHT) ) {
messageEdt.setError(getResources().getString(R.string.invalid_message));
break;
}
submitEmail(email, name, subject, message);
break;
}
}
private void submitEmail(final String email, final String name,
final String subject, final String message) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("message/rfc822");
final String developerEmail = getResources().getString(R.string.developer_email);
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{developerEmail});
StringBuilder subjectBuilder = new StringBuilder();
subjectBuilder.append("[FLISOL - ").append(subject).append(" ]");
intent.putExtra(Intent.EXTRA_SUBJECT, subjectBuilder.toString());
final DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
final Calendar cal = Calendar.getInstance();
StringBuilder messageBuilder = new StringBuilder();
messageBuilder.append("Sent by ").append(name).append(" ")
.append("<").append(email).append(">\n\n")
.append(message).append("\n\n")
.append("Date: ").append(dateFormat.format(cal.getTime()));
intent.putExtra(Intent.EXTRA_TEXT, messageBuilder.toString());
try {
startActivity(Intent.createChooser(intent, getResources().getString(R.string.send_email)));
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(AboutAppActivity.this, getResources().getString(R.string.send_email_error), Toast.LENGTH_LONG).show();
}
}
private boolean isValidEmail(String email) {
Pattern pattern = Pattern.compile(EMAIL_PATTERN);
Matcher matcher = pattern.matcher(email);
return matcher.matches();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (item.getItemId()) {
case android.R.id.home:
this.finish();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
this.finish();
}
@Override
public void finish() {
super.finish();
overridePendingTransition(R.anim.end_in, R.anim.end_out);
}
}