Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 834496f7 authored by Felipe Leme's avatar Felipe Leme
Browse files

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
parent aca0f1cf
Loading
Loading
Loading
Loading
+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
+74 −3
Original line number Diff line number Diff line
@@ -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);
        }
    }
}