Volume: new coat of paint.
- Two sections (lighter header, darker detail) like QS.
- Fewer text variants.
- Remove backgrounds for segmented buttons.
- Remove alarm warning background.
- Fix slider-only style.
- Ensure all touch-targets are 48dp.
Bug:16419191
Change-Id: I220f3a736eba3dd7a1b9ff58a8fe4bf3d21db61a
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java b/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java
index fc530d0..55851fc 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java
@@ -130,18 +130,14 @@
/** Volume panel content view */
private final View mView;
- /** Dialog hosting the panel, if not embedded */
+ /** Dialog hosting the panel */
private final Dialog mDialog;
- /** Parent view hosting the panel, if embedded */
- private final ViewGroup mParent;
/** The visible portion of the volume overlay */
private final ViewGroup mPanel;
/** Contains the slider and its touchable icons */
private final ViewGroup mSliderPanel;
- /** The zen mode configuration panel view stub */
- private final ViewStub mZenPanelStub;
- /** The zen mode configuration panel view, once inflated */
+ /** The zen mode configuration panel view */
private ZenModePanel mZenPanel;
private Callback mCallback;
@@ -276,10 +272,9 @@
}
- public VolumePanel(Context context, ViewGroup parent, ZenModeController zenController) {
- mTag = String.format("%s.%s.%08x", TAG, parent == null ? "Dialog" : "Embed", hashCode());
+ public VolumePanel(Context context, ZenModeController zenController) {
+ mTag = String.format("%s.%08x", TAG, hashCode());
mContext = context;
- mParent = parent;
mZenController = zenController;
mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
@@ -292,71 +287,65 @@
streamRes.show = (streamRes.streamType == STREAM_MASTER);
}
}
- if (LOGD) Log.d(mTag, String.format("new VolumePanel hasParent=%s", parent != null));
- if (parent == null) {
- // dialog mode
- mDialog = new Dialog(context) {
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- if (isShowing() && event.getAction() == MotionEvent.ACTION_OUTSIDE &&
- sConfirmSafeVolumeDialog == null) {
- forceTimeout(0);
- return true;
- }
- return false;
+ if (LOGD) Log.d(mTag, "new VolumePanel");
+
+ mDialog = new Dialog(context) {
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ if (isShowing() && event.getAction() == MotionEvent.ACTION_OUTSIDE &&
+ sConfirmSafeVolumeDialog == null) {
+ forceTimeout(0);
+ return true;
}
- };
+ return false;
+ }
+ };
- // Change some window properties
- final Window window = mDialog.getWindow();
- final LayoutParams lp = window.getAttributes();
- lp.token = null;
- // Offset from the top
- lp.y = res.getDimensionPixelOffset(com.android.systemui.R.dimen.volume_panel_top);
- lp.type = LayoutParams.TYPE_STATUS_BAR_PANEL;
- lp.format = PixelFormat.TRANSLUCENT;
- lp.windowAnimations = com.android.systemui.R.style.VolumePanelAnimation;
- lp.gravity = Gravity.TOP;
- window.setAttributes(lp);
- window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
- window.requestFeature(Window.FEATURE_NO_TITLE);
- window.addFlags(LayoutParams.FLAG_NOT_FOCUSABLE
- | LayoutParams.FLAG_NOT_TOUCH_MODAL
- | LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
- | LayoutParams.FLAG_HARDWARE_ACCELERATED);
- mDialog.setCanceledOnTouchOutside(true);
- mDialog.setContentView(com.android.systemui.R.layout.volume_dialog);
- mDialog.setOnDismissListener(new OnDismissListener() {
- @Override
- public void onDismiss(DialogInterface dialog) {
- mActiveStreamType = -1;
- mAudioManager.forceVolumeControlStream(mActiveStreamType);
- setZenPanelVisible(false);
- }
- });
+ // Change some window properties
+ final Window window = mDialog.getWindow();
+ final LayoutParams lp = window.getAttributes();
+ lp.token = null;
+ // Offset from the top
+ lp.y = res.getDimensionPixelOffset(com.android.systemui.R.dimen.volume_panel_top);
+ lp.type = LayoutParams.TYPE_STATUS_BAR_PANEL;
+ lp.format = PixelFormat.TRANSLUCENT;
+ lp.windowAnimations = com.android.systemui.R.style.VolumePanelAnimation;
+ lp.gravity = Gravity.TOP;
+ window.setAttributes(lp);
+ window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+ window.requestFeature(Window.FEATURE_NO_TITLE);
+ window.addFlags(LayoutParams.FLAG_NOT_FOCUSABLE
+ | LayoutParams.FLAG_NOT_TOUCH_MODAL
+ | LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
+ | LayoutParams.FLAG_HARDWARE_ACCELERATED);
+ mDialog.setCanceledOnTouchOutside(true);
+ mDialog.setContentView(com.android.systemui.R.layout.volume_dialog);
+ mDialog.setOnDismissListener(new OnDismissListener() {
+ @Override
+ public void onDismiss(DialogInterface dialog) {
+ mActiveStreamType = -1;
+ mAudioManager.forceVolumeControlStream(mActiveStreamType);
+ setZenPanelVisible(false);
+ }
+ });
- mDialog.create();
- // temporary workaround, until we support window-level shadows
- mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0x00000000));
+ mDialog.create();
+ // temporary workaround, until we support window-level shadows
+ mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0x00000000));
- mView = window.findViewById(R.id.content);
- mView.setOnTouchListener(new View.OnTouchListener() {
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- resetTimeout();
- return false;
- }
- });
+ mView = window.findViewById(R.id.content);
+ mView.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ resetTimeout();
+ return false;
+ }
+ });
- } else {
- // embedded mode
- mDialog = null;
- mView = LayoutInflater.from(mContext).inflate(
- com.android.systemui.R.layout.volume_panel, parent, false);
- }
mPanel = (ViewGroup) mView.findViewById(com.android.systemui.R.id.visible_panel);
mSliderPanel = (ViewGroup) mView.findViewById(com.android.systemui.R.id.slider_panel);
- mZenPanelStub = (ViewStub)mView.findViewById(com.android.systemui.R.id.zen_panel_stub);
+ mZenPanel = (ZenModePanel) mView.findViewById(com.android.systemui.R.id.zen_mode_panel);
+ initZenModePanel();
mToneGenerators = new ToneGenerator[AudioSystem.getNumStreamTypes()];
mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
@@ -373,8 +362,29 @@
listenToRingerMode();
}
- public View getContentView() {
- return mView;
+ private void initZenModePanel() {
+ mZenPanel.init(mZenController);
+ mZenPanel.setCallback(new ZenModePanel.Callback() {
+ @Override
+ public void onMoreSettings() {
+ if (mCallback != null) {
+ mCallback.onZenSettings();
+ }
+ }
+
+ @Override
+ public void onInteraction() {
+ resetTimeout();
+ }
+
+ @Override
+ public void onExpanded(boolean expanded) {
+ if (mZenPanelExpanded == expanded) return;
+ mZenPanelExpanded = expanded;
+ updateTimeoutDelay();
+ resetTimeout();
+ }
+ });
}
private void setLayoutDirection(int layoutDirection) {
@@ -612,37 +622,10 @@
if (LOGD) Log.d(mTag, "setZenPanelVisible " + visible + " mZenPanel=" + mZenPanel);
final boolean changing = visible != isZenPanelVisible();
if (visible) {
- if (mZenPanel == null) {
- mZenPanel = (ZenModePanel) mZenPanelStub.inflate();
- mZenPanel.init(mZenController, mDialog != null ? 'D' : 'E');
- mZenPanel.setCallback(new ZenModePanel.Callback() {
- @Override
- public void onMoreSettings() {
- if (mCallback != null) {
- mCallback.onZenSettings();
- }
- }
-
- @Override
- public void onInteraction() {
- resetTimeout();
- }
-
- @Override
- public void onExpanded(boolean expanded) {
- if (mZenPanelExpanded == expanded) return;
- mZenPanelExpanded = expanded;
- updateTimeoutDelay();
- resetTimeout();
- }
- });
- }
- mZenPanel.setVisibility(View.VISIBLE);
+ mZenPanel.setHidden(false);
resetTimeout();
} else {
- if (mZenPanel != null) {
- mZenPanel.setVisibility(View.GONE);
- }
+ mZenPanel.setHidden(true);
}
if (changing) {
updateTimeoutDelay();
@@ -913,11 +896,9 @@
// when the stream is for remote playback, use -1 to reset the stream type evaluation
mAudioManager.forceVolumeControlStream(stream);
- if (mDialog != null) {
- mDialog.show();
- if (mCallback != null) {
- mCallback.onVisible(true);
- }
+ mDialog.show();
+ if (mCallback != null) {
+ mCallback.onVisible(true);
}
}
@@ -936,7 +917,7 @@
}
private boolean isShowing() {
- return mDialog != null ? mDialog.isShowing() : mParent.isAttachedToWindow();
+ return mDialog.isShowing();
}
protected void onPlaySound(int streamType, int flags) {
@@ -1166,13 +1147,11 @@
case MSG_TIMEOUT: {
if (isShowing()) {
- if (mDialog != null) {
- mDialog.dismiss();
- clearRemoteStreamController();
- mActiveStreamType = -1;
- if (mCallback != null) {
- mCallback.onVisible(false);
- }
+ mDialog.dismiss();
+ clearRemoteStreamController();
+ mActiveStreamType = -1;
+ if (mCallback != null) {
+ mCallback.onVisible(false);
}
}
synchronized (sConfirmSafeVolumeLock) {