Loading res/layout/bugreport_options_dialog.xml 0 → 100644 +78 −0 Original line number Diff line number Diff line <?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> No newline at end of file src/com/android/settings/BugreportPreference.java +74 −3 Original line number Diff line number Diff line Loading @@ -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); } Loading @@ -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); } } } Loading
res/layout/bugreport_options_dialog.xml 0 → 100644 +78 −0 Original line number Diff line number Diff line <?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> No newline at end of file
src/com/android/settings/BugreportPreference.java +74 −3 Original line number Diff line number Diff line Loading @@ -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); } Loading @@ -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); } } }