diff --git a/res/layout/bugreport_options_dialog.xml b/res/layout/bugreport_options_dialog.xml new file mode 100644 index 00000000000..ac98d189a62 --- /dev/null +++ b/res/layout/bugreport_options_dialog.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/com/android/settings/BugreportPreference.java b/src/com/android/settings/BugreportPreference.java index fc0466fe15f..c3dd474dc5c 100644 --- a/src/com/android/settings/BugreportPreference.java +++ b/src/com/android/settings/BugreportPreference.java @@ -16,13 +16,31 @@ package com.android.settings; +import android.app.ActivityManagerNative; import android.app.AlertDialog.Builder; import android.content.Context; import android.content.DialogInterface; -import android.os.SystemProperties; +import android.os.Handler; +import android.os.RemoteException; +import android.text.format.DateUtils; import android.util.AttributeSet; +import android.util.Log; +import android.view.View; +import android.widget.CheckedTextView; +import android.widget.RadioButton; +import android.widget.TextView; +import android.widget.Toast; public class BugreportPreference extends CustomDialogPreference { + + private static final String TAG = "BugreportPreference"; + private static final int BUGREPORT_DELAY_SECONDS = 3; + + private CheckedTextView mInteractiveTitle; + private TextView mInteractiveSummary; + private CheckedTextView mFullTitle; + private TextView mFullSummary; + public BugreportPreference(Context context, AttributeSet attrs) { super(context, attrs); } @@ -30,14 +48,67 @@ public class BugreportPreference extends CustomDialogPreference { @Override protected void onPrepareDialogBuilder(Builder builder, DialogInterface.OnClickListener listener) { super.onPrepareDialogBuilder(builder, listener); + + final View dialogView = View.inflate(getContext(), R.layout.bugreport_options_dialog, null); + mInteractiveTitle = (CheckedTextView) dialogView.findViewById(R.id.bugreport_option_interactive_title); + mInteractiveSummary = (TextView) dialogView.findViewById(R.id.bugreport_option_interactive_summary); + mFullTitle = (CheckedTextView) dialogView.findViewById(R.id.bugreport_option_full_title); + mFullSummary = (TextView) dialogView.findViewById(R.id.bugreport_option_full_summary); + final View.OnClickListener l = new View.OnClickListener() { + + @Override + public void onClick(View v) { + if (v == mFullTitle || v == mFullSummary) { + mInteractiveTitle.setChecked(false); + mFullTitle.setChecked(true); + } + if (v == mInteractiveTitle || v == mInteractiveSummary) { + mInteractiveTitle.setChecked(true); + mFullTitle.setChecked(false); + } + } + }; + mInteractiveTitle.setOnClickListener(l); + mFullTitle.setOnClickListener(l); + mInteractiveSummary.setOnClickListener(l); + mFullSummary.setOnClickListener(l); + builder.setPositiveButton(com.android.internal.R.string.report, listener); - builder.setMessage(com.android.internal.R.string.bugreport_message); + builder.setView(dialogView); } @Override protected void onClick(DialogInterface dialog, int which) { if (which == DialogInterface.BUTTON_POSITIVE) { - SystemProperties.set("ctl.start", "bugreportplus"); + + if (mFullTitle.isChecked()) { + Log.v(TAG, "Taking full bugreport right away"); + takeBugreport(false); + } else { + Log.v(TAG, "Taking interactive bugreport in " + BUGREPORT_DELAY_SECONDS + "s"); + // Add a little delay before executing, to give the user a chance to close + // the Settings activity before it takes a screenshot. + final Context context = getContext(); + final String msg = context.getResources() + .getQuantityString(com.android.internal.R.plurals.bugreport_countdown, + BUGREPORT_DELAY_SECONDS, BUGREPORT_DELAY_SECONDS); + Log.v(TAG, msg); + Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + takeBugreport(true); + } + }, BUGREPORT_DELAY_SECONDS * DateUtils.SECOND_IN_MILLIS); + } + } + } + + private void takeBugreport(boolean progress) { + try { + ActivityManagerNative.getDefault().requestBugReport(progress); + } catch (RemoteException e) { + Log.e(TAG, "error taking bugreport (progress=" + progress + ")", e); } } }