am d11ad51d: Merge "add logging to quick settings tiles" into mnc-dev

* commit 'd11ad51d119aaa826d988fbc7f6c626afff00983':
  add logging to quick settings tiles
This commit is contained in:
Chris Wren
2015-05-07 19:40:54 +00:00
committed by Android Git Automerger
16 changed files with 179 additions and 2 deletions

View File

@@ -18,6 +18,7 @@ package com.android.internal.logging;
import android.content.Context;
import android.os.Build;
import android.view.View;
/**
* Log all the things.
@@ -33,6 +34,10 @@ public class MetricsLogger implements MetricsConstants {
public static final int ACTION_BAN_APP_NOTES = 146;
public static final int NOTIFICATION_ZEN_MODE_EVENT_RULE = 147;
public static final int ACTION_DISMISS_ALL_NOTES = 148;
public static final int QS_DND_DETAILS = 149;
public static final int QS_BLUETOOTH_DETAILS = 150;
public static final int QS_CAST_DETAILS = 151;
public static final int QS_WIFI_DETAILS = 152;
public static void visible(Context context, int category) throws IllegalArgumentException {
if (Build.IS_DEBUGGABLE && category == VIEW_UNKNOWN) {
@@ -41,13 +46,27 @@ public class MetricsLogger implements MetricsConstants {
EventLogTags.writeSysuiViewVisibility(category, 100);
}
public static void hidden(Context context, int category) {
public static void hidden(Context context, int category) throws IllegalArgumentException {
if (Build.IS_DEBUGGABLE && category == VIEW_UNKNOWN) {
throw new IllegalArgumentException("Must define metric category");
}
EventLogTags.writeSysuiViewVisibility(category, 0);
}
public static void visibility(Context context, int category, boolean visibile)
throws IllegalArgumentException {
if (visibile) {
visible(context, category);
} else {
hidden(context, category);
}
}
public static void visibility(Context context, int category, int vis)
throws IllegalArgumentException {
visibility(context, category, vis == View.VISIBLE);
}
public static void action(Context context, int category) {
action(context, category, "");
}

View File

@@ -33,6 +33,7 @@ import android.view.accessibility.AccessibilityEvent;
import android.widget.ImageView;
import android.widget.TextView;
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.FontSizeUtils;
import com.android.systemui.R;
import com.android.systemui.qs.QSTile.DetailAdapter;
@@ -182,8 +183,11 @@ public class QSPanel extends ViewGroup {
public void setExpanded(boolean expanded) {
if (mExpanded == expanded) return;
mExpanded = expanded;
MetricsLogger.visibility(mContext, MetricsLogger.QS_PANEL, mExpanded);
if (!mExpanded) {
closeDetail();
} else {
logTiles();
}
}
@@ -365,9 +369,11 @@ public class QSPanel extends ViewGroup {
mDetailContent.removeAllViews();
mDetail.bringToFront();
mDetailContent.addView(r.detailView);
MetricsLogger.visible(mContext, detailAdapter.getMetricsCategory());
setDetailRecord(r);
listener = mHideGridContentWhenDone;
} else {
MetricsLogger.hidden(mContext, mDetailRecord.detailAdapter.getMetricsCategory());
mClosingDetail = true;
setGridContentVisibility(true);
listener = mTeardownDetailWhenDone;
@@ -387,9 +393,21 @@ public class QSPanel extends ViewGroup {
}
}
mBrightnessView.setVisibility(newVis);
if (mGridContentVisible != visible) {
MetricsLogger.visibility(mContext, MetricsLogger.QS_PANEL, newVis);
}
mGridContentVisible = visible;
}
private void logTiles() {
for (int i = 0; i < mRecords.size(); i++) {
TileRecord tileRecord = mRecords.get(i);
if (tileRecord.tile.getState().visible) {
MetricsLogger.visible(mContext, tileRecord.tile.getMetricsCategory());
}
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
final int width = MeasureSpec.getSize(widthMeasureSpec);

View File

@@ -29,6 +29,7 @@ import android.util.SparseArray;
import android.view.View;
import android.view.ViewGroup;
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.qs.QSTile.State;
import com.android.systemui.statusbar.policy.BluetoothController;
import com.android.systemui.statusbar.policy.CastController;
@@ -66,9 +67,17 @@ public abstract class QSTile<TState extends State> implements Listenable {
private boolean mAnnounceNextStateChange;
abstract protected TState newTileState();
abstract protected void handleClick();
abstract protected void handleUpdateState(TState state, Object arg);
/**
* Declare the category of this tile.
*
* Categories are defined in {@link com.android.internal.logging.MetricsLogger}
* or if there is no relevant existing category you may define one in
* {@link com.android.systemui.qs.QSTile}.
*/
abstract public int getMetricsCategory();
protected QSTile(Host host) {
mHost = host;
mContext = host.getContext();
@@ -97,6 +106,7 @@ public abstract class QSTile<TState extends State> implements Listenable {
View createDetailView(Context context, View convertView, ViewGroup parent);
Intent getSettingsIntent();
void setToggleState(boolean state);
int getMetricsCategory();
}
// safe to call from any thread
@@ -160,6 +170,10 @@ public abstract class QSTile<TState extends State> implements Listenable {
handleRefreshState(null);
}
protected void handleClick() {
MetricsLogger.action(mContext, getMetricsCategory(), getMetricsPackage());
};
protected void handleSecondaryClick() {
// optional
}
@@ -168,6 +182,10 @@ public abstract class QSTile<TState extends State> implements Listenable {
// optional
}
protected String getMetricsPackage() {
return "";
}
protected void handleRefreshState(Object arg) {
handleUpdateState(mTmpState, arg);
final boolean changed = mTmpState.copyTo(mState);

View File

@@ -23,6 +23,7 @@ import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.provider.Settings.Global;
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.R;
import com.android.systemui.qs.GlobalSetting;
import com.android.systemui.qs.QSTile;
@@ -55,6 +56,7 @@ public class AirplaneModeTile extends QSTile<QSTile.BooleanState> {
@Override
public void handleClick() {
super.handleClick();
setEnabled(!mState.value);
mEnable.setAllowAnimation(true);
mDisable.setAllowAnimation(true);
@@ -84,6 +86,11 @@ public class AirplaneModeTile extends QSTile<QSTile.BooleanState> {
}
}
@Override
public int getMetricsCategory() {
return MetricsLogger.QS_AIRPLANEMODE;
}
@Override
protected String composeChangeAnnouncement() {
if (mState.value) {

View File

@@ -25,6 +25,7 @@ import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import com.android.internal.logging.MetricsLogger;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.systemui.R;
import com.android.systemui.qs.QSDetailItems;
@@ -74,6 +75,7 @@ public class BluetoothTile extends QSTile<QSTile.BooleanState> {
@Override
protected void handleClick() {
super.handleClick();
final boolean isEnabled = (Boolean)mState.value;
mController.setBluetoothEnabled(!isEnabled);
}
@@ -131,6 +133,11 @@ public class BluetoothTile extends QSTile<QSTile.BooleanState> {
state.dualLabelContentDescription = bluetoothName;
}
@Override
public int getMetricsCategory() {
return MetricsLogger.QS_BLUETOOTH;
}
@Override
protected String composeChangeAnnouncement() {
if (mState.value) {
@@ -181,6 +188,11 @@ public class BluetoothTile extends QSTile<QSTile.BooleanState> {
showDetail(false);
}
@Override
public int getMetricsCategory() {
return MetricsLogger.QS_BLUETOOTH_DETAILS;
}
@Override
public View createDetailView(Context context, View convertView, ViewGroup parent) {
mItems = QSDetailItems.convertOrInflate(context, convertView, parent);

View File

@@ -24,6 +24,7 @@ import android.view.View;
import android.view.View.OnAttachStateChangeListener;
import android.view.ViewGroup;
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.R;
import com.android.systemui.qs.QSDetailItems;
import com.android.systemui.qs.QSDetailItems.Item;
@@ -85,6 +86,7 @@ public class CastTile extends QSTile<QSTile.BooleanState> {
@Override
protected void handleClick() {
super.handleClick();
showDetail(true);
}
@@ -112,6 +114,11 @@ public class CastTile extends QSTile<QSTile.BooleanState> {
mDetailAdapter.updateItems(devices);
}
@Override
public int getMetricsCategory() {
return MetricsLogger.QS_CAST;
}
@Override
protected String composeChangeAnnouncement() {
if (!mState.value) {
@@ -163,6 +170,11 @@ public class CastTile extends QSTile<QSTile.BooleanState> {
// noop
}
@Override
public int getMetricsCategory() {
return MetricsLogger.QS_CAST_DETAILS;
}
@Override
public View createDetailView(Context context, View convertView, ViewGroup parent) {
mItems = QSDetailItems.convertOrInflate(context, convertView, parent);

View File

@@ -24,6 +24,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.R;
import com.android.systemui.qs.QSTile;
import com.android.systemui.qs.QSTileView;
@@ -75,6 +76,7 @@ public class CellularTile extends QSTile<QSTile.SignalState> {
@Override
protected void handleClick() {
super.handleClick();
if (mDataController.isMobileDataSupported()) {
showDetail(true);
} else {
@@ -118,6 +120,11 @@ public class CellularTile extends QSTile<QSTile.SignalState> {
state.label);
}
@Override
public int getMetricsCategory() {
return MetricsLogger.QS_CELLULAR;
}
// Remove the period from the network name
public static String removeTrailingPeriod(String string) {
if (string == null) return null;
@@ -226,6 +233,11 @@ public class CellularTile extends QSTile<QSTile.SignalState> {
mDataController.setMobileDataEnabled(state);
}
@Override
public int getMetricsCategory() {
return MetricsLogger.QS_DATAUSAGEDETAIL;
}
@Override
public View createDetailView(Context context, View convertView, ViewGroup parent) {
final DataUsageDetailView v = (DataUsageDetailView) (convertView != null

View File

@@ -18,6 +18,7 @@ package com.android.systemui.qs.tiles;
import android.provider.Settings.Secure;
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.Prefs;
import com.android.systemui.R;
import com.android.systemui.qs.QSTile;
@@ -86,6 +87,7 @@ public class ColorInversionTile extends QSTile<QSTile.BooleanState> {
@Override
protected void handleClick() {
super.handleClick();
mSetting.setValue(mState.value ? 0 : 1);
mEnable.setAllowAnimation(true);
mDisable.setAllowAnimation(true);
@@ -114,6 +116,11 @@ public class ColorInversionTile extends QSTile<QSTile.BooleanState> {
state.icon = enabled ? mEnable : mDisable;
}
@Override
public int getMetricsCategory() {
return MetricsLogger.QS_COLORINVERSION;
}
@Override
protected String composeChangeAnnouncement() {
if (mState.value) {

View File

@@ -29,6 +29,7 @@ import android.view.View;
import android.view.View.OnAttachStateChangeListener;
import android.view.ViewGroup;
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.Prefs;
import com.android.systemui.R;
import com.android.systemui.qs.QSTile;
@@ -88,6 +89,7 @@ public class DndTile extends QSTile<QSTile.BooleanState> {
@Override
public void handleClick() {
super.handleClick();
if (mState.value) {
mController.setZen(Global.ZEN_MODE_OFF, null, TAG);
} else {
@@ -134,6 +136,11 @@ public class DndTile extends QSTile<QSTile.BooleanState> {
}
}
@Override
public int getMetricsCategory() {
return MetricsLogger.QS_DND;
}
@Override
protected String composeChangeAnnouncement() {
if (mState.value) {
@@ -208,6 +215,11 @@ public class DndTile extends QSTile<QSTile.BooleanState> {
}
}
@Override
public int getMetricsCategory() {
return MetricsLogger.QS_DND_DETAILS;
}
@Override
public View createDetailView(Context context, View convertView, ViewGroup parent) {
final ZenModePanel zmp = convertView != null ? (ZenModePanel) convertView

View File

@@ -18,6 +18,7 @@ package com.android.systemui.qs.tiles;
import android.app.ActivityManager;
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.R;
import com.android.systemui.qs.QSTile;
import com.android.systemui.statusbar.policy.FlashlightController;
@@ -59,6 +60,7 @@ public class FlashlightTile extends QSTile<QSTile.BooleanState> implements
@Override
protected void handleClick() {
super.handleClick();
if (ActivityManager.isUserAMonkey()) {
return;
}
@@ -83,6 +85,11 @@ public class FlashlightTile extends QSTile<QSTile.BooleanState> implements
state.contentDescription = mContext.getString(onOrOffId);
}
@Override
public int getMetricsCategory() {
return MetricsLogger.QS_FLASHLIGHT;
}
@Override
protected String composeChangeAnnouncement() {
if (mState.value) {

View File

@@ -20,6 +20,7 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.Prefs;
import com.android.systemui.R;
import com.android.systemui.qs.UsageTracker;
@@ -68,6 +69,7 @@ public class HotspotTile extends QSTile<QSTile.BooleanState> {
@Override
protected void handleClick() {
super.handleClick();
final boolean isEnabled = (Boolean) mState.value;
mController.setHotspotEnabled(!isEnabled);
mEnable.setAllowAnimation(true);
@@ -96,6 +98,11 @@ public class HotspotTile extends QSTile<QSTile.BooleanState> {
state.icon = state.visible && state.value ? mEnable : mDisable;
}
@Override
public int getMetricsCategory() {
return MetricsLogger.QS_HOTSPOT;
}
@Override
protected String composeChangeAnnouncement() {
if (mState.value) {

View File

@@ -29,6 +29,7 @@ import android.os.UserHandle;
import android.text.TextUtils;
import android.util.Log;
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.qs.QSTile;
import java.util.Arrays;
@@ -42,6 +43,7 @@ public class IntentTile extends QSTile<QSTile.State> {
private PendingIntent mOnLongClick;
private String mOnLongClickUri;
private int mCurrentUserId;
private String mIntentPackage;
private IntentTile(Host host, String action) {
super(host);
@@ -82,6 +84,7 @@ public class IntentTile extends QSTile<QSTile.State> {
@Override
protected void handleClick() {
super.handleClick();
sendIntent("click", mOnClick, mOnClickUri);
}
@@ -133,6 +136,17 @@ public class IntentTile extends QSTile<QSTile.State> {
mOnClickUri = intent.getStringExtra("onClickUri");
mOnLongClick = intent.getParcelableExtra("onLongClick");
mOnLongClickUri = intent.getStringExtra("onLongClickUri");
mIntentPackage = intent.getStringExtra("package");
}
@Override
public int getMetricsCategory() {
return MetricsLogger.QS_INTENT;
}
@Override
protected String getMetricsPackage() {
return mIntentPackage == null ? "" : mIntentPackage;
}
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {

View File

@@ -16,6 +16,7 @@
package com.android.systemui.qs.tiles;
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.R;
import com.android.systemui.qs.QSTile;
import com.android.systemui.statusbar.policy.KeyguardMonitor;
@@ -58,6 +59,7 @@ public class LocationTile extends QSTile<QSTile.BooleanState> {
@Override
protected void handleClick() {
super.handleClick();
final boolean wasEnabled = (Boolean) mState.value;
mController.setLocationEnabled(!wasEnabled);
mEnable.setAllowAnimation(true);
@@ -86,6 +88,11 @@ public class LocationTile extends QSTile<QSTile.BooleanState> {
}
}
@Override
public int getMetricsCategory() {
return MetricsLogger.QS_LOCATION;
}
@Override
protected String composeChangeAnnouncement() {
if (mState.value) {

View File

@@ -18,6 +18,7 @@ package com.android.systemui.qs.tiles;
import android.content.res.Configuration;
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.R;
import com.android.systemui.qs.QSTile;
import com.android.systemui.statusbar.policy.RotationLockController;
@@ -58,6 +59,7 @@ public class RotationLockTile extends QSTile<QSTile.BooleanState> {
@Override
protected void handleClick() {
super.handleClick();
if (mController == null) return;
final boolean newState = !mState.value;
mController.setRotationLocked(newState);
@@ -92,6 +94,11 @@ public class RotationLockTile extends QSTile<QSTile.BooleanState> {
R.string.accessibility_rotation_lock_off);
}
@Override
public int getMetricsCategory() {
return MetricsLogger.QS_ROTATIONLOCK;
}
/**
* Get the correct accessibility string based on the state
*

View File

@@ -26,6 +26,7 @@ import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import com.android.internal.logging.MetricsLogger;
import com.android.settingslib.wifi.AccessPoint;
import com.android.systemui.R;
import com.android.systemui.qs.QSDetailItems;
@@ -93,6 +94,7 @@ public class WifiTile extends QSTile<QSTile.SignalState> {
@Override
protected void handleClick() {
super.handleClick();
mState.copyTo(mStateBeforeClick);
mController.setWifiEnabled(!mState.enabled);
}
@@ -158,6 +160,11 @@ public class WifiTile extends QSTile<QSTile.SignalState> {
state.dualLabelContentDescription = wifiName;
}
@Override
public int getMetricsCategory() {
return MetricsLogger.QS_WIFI;
}
@Override
protected boolean shouldAnnouncementBeDelayed() {
return mStateBeforeClick.enabled == mState.enabled;
@@ -273,6 +280,11 @@ public class WifiTile extends QSTile<QSTile.SignalState> {
showDetail(false);
}
@Override
public int getMetricsCategory() {
return MetricsLogger.QS_WIFI_DETAILS;
}
@Override
public View createDetailView(Context context, View convertView, ViewGroup parent) {
if (DEBUG) Log.d(TAG, "createDetailView convertView=" + (convertView != null));

View File

@@ -43,6 +43,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.util.UserIcons;
import com.android.systemui.BitmapHelper;
import com.android.systemui.GuestResumeSessionReceiver;
@@ -548,6 +549,11 @@ public class UserSwitcherController {
@Override
public void setToggleState(boolean state) {
}
@Override
public int getMetricsCategory() {
return MetricsLogger.QS_USERDETAIL;
}
};
private final KeyguardMonitor.Callback mCallback = new KeyguardMonitor.Callback() {