Changed dialog shown from "Take Bug Report" to display 2 options:

* Normal Report: the new, enhanced option is more user-friendly (it
  shows a system notification with the progress, allow user to cancel,
  etc...), at the cost of consuming more resources. When this option is
  selected, the bugreport will be delayed 2 seconds so user can dismiss
  the Settings app before a screenshot is taken.

* Emergency Report: a lighter approach that is less intrusive and
  should be use when the phone is unresponsive or too slow.

BUG: 26034608
BUG: 11665244

Change-Id: If9c0242a163c8c33adecfc8a65af561e839bab8d
This commit is contained in:
Felipe Leme
2015-12-16 10:05:44 -08:00
parent aca0f1cf8a
commit 834496f7fc
2 changed files with 152 additions and 3 deletions

View File

@@ -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);
}
}
}