package com.door43.tools.reporting;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class CrashReporterActivity extends ActionBarActivity implements ManagedTask.OnFinishedListener {
public static final String STACKTRACE_DIR = "stacktrace";
private Button mOkButton;
private Button mCancelButton;
private ProgressDialog mLoadingDialog;
private EditText mCrashReportText;
private static final String TASK_UPLOAD_CRASH_REPORT = "upload_crash_report";
private static final String TASK_ARCHIVE_CRASH_REPORT = "archive_crash_report";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_crash_reporter);
mOkButton = (Button)findViewById(R.id.okButton);
mCancelButton = (Button)findViewById(R.id.cancelButton);
mCrashReportText = (EditText)findViewById(R.id.crashDescriptioneditText);
mLoadingDialog = new ProgressDialog(CrashReporterActivity.this);
mLoadingDialog.setCancelable(false);
mLoadingDialog.setCanceledOnTouchOutside(false);
mOkButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mLoadingDialog.setMessage(getResources().getString(R.string.uploading));
mLoadingDialog.show();
UploadCrashReportTask task = new UploadCrashReportTask(getApplicationContext(), mCrashReportText.getText().toString().trim());
task.addOnFinishedListener(CrashReporterActivity.this);
TaskManager.addTask(task, TASK_UPLOAD_CRASH_REPORT);
}
});
mCancelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mLoadingDialog.setMessage(getResources().getString(R.string.loading));
mLoadingDialog.show();
ArchiveCrashReportTask task = new ArchiveCrashReportTask(getApplicationContext(), STACKTRACE_DIR);
task.addOnFinishedListener(CrashReporterActivity.this);
TaskManager.addTask(task, TASK_ARCHIVE_CRASH_REPORT);
}
});
// connect to existing tasks
UploadCrashReportTask uploadTask = (UploadCrashReportTask)TaskManager.getTask(TASK_UPLOAD_CRASH_REPORT);
ArchiveCrashReportTask archiveTask = (ArchiveCrashReportTask)TaskManager.getTask(TASK_ARCHIVE_CRASH_REPORT);
if(uploadTask != null) {
mLoadingDialog.setMessage(getResources().getString(R.string.uploading));
mLoadingDialog.show();
uploadTask.addOnFinishedListener(this);
} else if(archiveTask != null) {
mLoadingDialog.setMessage(getResources().getString(R.string.loading));
mLoadingDialog.show();
archiveTask.addOnFinishedListener(this);
}
}
@Override
public void onFinished(ManagedTask task) {
TaskManager.cancelTask(TaskManager.getTask(TASK_ARCHIVE_CRASH_REPORT));
TaskManager.cancelTask(TaskManager.getTask(TASK_UPLOAD_CRASH_REPORT));
Handler hand = new Handler(Looper.getMainLooper());
hand.post(new Runnable() {
@Override
public void run() {
if(mLoadingDialog.isShowing()) {
mLoadingDialog.dismiss();
}
}
});
finish();
}
@Override
public void onDestroy() {
// disconnect listeners
UploadCrashReportTask uploadTask = (UploadCrashReportTask)TaskManager.getTask(TASK_UPLOAD_CRASH_REPORT);
if(uploadTask != null) {
uploadTask.removeOnFinishedListener(this);
}
ArchiveCrashReportTask archiveTask = (ArchiveCrashReportTask)TaskManager.getTask(TASK_ARCHIVE_CRASH_REPORT);
if(archiveTask != null) {
archiveTask.removeOnFinishedListener(this);
}
super.onDestroy();
}
}