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
This commit is contained in:
John Spurlock
2014-07-19 23:11:36 -04:00
parent 802603572c
commit eb2727bb2f
17 changed files with 177 additions and 264 deletions

View File

@@ -14,7 +14,7 @@
limitations under the License.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/system_warning_color" />
<solid android:color="@color/system_secondary_color" />
<corners
android:topLeftRadius="0dp"
android:topRightRadius="0dp"

View File

@@ -1,27 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true">
<shape android:shape="rectangle">
<solid android:color="@color/segmented_button_selected" />
<corners android:radius="@dimen/segmented_button_radius" />
</shape>
</item>
<item>
<ripple android:color="@color/segmented_button_selected" />
</item>
</selector>

View File

@@ -1,21 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="@color/segmented_button_background" />
<corners android:radius="@dimen/segmented_button_radius" />
</shape>

View File

@@ -1,23 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/zen_alarm_soft_warning_background" />
<corners
android:topLeftRadius="0dp"
android:topRightRadius="0dp"
android:bottomLeftRadius="@dimen/notification_material_rounded_rect_radius"
android:bottomRightRadius="@dimen/notification_material_rounded_rect_radius"/>
</shape>

View File

@@ -18,7 +18,7 @@
android:id="@+id/quick_settings_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/qs_panel_background"
android:background="@drawable/qs_background_primary"
android:elevation="2dp">
<com.android.systemui.qs.QSPanel

View File

@@ -20,7 +20,7 @@
android:layout_marginStart="@dimen/segmented_button_spacing"
android:layout_weight="1"
android:textColor="@color/segmented_button_text_selector"
android:background="@drawable/segmented_button"
android:background="@drawable/btn_borderless_rect"
android:textAppearance="@style/TextAppearance.QS.SegmentedButton"
android:minHeight="0dp"
android:minHeight="36dp"
android:padding="10dp" />

View File

@@ -17,7 +17,7 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="@dimen/volume_panel_width"
android:layout_height="wrap_content"
android:background="@drawable/qs_panel_background"
android:background="@drawable/qs_background_primary"
android:translationZ="@dimen/volume_panel_z"
android:layout_marginBottom="@dimen/volume_panel_z">

View File

@@ -18,20 +18,21 @@
android:id="@+id/visible_panel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:orientation="vertical" >
<FrameLayout
android:id="@+id/slider_panel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/system_secondary_color"
android:paddingTop="12dp"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:clipChildren="false" />
<ViewStub
android:id="@+id/zen_panel_stub"
<include
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inflatedId="@+id/zen_panel"
android:layout="@layout/zen_mode_panel" />
layout="@layout/zen_mode_panel" />
</LinearLayout>

View File

@@ -23,22 +23,20 @@
<ImageView
android:id="@+id/stream_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@null"
android:paddingBottom="10dip"
android:paddingLeft="16dip"
android:paddingRight="16dip"
android:paddingTop="10dip" />
android:layout_width="48dp"
android:layout_height="48dp"
android:scaleType="center"
android:background="@drawable/btn_borderless_rect"
android:contentDescription="@null" />
<SeekBar
android:id="@+id/seekbar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingBottom="0dip"
android:paddingEnd="17dip"
android:paddingStart="0dip"
android:paddingBottom="0dp"
android:paddingEnd="16dp"
android:paddingStart="8dp"
android:paddingTop="0dip" />
</LinearLayout>

View File

@@ -19,51 +19,59 @@
android:id="@+id/zen_mode_panel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/qs_panel_background"
android:clipChildren="false"
android:orientation="vertical"
android:paddingBottom="@dimen/qs_panel_padding" >
android:orientation="vertical" >
<com.android.systemui.volume.SegmentedButtons
android:id="@+id/zen_buttons"
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/qs_panel_padding"
android:layout_marginRight="@dimen/qs_panel_padding"
android:layout_marginTop="12dp"
android:background="@drawable/segmented_buttons"
android:clipChildren="false" />
android:minHeight="12dp"
android:background="@drawable/qs_background_secondary" >
<com.android.systemui.volume.SegmentedButtons
android:id="@+id/zen_buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/qs_panel_padding"
android:layout_marginRight="@dimen/qs_panel_padding"
android:layout_marginTop="8dp"
android:layout_marginBottom="12dp"
android:clipChildren="false" />
</FrameLayout>
<FrameLayout
android:id="@+id/zen_subhead"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/qs_panel_padding"
android:paddingRight="@dimen/qs_panel_padding"
android:paddingTop="@dimen/qs_panel_padding" >
android:layout_height="62dp"
android:paddingLeft="8dp"
android:paddingRight="8dp" >
<TextView
android:id="@+id/zen_subhead_collapsed"
android:layout_width="wrap_content"
android:layout_height="32dp"
android:layout_height="48dp"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:paddingLeft="8dp"
android:background="@drawable/btn_borderless_rect"
android:clickable="true"
android:drawableEnd="@drawable/qs_subhead_caret"
android:gravity="center_vertical"
android:textAppearance="@style/TextAppearance.QS.Subhead" />
<TextView
android:id="@+id/zen_subhead_expanded"
android:layout_width="wrap_content"
android:layout_height="32dp"
android:layout_height="48dp"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:paddingLeft="8dp"
android:textAppearance="@style/TextAppearance.QS.Subhead" />
<ImageView
android:id="@+id/zen_more_settings"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_gravity="end"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="end|center_vertical"
android:background="@drawable/btn_borderless_rect"
android:clickable="true"
android:contentDescription="@null"
@@ -76,15 +84,16 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="3dp" />
android:paddingBottom="@dimen/qs_panel_padding" />
<TextView
android:id="@+id/zen_alarm_warning"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginTop="@dimen/qs_panel_padding"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/qs_panel_padding"
android:paddingLeft="@dimen/qs_panel_padding"
android:paddingRight="@dimen/qs_panel_padding"
android:gravity="center_vertical"
android:textAppearance="@style/TextAppearance.QS.DetailEmpty" />
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:textAppearance="@style/TextAppearance.QS.Subhead" />
</com.android.systemui.volume.ZenModePanel>

View File

@@ -34,17 +34,15 @@
<color name="batterymeter_charge_color">#FFFFFFFF</color>
<color name="batterymeter_bolt_color">#FFFFFFFF</color>
<color name="qs_batterymeter_frame_color">#FF404040</color>
<color name="system_primary_color">#ff263238</color>
<color name="system_primary_color">#ff263238</color><!-- blue grey 900 -->
<color name="system_secondary_color">#ff384248</color>
<color name="system_accent_color">#ff80CBC4</color><!-- deep teal 200 -->
<color name="system_warning_color">#fff4511e</color><!-- deep orange 600 -->
<color name="qs_text">#FFFFFFFF</color>
<color name="qs_tile_divider">#29ffffff</color><!-- 16% white -->
<color name="qs_tile_text">#B3FFFFFF</color><!-- 70% white -->
<color name="qs_subhead">#66FFFFFF</color><!-- 40% white -->
<color name="qs_subhead">#99FFFFFF</color><!-- 60% white -->
<color name="qs_detail_empty">#24B0BEC5</color><!-- 14% blue grey 200-->
<color name="zen_alarm_soft_warning_text">#99FFFFFF</color><!-- 60% white -->
<color name="zen_alarm_soft_warning_background">#15FFFFFF</color><!-- 8% white -->
<color name="data_usage_secondary">#99FFFFFF</color><!-- 60% white -->
<color name="data_usage_graph_track">#33FFFFFF</color><!-- 20% white -->
<color name="data_usage_graph_warning">#FFFFFFFF</color>
@@ -94,7 +92,5 @@
<!-- The color of the circle around the primary user in the user switcher -->
<color name="current_user_border_color">@color/system_accent_color</color>
<color name="segmented_button_selected">#ff3d4549</color><!-- #33afbdc4 = 20% #afbdc4 = #ff3d4549 composite -->
<color name="segmented_button_background">#ff21272b</color>
<color name="segmented_button_text_inactive">#b3afbdc4</color><!-- 70% -->
<color name="segmented_button_text_inactive">#99afbdc4</color><!-- 60% -->
</resources>

View File

@@ -186,12 +186,11 @@
<style name="TextAppearance.QS.Subhead">
<item name="android:textSize">14sp</item>
<item name="android:fontFamily">sans-serif-medium</item>
<item name="android:textColor">@color/qs_subhead</item>
</style>
<style name="TextAppearance.QS.SegmentedButton">
<item name="android:textSize">12sp</item>
<item name="android:textSize">14sp</item>
<item name="android:textAllCaps">true</item>
<item name="android:fontFamily">sans-serif-medium</item>
</style>

View File

@@ -17,17 +17,21 @@
package com.android.systemui.volume;
import android.content.Context;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.android.systemui.R;
import java.util.Objects;
public class SegmentedButtons extends LinearLayout {
private static final Typeface MEDIUM = Typeface.create("sans-serif-medium", Typeface.NORMAL);
private static final Typeface BOLD = Typeface.create("sans-serif", Typeface.BOLD);
private final Context mContext;
private final LayoutInflater mInflater;
@@ -54,9 +58,11 @@ public class SegmentedButtons extends LinearLayout {
if (Objects.equals(value, mSelectedValue)) return;
mSelectedValue = value;
for (int i = 0; i < getChildCount(); i++) {
final View c = getChildAt(i);
final TextView c = (TextView) getChildAt(i);
final Object tag = c.getTag();
c.setSelected(Objects.equals(mSelectedValue, tag));
final boolean selected = Objects.equals(mSelectedValue, tag);
c.setSelected(selected);
c.setTypeface(selected ? BOLD : MEDIUM);
}
fireOnSelected();
}

View File

@@ -130,18 +130,14 @@ public class VolumePanel extends Handler {
/** 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 class VolumePanel extends Handler {
}
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 @@ public class VolumePanel extends Handler {
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 @@ public class VolumePanel extends Handler {
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 @@ public class VolumePanel extends Handler {
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 @@ public class VolumePanel extends Handler {
// 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 @@ public class VolumePanel extends Handler {
}
private boolean isShowing() {
return mDialog != null ? mDialog.isShowing() : mParent.isAttachedToWindow();
return mDialog.isShowing();
}
protected void onPlaySound(int streamType, int flags) {
@@ -1166,13 +1147,11 @@ public class VolumePanel extends Handler {
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) {

View File

@@ -84,7 +84,7 @@ public class VolumeUI extends SystemUI {
private void initPanel() {
mDismissDelay = mContext.getResources().getInteger(R.integer.volume_panel_dismiss_delay);
mPanel = new VolumePanel(mContext, null, new ZenModeControllerImpl(mContext, mHandler));
mPanel = new VolumePanel(mContext, new ZenModeControllerImpl(mContext, mHandler));
mPanel.setCallback(new VolumePanel.Callback() {
@Override
public void onZenSettings() {

View File

@@ -84,8 +84,7 @@ public class ZenModePanel extends LinearLayout {
private final int mHardWarningColor;
private final int mSoftWarningColor;
private char mLogTag = '?';
private String mTag;
private String mTag = TAG + "/" + Integer.toHexString(System.identityHashCode(this));
private SegmentedButtons mZenButtons;
private View mZenSubhead;
@@ -95,13 +94,13 @@ public class ZenModePanel extends LinearLayout {
private LinearLayout mZenConditions;
private TextView mAlarmWarning;
private int mBottomPadding;
private Callback mCallback;
private ZenModeController mController;
private boolean mRequestingConditions;
private Uri mExitConditionId;
private int mBucketIndex = -1;
private boolean mExpanded;
private boolean mHidden = false;
private int mSessionZen;
private Uri mSessionExitConditionId;
private String mExitConditionText;
@@ -115,22 +114,15 @@ public class ZenModePanel extends LinearLayout {
mFastOutSlowInInterpolator = AnimationUtils.loadInterpolator(mContext,
android.R.interpolator.fast_out_slow_in);
final Resources res = mContext.getResources();
mHardWarningColor = res.getColor(R.color.qs_text);
mSoftWarningColor = res.getColor(R.color.zen_alarm_soft_warning_text);
updateTag();
mHardWarningColor = res.getColor(R.color.system_warning_color);
mSoftWarningColor = res.getColor(R.color.qs_subhead);
if (DEBUG) Log.d(mTag, "new ZenModePanel");
}
private void updateTag() {
mTag = TAG + "/" + mLogTag + "/" + Integer.toHexString(System.identityHashCode(this));
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
mBottomPadding = getPaddingBottom();
mZenButtons = (SegmentedButtons) findViewById(R.id.zen_buttons);
mZenButtons.addButton(R.string.interruption_level_none, Global.ZEN_MODE_NO_INTERRUPTIONS);
mZenButtons.addButton(R.string.interruption_level_priority,
@@ -184,6 +176,12 @@ public class ZenModePanel extends LinearLayout {
setExpanded(false);
}
public void setHidden(boolean hidden) {
if (mHidden == hidden) return;
mHidden = hidden;
updateWidgets();
}
private void setExpanded(boolean expanded) {
if (expanded == mExpanded) return;
mExpanded = expanded;
@@ -217,10 +215,8 @@ public class ZenModePanel extends LinearLayout {
}
}
public void init(ZenModeController controller, char logTag) {
public void init(ZenModeController controller) {
mController = controller;
mLogTag = logTag;
updateTag();
setExitConditionId(mController.getExitConditionId());
refreshExitConditionText();
mSessionZen = getSelectedZen(-1);
@@ -290,15 +286,17 @@ public class ZenModePanel extends LinearLayout {
final boolean zenNone = zen == Global.ZEN_MODE_NO_INTERRUPTIONS;
final boolean foreverSelected = mExitConditionId == null;
final boolean hasNextAlarm = mNextAlarm != 0;
final boolean showAlarmWarning = zenNone && mExpanded && hasNextAlarm;
final boolean expanded = !mHidden && mExpanded;
final boolean showAlarmWarning = zenNone && expanded && hasNextAlarm;
mZenSubhead.setVisibility(!zenOff && (mExpanded || !foreverSelected) ? VISIBLE : GONE);
mZenSubheadExpanded.setVisibility(mExpanded ? VISIBLE : GONE);
mZenSubheadCollapsed.setVisibility(!mExpanded ? VISIBLE : GONE);
mMoreSettings.setVisibility(zenImportant && mExpanded ? VISIBLE : GONE);
mZenConditions.setVisibility(!zenOff && mExpanded ? VISIBLE : GONE);
mAlarmWarning.setVisibility(zenNone && mExpanded && hasNextAlarm ? VISIBLE : GONE);
setPadding(0, 0, 0, showAlarmWarning ? 0 : mBottomPadding);
mZenButtons.setVisibility(mHidden ? GONE : VISIBLE);
mZenSubhead.setVisibility(!mHidden && !zenOff && (expanded || !foreverSelected) ? VISIBLE
: GONE);
mZenSubheadExpanded.setVisibility(expanded ? VISIBLE : GONE);
mZenSubheadCollapsed.setVisibility(!expanded ? VISIBLE : GONE);
mMoreSettings.setVisibility(zenImportant && expanded ? VISIBLE : GONE);
mZenConditions.setVisibility(!zenOff && expanded ? VISIBLE : GONE);
mAlarmWarning.setVisibility(zenNone && expanded && hasNextAlarm ? VISIBLE : GONE);
if (showAlarmWarning) {
final long exitTime = ZenModeConfig.tryParseCountdownConditionId(mExitConditionId);
final long now = System.currentTimeMillis();
@@ -311,13 +309,11 @@ public class ZenModePanel extends LinearLayout {
if (isWarning) {
mAlarmWarning.setText(mContext.getString(R.string.zen_alarm_warning, alarm));
mAlarmWarning.setTextColor(mHardWarningColor);
mAlarmWarning.setBackgroundResource(R.drawable.zen_alarm_hard_background);
} else {
mAlarmWarning.setText(mContext.getString(alarmToday
? R.string.zen_alarm_information_time
: R.string.zen_alarm_information_day_time, alarm));
mAlarmWarning.setTextColor(mSoftWarningColor);
mAlarmWarning.setBackgroundResource(R.drawable.zen_alarm_soft_background);
}
}