diff --git a/packages/SystemUI/res/layout/quick_settings_tile_bugreport.xml b/packages/SystemUI/res/layout/quick_settings_tile_bugreport.xml new file mode 100644 index 0000000000000..0b6a61457ffed --- /dev/null +++ b/packages/SystemUI/res/layout/quick_settings_tile_bugreport.xml @@ -0,0 +1,25 @@ + + + diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java index 1b280459c8b81..cbacb288ea59f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java @@ -16,14 +16,17 @@ package com.android.systemui.statusbar.phone; +import android.app.AlertDialog; import android.app.Dialog; import android.app.PendingIntent; +import android.app.AlertDialog.Builder; import android.bluetooth.BluetoothDevice; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.CursorLoader; import android.content.DialogInterface; +import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.IntentFilter; import android.content.Loader; @@ -37,6 +40,7 @@ import android.hardware.display.WifiDisplay; import android.hardware.display.WifiDisplayStatus; import android.net.Uri; import android.os.Debug; +import android.os.SystemProperties; import android.provider.ContactsContract; import android.provider.Settings; import android.view.LayoutInflater; @@ -521,6 +525,24 @@ class QuickSettings { }); parent.addView(imeTile); + // Bug reports + QuickSettingsTileView bugreportTile = (QuickSettingsTileView) + inflater.inflate(R.layout.quick_settings_tile, parent, false); + bugreportTile.setContent(R.layout.quick_settings_tile_bugreport, inflater); + bugreportTile.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + mBar.collapseAllPanels(true); + showBugreportDialog(); + } + }); + mModel.addBugreportTile(bugreportTile, new QuickSettingsModel.RefreshCallback() { + @Override + public void refreshView(QuickSettingsTileView view, State state) { + view.setVisibility(state.enabled ? View.VISIBLE : View.GONE); + } + }); + parent.addView(bugreportTile); /* QuickSettingsTileView mediaTile = (QuickSettingsTileView) inflater.inflate(R.layout.quick_settings_tile, parent, false); @@ -575,6 +597,24 @@ class QuickSettings { } } + private void showBugreportDialog() { + final AlertDialog.Builder builder = new AlertDialog.Builder(mContext); + builder.setPositiveButton(com.android.internal.R.string.report, new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (which == DialogInterface.BUTTON_POSITIVE) { + SystemProperties.set("ctl.start", "bugreport"); + } + } + }); + builder.setMessage(com.android.internal.R.string.bugreport_message); + builder.setTitle(com.android.internal.R.string.bugreport_title); + builder.setCancelable(true); + final Dialog dialog = builder.create(); + dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); + dialog.show(); + } + private void updateWifiDisplayStatus() { mWifiDisplayStatus = mDisplayManager.getWifiDisplayStatus(); applyWifiDisplayStatus(); @@ -595,4 +635,4 @@ class QuickSettings { } } }; -} \ No newline at end of file +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java index 724df340e1158..bb89b3d80c2ee 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java @@ -30,6 +30,7 @@ import android.graphics.drawable.Drawable; import android.hardware.display.WifiDisplayStatus; import android.os.Handler; import android.provider.Settings; +import android.provider.Settings.SettingNotFoundException; import android.text.TextUtils; import android.view.View; import android.view.inputmethod.InputMethodInfo; @@ -107,9 +108,26 @@ class QuickSettingsModel implements BluetoothStateChangeCallback, } } + /** ContentObserver to watch adb */ + private class BugreportObserver extends ContentObserver { + public BugreportObserver(Handler handler) { + super(handler); + } + + @Override public void onChange(boolean selfChange) { + onBugreportChanged(); + } + + public void startObserving() { + final ContentResolver cr = mContext.getContentResolver(); + cr.registerContentObserver( + Settings.Secure.getUriFor(Settings.Secure.BUGREPORT_IN_POWER_MENU), false, this); + } + } private Context mContext; private Handler mHandler; private NextAlarmObserver mNextAlarmObserver; + private BugreportObserver mBugreportObserver; private QuickSettingsTileView mUserTile; private RefreshCallback mUserCallback; @@ -159,11 +177,17 @@ class QuickSettingsModel implements BluetoothStateChangeCallback, private RefreshCallback mBrightnessCallback; private BrightnessState mBrightnessState = new BrightnessState(); + private QuickSettingsTileView mBugreportTile; + private RefreshCallback mBugreportCallback; + private State mBugreportState = new State(); + public QuickSettingsModel(Context context) { mContext = context; mHandler = new Handler(); mNextAlarmObserver = new NextAlarmObserver(mHandler); mNextAlarmObserver.startObserving(); + mBugreportObserver = new BugreportObserver(mHandler); + mBugreportObserver.startObserving(); IntentFilter alarmIntentFilter = new IntentFilter(); alarmIntentFilter.addAction(Intent.ACTION_ALARM_CHANGED); @@ -341,6 +365,25 @@ class QuickSettingsModel implements BluetoothStateChangeCallback, mLocationCallback.refreshView(mLocationTile, mLocationState); } + // Bug report + void addBugreportTile(QuickSettingsTileView view, RefreshCallback cb) { + mBugreportTile = view; + mBugreportCallback = cb; + onBugreportChanged(); + } + // SettingsObserver callback + public void onBugreportChanged() { + final ContentResolver cr = mContext.getContentResolver(); + boolean enabled = false; + try { + enabled = (Settings.Secure.getInt(cr, Settings.Secure.BUGREPORT_IN_POWER_MENU) != 0); + } catch (SettingNotFoundException e) { + } + + mBugreportState.enabled = enabled; + mBugreportCallback.refreshView(mBugreportTile, mBugreportState); + } + // Wifi Display void addWifiDisplayTile(QuickSettingsTileView view, RefreshCallback cb) { mWifiDisplayTile = view;