package com.jecelyin.util;
import java.net.URLEncoder;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnDismissListener;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import com.jecelyin.editor.R;
public class CrashReportDialog extends Activity implements DialogInterface.OnClickListener, OnDismissListener
{
private EditText mComment;
private EditText mailEditText;
private String mTrace;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Intent it = getIntent();
mTrace = it.getStringExtra("msg")+"\n"+it.getStringExtra("trace");
show();
}
public void show()
{
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
dialogBuilder.setTitle(R.string.crash_report);
dialogBuilder.setView(buildCustomView());
dialogBuilder.setPositiveButton(android.R.string.ok, CrashReportDialog.this);
dialogBuilder.setNegativeButton(android.R.string.cancel, CrashReportDialog.this);
AlertDialog dialog = dialogBuilder.create();
dialog.setCanceledOnTouchOutside(false);
dialog.setOnDismissListener(this);
dialog.show();
}
private View buildCustomView()
{
final LinearLayout root = new LinearLayout(this);
root.setOrientation(LinearLayout.VERTICAL);
root.setPadding(10, 10, 10, 10);
root.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
root.setFocusable(true);
root.setFocusableInTouchMode(true);
final ScrollView scroll = new ScrollView(this);
root.addView(scroll, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 1.0f));
final LinearLayout scrollable = new LinearLayout(this);
scrollable.setOrientation(LinearLayout.VERTICAL);
scroll.addView(scrollable);
// Add an optional prompt for user comments
final TextView label = new TextView(this);
label.setText(R.string.comment);
label.setPadding(label.getPaddingLeft(), 10, label.getPaddingRight(), label.getPaddingBottom());
scrollable.addView(label, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT));
mComment = new EditText(this);
mComment.setLines(2);
scrollable.addView(mComment);
// Add an optional user email field
final TextView label1 = new TextView(this);
label1.setText(R.string.label_email);
label1.setPadding(label1.getPaddingLeft(), 10, label1.getPaddingRight(), label1.getPaddingBottom());
scrollable.addView(label1);
mailEditText = new EditText(this);
mailEditText.setSingleLine();
mailEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
scrollable.addView(mailEditText);
final TextView text = new TextView(this);
text.setText(mTrace);
scrollable.addView(text);
return root;
}
@Override
public void onClick(DialogInterface dialog, int which)
{
if (which != DialogInterface.BUTTON_POSITIVE) // no ok
{
close();
return;
}
String mail = URLEncoder.encode(mailEditText.getText().toString().trim());
String content = URLEncoder.encode(mComment.getText().toString().trim()+"\n## "+mTrace);
Intent i = new Intent( Intent.ACTION_VIEW );
i.setData( Uri.parse( "http://www.jecelyin.com/920report.php?ver=crash&email="+mail+"&content="+content ) );
startActivity( i );
close();
}
@Override
public void onDismiss(DialogInterface dialog)
{
close();
}
private void close()
{
finish();
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(10);
}
}