Merge "instrument volume controls" into mnc-dev
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user