package org.opensatnav.util;
import java.util.ArrayList;
import org.opensatnav.R;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.content.res.Resources;
import android.os.Build;
public class BugReportSender {
private final Context parent;
private static final String MIME_TYPE = "message/rfc822";
public BugReportSender(Context parent) {
this.parent = parent;
}
public void sendBugReport(final Throwable e) {
AlertDialog dialog = new AlertDialog.Builder(parent).setPositiveButton(
android.R.string.yes, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ArrayList<Throwable> al = new ArrayList<Throwable>();
al.add(e);
Intent intent = send(BugReportExceptionHandler.buildStackTraceMessage(al));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
parent.startActivity(intent);
}
}).setNegativeButton(android.R.string.no, null).create();
dialog.setMessage(parent.getString(R.string.bug_report_ask_user));
dialog.setTitle(R.string.bug_report_ask_user_title);
dialog.setIcon(android.R.drawable.ic_dialog_alert);
dialog.show();
}
protected void sendBugReportAtRestart(final String stacktrace) {
AlertDialog dialog = new AlertDialog.Builder(parent).setPositiveButton(
android.R.string.yes, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = send(stacktrace);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
parent.startActivity(intent);
}
}).setNegativeButton(android.R.string.no, null).create();
dialog.setMessage(parent
.getString(R.string.bug_report_not_sent_ask_user));
dialog.setTitle(R.string.bug_report_ask_user_title);
dialog.setIcon(android.R.drawable.ic_dialog_alert);
dialog.show();
}
/**
* Sends an email to the project with the given exceptions
*
* @param exceptions
* @param resources
* {@link Resources} for getting some Strings.
* @return
* @return Intent ready to start.
*/
private Intent send(final String stackTrace) {
String[] addressee = { parent
.getString(R.string.bug_report_mail_address) };
BugReportHelper helper = new BugReportHelper(parent);
String subject = new StringBuilder(helper.getVersionName()).append(" [SVN Rev ").append(helper.getRevision()).append(
"] Error Report (Android: ").append(Build.VERSION.RELEASE)
.append(" - model: ").append(Build.MODEL).append(")")
.toString();
String message = parent.getString(R.string.error_email_message);
message += stackTrace;
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, addressee);
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_TEXT, message);
intent.setType(MIME_TYPE);
return Intent.createChooser(intent, parent
.getString(R.string.error_email_chooser_title));
}
}