Merge "instrument volume controls" into mnc-dev

This commit is contained in:
Chris Wren
2015-06-18 19:57:48 +00:00
committed by Android (Google) Code Review
4 changed files with 56 additions and 19 deletions

View File

@@ -26,6 +26,13 @@ import android.view.View;
* @hide
*/
public class MetricsLogger implements MetricsConstants {
public static final int VOLUME_DIALOG = 207;
public static final int VOLUME_DIALOG_DETAILS = 208;
public static final int ACTION_VOLUME_SLIDER = 209;
public static final int ACTION_VOLUME_STREAM = 210;
public static final int ACTION_VOLUME_KEY = 211;
public static final int ACTION_VOLUME_ICON = 212;
public static final int ACTION_RINGER_MODE = 213;
// Temporary constants go here, to await migration to MetricsConstants.
public static void visible(Context context, int category) throws IllegalArgumentException {

View File

@@ -16,11 +16,13 @@
package com.android.systemui.volume;
import android.content.Context;
import android.media.AudioManager;
import android.media.AudioSystem;
import android.provider.Settings.Global;
import android.util.Log;
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.volume.VolumeDialogController.State;
import java.util.Arrays;
@@ -47,6 +49,7 @@ public class Events {
public static final int EVENT_ZEN_MODE_CHANGED = 13; // (mode|int)
public static final int EVENT_SUPPRESSOR_CHANGED = 14; // (component|string) (name|string)
public static final int EVENT_MUTE_CHANGED = 15; // (stream|int) (muted|bool)
public static final int EVENT_TOUCH_LEVEL_DONE = 16; // (stream|int) (level|bool)
private static final String[] EVENT_TAGS = {
"show_dialog",
@@ -65,6 +68,7 @@ public class Events {
"zen_mode_changed",
"suppressor_changed",
"mute_changed",
"touch_level_done",
};
public static final int DISMISS_REASON_UNKNOWN = 0;
@@ -100,36 +104,59 @@ public class Events {
public static Callback sCallback;
public static void writeEvent(int tag, Object... list) {
public static void writeEvent(Context context, int tag, Object... list) {
final long time = System.currentTimeMillis();
final StringBuilder sb = new StringBuilder("writeEvent ").append(EVENT_TAGS[tag]);
if (list != null && list.length > 0) {
sb.append(" ");
switch (tag) {
case EVENT_SHOW_DIALOG:
MetricsLogger.visible(context, MetricsLogger.VOLUME_DIALOG);
MetricsLogger.histogram(context, "volume_from_keyguard",
(Boolean) list[1] ? 1 : 0);
sb.append(SHOW_REASONS[(Integer) list[0]]).append(" keyguard=").append(list[1]);
break;
case EVENT_EXPAND:
MetricsLogger.visibility(context, MetricsLogger.VOLUME_DIALOG_DETAILS,
(Boolean) list[0]);
sb.append(list[0]);
break;
case EVENT_DISMISS_DIALOG:
MetricsLogger.hidden(context, MetricsLogger.VOLUME_DIALOG);
sb.append(DISMISS_REASONS[(Integer) list[0]]);
break;
case EVENT_ACTIVE_STREAM_CHANGED:
MetricsLogger.action(context, MetricsLogger.ACTION_VOLUME_STREAM,
(Integer) list[0]);
sb.append(AudioSystem.streamToString((Integer) list[0]));
break;
case EVENT_ICON_CLICK:
MetricsLogger.action(context, MetricsLogger.ACTION_VOLUME_ICON,
(Integer) list[1]);
sb.append(AudioSystem.streamToString((Integer) list[0])).append(' ')
.append(iconStateToString((Integer) list[1]));
break;
case EVENT_TOUCH_LEVEL_DONE:
MetricsLogger.action(context, MetricsLogger.ACTION_VOLUME_SLIDER,
(Integer) list[1]);
// fall through
case EVENT_TOUCH_LEVEL_CHANGED:
case EVENT_LEVEL_CHANGED:
case EVENT_MUTE_CHANGED:
sb.append(AudioSystem.streamToString((Integer) list[0])).append(' ')
.append(list[1]);
break;
case EVENT_INTERNAL_RINGER_MODE_CHANGED:
case EVENT_KEY:
MetricsLogger.action(context, MetricsLogger.ACTION_VOLUME_KEY,
(Integer) list[1]);
sb.append(AudioSystem.streamToString((Integer) list[0])).append(' ')
.append(list[1]);
break;
case EVENT_EXTERNAL_RINGER_MODE_CHANGED:
MetricsLogger.action(context, MetricsLogger.ACTION_RINGER_MODE,
(Integer) list[0]);
// fall through
case EVENT_INTERNAL_RINGER_MODE_CHANGED:
sb.append(ringerModeToString((Integer) list[0]));
break;
case EVENT_ZEN_MODE_CHANGED:

View File

@@ -369,7 +369,7 @@ public class VolumeDialog {
row.icon.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Events.writeEvent(Events.EVENT_ICON_CLICK, row.stream, row.iconState);
Events.writeEvent(mContext, Events.EVENT_ICON_CLICK, row.stream, row.iconState);
mController.setActiveStream(row.stream);
if (row.stream == AudioManager.STREAM_RING) {
final boolean hasVibrator = mController.hasVibrator();
@@ -417,7 +417,7 @@ public class VolumeDialog {
if (mShowing) return;
mShowing = true;
mDialog.show();
Events.writeEvent(Events.EVENT_SHOW_DIALOG, reason, mKeyguard.isKeyguardLocked());
Events.writeEvent(mContext, Events.EVENT_SHOW_DIALOG, reason, mKeyguard.isKeyguardLocked());
mController.notifyVisible(true);
}
@@ -444,7 +444,7 @@ public class VolumeDialog {
if (!mShowing) return;
mShowing = false;
mDialog.dismiss();
Events.writeEvent(Events.EVENT_DISMISS_DIALOG, reason);
Events.writeEvent(mContext, Events.EVENT_DISMISS_DIALOG, reason);
setExpandedH(false);
mController.notifyVisible(false);
synchronized (mSafetyWarningLock) {
@@ -834,7 +834,7 @@ public class VolumeDialog {
public void onClick(View v) {
if (mExpanding) return;
final boolean newExpand = !mExpanded;
Events.writeEvent(Events.EVENT_EXPAND, v);
Events.writeEvent(mContext, Events.EVENT_EXPAND, newExpand);
setExpandedH(newExpand);
}
};
@@ -845,7 +845,7 @@ public class VolumeDialog {
mSettingsButton.postDelayed(new Runnable() {
@Override
public void run() {
Events.writeEvent(Events.EVENT_SETTINGS_CLICK);
Events.writeEvent(mContext, Events.EVENT_SETTINGS_CLICK);
if (mCallback != null) {
mCallback.onSettingsClicked();
}
@@ -933,7 +933,8 @@ public class VolumeDialog {
if (mRow.requestedLevel != userLevel) {
mController.setStreamVolume(mRow.stream, userLevel);
mRow.requestedLevel = userLevel;
Events.writeEvent(Events.EVENT_TOUCH_LEVEL_CHANGED, mRow.stream, userLevel);
Events.writeEvent(mContext, Events.EVENT_TOUCH_LEVEL_CHANGED, mRow.stream,
userLevel);
}
}
}
@@ -951,6 +952,7 @@ public class VolumeDialog {
mRow.tracking = false;
mRow.userAttempt = SystemClock.uptimeMillis();
int userLevel = getImpliedLevel(seekBar, seekBar.getProgress());
Events.writeEvent(mContext, Events.EVENT_TOUCH_LEVEL_DONE, mRow.stream, userLevel);
if (mRow.ss.level != userLevel) {
mHandler.sendMessageDelayed(mHandler.obtainMessage(H.RECHECK, mRow),
USER_ATTEMPT_GRACE_PERIOD);

View File

@@ -104,7 +104,7 @@ public class VolumeDialogController {
public VolumeDialogController(Context context, ComponentName component) {
mContext = context.getApplicationContext();
Events.writeEvent(Events.EVENT_COLLECTION_STARTED);
Events.writeEvent(mContext, Events.EVENT_COLLECTION_STARTED);
mComponent = component;
mWorkerThread = new HandlerThread(VolumeDialogController.class.getSimpleName());
mWorkerThread.start();
@@ -168,7 +168,7 @@ public class VolumeDialogController {
if (D.BUG) Log.d(TAG, "destroy");
if (mDestroyed) return;
mDestroyed = true;
Events.writeEvent(Events.EVENT_COLLECTION_STOPPED);
Events.writeEvent(mContext, Events.EVENT_COLLECTION_STOPPED);
mMediaSessions.destroy();
mObserver.destroy();
mReceiver.destroy();
@@ -293,7 +293,8 @@ public class VolumeDialogController {
if (showUI) {
changed |= updateActiveStreamW(stream);
}
changed |= updateStreamLevelW(stream, mAudio.getLastAudibleStreamVolume(stream));
int lastAudibleStreamVolume = mAudio.getLastAudibleStreamVolume(stream);
changed |= updateStreamLevelW(stream, lastAudibleStreamVolume);
changed |= checkRoutedToBluetoothW(showUI ? AudioManager.STREAM_MUSIC : stream);
if (changed) {
mCallbacks.onStateChanged(mState);
@@ -308,14 +309,14 @@ public class VolumeDialogController {
mCallbacks.onShowSilentHint();
}
if (changed && fromKey) {
Events.writeEvent(Events.EVENT_KEY);
Events.writeEvent(mContext, Events.EVENT_KEY, stream, lastAudibleStreamVolume);
}
}
private boolean updateActiveStreamW(int activeStream) {
if (activeStream == mState.activeStream) return false;
mState.activeStream = activeStream;
Events.writeEvent(Events.EVENT_ACTIVE_STREAM_CHANGED, activeStream);
Events.writeEvent(mContext, Events.EVENT_ACTIVE_STREAM_CHANGED, activeStream);
if (D.BUG) Log.d(TAG, "updateActiveStreamW " + activeStream);
final int s = activeStream < DYNAMIC_STREAM_START_INDEX ? activeStream : -1;
if (D.BUG) Log.d(TAG, "forceVolumeControlStream " + s);
@@ -364,7 +365,7 @@ public class VolumeDialogController {
if (ss.level == level) return false;
ss.level = level;
if (isLogWorthy(stream)) {
Events.writeEvent(Events.EVENT_LEVEL_CHANGED, stream, level);
Events.writeEvent(mContext, Events.EVENT_LEVEL_CHANGED, stream, level);
}
return true;
}
@@ -387,7 +388,7 @@ public class VolumeDialogController {
if (ss.muted == muted) return false;
ss.muted = muted;
if (isLogWorthy(stream)) {
Events.writeEvent(Events.EVENT_MUTE_CHANGED, stream, muted);
Events.writeEvent(mContext, Events.EVENT_MUTE_CHANGED, stream, muted);
}
if (muted && isRinger(stream)) {
updateRingerModeInternalW(mAudio.getRingerModeInternal());
@@ -410,7 +411,7 @@ public class VolumeDialogController {
if (Objects.equals(mState.effectsSuppressor, effectsSuppressor)) return false;
mState.effectsSuppressor = effectsSuppressor;
mState.effectsSuppressorName = getApplicationName(mContext, mState.effectsSuppressor);
Events.writeEvent(Events.EVENT_SUPPRESSOR_CHANGED, mState.effectsSuppressor,
Events.writeEvent(mContext, Events.EVENT_SUPPRESSOR_CHANGED, mState.effectsSuppressor,
mState.effectsSuppressorName);
return true;
}
@@ -434,21 +435,21 @@ public class VolumeDialogController {
Settings.Global.ZEN_MODE, Settings.Global.ZEN_MODE_OFF);
if (mState.zenMode == zen) return false;
mState.zenMode = zen;
Events.writeEvent(Events.EVENT_ZEN_MODE_CHANGED, zen);
Events.writeEvent(mContext, Events.EVENT_ZEN_MODE_CHANGED, zen);
return true;
}
private boolean updateRingerModeExternalW(int rm) {
if (rm == mState.ringerModeExternal) return false;
mState.ringerModeExternal = rm;
Events.writeEvent(Events.EVENT_EXTERNAL_RINGER_MODE_CHANGED, rm);
Events.writeEvent(mContext, Events.EVENT_EXTERNAL_RINGER_MODE_CHANGED, rm);
return true;
}
private boolean updateRingerModeInternalW(int rm) {
if (rm == mState.ringerModeInternal) return false;
mState.ringerModeInternal = rm;
Events.writeEvent(Events.EVENT_INTERNAL_RINGER_MODE_CHANGED, rm);
Events.writeEvent(mContext, Events.EVENT_INTERNAL_RINGER_MODE_CHANGED, rm);
return true;
}