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:
78
res/layout/bugreport_options_dialog.xml
Normal file
78
res/layout/bugreport_options_dialog.xml
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
Copyright (C) 2015 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="horizontal" >
|
||||||
|
|
||||||
|
<CheckedTextView
|
||||||
|
android:id="@+id/bugreport_option_interactive_title"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:checked="true"
|
||||||
|
android:drawableStart="?android:attr/listChoiceIndicatorSingle"
|
||||||
|
android:ellipsize="marquee"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:paddingEnd="?android:attr/dialogPreferredPadding"
|
||||||
|
android:paddingStart="20dp"
|
||||||
|
android:text="@*android:string/bugreport_option_interactive_title"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
|
android:textColor="?android:attr/textColorAlertDialogListItem" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/bugreport_option_interactive_summary"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/bugreport_option_interactive_title"
|
||||||
|
android:maxLines="10"
|
||||||
|
android:paddingBottom="8dp"
|
||||||
|
android:paddingStart="52dp"
|
||||||
|
android:paddingEnd="?android:attr/dialogPreferredPadding"
|
||||||
|
android:text="@*android:string/bugreport_option_interactive_summary"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
|
||||||
|
android:textColor="?android:attr/textColorSecondary" />
|
||||||
|
|
||||||
|
<CheckedTextView
|
||||||
|
android:id="@+id/bugreport_option_full_title"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/bugreport_option_interactive_summary"
|
||||||
|
android:checked="false"
|
||||||
|
android:drawableStart="?android:attr/listChoiceIndicatorSingle"
|
||||||
|
android:ellipsize="marquee"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:paddingEnd="?android:attr/dialogPreferredPadding"
|
||||||
|
android:paddingStart="20dp"
|
||||||
|
android:text="@*android:string/bugreport_option_full_title"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
|
android:textColor="?android:attr/textColorAlertDialogListItem" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/bugreport_option_full_summary"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/bugreport_option_full_title"
|
||||||
|
android:maxLines="10"
|
||||||
|
android:paddingBottom="8dp"
|
||||||
|
android:paddingStart="52dp"
|
||||||
|
android:paddingEnd="?android:attr/dialogPreferredPadding"
|
||||||
|
android:text="@*android:string/bugreport_option_full_summary"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
|
||||||
|
android:textColor="?android:attr/textColorSecondary" />
|
||||||
|
|
||||||
|
</RelativeLayout>
|
@@ -16,13 +16,31 @@
|
|||||||
|
|
||||||
package com.android.settings;
|
package com.android.settings;
|
||||||
|
|
||||||
|
import android.app.ActivityManagerNative;
|
||||||
import android.app.AlertDialog.Builder;
|
import android.app.AlertDialog.Builder;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
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.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 {
|
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) {
|
public BugreportPreference(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
}
|
}
|
||||||
@@ -30,14 +48,67 @@ public class BugreportPreference extends CustomDialogPreference {
|
|||||||
@Override
|
@Override
|
||||||
protected void onPrepareDialogBuilder(Builder builder, DialogInterface.OnClickListener listener) {
|
protected void onPrepareDialogBuilder(Builder builder, DialogInterface.OnClickListener listener) {
|
||||||
super.onPrepareDialogBuilder(builder, 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.setPositiveButton(com.android.internal.R.string.report, listener);
|
||||||
builder.setMessage(com.android.internal.R.string.bugreport_message);
|
builder.setView(dialogView);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onClick(DialogInterface dialog, int which) {
|
protected void onClick(DialogInterface dialog, int which) {
|
||||||
if (which == DialogInterface.BUTTON_POSITIVE) {
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user