am 8dbcda1b: Merge "Volume: Simple dialog footer, DND in quick settings." into mnc-dev
* commit '8dbcda1b33ad9cd1c19052a332404cc221da42ee': Volume: Simple dialog footer, DND in quick settings.
This commit is contained in:
@@ -62,7 +62,7 @@ public class ZenModeConfig implements Parcelable {
|
|||||||
Calendar.WEDNESDAY, Calendar.THURSDAY };
|
Calendar.WEDNESDAY, Calendar.THURSDAY };
|
||||||
public static final int[] WEEKEND_DAYS = { Calendar.FRIDAY, Calendar.SATURDAY };
|
public static final int[] WEEKEND_DAYS = { Calendar.FRIDAY, Calendar.SATURDAY };
|
||||||
|
|
||||||
public static final int[] MINUTE_BUCKETS = new int[] { 15, 30, 45, 60, 120, 180, 240, 480 };
|
public static final int[] MINUTE_BUCKETS = generateMinuteBuckets();
|
||||||
private static final int SECONDS_MS = 1000;
|
private static final int SECONDS_MS = 1000;
|
||||||
private static final int MINUTES_MS = 60 * SECONDS_MS;
|
private static final int MINUTES_MS = 60 * SECONDS_MS;
|
||||||
private static final int ZERO_VALUE_MS = 10 * SECONDS_MS;
|
private static final int ZERO_VALUE_MS = 10 * SECONDS_MS;
|
||||||
@@ -201,6 +201,18 @@ public class ZenModeConfig implements Parcelable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static int[] generateMinuteBuckets() {
|
||||||
|
final int maxHrs = 12;
|
||||||
|
final int[] buckets = new int[maxHrs + 3];
|
||||||
|
buckets[0] = 15;
|
||||||
|
buckets[1] = 30;
|
||||||
|
buckets[2] = 45;
|
||||||
|
for (int i = 1; i <= maxHrs; i++) {
|
||||||
|
buckets[2 + i] = 60 * i;
|
||||||
|
}
|
||||||
|
return buckets;
|
||||||
|
}
|
||||||
|
|
||||||
public static String sourceToString(int source) {
|
public static String sourceToString(int source) {
|
||||||
switch (source) {
|
switch (source) {
|
||||||
case SOURCE_ANYONE:
|
case SOURCE_ANYONE:
|
||||||
@@ -298,10 +310,10 @@ public class ZenModeConfig implements Parcelable {
|
|||||||
throw new IndexOutOfBoundsException("bad source in config:" + rt.allowFrom);
|
throw new IndexOutOfBoundsException("bad source in config:" + rt.allowFrom);
|
||||||
}
|
}
|
||||||
} else if (MANUAL_TAG.equals(tag)) {
|
} else if (MANUAL_TAG.equals(tag)) {
|
||||||
rt.manualRule = readRuleXml(parser);
|
rt.manualRule = readRuleXml(parser, false /*conditionRequired*/);
|
||||||
} else if (AUTOMATIC_TAG.equals(tag)) {
|
} else if (AUTOMATIC_TAG.equals(tag)) {
|
||||||
final String id = parser.getAttributeValue(null, RULE_ATT_ID);
|
final String id = parser.getAttributeValue(null, RULE_ATT_ID);
|
||||||
final ZenRule automaticRule = readRuleXml(parser);
|
final ZenRule automaticRule = readRuleXml(parser, true /*conditionRequired*/);
|
||||||
if (id != null && automaticRule != null) {
|
if (id != null && automaticRule != null) {
|
||||||
rt.automaticRules.put(id, automaticRule);
|
rt.automaticRules.put(id, automaticRule);
|
||||||
}
|
}
|
||||||
@@ -341,7 +353,7 @@ public class ZenModeConfig implements Parcelable {
|
|||||||
out.endTag(null, ZEN_TAG);
|
out.endTag(null, ZEN_TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ZenRule readRuleXml(XmlPullParser parser) {
|
public static ZenRule readRuleXml(XmlPullParser parser, boolean conditionRequired) {
|
||||||
final ZenRule rt = new ZenRule();
|
final ZenRule rt = new ZenRule();
|
||||||
rt.enabled = safeBoolean(parser, RULE_ATT_ENABLED, true);
|
rt.enabled = safeBoolean(parser, RULE_ATT_ENABLED, true);
|
||||||
rt.snoozing = safeBoolean(parser, RULE_ATT_SNOOZING, false);
|
rt.snoozing = safeBoolean(parser, RULE_ATT_SNOOZING, false);
|
||||||
@@ -355,7 +367,7 @@ public class ZenModeConfig implements Parcelable {
|
|||||||
rt.conditionId = safeUri(parser, RULE_ATT_CONDITION_ID);
|
rt.conditionId = safeUri(parser, RULE_ATT_CONDITION_ID);
|
||||||
rt.component = safeComponentName(parser, RULE_ATT_COMPONENT);
|
rt.component = safeComponentName(parser, RULE_ATT_COMPONENT);
|
||||||
rt.condition = readConditionXml(parser);
|
rt.condition = readConditionXml(parser);
|
||||||
return rt.condition != null ? rt : null;
|
return rt.condition != null || !conditionRequired ? rt : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void writeRuleXml(ZenRule rule, XmlSerializer out) throws IOException {
|
public static void writeRuleXml(ZenRule rule, XmlSerializer out) throws IOException {
|
||||||
|
|||||||
@@ -51,5 +51,7 @@ public abstract class AudioManagerInternal {
|
|||||||
/** Called when internal ringer mode is evaluated, returns the new external ringer mode */
|
/** Called when internal ringer mode is evaluated, returns the new external ringer mode */
|
||||||
int onSetRingerModeInternal(int ringerModeOld, int ringerModeNew, String caller,
|
int onSetRingerModeInternal(int ringerModeOld, int ringerModeNew, String caller,
|
||||||
int ringerModeExternal, VolumePolicy policy);
|
int ringerModeExternal, VolumePolicy policy);
|
||||||
|
|
||||||
|
boolean canVolumeDownEnterSilent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="@drawable/qs_detail_background"
|
android:background="@drawable/qs_detail_background"
|
||||||
android:paddingBottom="16dp"
|
android:paddingBottom="8dp"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingEnd="16dp"
|
android:paddingEnd="8dp"
|
||||||
android:gravity="end">
|
android:gravity="end">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
|||||||
@@ -19,10 +19,10 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="@dimen/segmented_button_spacing"
|
android:layout_marginStart="@dimen/segmented_button_spacing"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:paddingStart="8dp"
|
android:gravity="center"
|
||||||
android:gravity="start|center_vertical"
|
|
||||||
android:maxLines="2"
|
android:maxLines="2"
|
||||||
|
android:lineSpacingMultiplier="1.05026"
|
||||||
android:textColor="@color/segmented_button_text_selector"
|
android:textColor="@color/segmented_button_text_selector"
|
||||||
android:background="@drawable/btn_borderless_rect"
|
android:background="@drawable/btn_borderless_rect"
|
||||||
android:textAppearance="@style/TextAppearance.Volume.ZenSwitchSummary"
|
android:textAppearance="@style/TextAppearance.QS.SegmentedButton"
|
||||||
android:minHeight="48dp" />
|
android:minHeight="64dp" />
|
||||||
|
|||||||
@@ -21,40 +21,31 @@
|
|||||||
android:layout_marginBottom="4dp"
|
android:layout_marginBottom="4dp"
|
||||||
android:layout_marginLeft="@dimen/notification_side_padding"
|
android:layout_marginLeft="@dimen/notification_side_padding"
|
||||||
android:layout_marginRight="@dimen/notification_side_padding"
|
android:layout_marginRight="@dimen/notification_side_padding"
|
||||||
android:layout_marginTop="4dp"
|
|
||||||
android:background="@drawable/volume_dialog_background"
|
android:background="@drawable/volume_dialog_background"
|
||||||
android:translationZ="4dp" >
|
android:translationZ="4dp" >
|
||||||
|
|
||||||
<com.android.keyguard.AlphaOptimizedImageButton
|
<com.android.keyguard.AlphaOptimizedImageButton
|
||||||
android:id="@+id/volume_expand_button"
|
android:id="@+id/volume_expand_button"
|
||||||
style="@style/VolumeButtons"
|
style="@style/VolumeButtons"
|
||||||
android:layout_alignParentLeft="true"
|
|
||||||
android:layout_width="@dimen/volume_button_size"
|
android:layout_width="@dimen/volume_button_size"
|
||||||
android:layout_height="@dimen/volume_button_size"
|
android:layout_height="@dimen/volume_button_size"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
android:soundEffectsEnabled="false"
|
android:soundEffectsEnabled="false"
|
||||||
android:src="@drawable/ic_volume_collapse_animation" />
|
android:src="@drawable/ic_volume_collapse_animation"
|
||||||
|
tools:ignore="RtlHardcoded" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/volume_dialog_content"
|
android:id="@+id/volume_dialog_content"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:paddingBottom="4dp"
|
android:paddingBottom="8dp"
|
||||||
android:paddingTop="6dp" >
|
android:paddingTop="8dp" >
|
||||||
|
|
||||||
<!-- volume rows added and removed here! :-) -->
|
<!-- volume rows added and removed here! :-) -->
|
||||||
|
|
||||||
<FrameLayout
|
|
||||||
android:id="@+id/volume_footer"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
tools:ignore="UselessParent" >
|
|
||||||
|
|
||||||
<include layout="@layout/volume_text_footer" />
|
|
||||||
|
|
||||||
<include layout="@layout/volume_zen_footer" />
|
<include layout="@layout/volume_zen_footer" />
|
||||||
</FrameLayout>
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
@@ -16,16 +16,15 @@
|
|||||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingStart="4dp"
|
android:clipChildren="false"
|
||||||
android:paddingEnd="4dp"
|
android:paddingEnd="8dp"
|
||||||
android:clipChildren="false" >
|
android:paddingStart="8dp" >
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/volume_row_header"
|
android:id="@+id/volume_row_header"
|
||||||
style="?android:attr/textAppearanceButton"
|
style="?android:attr/textAppearanceButton"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:alpha="@dimen/volume_secondary_alpha"
|
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:maxLines="1"
|
android:maxLines="1"
|
||||||
android:paddingBottom="0dp"
|
android:paddingBottom="0dp"
|
||||||
@@ -50,8 +49,8 @@
|
|||||||
android:layout_below="@id/volume_row_header"
|
android:layout_below="@id/volume_row_header"
|
||||||
android:layout_toEndOf="@id/volume_row_icon"
|
android:layout_toEndOf="@id/volume_row_icon"
|
||||||
android:layout_toStartOf="@+id/volume_settings_button"
|
android:layout_toStartOf="@+id/volume_settings_button"
|
||||||
android:paddingEnd="4dp"
|
android:paddingEnd="8dp"
|
||||||
android:paddingStart="4dp"
|
android:paddingStart="8dp"
|
||||||
android:progressTint="@android:color/white"
|
android:progressTint="@android:color/white"
|
||||||
android:thumbTint="@android:color/white" />
|
android:thumbTint="@android:color/white" />
|
||||||
|
|
||||||
|
|||||||
@@ -1,54 +0,0 @@
|
|||||||
<!--
|
|
||||||
Copyright (C) 2015 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.
|
|
||||||
-->
|
|
||||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:id="@+id/volume_text_footer"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:visibility="gone"
|
|
||||||
tools:ignore="UselessParent" >
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/volume_footline_text"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_alignBaseline="@+id/volume_footline_action_button"
|
|
||||||
android:alpha="@dimen/volume_secondary_alpha"
|
|
||||||
android:fontFamily="sans-serif"
|
|
||||||
android:paddingEnd="8dp"
|
|
||||||
android:paddingStart="13dp"
|
|
||||||
android:textColor="?android:attr/textColorPrimary" />
|
|
||||||
|
|
||||||
<Button
|
|
||||||
android:id="@+id/volume_footline_action_button"
|
|
||||||
style="@android:style/Widget.Material.Button.Borderless"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="@dimen/volume_button_size"
|
|
||||||
android:layout_toEndOf="@id/volume_footline_text"
|
|
||||||
android:layout_toStartOf="@+id/volume_settings_button"
|
|
||||||
android:alpha="@dimen/volume_secondary_alpha"
|
|
||||||
android:paddingEnd="0dp"
|
|
||||||
android:paddingStart="0dp" />
|
|
||||||
|
|
||||||
<com.android.keyguard.AlphaOptimizedImageButton
|
|
||||||
android:id="@+id/volume_settings_button"
|
|
||||||
style="@style/VolumeButtons"
|
|
||||||
android:layout_width="@dimen/volume_button_size"
|
|
||||||
android:layout_height="@dimen/volume_button_size"
|
|
||||||
android:layout_alignParentEnd="true"
|
|
||||||
android:src="@drawable/ic_volume_settings" />
|
|
||||||
|
|
||||||
</RelativeLayout>
|
|
||||||
@@ -20,93 +20,58 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical" > <!-- extends LinearLayout -->
|
android:orientation="vertical" > <!-- extends LinearLayout -->
|
||||||
|
|
||||||
<LinearLayout
|
<View
|
||||||
android:id="@+id/volume_zen_switch_bar"
|
android:id="@+id/zen_embedded_divider"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="@dimen/volume_button_size"
|
android:layout_height="1dp"
|
||||||
android:layout_marginStart="4dp"
|
android:layout_marginBottom="8dp"
|
||||||
android:layout_marginEnd="4dp"
|
android:layout_marginTop="8dp"
|
||||||
android:clickable="true"
|
android:background="#4dffffff" />
|
||||||
android:orientation="horizontal" >
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:paddingStart="8dp" >
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/volume_zen_switch_bar_icon"
|
android:id="@+id/volume_zen_icon"
|
||||||
android:layout_width="@dimen/volume_button_size"
|
android:layout_width="@dimen/volume_button_size"
|
||||||
android:layout_height="@dimen/volume_button_size"
|
android:layout_height="@dimen/volume_button_size"
|
||||||
|
android:layout_marginEnd="7dp"
|
||||||
android:scaleType="center"
|
android:scaleType="center"
|
||||||
android:src="@drawable/ic_dnd" />
|
android:src="@drawable/ic_dnd" />
|
||||||
|
|
||||||
<TextView
|
<LinearLayout
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="fill_parent"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:gravity="center_vertical"
|
android:orientation="vertical" >
|
||||||
android:textDirection="locale"
|
|
||||||
android:padding="3dp"
|
|
||||||
android:text="@string/volume_zen_switch_text"
|
|
||||||
android:textAppearance="@style/TextAppearance.Volume.ZenSwitch" />
|
|
||||||
|
|
||||||
<Switch
|
<TextView
|
||||||
android:id="@+id/volume_zen_switch"
|
android:id="@+id/volume_zen_summary_line_1"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="fill_parent"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginEnd="11dp" />
|
android:textAppearance="@style/TextAppearance.Volume.ZenSummary" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/volume_zen_summary_line_2"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textAppearance="@style/TextAppearance.Volume.ZenDetail" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<RelativeLayout
|
|
||||||
android:id="@+id/volume_zen_panel_summary"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="@dimen/volume_button_size"
|
|
||||||
android:layout_marginStart="@dimen/volume_button_size"
|
|
||||||
android:paddingEnd="7dp"
|
|
||||||
android:paddingStart="7dp" >
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/volume_zen_panel_summary_line_1"
|
android:id="@+id/volume_zen_end_now"
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:textAppearance="@style/TextAppearance.Volume.ZenSwitchSummary" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/volume_zen_panel_summary_line_2"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_below="@id/volume_zen_panel_summary_line_1"
|
|
||||||
android:textAppearance="@style/TextAppearance.Volume.ZenSwitchDetail" />
|
|
||||||
</RelativeLayout>
|
|
||||||
|
|
||||||
<include layout="@layout/zen_mode_panel" />
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/volume_zen_mode_panel_buttons"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="4dp"
|
|
||||||
android:layout_marginEnd="4dp"
|
|
||||||
android:gravity="end" >
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/volume_zen_mode_panel_more"
|
|
||||||
style="@style/QSBorderlessButton"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginEnd="8dp"
|
|
||||||
android:clickable="true"
|
|
||||||
android:focusable="true"
|
|
||||||
android:minWidth="132dp"
|
|
||||||
android:text="@string/quick_settings_more_settings"
|
|
||||||
android:textAppearance="@style/TextAppearance.QS.DetailButton" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/volume_zen_mode_panel_done"
|
|
||||||
style="@style/QSBorderlessButton"
|
style="@style/QSBorderlessButton"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
android:focusable="true"
|
android:focusable="true"
|
||||||
android:minWidth="66dp"
|
android:minWidth="91dp"
|
||||||
android:text="@string/quick_settings_done"
|
android:text="@string/volume_zen_end_now"
|
||||||
android:textAppearance="@style/TextAppearance.QS.DetailButton" />
|
android:textAppearance="@style/TextAppearance.QS.DetailButton" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|||||||
@@ -22,80 +22,20 @@
|
|||||||
android:clipChildren="false"
|
android:clipChildren="false"
|
||||||
android:orientation="vertical" >
|
android:orientation="vertical" >
|
||||||
|
|
||||||
<FrameLayout
|
|
||||||
android:id="@+id/zen_buttons_container"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:minHeight="8dp"
|
|
||||||
android:layout_marginStart="39dp"
|
|
||||||
android:elevation="4dp"
|
|
||||||
android:background="@drawable/qs_background_secondary" >
|
|
||||||
|
|
||||||
<com.android.systemui.volume.SegmentedButtons
|
<com.android.systemui.volume.SegmentedButtons
|
||||||
android:id="@+id/zen_buttons"
|
android:id="@+id/zen_buttons"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginLeft="8dp"
|
android:layout_marginStart="8dp"
|
||||||
android:layout_marginRight="8dp"
|
android:layout_marginEnd="8dp" />
|
||||||
android:layout_marginBottom="8dp"
|
|
||||||
android:clipChildren="false" />
|
|
||||||
</FrameLayout>
|
|
||||||
|
|
||||||
<View
|
<View
|
||||||
android:id="@+id/zen_embedded_divider"
|
android:id="@+id/zen_embedded_divider"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
android:layout_height="1dp"
|
android:layout_height="1dp"
|
||||||
android:visibility="gone"
|
|
||||||
android:background="#4dffffff" />
|
android:background="#4dffffff" />
|
||||||
|
|
||||||
<RelativeLayout
|
|
||||||
android:id="@+id/zen_subhead"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="62dp"
|
|
||||||
android:layout_marginStart="39dp"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:paddingLeft="8dp"
|
|
||||||
android:paddingRight="8dp" >
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/zen_subhead_collapsed"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="48dp"
|
|
||||||
android:layout_gravity="center_vertical"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:paddingLeft="8dp"
|
|
||||||
android:paddingRight="4dp"
|
|
||||||
android:background="@drawable/btn_borderless_rect"
|
|
||||||
android:clickable="true"
|
|
||||||
android:drawableEnd="@drawable/qs_subhead_caret"
|
|
||||||
android:maxLines="2"
|
|
||||||
android:ellipsize="end"
|
|
||||||
android:textAppearance="@style/TextAppearance.QS.Subhead" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/zen_subhead_expanded"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="48dp"
|
|
||||||
android:layout_gravity="center_vertical"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:paddingLeft="8dp"
|
|
||||||
android:maxLines="2"
|
|
||||||
android:ellipsize="end"
|
|
||||||
android:textAppearance="@style/TextAppearance.QS.Subhead" />
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/zen_more_settings"
|
|
||||||
android:layout_width="48dp"
|
|
||||||
android:layout_height="48dp"
|
|
||||||
android:layout_alignParentEnd="true"
|
|
||||||
android:background="@drawable/btn_borderless_rect"
|
|
||||||
android:clickable="true"
|
|
||||||
android:contentDescription="@string/accessibility_desc_settings"
|
|
||||||
android:scaleType="center"
|
|
||||||
android:src="@drawable/ic_settings" />
|
|
||||||
|
|
||||||
</RelativeLayout>
|
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/zen_introduction"
|
android:id="@+id/zen_introduction"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@@ -122,10 +62,9 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="12dp"
|
android:layout_marginTop="12dp"
|
||||||
android:layout_marginStart="55dp"
|
android:layout_marginStart="24dp"
|
||||||
android:lineSpacingMultiplier="1.20029"
|
android:lineSpacingMultiplier="1.20029"
|
||||||
android:layout_toStartOf="@id/zen_introduction_confirm"
|
android:layout_toStartOf="@id/zen_introduction_confirm"
|
||||||
android:text="@string/zen_priority_introduction"
|
|
||||||
android:textAppearance="@style/TextAppearance.QS.Introduction" />
|
android:textAppearance="@style/TextAppearance.QS.Introduction" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
@@ -141,6 +80,12 @@
|
|||||||
android:text="@string/zen_priority_customize_button"
|
android:text="@string/zen_priority_customize_button"
|
||||||
android:textAppearance="@style/TextAppearance.QS.DetailButton.White" />
|
android:textAppearance="@style/TextAppearance.QS.DetailButton.White" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="16dp"
|
||||||
|
android:layout_below="@id/zen_introduction_message"
|
||||||
|
android:layout_alignParentEnd="true" />
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
@@ -149,7 +94,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="8dp"
|
android:layout_marginTop="8dp"
|
||||||
android:layout_marginEnd="4dp"
|
android:layout_marginEnd="4dp"
|
||||||
android:layout_marginStart="39dp"
|
android:layout_marginStart="4dp"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:paddingBottom="@dimen/zen_mode_condition_detail_bottom_padding" />
|
android:paddingBottom="@dimen/zen_mode_condition_detail_bottom_padding" />
|
||||||
|
|
||||||
|
|||||||
@@ -128,7 +128,7 @@
|
|||||||
<color name="screen_pinning_request_window_bg">#80000000</color>
|
<color name="screen_pinning_request_window_bg">#80000000</color>
|
||||||
|
|
||||||
<color name="segmented_button_selected">#FFFFFFFF</color>
|
<color name="segmented_button_selected">#FFFFFFFF</color>
|
||||||
<color name="segmented_button_unselected">#B3B0BEC5</color><!-- 70% blue grey 200 -->
|
<color name="segmented_button_unselected">#FFB0BEC5</color><!-- blue grey 200 -->
|
||||||
|
|
||||||
<color name="dark_mode_icon_color_single_tone">#99000000</color>
|
<color name="dark_mode_icon_color_single_tone">#99000000</color>
|
||||||
<color name="dark_mode_icon_color_dual_tone_background">#3d000000</color>
|
<color name="dark_mode_icon_color_dual_tone_background">#3d000000</color>
|
||||||
@@ -139,4 +139,6 @@
|
|||||||
<color name="light_mode_icon_color_dual_tone_fill">#ffffff</color>
|
<color name="light_mode_icon_color_dual_tone_fill">#ffffff</color>
|
||||||
|
|
||||||
<color name="zen_introduction_message_background">#ff009688</color><!-- deep teal 500 -->
|
<color name="zen_introduction_message_background">#ff009688</color><!-- deep teal 500 -->
|
||||||
|
<color name="volume_icon_color">#ffffffff</color>
|
||||||
|
<color name="volume_settings_icon_color">#7fffffff</color>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -293,5 +293,9 @@
|
|||||||
|
|
||||||
<!-- Duration of the full carrier network change icon animation. -->
|
<!-- Duration of the full carrier network change icon animation. -->
|
||||||
<integer name="carrier_network_change_anim_time">3000</integer>
|
<integer name="carrier_network_change_anim_time">3000</integer>
|
||||||
|
|
||||||
|
<!-- Duration of the expansion animation in the volume dialog -->
|
||||||
|
<item name="volume_expand_animation_duration" type="integer">300</item>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
||||||
|
|||||||
@@ -573,4 +573,13 @@
|
|||||||
|
|
||||||
<!-- Minimum margin of the notification panel on the side, when being positioned dynamically -->
|
<!-- Minimum margin of the notification panel on the side, when being positioned dynamically -->
|
||||||
<dimen name="notification_panel_min_side_margin">48dp</dimen>
|
<dimen name="notification_panel_min_side_margin">48dp</dimen>
|
||||||
|
|
||||||
|
<!-- Vertical spacing between multiple volume slider rows -->
|
||||||
|
<dimen name="volume_slider_interspacing">8dp</dimen>
|
||||||
|
|
||||||
|
<!-- Volume dialog vertical offset from the top of the screen -->
|
||||||
|
<dimen name="volume_offset_top">0dp</dimen>
|
||||||
|
|
||||||
|
<!-- Standard image button size for volume dialog buttons -->
|
||||||
|
<dimen name="volume_button_size">48dp</dimen>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -439,7 +439,7 @@
|
|||||||
<!-- Content description of the do not disturb tile in quick settings when on in priority (not shown on the screen). [CHAR LIMIT=NONE] -->
|
<!-- Content description of the do not disturb tile in quick settings when on in priority (not shown on the screen). [CHAR LIMIT=NONE] -->
|
||||||
<string name="accessibility_quick_settings_dnd_priority_on">Do not disturb on, priority only.</string>
|
<string name="accessibility_quick_settings_dnd_priority_on">Do not disturb on, priority only.</string>
|
||||||
<!-- Content description of the do not disturb tile in quick settings when on in none (not shown on the screen). [CHAR LIMIT=NONE] -->
|
<!-- Content description of the do not disturb tile in quick settings when on in none (not shown on the screen). [CHAR LIMIT=NONE] -->
|
||||||
<string name="accessibility_quick_settings_dnd_none_on">Do not disturb on, no interruptions.</string>
|
<string name="accessibility_quick_settings_dnd_none_on">Do not disturb on, total silence.</string>
|
||||||
<!-- Content description of the do not disturb tile in quick settings when on in alarms only (not shown on the screen). [CHAR LIMIT=NONE] -->
|
<!-- Content description of the do not disturb tile in quick settings when on in alarms only (not shown on the screen). [CHAR LIMIT=NONE] -->
|
||||||
<string name="accessibility_quick_settings_dnd_alarms_on">Do not disturb on, alarms only.</string>
|
<string name="accessibility_quick_settings_dnd_alarms_on">Do not disturb on, alarms only.</string>
|
||||||
<!-- Content description of the do not disturb tile in quick settings when off (not shown on the screen). [CHAR LIMIT=NONE] -->
|
<!-- Content description of the do not disturb tile in quick settings when off (not shown on the screen). [CHAR LIMIT=NONE] -->
|
||||||
@@ -576,8 +576,8 @@
|
|||||||
<string name="quick_settings_dnd_priority_label">Priority only</string>
|
<string name="quick_settings_dnd_priority_label">Priority only</string>
|
||||||
<!-- QuickSettings: Do not disturb - Alarms only [CHAR LIMIT=NONE] -->
|
<!-- QuickSettings: Do not disturb - Alarms only [CHAR LIMIT=NONE] -->
|
||||||
<string name="quick_settings_dnd_alarms_label">Alarms only</string>
|
<string name="quick_settings_dnd_alarms_label">Alarms only</string>
|
||||||
<!-- QuickSettings: Do not disturb - No interruptions [CHAR LIMIT=NONE] -->
|
<!-- QuickSettings: Do not disturb - Total silence [CHAR LIMIT=NONE] -->
|
||||||
<string name="quick_settings_dnd_none_label">No interruptions</string>
|
<string name="quick_settings_dnd_none_label">Total silence</string>
|
||||||
<!-- QuickSettings: Bluetooth [CHAR LIMIT=NONE] -->
|
<!-- QuickSettings: Bluetooth [CHAR LIMIT=NONE] -->
|
||||||
<string name="quick_settings_bluetooth_label">Bluetooth</string>
|
<string name="quick_settings_bluetooth_label">Bluetooth</string>
|
||||||
<!-- QuickSettings: Bluetooth (Multiple) [CHAR LIMIT=NONE] -->
|
<!-- QuickSettings: Bluetooth (Multiple) [CHAR LIMIT=NONE] -->
|
||||||
@@ -725,32 +725,14 @@
|
|||||||
<!-- Description of the left direction in which one can to slide the handle in the Slide unlock screen. [CHAR LIMIT=NONE] -->
|
<!-- Description of the left direction in which one can to slide the handle in the Slide unlock screen. [CHAR LIMIT=NONE] -->
|
||||||
<string name="description_direction_left">"Slide left for <xliff:g id="target_description" example="Unlock">%s</xliff:g>.</string>
|
<string name="description_direction_left">"Slide left for <xliff:g id="target_description" example="Unlock">%s</xliff:g>.</string>
|
||||||
|
|
||||||
<!-- Zen mode: No interruptions title, with a warning about alarms. [CHAR LIMIT=60] -->
|
|
||||||
<string name="zen_no_interruptions_with_warning">No interruptions. Not even alarms.</string>
|
|
||||||
|
|
||||||
<!-- Zen mode: Priority only introduction message on first use -->
|
<!-- Zen mode: Priority only introduction message on first use -->
|
||||||
<string name="zen_priority_introduction">You won\'t be disturbed by sounds and vibrations, except from alarms, reminders, events, and callers you specify.</string>
|
<string name="zen_priority_introduction">You won’t be disturbed by sounds and vibrations, except from alarms, reminders, events, and callers you specify.</string>
|
||||||
|
|
||||||
<!-- Zen mode: Priority only customization button label -->
|
<!-- Zen mode: Priority only customization button label -->
|
||||||
<string name="zen_priority_customize_button">Customize</string>
|
<string name="zen_priority_customize_button">Customize</string>
|
||||||
|
|
||||||
<!-- Zen mode: No interruptions. [CHAR LIMIT=40] -->
|
<!-- Zen mode: Total silence introduction message on first use -->
|
||||||
<string name="zen_no_interruptions">No interruptions</string>
|
<string name="zen_silence_introduction">This blocks ALL sounds and vibrations, including from alarms, music, videos, and games. You’ll still be able to make phone calls.</string>
|
||||||
|
|
||||||
<!-- Zen mode: Only important interruptions. [CHAR LIMIT=40] -->
|
|
||||||
<string name="zen_important_interruptions">Priority interruptions only</string>
|
|
||||||
|
|
||||||
<!-- Zen mode: Only alarms. [CHAR LIMIT=40] -->
|
|
||||||
<string name="zen_alarms">Alarms only</string>
|
|
||||||
|
|
||||||
<!-- Zen mode: Next alarm information - just a time. [CHAR LIMIT=40] -->
|
|
||||||
<string name="zen_alarm_information_time">Your next alarm is at <xliff:g id="alarm_time" example="5:00 PM">%s</xliff:g></string>
|
|
||||||
|
|
||||||
<!-- Zen mode: Next alarm information - day and time. [CHAR LIMIT=40] -->
|
|
||||||
<string name="zen_alarm_information_day_time">Your next alarm is <xliff:g id="alarm_day_and_time" example="Fri 5:00 PM">%s</xliff:g></string>
|
|
||||||
|
|
||||||
<!-- Zen mode: Next alarm warning. [CHAR LIMIT=40] -->
|
|
||||||
<string name="zen_alarm_warning">You won\'t hear your alarm at <xliff:g id="alarm_time" example="5:00 PM">%s</xliff:g></string>
|
|
||||||
|
|
||||||
<!-- Text for overflow card on Keyguard when there is not enough space for all notifications on Keyguard. [CHAR LIMIT=1] -->
|
<!-- Text for overflow card on Keyguard when there is not enough space for all notifications on Keyguard. [CHAR LIMIT=1] -->
|
||||||
<string name="keyguard_more_overflow_text">+<xliff:g id="number_of_notifications" example="5">%d</xliff:g></string>
|
<string name="keyguard_more_overflow_text">+<xliff:g id="number_of_notifications" example="5">%d</xliff:g></string>
|
||||||
@@ -771,7 +753,7 @@
|
|||||||
<string name="camera_hint">Swipe left for camera</string>
|
<string name="camera_hint">Swipe left for camera</string>
|
||||||
|
|
||||||
<!-- Interruption level: None. [CHAR LIMIT=20] -->
|
<!-- Interruption level: None. [CHAR LIMIT=20] -->
|
||||||
<string name="interruption_level_none">No interruptions</string>
|
<string name="interruption_level_none">Total silence</string>
|
||||||
|
|
||||||
<!-- Interruption level: Priority. [CHAR LIMIT=20] -->
|
<!-- Interruption level: Priority. [CHAR LIMIT=20] -->
|
||||||
<string name="interruption_level_priority">Priority only</string>
|
<string name="interruption_level_priority">Priority only</string>
|
||||||
@@ -779,11 +761,8 @@
|
|||||||
<!-- Interruption level: Alarms only. [CHAR LIMIT=20] -->
|
<!-- Interruption level: Alarms only. [CHAR LIMIT=20] -->
|
||||||
<string name="interruption_level_alarms">Alarms only</string>
|
<string name="interruption_level_alarms">Alarms only</string>
|
||||||
|
|
||||||
<!-- Interruption level: All. [CHAR LIMIT=20] -->
|
|
||||||
<string name="interruption_level_all">All</string>
|
|
||||||
|
|
||||||
<!-- Interruption level: None. Optimized for narrow two-line display. [CHAR LIMIT=20] -->
|
<!-- Interruption level: None. Optimized for narrow two-line display. [CHAR LIMIT=20] -->
|
||||||
<string name="interruption_level_none_twoline">No\ninterruptions</string>
|
<string name="interruption_level_none_twoline">Total\nsilence</string>
|
||||||
|
|
||||||
<!-- Interruption level: Priority. Optimized for narrow two-line display. [CHAR LIMIT=20] -->
|
<!-- Interruption level: Priority. Optimized for narrow two-line display. [CHAR LIMIT=20] -->
|
||||||
<string name="interruption_level_priority_twoline">Priority\nonly</string>
|
<string name="interruption_level_priority_twoline">Priority\nonly</string>
|
||||||
@@ -953,6 +932,9 @@
|
|||||||
<!-- Accessibility string for current zen mode and selected exit condition. A template that simply concatenates existing mode string and the current condition description. [CHAR LIMIT=20] -->
|
<!-- Accessibility string for current zen mode and selected exit condition. A template that simply concatenates existing mode string and the current condition description. [CHAR LIMIT=20] -->
|
||||||
<string name="zen_mode_and_condition"><xliff:g id="zen_mode" example="Priority interruptions only">%1$s</xliff:g>. <xliff:g id="exit_condition" example="For one hour">%2$s</xliff:g></string>
|
<string name="zen_mode_and_condition"><xliff:g id="zen_mode" example="Priority interruptions only">%1$s</xliff:g>. <xliff:g id="exit_condition" example="For one hour">%2$s</xliff:g></string>
|
||||||
|
|
||||||
|
<!-- Button label for ending zen mode in the volume dialog -->
|
||||||
|
<string name="volume_zen_end_now">End now</string>
|
||||||
|
|
||||||
<!-- Screen pinning dialog title. -->
|
<!-- Screen pinning dialog title. -->
|
||||||
<string name="screen_pinning_title">Screen is pinned</string>
|
<string name="screen_pinning_title">Screen is pinned</string>
|
||||||
<!-- Screen pinning dialog description. -->
|
<!-- Screen pinning dialog description. -->
|
||||||
@@ -988,9 +970,26 @@
|
|||||||
<!-- VolumeUI restoration notification: text -->
|
<!-- VolumeUI restoration notification: text -->
|
||||||
<string name="volumeui_notification_text">Touch to restore the original.</string>
|
<string name="volumeui_notification_text">Touch to restore the original.</string>
|
||||||
|
|
||||||
<!-- Volume dialog zen toggle switch title -->
|
|
||||||
<string name="volume_zen_switch_text" translatable="false">@*android:string/zen_mode_feature_name</string>
|
|
||||||
|
|
||||||
<!-- Toast shown when user unlocks screen and managed profile activity is in the foreground -->
|
<!-- Toast shown when user unlocks screen and managed profile activity is in the foreground -->
|
||||||
<string name="managed_profile_foreground_toast">You are in the Work profile</string>
|
<string name="managed_profile_foreground_toast">You are in the Work profile</string>
|
||||||
|
|
||||||
|
<string-array name="volume_stream_titles" translatable="false">
|
||||||
|
<item>Voice calls</item> <!-- STREAM_VOICE_CALL -->
|
||||||
|
<item>System</item> <!-- STREAM_SYSTEM -->
|
||||||
|
<item>Notifications</item> <!-- STREAM_RING -->
|
||||||
|
<item>Media</item> <!-- STREAM_MUSIC -->
|
||||||
|
<item>Alarms</item> <!-- STREAM_ALARM -->
|
||||||
|
<item></item> <!-- STREAM_NOTIFICATION -->
|
||||||
|
<item>Bluetooth calls</item> <!-- STREAM_BLUETOOTH_SCO -->
|
||||||
|
<item></item> <!-- STREAM_SYSTEM_ENFORCED -->
|
||||||
|
<item></item> <!-- STREAM_DTMF -->
|
||||||
|
<item></item> <!-- STREAM_TTS -->
|
||||||
|
</string-array>
|
||||||
|
|
||||||
|
<string name="volume_stream_muted" translatable="false">%s silent</string>
|
||||||
|
<string name="volume_stream_vibrate" translatable="false">%s vibrate</string>
|
||||||
|
<string name="volume_stream_suppressed" translatable="false">%1$s silent — %2$s</string>
|
||||||
|
<string name="volume_stream_muted_dnd" translatable="false">%s silent — Total silence</string>
|
||||||
|
<string name="volume_stream_limited_dnd" translatable="false">%s — Priority only</string>
|
||||||
|
<string name="volume_stream_vibrate_dnd" translatable="false">%s vibrate — Priority only</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -165,7 +165,7 @@
|
|||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="TextAppearance.QS.SegmentedButton">
|
<style name="TextAppearance.QS.SegmentedButton">
|
||||||
<item name="android:textSize">14sp</item>
|
<item name="android:textSize">16sp</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="TextAppearance.QS.DataUsage">
|
<style name="TextAppearance.QS.DataUsage">
|
||||||
@@ -262,4 +262,31 @@
|
|||||||
<item name="fillColor">@color/dark_mode_icon_color_dual_tone_fill</item>
|
<item name="fillColor">@color/dark_mode_icon_color_dual_tone_fill</item>
|
||||||
<item name="singleToneColor">@color/dark_mode_icon_color_single_tone</item>
|
<item name="singleToneColor">@color/dark_mode_icon_color_single_tone</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style name="TextAppearance.Volume">
|
||||||
|
<item name="android:textStyle">normal</item>
|
||||||
|
<item name="android:textColor">#ffffffff</item>
|
||||||
|
<item name="android:fontFamily">sans-serif</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="TextAppearance.Volume.ZenSummary">
|
||||||
|
<item name="android:textSize">14sp</item>
|
||||||
|
<item name="android:fontFamily">sans-serif-medium</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="TextAppearance.Volume.ZenDetail">
|
||||||
|
<item name="android:textSize">14sp</item>
|
||||||
|
<item name="android:fontFamily">sans-serif</item>
|
||||||
|
<item name="android:textColor">#ffb0b3c5</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="VolumeDialogAnimations">
|
||||||
|
<item name="android:windowEnterAnimation">@android:anim/fade_in</item>
|
||||||
|
<item name="android:windowExitAnimation">@android:anim/fade_out</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="VolumeButtons" parent="@android:style/Widget.Material.Button.Borderless">
|
||||||
|
<item name="android:background">@drawable/btn_borderless_rect</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1,87 +0,0 @@
|
|||||||
<!--
|
|
||||||
Copyright (C) 2015 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.
|
|
||||||
-->
|
|
||||||
<resources xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
|
|
||||||
<item name="volume_expand_animation_duration" type="integer">300</item>
|
|
||||||
|
|
||||||
<color name="volume_icon_color">#ffffffff</color>
|
|
||||||
<color name="volume_settings_icon_color">#7fffffff</color>
|
|
||||||
|
|
||||||
<dimen name="volume_slider_interspacing">2dp</dimen>
|
|
||||||
<dimen name="volume_offset_top">0dp</dimen>
|
|
||||||
<dimen name="volume_button_size">48dp</dimen>
|
|
||||||
|
|
||||||
<item name="volume_secondary_alpha" format="float" type="dimen">0.3</item>
|
|
||||||
|
|
||||||
<style name="VolumeDialogAnimations">
|
|
||||||
<item name="android:windowEnterAnimation">@android:anim/fade_in</item>
|
|
||||||
<item name="android:windowExitAnimation">@android:anim/fade_out</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="VolumeButtons" parent="@android:style/Widget.Material.Button.Borderless">
|
|
||||||
<item name="android:background">@drawable/btn_borderless_rect</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="TextAppearance" />
|
|
||||||
|
|
||||||
<style name="TextAppearance.Volume">
|
|
||||||
<item name="android:textStyle">normal</item>
|
|
||||||
<item name="android:textColor">#ffffffff</item>
|
|
||||||
<item name="android:fontFamily">sans-serif</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="TextAppearance.Volume.ZenSwitch">
|
|
||||||
<item name="android:textSize">16sp</item>
|
|
||||||
<item name="android:fontFamily">sans-serif-medium</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="TextAppearance.Volume.ZenSwitchSummary">
|
|
||||||
<item name="android:textSize">14sp</item>
|
|
||||||
<item name="android:fontFamily">sans-serif-medium</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="TextAppearance.Volume.ZenSwitchDetail">
|
|
||||||
<item name="android:textSize">14sp</item>
|
|
||||||
<item name="android:fontFamily">sans-serif</item>
|
|
||||||
<item name="android:textColor">#ffb0b3c5</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<string-array name="volume_stream_titles" translatable="false">
|
|
||||||
<item>Voice calls</item> <!-- STREAM_VOICE_CALL -->
|
|
||||||
<item>System</item> <!-- STREAM_SYSTEM -->
|
|
||||||
<item>Notifications</item> <!-- STREAM_RING -->
|
|
||||||
<item>Media</item> <!-- STREAM_MUSIC -->
|
|
||||||
<item>Alarms</item> <!-- STREAM_ALARM -->
|
|
||||||
<item></item> <!-- STREAM_NOTIFICATION -->
|
|
||||||
<item>Bluetooth calls</item> <!-- STREAM_BLUETOOTH_SCO -->
|
|
||||||
<item></item> <!-- STREAM_SYSTEM_ENFORCED -->
|
|
||||||
<item></item> <!-- STREAM_DTMF -->
|
|
||||||
<item></item> <!-- STREAM_TTS -->
|
|
||||||
</string-array>
|
|
||||||
|
|
||||||
<string name="volume_dnd_is_on" translatable="false">Do not disturb is on</string>
|
|
||||||
<string name="volume_turn_off" translatable="false">Turn off</string>
|
|
||||||
<string name="volume_stream_muted" translatable="false">%s silent</string>
|
|
||||||
<string name="volume_stream_vibrate" translatable="false">%s vibrate</string>
|
|
||||||
<string name="volume_stream_suppressed" translatable="false">%1$s silent — %2$s</string>
|
|
||||||
<string name="volume_stream_muted_dnd" translatable="false">%s silent — No interruptions</string>
|
|
||||||
<string name="volume_stream_limited_dnd" translatable="false">%s — Priority only</string>
|
|
||||||
<string name="volume_stream_vibrate_dnd" translatable="false">%s vibrate — Priority only</string>
|
|
||||||
<string name="volume_dnd_ends_in" translatable="false">Do not disturb ends in %s</string>
|
|
||||||
<string name="volume_dnd_ends_at" translatable="false">Do not disturb ends at %s</string>
|
|
||||||
<string name="volume_end_now" translatable="false">End now</string>
|
|
||||||
|
|
||||||
</resources>
|
|
||||||
@@ -37,8 +37,10 @@ public final class Prefs {
|
|||||||
Key.DND_TILE_VISIBLE,
|
Key.DND_TILE_VISIBLE,
|
||||||
Key.DND_TILE_COMBINED_ICON,
|
Key.DND_TILE_COMBINED_ICON,
|
||||||
Key.DND_CONFIRMED_PRIORITY_INTRODUCTION,
|
Key.DND_CONFIRMED_PRIORITY_INTRODUCTION,
|
||||||
|
Key.DND_CONFIRMED_SILENCE_INTRODUCTION,
|
||||||
Key.DND_FAVORITE_BUCKET_INDEX,
|
Key.DND_FAVORITE_BUCKET_INDEX,
|
||||||
Key.DND_NONE_SELECTED,
|
Key.DND_NONE_SELECTED,
|
||||||
|
Key.DND_FAVORITE_ZEN,
|
||||||
})
|
})
|
||||||
public @interface Key {
|
public @interface Key {
|
||||||
String SEARCH_APP_WIDGET_ID = "searchAppWidgetId";
|
String SEARCH_APP_WIDGET_ID = "searchAppWidgetId";
|
||||||
@@ -48,8 +50,10 @@ public final class Prefs {
|
|||||||
String DND_TILE_VISIBLE = "DndTileVisible";
|
String DND_TILE_VISIBLE = "DndTileVisible";
|
||||||
String DND_TILE_COMBINED_ICON = "DndTileCombinedIcon";
|
String DND_TILE_COMBINED_ICON = "DndTileCombinedIcon";
|
||||||
String DND_CONFIRMED_PRIORITY_INTRODUCTION = "DndConfirmedPriorityIntroduction";
|
String DND_CONFIRMED_PRIORITY_INTRODUCTION = "DndConfirmedPriorityIntroduction";
|
||||||
|
String DND_CONFIRMED_SILENCE_INTRODUCTION = "DndConfirmedSilenceIntroduction";
|
||||||
String DND_FAVORITE_BUCKET_INDEX = "DndCountdownMinuteIndex";
|
String DND_FAVORITE_BUCKET_INDEX = "DndCountdownMinuteIndex";
|
||||||
String DND_NONE_SELECTED = "DndNoneSelected";
|
String DND_NONE_SELECTED = "DndNoneSelected";
|
||||||
|
String DND_FAVORITE_ZEN = "DndFavoriteZen";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean getBoolean(Context context, @Key String key, boolean defaultValue) {
|
public static boolean getBoolean(Context context, @Key String key, boolean defaultValue) {
|
||||||
|
|||||||
@@ -37,7 +37,11 @@ import com.android.systemui.volume.ZenModePanel;
|
|||||||
|
|
||||||
/** Quick settings tile: Do not disturb **/
|
/** Quick settings tile: Do not disturb **/
|
||||||
public class DndTile extends QSTile<QSTile.BooleanState> {
|
public class DndTile extends QSTile<QSTile.BooleanState> {
|
||||||
private static final Intent ZEN_SETTINGS = new Intent(Settings.ACTION_ZEN_MODE_SETTINGS);
|
private static final Intent ZEN_SETTINGS =
|
||||||
|
new Intent(Settings.ACTION_ZEN_MODE_SETTINGS);
|
||||||
|
|
||||||
|
private static final Intent ZEN_PRIORITY_SETTINGS =
|
||||||
|
new Intent(Settings.ACTION_ZEN_MODE_PRIORITY_SETTINGS);
|
||||||
|
|
||||||
private static final String ACTION_SET_VISIBLE = "com.android.systemui.dndtile.SET_VISIBLE";
|
private static final String ACTION_SET_VISIBLE = "com.android.systemui.dndtile.SET_VISIBLE";
|
||||||
private static final String EXTRA_VISIBLE = "visible";
|
private static final String EXTRA_VISIBLE = "visible";
|
||||||
@@ -87,7 +91,9 @@ public class DndTile extends QSTile<QSTile.BooleanState> {
|
|||||||
if (mState.value) {
|
if (mState.value) {
|
||||||
mController.setZen(Global.ZEN_MODE_OFF, null, TAG);
|
mController.setZen(Global.ZEN_MODE_OFF, null, TAG);
|
||||||
} else {
|
} else {
|
||||||
mController.setZen(Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS, null, TAG);
|
int zen = Prefs.getInt(mContext, Prefs.Key.DND_FAVORITE_ZEN, Global.ZEN_MODE_ALARMS);
|
||||||
|
mController.setZen(zen, null, TAG);
|
||||||
|
refreshState(zen); // this one's optimistic
|
||||||
showDetail(true);
|
showDetail(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -209,8 +215,8 @@ public class DndTile extends QSTile<QSTile.BooleanState> {
|
|||||||
R.layout.zen_mode_panel, parent, false);
|
R.layout.zen_mode_panel, parent, false);
|
||||||
if (convertView == null) {
|
if (convertView == null) {
|
||||||
zmp.init(mController);
|
zmp.init(mController);
|
||||||
zmp.setEmbedded(true);
|
|
||||||
zmp.addOnAttachStateChangeListener(this);
|
zmp.addOnAttachStateChangeListener(this);
|
||||||
|
zmp.setCallback(mZenModePanelCallback);
|
||||||
}
|
}
|
||||||
return zmp;
|
return zmp;
|
||||||
}
|
}
|
||||||
@@ -225,4 +231,22 @@ public class DndTile extends QSTile<QSTile.BooleanState> {
|
|||||||
mShowingDetail = false;
|
mShowingDetail = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final ZenModePanel.Callback mZenModePanelCallback = new ZenModePanel.Callback() {
|
||||||
|
@Override
|
||||||
|
public void onPrioritySettings() {
|
||||||
|
mHost.startSettingsActivity(ZEN_PRIORITY_SETTINGS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onInteraction() {
|
||||||
|
// noop
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onExpanded(boolean expanded) {
|
||||||
|
// noop
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -224,14 +224,14 @@ public class PhoneStatusBarPolicy {
|
|||||||
} else if (mZen == Global.ZEN_MODE_NO_INTERRUPTIONS) {
|
} else if (mZen == Global.ZEN_MODE_NO_INTERRUPTIONS) {
|
||||||
zenVisible = true;
|
zenVisible = true;
|
||||||
zenIconId = R.drawable.stat_sys_zen_none;
|
zenIconId = R.drawable.stat_sys_zen_none;
|
||||||
zenDescription = mContext.getString(R.string.zen_no_interruptions);
|
zenDescription = mContext.getString(R.string.interruption_level_none);
|
||||||
} else if (mZen == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS) {
|
} else if (mZen == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS) {
|
||||||
zenVisible = true;
|
zenVisible = true;
|
||||||
zenIconId = R.drawable.stat_sys_zen_important;
|
zenIconId = R.drawable.stat_sys_zen_important;
|
||||||
zenDescription = mContext.getString(R.string.zen_important_interruptions);
|
zenDescription = mContext.getString(R.string.interruption_level_priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DndTile.isVisible(mContext)
|
if (DndTile.isVisible(mContext) && !DndTile.isCombinedIcon(mContext)
|
||||||
&& audioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_SILENT) {
|
&& audioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_SILENT) {
|
||||||
volumeVisible = true;
|
volumeVisible = true;
|
||||||
volumeIconId = R.drawable.stat_sys_ringer_silent;
|
volumeIconId = R.drawable.stat_sys_ringer_silent;
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ public interface ZenModeController {
|
|||||||
boolean isZenAvailable();
|
boolean isZenAvailable();
|
||||||
ComponentName getEffectsSuppressor();
|
ComponentName getEffectsSuppressor();
|
||||||
boolean isCountdownConditionSupported();
|
boolean isCountdownConditionSupported();
|
||||||
|
int getCurrentUser();
|
||||||
|
|
||||||
public static class Callback {
|
public static class Callback {
|
||||||
public void onZenChanged(int zen) {}
|
public void onZenChanged(int zen) {}
|
||||||
@@ -45,4 +46,5 @@ public interface ZenModeController {
|
|||||||
public void onManualRuleChanged(ZenRule rule) {}
|
public void onManualRuleChanged(ZenRule rule) {}
|
||||||
public void onConfigChanged(ZenModeConfig config) {}
|
public void onConfigChanged(ZenModeConfig config) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.systemui.statusbar.policy;
|
package com.android.systemui.statusbar.policy;
|
||||||
|
|
||||||
|
import android.app.ActivityManager;
|
||||||
import android.app.AlarmManager;
|
import android.app.AlarmManager;
|
||||||
import android.app.NotificationManager;
|
import android.app.NotificationManager;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
@@ -159,6 +160,11 @@ public class ZenModeControllerImpl implements ZenModeController {
|
|||||||
.isSystemConditionProviderEnabled(ZenModeConfig.COUNTDOWN_PATH);
|
.isSystemConditionProviderEnabled(ZenModeConfig.COUNTDOWN_PATH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCurrentUser() {
|
||||||
|
return ActivityManager.getCurrentUser();
|
||||||
|
}
|
||||||
|
|
||||||
private void fireNextAlarmChanged() {
|
private void fireNextAlarmChanged() {
|
||||||
for (Callback cb : mCallbacks) {
|
for (Callback cb : mCallbacks) {
|
||||||
cb.onNextAlarmChanged();
|
cb.onNextAlarmChanged();
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package com.android.systemui.volume;
|
package com.android.systemui.volume;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.graphics.Typeface;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@@ -30,6 +31,8 @@ import java.util.Objects;
|
|||||||
|
|
||||||
public class SegmentedButtons extends LinearLayout {
|
public class SegmentedButtons extends LinearLayout {
|
||||||
private static final int LABEL_RES_KEY = R.id.label;
|
private static final int LABEL_RES_KEY = R.id.label;
|
||||||
|
private static final Typeface REGULAR = Typeface.create("sans-serif", Typeface.NORMAL);
|
||||||
|
private static final Typeface MEDIUM = Typeface.create("sans-serif-medium", Typeface.NORMAL);
|
||||||
|
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final LayoutInflater mInflater;
|
private final LayoutInflater mInflater;
|
||||||
@@ -60,6 +63,7 @@ public class SegmentedButtons extends LinearLayout {
|
|||||||
final Object tag = c.getTag();
|
final Object tag = c.getTag();
|
||||||
final boolean selected = Objects.equals(mSelectedValue, tag);
|
final boolean selected = Objects.equals(mSelectedValue, tag);
|
||||||
c.setSelected(selected);
|
c.setSelected(selected);
|
||||||
|
c.setTypeface(selected ? MEDIUM : REGULAR);
|
||||||
}
|
}
|
||||||
fireOnSelected();
|
fireOnSelected();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -144,9 +144,14 @@ class Util {
|
|||||||
return HMMAA.format(new Date(millis));
|
return HMMAA.format(new Date(millis));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setText(TextView tv, CharSequence text) {
|
private static CharSequence emptyToNull(CharSequence str) {
|
||||||
if (Objects.equals(tv.getText(), text)) return;
|
return str == null || str.length() == 0 ? null : str;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean setText(TextView tv, CharSequence text) {
|
||||||
|
if (Objects.equals(emptyToNull(tv.getText()), emptyToNull(text))) return false;
|
||||||
tv.setText(text);
|
tv.setText(text);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void setVisOrGone(View v, boolean vis) {
|
public static final void setVisOrGone(View v, boolean vis) {
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ import android.os.Looper;
|
|||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
import android.provider.Settings.Global;
|
import android.provider.Settings.Global;
|
||||||
import android.service.notification.ZenModeConfig;
|
|
||||||
import android.util.DisplayMetrics;
|
import android.util.DisplayMetrics;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.SparseBooleanArray;
|
import android.util.SparseBooleanArray;
|
||||||
@@ -52,7 +51,6 @@ import android.view.ViewGroup.MarginLayoutParams;
|
|||||||
import android.view.Window;
|
import android.view.Window;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.view.animation.DecelerateInterpolator;
|
import android.view.animation.DecelerateInterpolator;
|
||||||
import android.widget.Button;
|
|
||||||
import android.widget.ImageButton;
|
import android.widget.ImageButton;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.SeekBar;
|
import android.widget.SeekBar;
|
||||||
@@ -90,16 +88,12 @@ public class VolumeDialog {
|
|||||||
private final ViewGroup mDialogView;
|
private final ViewGroup mDialogView;
|
||||||
private final ViewGroup mDialogContentView;
|
private final ViewGroup mDialogContentView;
|
||||||
private final ImageButton mExpandButton;
|
private final ImageButton mExpandButton;
|
||||||
private final TextView mFootlineText;
|
|
||||||
private final Button mFootlineAction;
|
|
||||||
private final View mSettingsButton;
|
private final View mSettingsButton;
|
||||||
private final View mFooter;
|
|
||||||
private final List<VolumeRow> mRows = new ArrayList<VolumeRow>();
|
private final List<VolumeRow> mRows = new ArrayList<VolumeRow>();
|
||||||
private final SpTexts mSpTexts;
|
private final SpTexts mSpTexts;
|
||||||
private final SparseBooleanArray mDynamic = new SparseBooleanArray();
|
private final SparseBooleanArray mDynamic = new SparseBooleanArray();
|
||||||
private final KeyguardManager mKeyguard;
|
private final KeyguardManager mKeyguard;
|
||||||
private final int mExpandButtonAnimationDuration;
|
private final int mExpandButtonAnimationDuration;
|
||||||
private final View mTextFooter;
|
|
||||||
private final ZenFooter mZenFooter;
|
private final ZenFooter mZenFooter;
|
||||||
private final LayoutTransition mLayoutTransition;
|
private final LayoutTransition mLayoutTransition;
|
||||||
private final Object mSafetyWarningLock = new Object();
|
private final Object mSafetyWarningLock = new Object();
|
||||||
@@ -108,8 +102,6 @@ public class VolumeDialog {
|
|||||||
private boolean mExpanded;
|
private boolean mExpanded;
|
||||||
private int mActiveStream;
|
private int mActiveStream;
|
||||||
private boolean mShowHeaders = VolumePrefs.DEFAULT_SHOW_HEADERS;
|
private boolean mShowHeaders = VolumePrefs.DEFAULT_SHOW_HEADERS;
|
||||||
private boolean mShowFooter = VolumePrefs.DEFAULT_SHOW_FOOTER;
|
|
||||||
private boolean mShowZenFooter = VolumePrefs.DEFAULT_ZEN_FOOTER;
|
|
||||||
private boolean mAutomute = VolumePrefs.DEFAULT_ENABLE_AUTOMUTE;
|
private boolean mAutomute = VolumePrefs.DEFAULT_ENABLE_AUTOMUTE;
|
||||||
private boolean mSilentMode = VolumePrefs.DEFAULT_ENABLE_SILENT_MODE;
|
private boolean mSilentMode = VolumePrefs.DEFAULT_ENABLE_SILENT_MODE;
|
||||||
private State mState;
|
private State mState;
|
||||||
@@ -118,7 +110,7 @@ public class VolumeDialog {
|
|||||||
private SafetyWarningDialog mSafetyWarning;
|
private SafetyWarningDialog mSafetyWarning;
|
||||||
private Callback mCallback;
|
private Callback mCallback;
|
||||||
|
|
||||||
public VolumeDialog(Context context, VolumeDialogController controller,
|
public VolumeDialog(Context context, int windowType, VolumeDialogController controller,
|
||||||
ZenModeController zenModeController, Callback callback) {
|
ZenModeController zenModeController, Callback callback) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mController = controller;
|
mController = controller;
|
||||||
@@ -141,7 +133,7 @@ public class VolumeDialog {
|
|||||||
mDialog.setCanceledOnTouchOutside(true);
|
mDialog.setCanceledOnTouchOutside(true);
|
||||||
final Resources res = mContext.getResources();
|
final Resources res = mContext.getResources();
|
||||||
final WindowManager.LayoutParams lp = window.getAttributes();
|
final WindowManager.LayoutParams lp = window.getAttributes();
|
||||||
lp.type = WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY;
|
lp.type = windowType;
|
||||||
lp.format = PixelFormat.TRANSLUCENT;
|
lp.format = PixelFormat.TRANSLUCENT;
|
||||||
lp.setTitle(VolumeDialog.class.getSimpleName());
|
lp.setTitle(VolumeDialog.class.getSimpleName());
|
||||||
lp.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
|
lp.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
|
||||||
@@ -176,17 +168,11 @@ public class VolumeDialog {
|
|||||||
addRow(AudioManager.STREAM_SYSTEM,
|
addRow(AudioManager.STREAM_SYSTEM,
|
||||||
R.drawable.ic_volume_system, R.drawable.ic_volume_system_mute, false);
|
R.drawable.ic_volume_system, R.drawable.ic_volume_system_mute, false);
|
||||||
|
|
||||||
mTextFooter = mDialog.findViewById(R.id.volume_text_footer);
|
|
||||||
mFootlineText = (TextView) mDialog.findViewById(R.id.volume_footline_text);
|
|
||||||
mSpTexts.add(mFootlineText);
|
|
||||||
mFootlineAction = (Button) mDialog.findViewById(R.id.volume_footline_action_button);
|
|
||||||
mSpTexts.add(mFootlineAction);
|
|
||||||
mFooter = mDialog.findViewById(R.id.volume_footer);
|
|
||||||
mSettingsButton = mDialog.findViewById(R.id.volume_settings_button);
|
mSettingsButton = mDialog.findViewById(R.id.volume_settings_button);
|
||||||
mSettingsButton.setOnClickListener(mClickSettings);
|
mSettingsButton.setOnClickListener(mClickSettings);
|
||||||
mExpandButtonAnimationDuration = res.getInteger(R.integer.volume_expand_animation_duration);
|
mExpandButtonAnimationDuration = res.getInteger(R.integer.volume_expand_animation_duration);
|
||||||
mZenFooter = (ZenFooter) mDialog.findViewById(R.id.volume_zen_footer);
|
mZenFooter = (ZenFooter) mDialog.findViewById(R.id.volume_zen_footer);
|
||||||
mZenFooter.init(zenModeController, mZenFooterCallback);
|
mZenFooter.init(zenModeController);
|
||||||
|
|
||||||
controller.addCallback(mControllerCallbackH, mHandler);
|
controller.addCallback(mControllerCallbackH, mHandler);
|
||||||
controller.getState();
|
controller.getState();
|
||||||
@@ -217,18 +203,6 @@ public class VolumeDialog {
|
|||||||
mHandler.sendEmptyMessage(H.RECHECK_ALL);
|
mHandler.sendEmptyMessage(H.RECHECK_ALL);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setShowFooter(boolean show) {
|
|
||||||
if (mShowFooter == show) return;
|
|
||||||
mShowFooter = show;
|
|
||||||
mHandler.sendEmptyMessage(H.RECHECK_ALL);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setZenFooter(boolean zen) {
|
|
||||||
if (mShowZenFooter == zen) return;
|
|
||||||
mShowZenFooter = zen;
|
|
||||||
mHandler.sendEmptyMessage(H.RECHECK_ALL);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAutomute(boolean automute) {
|
public void setAutomute(boolean automute) {
|
||||||
if (mAutomute == automute) return;
|
if (mAutomute == automute) return;
|
||||||
mAutomute = automute;
|
mAutomute = automute;
|
||||||
@@ -315,7 +289,6 @@ public class VolumeDialog {
|
|||||||
writer.print(" mActiveStream: "); writer.println(mActiveStream);
|
writer.print(" mActiveStream: "); writer.println(mActiveStream);
|
||||||
writer.print(" mDynamic: "); writer.println(mDynamic);
|
writer.print(" mDynamic: "); writer.println(mDynamic);
|
||||||
writer.print(" mShowHeaders: "); writer.println(mShowHeaders);
|
writer.print(" mShowHeaders: "); writer.println(mShowHeaders);
|
||||||
writer.print(" mShowFooter: "); writer.println(mShowFooter);
|
|
||||||
writer.print(" mAutomute: "); writer.println(mAutomute);
|
writer.print(" mAutomute: "); writer.println(mAutomute);
|
||||||
writer.print(" mSilentMode: "); writer.println(mSilentMode);
|
writer.print(" mSilentMode: "); writer.println(mSilentMode);
|
||||||
}
|
}
|
||||||
@@ -444,7 +417,6 @@ public class VolumeDialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private int computeTimeoutH() {
|
private int computeTimeoutH() {
|
||||||
if (mZenFooter != null && mZenFooter.isFooterExpanded()) return 10000;
|
|
||||||
if (mSafetyWarning != null) return 5000;
|
if (mSafetyWarning != null) return 5000;
|
||||||
if (mExpanded || mExpanding) return 5000;
|
if (mExpanded || mExpanding) return 5000;
|
||||||
if (mActiveStream == AudioManager.STREAM_MUSIC) return 1500;
|
if (mActiveStream == AudioManager.STREAM_MUSIC) return 1500;
|
||||||
@@ -515,18 +487,9 @@ public class VolumeDialog {
|
|||||||
final VolumeRow activeRow = getActiveRow();
|
final VolumeRow activeRow = getActiveRow();
|
||||||
updateFooterH();
|
updateFooterH();
|
||||||
updateExpandButtonH();
|
updateExpandButtonH();
|
||||||
final boolean footerVisible = mFooter.getVisibility() == View.VISIBLE;
|
|
||||||
if (!mShowing) {
|
if (!mShowing) {
|
||||||
trimObsoleteH();
|
trimObsoleteH();
|
||||||
}
|
}
|
||||||
// first, find the last visible row
|
|
||||||
VolumeRow lastVisible = null;
|
|
||||||
for (VolumeRow row : mRows) {
|
|
||||||
final boolean isActive = row == activeRow;
|
|
||||||
if (isVisibleH(row, isActive)) {
|
|
||||||
lastVisible = row;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// apply changes to all rows
|
// apply changes to all rows
|
||||||
for (VolumeRow row : mRows) {
|
for (VolumeRow row : mRows) {
|
||||||
final boolean isActive = row == activeRow;
|
final boolean isActive = row == activeRow;
|
||||||
@@ -542,8 +505,7 @@ public class VolumeDialog {
|
|||||||
row.settingsButton.setImageResource(expandButtonRes);
|
row.settingsButton.setImageResource(expandButtonRes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Util.setVisOrInvis(row.settingsButton,
|
Util.setVisOrInvis(row.settingsButton, false);
|
||||||
mExpanded && (!footerVisible && row == lastVisible));
|
|
||||||
row.header.setAlpha(mExpanded && isActive ? 1 : 0.5f);
|
row.header.setAlpha(mExpanded && isActive ? 1 : 0.5f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -585,51 +547,9 @@ public class VolumeDialog {
|
|||||||
updateFooterH();
|
updateFooterH();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateTextFooterH() {
|
|
||||||
final boolean zen = mState.zenMode != Global.ZEN_MODE_OFF;
|
|
||||||
final boolean wasVisible = mFooter.getVisibility() == View.VISIBLE;
|
|
||||||
Util.setVisOrGone(mTextFooter, mExpanded && mShowFooter && (zen || mShowing && wasVisible));
|
|
||||||
if (mTextFooter.getVisibility() == View.VISIBLE) {
|
|
||||||
String text = null;
|
|
||||||
String action = null;
|
|
||||||
if (mState.exitCondition != null) {
|
|
||||||
final long countdown = ZenModeConfig.tryParseCountdownConditionId(mState
|
|
||||||
.exitCondition.id);
|
|
||||||
if (countdown != 0) {
|
|
||||||
text = mContext.getString(R.string.volume_dnd_ends_at,
|
|
||||||
Util.getShortTime(countdown));
|
|
||||||
action = mContext.getString(R.string.volume_end_now);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (text == null) {
|
|
||||||
text = mContext.getString(R.string.volume_dnd_is_on);
|
|
||||||
}
|
|
||||||
if (action == null) {
|
|
||||||
action = mContext.getString(R.string.volume_turn_off);
|
|
||||||
}
|
|
||||||
Util.setText(mFootlineText, text);
|
|
||||||
Util.setText(mFootlineAction, action);
|
|
||||||
mFootlineAction.setOnClickListener(mTurnOffDnd);
|
|
||||||
}
|
|
||||||
Util.setVisOrGone(mFootlineText, zen);
|
|
||||||
Util.setVisOrGone(mFootlineAction, zen);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateFooterH() {
|
private void updateFooterH() {
|
||||||
if (!mShowFooter) {
|
Util.setVisOrGone(mZenFooter, mState.zenMode != Global.ZEN_MODE_OFF);
|
||||||
Util.setVisOrGone(mFooter, false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (mShowZenFooter) {
|
|
||||||
Util.setVisOrGone(mTextFooter, false);
|
|
||||||
final boolean ringActive = mActiveStream == AudioManager.STREAM_RING;
|
|
||||||
Util.setVisOrGone(mZenFooter, mZenFooter.isZen() && ringActive
|
|
||||||
|| mShowing && (mExpanded || mZenFooter.getVisibility() == View.VISIBLE));
|
|
||||||
mZenFooter.update();
|
mZenFooter.update();
|
||||||
} else {
|
|
||||||
Util.setVisOrGone(mZenFooter, false);
|
|
||||||
updateTextFooterH();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateVolumeRowH(VolumeRow row) {
|
private void updateVolumeRowH(VolumeRow row) {
|
||||||
@@ -642,12 +562,20 @@ public class VolumeDialog {
|
|||||||
}
|
}
|
||||||
final boolean isRingStream = row.stream == AudioManager.STREAM_RING;
|
final boolean isRingStream = row.stream == AudioManager.STREAM_RING;
|
||||||
final boolean isSystemStream = row.stream == AudioManager.STREAM_SYSTEM;
|
final boolean isSystemStream = row.stream == AudioManager.STREAM_SYSTEM;
|
||||||
|
final boolean isAlarmStream = row.stream == AudioManager.STREAM_ALARM;
|
||||||
|
final boolean isMusicStream = row.stream == AudioManager.STREAM_MUSIC;
|
||||||
final boolean isRingVibrate = isRingStream
|
final boolean isRingVibrate = isRingStream
|
||||||
&& mState.ringerModeInternal == AudioManager.RINGER_MODE_VIBRATE;
|
&& mState.ringerModeInternal == AudioManager.RINGER_MODE_VIBRATE;
|
||||||
final boolean isNoned = (isRingStream || isSystemStream)
|
final boolean isRingSilent = isRingStream
|
||||||
&& mState.zenMode == Global.ZEN_MODE_NO_INTERRUPTIONS;
|
&& mState.ringerModeInternal == AudioManager.RINGER_MODE_SILENT;
|
||||||
final boolean isLimited = isRingStream
|
final boolean isZenAlarms = mState.zenMode == Global.ZEN_MODE_ALARMS;
|
||||||
&& mState.zenMode == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
|
final boolean isZenNone = mState.zenMode == Global.ZEN_MODE_NO_INTERRUPTIONS;
|
||||||
|
final boolean isZenPriority = mState.zenMode == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
|
||||||
|
final boolean isRingZenNone = (isRingStream || isSystemStream) && isZenNone;
|
||||||
|
final boolean isRingLimited = isRingStream && isZenPriority;
|
||||||
|
final boolean zenMuted = isZenAlarms ? (isRingStream || isSystemStream)
|
||||||
|
: isZenNone ? (isRingStream || isSystemStream || isAlarmStream || isMusicStream)
|
||||||
|
: false;
|
||||||
|
|
||||||
// update slider max
|
// update slider max
|
||||||
final int max = ss.levelMax * 100;
|
final int max = ss.levelMax * 100;
|
||||||
@@ -663,15 +591,15 @@ public class VolumeDialog {
|
|||||||
|
|
||||||
// update header text
|
// update header text
|
||||||
final String text;
|
final String text;
|
||||||
if (isNoned) {
|
if (isRingZenNone) {
|
||||||
text = mContext.getString(R.string.volume_stream_muted_dnd, ss.name);
|
text = mContext.getString(R.string.volume_stream_muted_dnd, ss.name);
|
||||||
} else if (isRingVibrate && isLimited) {
|
} else if (isRingVibrate && isRingLimited) {
|
||||||
text = mContext.getString(R.string.volume_stream_vibrate_dnd, ss.name);
|
text = mContext.getString(R.string.volume_stream_vibrate_dnd, ss.name);
|
||||||
} else if (isRingVibrate) {
|
} else if (isRingVibrate) {
|
||||||
text = mContext.getString(R.string.volume_stream_vibrate, ss.name);
|
text = mContext.getString(R.string.volume_stream_vibrate, ss.name);
|
||||||
} else if (ss.muted || mAutomute && ss.level == 0) {
|
} else if (ss.muted || mAutomute && ss.level == 0) {
|
||||||
text = mContext.getString(R.string.volume_stream_muted, ss.name);
|
text = mContext.getString(R.string.volume_stream_muted, ss.name);
|
||||||
} else if (isLimited) {
|
} else if (isRingLimited) {
|
||||||
text = mContext.getString(R.string.volume_stream_limited_dnd, ss.name);
|
text = mContext.getString(R.string.volume_stream_limited_dnd, ss.name);
|
||||||
} else {
|
} else {
|
||||||
text = ss.name;
|
text = ss.name;
|
||||||
@@ -679,11 +607,12 @@ public class VolumeDialog {
|
|||||||
Util.setText(row.header, text);
|
Util.setText(row.header, text);
|
||||||
|
|
||||||
// update icon
|
// update icon
|
||||||
final boolean iconEnabled = mAutomute || ss.muteSupported;
|
final boolean iconEnabled = (mAutomute || ss.muteSupported) && !zenMuted;
|
||||||
row.icon.setEnabled(iconEnabled);
|
row.icon.setEnabled(iconEnabled);
|
||||||
row.icon.setAlpha(iconEnabled ? 1 : 0.5f);
|
row.icon.setAlpha(iconEnabled ? 1 : 0.5f);
|
||||||
final int iconRes =
|
final int iconRes =
|
||||||
isRingVibrate ? R.drawable.ic_volume_ringer_vibrate
|
isRingVibrate ? R.drawable.ic_volume_ringer_vibrate
|
||||||
|
: isRingSilent || zenMuted ? row.cachedIconRes
|
||||||
: ss.routedToBluetooth ?
|
: ss.routedToBluetooth ?
|
||||||
(ss.muted ? R.drawable.ic_volume_media_bt_mute
|
(ss.muted ? R.drawable.ic_volume_media_bt_mute
|
||||||
: R.drawable.ic_volume_media_bt)
|
: R.drawable.ic_volume_media_bt)
|
||||||
@@ -705,10 +634,11 @@ public class VolumeDialog {
|
|||||||
: Events.ICON_STATE_UNKNOWN;
|
: Events.ICON_STATE_UNKNOWN;
|
||||||
|
|
||||||
// update slider
|
// update slider
|
||||||
updateVolumeRowSliderH(row);
|
updateVolumeRowSliderH(row, zenMuted);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateVolumeRowSliderH(VolumeRow row) {
|
private void updateVolumeRowSliderH(VolumeRow row, boolean zenMuted) {
|
||||||
|
row.slider.setEnabled(!zenMuted);
|
||||||
if (row.tracking) {
|
if (row.tracking) {
|
||||||
return; // don't update if user is sliding
|
return; // don't update if user is sliding
|
||||||
}
|
}
|
||||||
@@ -887,46 +817,6 @@ public class VolumeDialog {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private final View.OnClickListener mTurnOffDnd = new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
mSettingsButton.postDelayed(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
mController.setZenMode(Global.ZEN_MODE_OFF);
|
|
||||||
}
|
|
||||||
}, WAIT_FOR_RIPPLE);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private final ZenFooter.Callback mZenFooterCallback = new ZenFooter.Callback() {
|
|
||||||
@Override
|
|
||||||
public void onFooterExpanded() {
|
|
||||||
mHandler.sendEmptyMessage(H.RESCHEDULE_TIMEOUT);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onSettingsClicked() {
|
|
||||||
dismiss(Events.DISMISS_REASON_SETTINGS_CLICKED);
|
|
||||||
if (mCallback != null) {
|
|
||||||
mCallback.onZenSettingsClicked();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDoneClicked() {
|
|
||||||
dismiss(Events.DISMISS_REASON_DONE_CLICKED);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPrioritySettingsClicked() {
|
|
||||||
dismiss(Events.DISMISS_REASON_SETTINGS_CLICKED);
|
|
||||||
if (mCallback != null) {
|
|
||||||
mCallback.onZenPrioritySettingsClicked();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private final class H extends Handler {
|
private final class H extends Handler {
|
||||||
private static final int SHOW = 1;
|
private static final int SHOW = 1;
|
||||||
private static final int DISMISS = 2;
|
private static final int DISMISS = 2;
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import android.media.VolumePolicy;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
import android.view.WindowManager;
|
||||||
|
|
||||||
import com.android.systemui.SystemUI;
|
import com.android.systemui.SystemUI;
|
||||||
import com.android.systemui.keyguard.KeyguardViewMediator;
|
import com.android.systemui.keyguard.KeyguardViewMediator;
|
||||||
@@ -61,7 +62,8 @@ public class VolumeDialogComponent implements VolumeComponent {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
mZenModeController = zen;
|
mZenModeController = zen;
|
||||||
mDialog = new VolumeDialog(context, mController, zen, mVolumeDialogCallback);
|
mDialog = new VolumeDialog(context, WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY,
|
||||||
|
mController, zen, mVolumeDialogCallback);
|
||||||
applyConfiguration();
|
applyConfiguration();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,12 +78,10 @@ public class VolumeDialogComponent implements VolumeComponent {
|
|||||||
mDialog.setStreamImportant(AudioManager.STREAM_ALARM, true);
|
mDialog.setStreamImportant(AudioManager.STREAM_ALARM, true);
|
||||||
mDialog.setStreamImportant(AudioManager.STREAM_SYSTEM, false);
|
mDialog.setStreamImportant(AudioManager.STREAM_SYSTEM, false);
|
||||||
mDialog.setShowHeaders(false);
|
mDialog.setShowHeaders(false);
|
||||||
mDialog.setShowFooter(true);
|
|
||||||
mDialog.setZenFooter(true);
|
|
||||||
mDialog.setAutomute(true);
|
mDialog.setAutomute(true);
|
||||||
mDialog.setSilentMode(false);
|
mDialog.setSilentMode(false);
|
||||||
mController.setVolumePolicy(mVolumePolicy);
|
mController.setVolumePolicy(mVolumePolicy);
|
||||||
mController.showDndTile(false);
|
mController.showDndTile(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ public class VolumeDialogController {
|
|||||||
private boolean mEnabled;
|
private boolean mEnabled;
|
||||||
private boolean mDestroyed;
|
private boolean mDestroyed;
|
||||||
private VolumePolicy mVolumePolicy;
|
private VolumePolicy mVolumePolicy;
|
||||||
private boolean mShowDndTile = false;
|
private boolean mShowDndTile = true;
|
||||||
|
|
||||||
public VolumeDialogController(Context context, ComponentName component) {
|
public VolumeDialogController(Context context, ComponentName component) {
|
||||||
mContext = context.getApplicationContext();
|
mContext = context.getApplicationContext();
|
||||||
@@ -125,6 +125,10 @@ public class VolumeDialogController {
|
|||||||
return mAudio;
|
return mAudio;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ZenModeConfig getZenModeConfig() {
|
||||||
|
return mNoMan.getZenModeConfig();
|
||||||
|
}
|
||||||
|
|
||||||
public void dismiss() {
|
public void dismiss() {
|
||||||
mCallbacks.onDismissRequested(Events.DISMISS_REASON_VOLUME_CONTROLLER);
|
mCallbacks.onDismissRequested(Events.DISMISS_REASON_VOLUME_CONTROLLER);
|
||||||
}
|
}
|
||||||
@@ -342,7 +346,7 @@ public class VolumeDialogController {
|
|||||||
updateRingerModeExternalW(mAudio.getRingerMode());
|
updateRingerModeExternalW(mAudio.getRingerMode());
|
||||||
updateZenModeW();
|
updateZenModeW();
|
||||||
updateEffectsSuppressorW(mNoMan.getEffectsSuppressor());
|
updateEffectsSuppressorW(mNoMan.getEffectsSuppressor());
|
||||||
updateExitConditionW();
|
updateZenModeConfigW();
|
||||||
mCallbacks.onStateChanged(mState);
|
mCallbacks.onStateChanged(mState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -395,17 +399,10 @@ public class VolumeDialogController {
|
|||||||
return stream == AudioManager.STREAM_RING || stream == AudioManager.STREAM_NOTIFICATION;
|
return stream == AudioManager.STREAM_RING || stream == AudioManager.STREAM_NOTIFICATION;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Condition getExitCondition() {
|
private boolean updateZenModeConfigW() {
|
||||||
final ZenModeConfig config = mNoMan.getZenModeConfig();
|
final ZenModeConfig zenModeConfig = getZenModeConfig();
|
||||||
return config == null ? null
|
if (Objects.equals(mState.zenModeConfig, zenModeConfig)) return false;
|
||||||
: config.manualRule == null ? null
|
mState.zenModeConfig = zenModeConfig;
|
||||||
: config.manualRule.condition;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean updateExitConditionW() {
|
|
||||||
final Condition exitCondition = getExitCondition();
|
|
||||||
if (Objects.equals(mState.exitCondition, exitCondition)) return false;
|
|
||||||
mState.exitCondition = exitCondition;
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -750,7 +747,7 @@ public class VolumeDialogController {
|
|||||||
changed = updateZenModeW();
|
changed = updateZenModeW();
|
||||||
}
|
}
|
||||||
if (ZEN_MODE_CONFIG_URI.equals(uri)) {
|
if (ZEN_MODE_CONFIG_URI.equals(uri)) {
|
||||||
changed = updateExitConditionW();
|
changed = updateZenModeConfigW();
|
||||||
}
|
}
|
||||||
if (changed) {
|
if (changed) {
|
||||||
mCallbacks.onStateChanged(mState);
|
mCallbacks.onStateChanged(mState);
|
||||||
@@ -943,7 +940,7 @@ public class VolumeDialogController {
|
|||||||
public int zenMode;
|
public int zenMode;
|
||||||
public ComponentName effectsSuppressor;
|
public ComponentName effectsSuppressor;
|
||||||
public String effectsSuppressorName;
|
public String effectsSuppressorName;
|
||||||
public Condition exitCondition;
|
public ZenModeConfig zenModeConfig;
|
||||||
public int activeStream = NO_ACTIVE_STREAM;
|
public int activeStream = NO_ACTIVE_STREAM;
|
||||||
|
|
||||||
public State copy() {
|
public State copy() {
|
||||||
@@ -956,7 +953,7 @@ public class VolumeDialogController {
|
|||||||
rt.zenMode = zenMode;
|
rt.zenMode = zenMode;
|
||||||
if (effectsSuppressor != null) rt.effectsSuppressor = effectsSuppressor.clone();
|
if (effectsSuppressor != null) rt.effectsSuppressor = effectsSuppressor.clone();
|
||||||
rt.effectsSuppressorName = effectsSuppressorName;
|
rt.effectsSuppressorName = effectsSuppressorName;
|
||||||
if (exitCondition != null) rt.exitCondition = exitCondition.copy();
|
if (zenModeConfig != null) rt.zenModeConfig = zenModeConfig.copy();
|
||||||
rt.activeStream = activeStream;
|
rt.activeStream = activeStream;
|
||||||
return rt;
|
return rt;
|
||||||
}
|
}
|
||||||
@@ -977,10 +974,15 @@ public class VolumeDialogController {
|
|||||||
sb.append(",zenMode:").append(zenMode);
|
sb.append(",zenMode:").append(zenMode);
|
||||||
sb.append(",effectsSuppressor:").append(effectsSuppressor);
|
sb.append(",effectsSuppressor:").append(effectsSuppressor);
|
||||||
sb.append(",effectsSuppressorName:").append(effectsSuppressorName);
|
sb.append(",effectsSuppressorName:").append(effectsSuppressorName);
|
||||||
sb.append(",exitCondition:").append(exitCondition);
|
sb.append(",zenModeConfig:").append(zenModeConfig);
|
||||||
sb.append(",activeStream:").append(activeStream);
|
sb.append(",activeStream:").append(activeStream);
|
||||||
return sb.append('}').toString();
|
return sb.append('}').toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Condition getManualExitCondition() {
|
||||||
|
return zenModeConfig != null && zenModeConfig.manualRule != null
|
||||||
|
? zenModeConfig.manualRule.condition : null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface Callbacks {
|
public interface Callbacks {
|
||||||
|
|||||||
@@ -32,8 +32,6 @@ public class VolumePrefs {
|
|||||||
public static final String PREF_SHOW_HEADERS = "pref_show_headers";
|
public static final String PREF_SHOW_HEADERS = "pref_show_headers";
|
||||||
public static final String PREF_SHOW_FAKE_REMOTE_1 = "pref_show_fake_remote_1";
|
public static final String PREF_SHOW_FAKE_REMOTE_1 = "pref_show_fake_remote_1";
|
||||||
public static final String PREF_SHOW_FAKE_REMOTE_2 = "pref_show_fake_remote_2";
|
public static final String PREF_SHOW_FAKE_REMOTE_2 = "pref_show_fake_remote_2";
|
||||||
public static final String PREF_SHOW_FOOTER = "pref_show_footer";
|
|
||||||
public static final String PREF_ZEN_FOOTER = "pref_zen_footer";
|
|
||||||
public static final String PREF_ENABLE_AUTOMUTE = "pref_enable_automute";
|
public static final String PREF_ENABLE_AUTOMUTE = "pref_enable_automute";
|
||||||
public static final String PREF_ENABLE_SILENT_MODE = "pref_enable_silent_mode";
|
public static final String PREF_ENABLE_SILENT_MODE = "pref_enable_silent_mode";
|
||||||
public static final String PREF_DEBUG_LOGGING = "pref_debug_logging";
|
public static final String PREF_DEBUG_LOGGING = "pref_debug_logging";
|
||||||
@@ -46,10 +44,8 @@ public class VolumePrefs {
|
|||||||
public static final String PREF_ADJUST_NOTIFICATION = "pref_adjust_notification";
|
public static final String PREF_ADJUST_NOTIFICATION = "pref_adjust_notification";
|
||||||
|
|
||||||
public static final boolean DEFAULT_SHOW_HEADERS = true;
|
public static final boolean DEFAULT_SHOW_HEADERS = true;
|
||||||
public static final boolean DEFAULT_SHOW_FOOTER = true;
|
|
||||||
public static final boolean DEFAULT_ENABLE_AUTOMUTE = true;
|
public static final boolean DEFAULT_ENABLE_AUTOMUTE = true;
|
||||||
public static final boolean DEFAULT_ENABLE_SILENT_MODE = true;
|
public static final boolean DEFAULT_ENABLE_SILENT_MODE = true;
|
||||||
public static final boolean DEFAULT_ZEN_FOOTER = true;
|
|
||||||
|
|
||||||
public static void unregisterCallbacks(Context c, OnSharedPreferenceChangeListener listener) {
|
public static void unregisterCallbacks(Context c, OnSharedPreferenceChangeListener listener) {
|
||||||
prefs(c).unregisterOnSharedPreferenceChangeListener(listener);
|
prefs(c).unregisterOnSharedPreferenceChangeListener(listener);
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ public class VolumeUI extends SystemUI {
|
|||||||
|
|
||||||
private void setDefaultVolumeController(boolean register) {
|
private void setDefaultVolumeController(boolean register) {
|
||||||
if (register) {
|
if (register) {
|
||||||
DndTile.setVisible(mContext, false);
|
DndTile.setVisible(mContext, true);
|
||||||
if (LOGD) Log.d(TAG, "Registering default volume controller");
|
if (LOGD) Log.d(TAG, "Registering default volume controller");
|
||||||
getVolumeComponent().register();
|
getVolumeComponent().register();
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -16,20 +16,12 @@
|
|||||||
package com.android.systemui.volume;
|
package com.android.systemui.volume;
|
||||||
|
|
||||||
import android.animation.LayoutTransition;
|
import android.animation.LayoutTransition;
|
||||||
import android.animation.ValueAnimator;
|
|
||||||
import android.app.ActivityManager;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.Resources;
|
|
||||||
import android.provider.Settings.Global;
|
import android.provider.Settings.Global;
|
||||||
import android.service.notification.ZenModeConfig;
|
import android.service.notification.ZenModeConfig;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.util.Log;
|
|
||||||
import android.util.TypedValue;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.CompoundButton;
|
|
||||||
import android.widget.CompoundButton.OnCheckedChangeListener;
|
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.Switch;
|
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
@@ -38,70 +30,36 @@ import com.android.systemui.statusbar.policy.ZenModeController;
|
|||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Switch bar + zen mode panel (conditions) attached to the bottom of the volume dialog.
|
* Zen mode information (and end button) attached to the bottom of the volume dialog.
|
||||||
*/
|
*/
|
||||||
public class ZenFooter extends LinearLayout {
|
public class ZenFooter extends LinearLayout {
|
||||||
private static final String TAG = Util.logTag(ZenFooter.class);
|
private static final String TAG = Util.logTag(ZenFooter.class);
|
||||||
|
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final float mSecondaryAlpha;
|
|
||||||
private final LayoutTransition mLayoutTransition;
|
|
||||||
|
|
||||||
private ZenModeController mController;
|
|
||||||
private Switch mSwitch;
|
|
||||||
private ZenModePanel mZenModePanel;
|
|
||||||
private View mZenModePanelButtons;
|
|
||||||
private View mZenModePanelMoreButton;
|
|
||||||
private View mZenModePanelDoneButton;
|
|
||||||
private View mSwitchBar;
|
|
||||||
private View mSwitchBarIcon;
|
|
||||||
private View mSummary;
|
|
||||||
private TextView mSummaryLine1;
|
private TextView mSummaryLine1;
|
||||||
private TextView mSummaryLine2;
|
private TextView mSummaryLine2;
|
||||||
private boolean mFooterExpanded;
|
private View mEndNowButton;
|
||||||
private int mZen = -1;
|
private int mZen = -1;
|
||||||
private ZenModeConfig mConfig;
|
private ZenModeConfig mConfig;
|
||||||
private Callback mCallback;
|
private ZenModeController mController;
|
||||||
|
|
||||||
public ZenFooter(Context context, AttributeSet attrs) {
|
public ZenFooter(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mSecondaryAlpha = getFloat(context.getResources(), R.dimen.volume_secondary_alpha);
|
setLayoutTransition(new LayoutTransition());
|
||||||
mLayoutTransition = new LayoutTransition();
|
|
||||||
mLayoutTransition.setDuration(new ValueAnimator().getDuration() / 2);
|
|
||||||
mLayoutTransition.disableTransitionType(LayoutTransition.DISAPPEARING);
|
|
||||||
mLayoutTransition.disableTransitionType(LayoutTransition.CHANGE_DISAPPEARING);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static float getFloat(Resources r, int resId) {
|
|
||||||
final TypedValue tv = new TypedValue();
|
|
||||||
r.getValue(resId, tv, true);
|
|
||||||
return tv.getFloat();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onFinishInflate() {
|
protected void onFinishInflate() {
|
||||||
super.onFinishInflate();
|
super.onFinishInflate();
|
||||||
mSwitchBar = findViewById(R.id.volume_zen_switch_bar);
|
mSummaryLine1 = (TextView) findViewById(R.id.volume_zen_summary_line_1);
|
||||||
mSwitchBarIcon = findViewById(R.id.volume_zen_switch_bar_icon);
|
mSummaryLine2 = (TextView) findViewById(R.id.volume_zen_summary_line_2);
|
||||||
mSwitch = (Switch) findViewById(R.id.volume_zen_switch);
|
mEndNowButton = findViewById(R.id.volume_zen_end_now);
|
||||||
mZenModePanel = (ZenModePanel) findViewById(R.id.zen_mode_panel);
|
|
||||||
mZenModePanelButtons = findViewById(R.id.volume_zen_mode_panel_buttons);
|
|
||||||
mZenModePanelMoreButton = findViewById(R.id.volume_zen_mode_panel_more);
|
|
||||||
mZenModePanelDoneButton = findViewById(R.id.volume_zen_mode_panel_done);
|
|
||||||
mSummary = findViewById(R.id.volume_zen_panel_summary);
|
|
||||||
mSummaryLine1 = (TextView) findViewById(R.id.volume_zen_panel_summary_line_1);
|
|
||||||
mSummaryLine2 = (TextView) findViewById(R.id.volume_zen_panel_summary_line_2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void init(ZenModeController controller, Callback callback) {
|
public void init(final ZenModeController controller) {
|
||||||
mCallback = callback;
|
controller.addCallback(new ZenModeController.Callback() {
|
||||||
mController = controller;
|
|
||||||
mZenModePanel.init(controller);
|
|
||||||
mZenModePanel.setEmbedded(true);
|
|
||||||
mZenModePanel.setCallback(mZenModePanelCallback);
|
|
||||||
mSwitch.setOnCheckedChangeListener(mCheckedListener);
|
|
||||||
mController.addCallback(new ZenModeController.Callback() {
|
|
||||||
@Override
|
@Override
|
||||||
public void onZenChanged(int zen) {
|
public void onZenChanged(int zen) {
|
||||||
setZen(zen);
|
setZen(zen);
|
||||||
@@ -111,30 +69,15 @@ public class ZenFooter extends LinearLayout {
|
|||||||
setConfig(config);
|
setConfig(config);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
mSwitchBar.setOnClickListener(new OnClickListener() {
|
mEndNowButton.setOnClickListener(new OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
mSwitch.setChecked(!mSwitch.isChecked());
|
controller.setZen(Global.ZEN_MODE_OFF, null, TAG);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
mZenModePanelMoreButton.setOnClickListener(new OnClickListener() {
|
mZen = controller.getZen();
|
||||||
@Override
|
mConfig = controller.getConfig();
|
||||||
public void onClick(View v) {
|
mController = controller;
|
||||||
if (mCallback != null) {
|
|
||||||
mCallback.onSettingsClicked();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
mZenModePanelDoneButton.setOnClickListener(new OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
if (mCallback != null) {
|
|
||||||
mCallback.onDoneClicked();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
mZen = mController.getZen();
|
|
||||||
mConfig = mController.getConfig();
|
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -166,96 +109,17 @@ public class ZenFooter extends LinearLayout {
|
|||||||
return mZen == Global.ZEN_MODE_NO_INTERRUPTIONS;
|
return mZen == Global.ZEN_MODE_NO_INTERRUPTIONS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onDetachedFromWindow() {
|
|
||||||
super.onDetachedFromWindow();
|
|
||||||
setLayoutTransition(null);
|
|
||||||
setFooterExpanded(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onAttachedToWindow() {
|
|
||||||
super.onAttachedToWindow();
|
|
||||||
setLayoutTransition(mLayoutTransition);
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean setFooterExpanded(boolean expanded) {
|
|
||||||
if (mFooterExpanded == expanded) return false;
|
|
||||||
mFooterExpanded = expanded;
|
|
||||||
update();
|
|
||||||
if (mCallback != null) {
|
|
||||||
mCallback.onFooterExpanded();
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isFooterExpanded() {
|
|
||||||
return mFooterExpanded;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void update() {
|
public void update() {
|
||||||
final boolean isZen = isZen();
|
|
||||||
mSwitch.setOnCheckedChangeListener(null);
|
|
||||||
mSwitch.setChecked(isZen);
|
|
||||||
mSwitch.setOnCheckedChangeListener(mCheckedListener);
|
|
||||||
Util.setVisOrGone(mZenModePanel, isZen && mFooterExpanded);
|
|
||||||
Util.setVisOrGone(mZenModePanelButtons, isZen && mFooterExpanded);
|
|
||||||
Util.setVisOrGone(mSummary, isZen && !mFooterExpanded);
|
|
||||||
mSwitchBarIcon.setAlpha(isZen ? 1 : mSecondaryAlpha);
|
|
||||||
final String line1 =
|
final String line1 =
|
||||||
isZenPriority() ? mContext.getString(R.string.interruption_level_priority)
|
isZenPriority() ? mContext.getString(R.string.interruption_level_priority)
|
||||||
: isZenAlarms() ? mContext.getString(R.string.interruption_level_alarms)
|
: isZenAlarms() ? mContext.getString(R.string.interruption_level_alarms)
|
||||||
: isZenNone() ? mContext.getString(R.string.interruption_level_none)
|
: isZenNone() ? mContext.getString(R.string.interruption_level_none)
|
||||||
: null;
|
: null;
|
||||||
Util.setText(mSummaryLine1, line1);
|
Util.setText(mSummaryLine1, line1);
|
||||||
|
|
||||||
final String line2 = ZenModeConfig.getConditionSummary(mContext, mConfig,
|
final String line2 = ZenModeConfig.getConditionSummary(mContext, mConfig,
|
||||||
ActivityManager.getCurrentUser());
|
mController.getCurrentUser());
|
||||||
Util.setText(mSummaryLine2, line2);
|
Util.setText(mSummaryLine2, line2);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final ZenModePanel.Callback mZenModePanelCallback = new ZenModePanel.Callback() {
|
|
||||||
@Override
|
|
||||||
public void onMoreSettings() {
|
|
||||||
if (mCallback != null) {
|
|
||||||
mCallback.onSettingsClicked();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPrioritySettings() {
|
|
||||||
if (mCallback != null) {
|
|
||||||
mCallback.onPrioritySettingsClicked();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onInteraction() {
|
|
||||||
// noop
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onExpanded(boolean expanded) {
|
|
||||||
// noop
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private final OnCheckedChangeListener mCheckedListener = new OnCheckedChangeListener() {
|
|
||||||
@Override
|
|
||||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
|
||||||
if (D.BUG) Log.d(TAG, "onCheckedChanged " + isChecked);
|
|
||||||
if (isChecked != isZen()) {
|
|
||||||
final int newZen = isChecked ? Global.ZEN_MODE_ALARMS : Global.ZEN_MODE_OFF;
|
|
||||||
mZen = newZen; // this one's optimistic
|
|
||||||
setFooterExpanded(isChecked);
|
|
||||||
mController.setZen(newZen, null, TAG);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public interface Callback {
|
|
||||||
void onFooterExpanded();
|
|
||||||
void onSettingsClicked();
|
|
||||||
void onDoneClicked();
|
|
||||||
void onPrioritySettingsClicked();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,8 +41,6 @@ import android.util.MathUtils;
|
|||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.animation.AnimationUtils;
|
|
||||||
import android.view.animation.Interpolator;
|
|
||||||
import android.widget.CompoundButton;
|
import android.widget.CompoundButton;
|
||||||
import android.widget.CompoundButton.OnCheckedChangeListener;
|
import android.widget.CompoundButton.OnCheckedChangeListener;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
@@ -85,22 +83,14 @@ public class ZenModePanel extends LinearLayout {
|
|||||||
private final H mHandler = new H();
|
private final H mHandler = new H();
|
||||||
private final ZenPrefs mPrefs;
|
private final ZenPrefs mPrefs;
|
||||||
private final IconPulser mIconPulser;
|
private final IconPulser mIconPulser;
|
||||||
private final int mSubheadWarningColor;
|
|
||||||
private final int mSubheadColor;
|
|
||||||
private final Interpolator mInterpolator;
|
|
||||||
private final TransitionHelper mTransitionHelper = new TransitionHelper();
|
private final TransitionHelper mTransitionHelper = new TransitionHelper();
|
||||||
private final Uri mForeverId;
|
private final Uri mForeverId;
|
||||||
|
|
||||||
private String mTag = TAG + "/" + Integer.toHexString(System.identityHashCode(this));
|
private String mTag = TAG + "/" + Integer.toHexString(System.identityHashCode(this));
|
||||||
|
|
||||||
private SegmentedButtons mZenButtons;
|
private SegmentedButtons mZenButtons;
|
||||||
private ViewGroup mZenButtonsContainer;
|
|
||||||
private View mZenSubhead;
|
|
||||||
private TextView mZenSubheadCollapsed;
|
|
||||||
private TextView mZenSubheadExpanded;
|
|
||||||
private View mZenEmbeddedDivider;
|
|
||||||
private View mMoreSettings;
|
|
||||||
private View mZenIntroduction;
|
private View mZenIntroduction;
|
||||||
|
private TextView mZenIntroductionMessage;
|
||||||
private View mZenIntroductionConfirm;
|
private View mZenIntroductionConfirm;
|
||||||
private View mZenIntroductionCustomize;
|
private View mZenIntroductionCustomize;
|
||||||
private LinearLayout mZenConditions;
|
private LinearLayout mZenConditions;
|
||||||
@@ -113,7 +103,6 @@ public class ZenModePanel extends LinearLayout {
|
|||||||
private int mFirstConditionIndex;
|
private int mFirstConditionIndex;
|
||||||
private boolean mRequestingConditions;
|
private boolean mRequestingConditions;
|
||||||
private Condition mExitCondition;
|
private Condition mExitCondition;
|
||||||
private String mExitConditionText;
|
|
||||||
private int mBucketIndex = -1;
|
private int mBucketIndex = -1;
|
||||||
private boolean mExpanded;
|
private boolean mExpanded;
|
||||||
private boolean mHidden;
|
private boolean mHidden;
|
||||||
@@ -123,7 +112,6 @@ public class ZenModePanel extends LinearLayout {
|
|||||||
private Condition mSessionExitCondition;
|
private Condition mSessionExitCondition;
|
||||||
private Condition[] mConditions;
|
private Condition[] mConditions;
|
||||||
private Condition mTimeCondition;
|
private Condition mTimeCondition;
|
||||||
private boolean mEmbedded;
|
|
||||||
|
|
||||||
public ZenModePanel(Context context, AttributeSet attrs) {
|
public ZenModePanel(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
@@ -131,10 +119,6 @@ public class ZenModePanel extends LinearLayout {
|
|||||||
mPrefs = new ZenPrefs();
|
mPrefs = new ZenPrefs();
|
||||||
mInflater = LayoutInflater.from(mContext.getApplicationContext());
|
mInflater = LayoutInflater.from(mContext.getApplicationContext());
|
||||||
mIconPulser = new IconPulser(mContext);
|
mIconPulser = new IconPulser(mContext);
|
||||||
mSubheadWarningColor = context.getColor(R.color.system_warning_color);
|
|
||||||
mSubheadColor = context.getColor(R.color.qs_subhead);
|
|
||||||
mInterpolator = AnimationUtils.loadInterpolator(mContext,
|
|
||||||
com.android.internal.R.interpolator.fast_out_slow_in);
|
|
||||||
mForeverId = Condition.newId(mContext).appendPath("forever").build();
|
mForeverId = Condition.newId(mContext).appendPath("forever").build();
|
||||||
if (DEBUG) Log.d(mTag, "new ZenModePanel");
|
if (DEBUG) Log.d(mTag, "new ZenModePanel");
|
||||||
}
|
}
|
||||||
@@ -149,25 +133,13 @@ public class ZenModePanel extends LinearLayout {
|
|||||||
pw.print(" mExpanded="); pw.println(mExpanded);
|
pw.print(" mExpanded="); pw.println(mExpanded);
|
||||||
pw.print(" mSessionZen="); pw.println(mSessionZen);
|
pw.print(" mSessionZen="); pw.println(mSessionZen);
|
||||||
pw.print(" mAttachedZen="); pw.println(mAttachedZen);
|
pw.print(" mAttachedZen="); pw.println(mAttachedZen);
|
||||||
pw.print(" mEmbedded="); pw.println(mEmbedded);
|
pw.print(" mConfirmedPriorityIntroduction=");
|
||||||
|
pw.println(mPrefs.mConfirmedPriorityIntroduction);
|
||||||
|
pw.print(" mConfirmedSilenceIntroduction=");
|
||||||
|
pw.println(mPrefs.mConfirmedSilenceIntroduction);
|
||||||
mTransitionHelper.dump(fd, pw, args);
|
mTransitionHelper.dump(fd, pw, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setEmbedded(boolean embedded) {
|
|
||||||
if (mEmbedded == embedded) return;
|
|
||||||
mEmbedded = embedded;
|
|
||||||
mZenButtonsContainer.setLayoutTransition(mEmbedded ? null : newLayoutTransition(null));
|
|
||||||
setLayoutTransition(mEmbedded ? null : newLayoutTransition(null));
|
|
||||||
if (mEmbedded) {
|
|
||||||
mZenButtonsContainer.setBackground(null);
|
|
||||||
} else {
|
|
||||||
mZenButtonsContainer.setBackgroundResource(R.drawable.qs_background_secondary);
|
|
||||||
}
|
|
||||||
mZenButtons.getChildAt(3).setVisibility(mEmbedded ? GONE : VISIBLE);
|
|
||||||
mZenEmbeddedDivider.setVisibility(mEmbedded ? VISIBLE : GONE);
|
|
||||||
updateWidgets();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onFinishInflate() {
|
protected void onFinishInflate() {
|
||||||
super.onFinishInflate();
|
super.onFinishInflate();
|
||||||
@@ -179,37 +151,10 @@ public class ZenModePanel extends LinearLayout {
|
|||||||
Global.ZEN_MODE_ALARMS);
|
Global.ZEN_MODE_ALARMS);
|
||||||
mZenButtons.addButton(R.string.interruption_level_priority_twoline,
|
mZenButtons.addButton(R.string.interruption_level_priority_twoline,
|
||||||
Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS);
|
Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS);
|
||||||
mZenButtons.addButton(R.string.interruption_level_all, Global.ZEN_MODE_OFF);
|
|
||||||
mZenButtons.setCallback(mZenButtonsCallback);
|
mZenButtons.setCallback(mZenButtonsCallback);
|
||||||
|
|
||||||
mZenButtonsContainer = (ViewGroup) findViewById(R.id.zen_buttons_container);
|
|
||||||
mZenButtonsContainer.setLayoutTransition(newLayoutTransition(null));
|
|
||||||
|
|
||||||
mZenSubhead = findViewById(R.id.zen_subhead);
|
|
||||||
mZenEmbeddedDivider = findViewById(R.id.zen_embedded_divider);
|
|
||||||
|
|
||||||
mZenSubheadCollapsed = (TextView) findViewById(R.id.zen_subhead_collapsed);
|
|
||||||
mZenSubheadCollapsed.setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
setExpanded(true);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Interaction.register(mZenSubheadCollapsed, mInteractionCallback);
|
|
||||||
|
|
||||||
mZenSubheadExpanded = (TextView) findViewById(R.id.zen_subhead_expanded);
|
|
||||||
Interaction.register(mZenSubheadExpanded, mInteractionCallback);
|
|
||||||
|
|
||||||
mMoreSettings = findViewById(R.id.zen_more_settings);
|
|
||||||
mMoreSettings.setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
fireMoreSettings();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Interaction.register(mMoreSettings, mInteractionCallback);
|
|
||||||
|
|
||||||
mZenIntroduction = findViewById(R.id.zen_introduction);
|
mZenIntroduction = findViewById(R.id.zen_introduction);
|
||||||
|
mZenIntroductionMessage = (TextView) findViewById(R.id.zen_introduction_message);
|
||||||
mZenIntroductionConfirm = findViewById(R.id.zen_introduction_confirm);
|
mZenIntroductionConfirm = findViewById(R.id.zen_introduction_confirm);
|
||||||
mZenIntroductionConfirm.setOnClickListener(new OnClickListener() {
|
mZenIntroductionConfirm.setOnClickListener(new OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
@@ -230,25 +175,25 @@ public class ZenModePanel extends LinearLayout {
|
|||||||
|
|
||||||
mZenConditions = (LinearLayout) findViewById(R.id.zen_conditions);
|
mZenConditions = (LinearLayout) findViewById(R.id.zen_conditions);
|
||||||
|
|
||||||
setLayoutTransition(newLayoutTransition(mTransitionHelper));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void confirmZenIntroduction() {
|
private void confirmZenIntroduction() {
|
||||||
if (DEBUG) Log.d(TAG, "confirmZenIntroduction");
|
final String prefKey = prefKeyForConfirmation(getSelectedZen(Global.ZEN_MODE_OFF));
|
||||||
Prefs.putBoolean(mContext, Prefs.Key.DND_CONFIRMED_PRIORITY_INTRODUCTION, true);
|
if (prefKey == null) return;
|
||||||
|
if (DEBUG) Log.d(TAG, "confirmZenIntroduction " + prefKey);
|
||||||
|
Prefs.putBoolean(mContext, prefKey, true);
|
||||||
mHandler.sendEmptyMessage(H.UPDATE_WIDGETS);
|
mHandler.sendEmptyMessage(H.UPDATE_WIDGETS);
|
||||||
}
|
}
|
||||||
|
|
||||||
private LayoutTransition newLayoutTransition(TransitionListener listener) {
|
private static String prefKeyForConfirmation(int zen) {
|
||||||
final LayoutTransition transition = new LayoutTransition();
|
switch (zen) {
|
||||||
transition.disableTransitionType(LayoutTransition.DISAPPEARING);
|
case Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS:
|
||||||
transition.disableTransitionType(LayoutTransition.CHANGE_DISAPPEARING);
|
return Prefs.Key.DND_CONFIRMED_PRIORITY_INTRODUCTION;
|
||||||
transition.disableTransitionType(LayoutTransition.APPEARING);
|
case Global.ZEN_MODE_NO_INTERRUPTIONS:
|
||||||
transition.setInterpolator(LayoutTransition.CHANGE_APPEARING, mInterpolator);
|
return Prefs.Key.DND_CONFIRMED_SILENCE_INTRODUCTION;
|
||||||
if (listener != null) {
|
default:
|
||||||
transition.addTransitionListener(listener);
|
return null;
|
||||||
}
|
}
|
||||||
return transition;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -260,7 +205,6 @@ public class ZenModePanel extends LinearLayout {
|
|||||||
mSessionZen = mAttachedZen;
|
mSessionZen = mAttachedZen;
|
||||||
mTransitionHelper.clear();
|
mTransitionHelper.clear();
|
||||||
setSessionExitCondition(copy(mExitCondition));
|
setSessionExitCondition(copy(mExitCondition));
|
||||||
refreshExitConditionText();
|
|
||||||
updateWidgets();
|
updateWidgets();
|
||||||
setRequestingConditions(!mHidden);
|
setRequestingConditions(!mHidden);
|
||||||
}
|
}
|
||||||
@@ -274,9 +218,6 @@ public class ZenModePanel extends LinearLayout {
|
|||||||
mAttachedZen = -1;
|
mAttachedZen = -1;
|
||||||
mSessionZen = -1;
|
mSessionZen = -1;
|
||||||
setSessionExitCondition(null);
|
setSessionExitCondition(null);
|
||||||
if (!mEmbedded) {
|
|
||||||
setExpanded(false);
|
|
||||||
}
|
|
||||||
setRequestingConditions(false);
|
setRequestingConditions(false);
|
||||||
mTransitionHelper.clear();
|
mTransitionHelper.clear();
|
||||||
}
|
}
|
||||||
@@ -359,7 +300,6 @@ public class ZenModePanel extends LinearLayout {
|
|||||||
for (int i = 0; i < mMaxConditions; i++) {
|
for (int i = 0; i < mMaxConditions; i++) {
|
||||||
mZenConditions.addView(mInflater.inflate(R.layout.zen_mode_condition, this, false));
|
mZenConditions.addView(mInflater.inflate(R.layout.zen_mode_condition, this, false));
|
||||||
}
|
}
|
||||||
refreshExitConditionText();
|
|
||||||
mSessionZen = getSelectedZen(-1);
|
mSessionZen = getSelectedZen(-1);
|
||||||
handleUpdateManualRule(mController.getManualRule());
|
handleUpdateManualRule(mController.getManualRule());
|
||||||
if (DEBUG) Log.d(mTag, "init mExitCondition=" + mExitCondition);
|
if (DEBUG) Log.d(mTag, "init mExitCondition=" + mExitCondition);
|
||||||
@@ -375,7 +315,6 @@ public class ZenModePanel extends LinearLayout {
|
|||||||
if (Objects.equals(mExitCondition, exitCondition)) return;
|
if (Objects.equals(mExitCondition, exitCondition)) return;
|
||||||
mExitCondition = exitCondition;
|
mExitCondition = exitCondition;
|
||||||
if (DEBUG) Log.d(mTag, "mExitCondition=" + getConditionId(mExitCondition));
|
if (DEBUG) Log.d(mTag, "mExitCondition=" + getConditionId(mExitCondition));
|
||||||
refreshExitConditionText();
|
|
||||||
updateWidgets();
|
updateWidgets();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -395,10 +334,6 @@ public class ZenModePanel extends LinearLayout {
|
|||||||
return condition == null ? null : condition.copy();
|
return condition == null ? null : condition.copy();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void refreshExitConditionText() {
|
|
||||||
mExitConditionText = getExitConditionText(mContext, mExitCondition);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getExitConditionText(Context context, Condition exitCondition) {
|
public static String getExitConditionText(Context context, Condition exitCondition) {
|
||||||
if (exitCondition == null) {
|
if (exitCondition == null) {
|
||||||
return foreverSummary(context);
|
return foreverSummary(context);
|
||||||
@@ -430,7 +365,7 @@ public class ZenModePanel extends LinearLayout {
|
|||||||
|
|
||||||
private void handleUpdateZen(int zen) {
|
private void handleUpdateZen(int zen) {
|
||||||
if (mSessionZen != -1 && mSessionZen != zen) {
|
if (mSessionZen != -1 && mSessionZen != zen) {
|
||||||
setExpanded(mEmbedded && isShown() || !mEmbedded && zen != Global.ZEN_MODE_OFF);
|
setExpanded(isShown());
|
||||||
mSessionZen = zen;
|
mSessionZen = zen;
|
||||||
}
|
}
|
||||||
mZenButtons.setSelectedValue(zen);
|
mZenButtons.setSelectedValue(zen);
|
||||||
@@ -480,30 +415,18 @@ public class ZenModePanel extends LinearLayout {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final int zen = getSelectedZen(Global.ZEN_MODE_OFF);
|
final int zen = getSelectedZen(Global.ZEN_MODE_OFF);
|
||||||
final boolean zenOff = zen == Global.ZEN_MODE_OFF;
|
|
||||||
final boolean zenImportant = zen == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
|
final boolean zenImportant = zen == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
|
||||||
final boolean zenNone = zen == Global.ZEN_MODE_NO_INTERRUPTIONS;
|
final boolean zenNone = zen == Global.ZEN_MODE_NO_INTERRUPTIONS;
|
||||||
final boolean expanded = !mHidden && mExpanded;
|
final boolean introduction = (zenImportant && !mPrefs.mConfirmedPriorityIntroduction
|
||||||
final boolean conditions = mEmbedded || !zenOff && expanded;
|
|| zenNone && !mPrefs.mConfirmedSilenceIntroduction);
|
||||||
final boolean introduction = conditions && zenImportant && !mPrefs.mConfirmedIntroduction;
|
|
||||||
|
|
||||||
mZenButtons.setVisibility(mHidden ? GONE : VISIBLE);
|
mZenButtons.setVisibility(mHidden ? GONE : VISIBLE);
|
||||||
mZenSubhead.setVisibility(!mHidden && !zenOff && !mEmbedded ? VISIBLE : GONE);
|
|
||||||
mZenSubheadExpanded.setVisibility(expanded ? VISIBLE : GONE);
|
|
||||||
mZenSubheadCollapsed.setVisibility(!expanded ? VISIBLE : GONE);
|
|
||||||
mMoreSettings.setVisibility(zenImportant && expanded ? VISIBLE : GONE);
|
|
||||||
mZenConditions.setVisibility(conditions ? VISIBLE : GONE);
|
|
||||||
|
|
||||||
if (zenNone) {
|
|
||||||
mZenSubheadExpanded.setText(R.string.zen_no_interruptions_with_warning);
|
|
||||||
mZenSubheadCollapsed.setText(mExitConditionText);
|
|
||||||
} else if (zenImportant) {
|
|
||||||
mZenSubheadExpanded.setText(R.string.zen_important_interruptions);
|
|
||||||
mZenSubheadCollapsed.setText(mExitConditionText);
|
|
||||||
}
|
|
||||||
mZenSubheadExpanded.setTextColor(zenNone && mPrefs.isNoneDangerous()
|
|
||||||
? mSubheadWarningColor : mSubheadColor);
|
|
||||||
mZenIntroduction.setVisibility(introduction ? VISIBLE : GONE);
|
mZenIntroduction.setVisibility(introduction ? VISIBLE : GONE);
|
||||||
|
if (introduction) {
|
||||||
|
mZenIntroductionMessage.setText(zenImportant ? R.string.zen_priority_introduction
|
||||||
|
: R.string.zen_silence_introduction);
|
||||||
|
mZenIntroductionCustomize.setVisibility(zenImportant ? VISIBLE : GONE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Condition parseExistingTimeCondition(Context context, Condition condition) {
|
private static Condition parseExistingTimeCondition(Context context, Condition condition) {
|
||||||
@@ -761,13 +684,13 @@ public class ZenModePanel extends LinearLayout {
|
|||||||
String modeText;
|
String modeText;
|
||||||
switch(zen) {
|
switch(zen) {
|
||||||
case Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS:
|
case Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS:
|
||||||
modeText = mContext.getString(R.string.zen_important_interruptions);
|
modeText = mContext.getString(R.string.interruption_level_priority);
|
||||||
break;
|
break;
|
||||||
case Global.ZEN_MODE_NO_INTERRUPTIONS:
|
case Global.ZEN_MODE_NO_INTERRUPTIONS:
|
||||||
modeText = mContext.getString(R.string.zen_no_interruptions);
|
modeText = mContext.getString(R.string.interruption_level_none);
|
||||||
break;
|
break;
|
||||||
case Global.ZEN_MODE_ALARMS:
|
case Global.ZEN_MODE_ALARMS:
|
||||||
modeText = mContext.getString(R.string.zen_alarms);
|
modeText = mContext.getString(R.string.interruption_level_alarms);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
@@ -837,12 +760,6 @@ public class ZenModePanel extends LinearLayout {
|
|||||||
setSessionExitCondition(copy(condition));
|
setSessionExitCondition(copy(condition));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void fireMoreSettings() {
|
|
||||||
if (mCallback != null) {
|
|
||||||
mCallback.onMoreSettings();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void fireInteraction() {
|
private void fireInteraction() {
|
||||||
if (mCallback != null) {
|
if (mCallback != null) {
|
||||||
mCallback.onInteraction();
|
mCallback.onInteraction();
|
||||||
@@ -887,7 +804,6 @@ public class ZenModePanel extends LinearLayout {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public interface Callback {
|
public interface Callback {
|
||||||
void onMoreSettings();
|
|
||||||
void onPrioritySettings();
|
void onPrioritySettings();
|
||||||
void onInteraction();
|
void onInteraction();
|
||||||
void onExpanded(boolean expanded);
|
void onExpanded(boolean expanded);
|
||||||
@@ -907,7 +823,8 @@ public class ZenModePanel extends LinearLayout {
|
|||||||
|
|
||||||
private int mMinuteIndex;
|
private int mMinuteIndex;
|
||||||
private int mNoneSelected;
|
private int mNoneSelected;
|
||||||
private boolean mConfirmedIntroduction;
|
private boolean mConfirmedPriorityIntroduction;
|
||||||
|
private boolean mConfirmedSilenceIntroduction;
|
||||||
|
|
||||||
private ZenPrefs() {
|
private ZenPrefs() {
|
||||||
mNoneDangerousThreshold = mContext.getResources()
|
mNoneDangerousThreshold = mContext.getResources()
|
||||||
@@ -915,11 +832,8 @@ public class ZenModePanel extends LinearLayout {
|
|||||||
Prefs.registerListener(mContext, this);
|
Prefs.registerListener(mContext, this);
|
||||||
updateMinuteIndex();
|
updateMinuteIndex();
|
||||||
updateNoneSelected();
|
updateNoneSelected();
|
||||||
updateConfirmedIntroduction();
|
updateConfirmedPriorityIntroduction();
|
||||||
}
|
updateConfirmedSilenceIntroduction();
|
||||||
|
|
||||||
public boolean isNoneDangerous() {
|
|
||||||
return mNoneSelected < mNoneDangerousThreshold;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void trackNoneSelected() {
|
public void trackNoneSelected() {
|
||||||
@@ -945,7 +859,8 @@ public class ZenModePanel extends LinearLayout {
|
|||||||
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
|
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
|
||||||
updateMinuteIndex();
|
updateMinuteIndex();
|
||||||
updateNoneSelected();
|
updateNoneSelected();
|
||||||
updateConfirmedIntroduction();
|
updateConfirmedPriorityIntroduction();
|
||||||
|
updateConfirmedSilenceIntroduction();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateMinuteIndex() {
|
private void updateMinuteIndex() {
|
||||||
@@ -968,12 +883,22 @@ public class ZenModePanel extends LinearLayout {
|
|||||||
return MathUtils.constrain(noneSelected, 0, Integer.MAX_VALUE);
|
return MathUtils.constrain(noneSelected, 0, Integer.MAX_VALUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateConfirmedIntroduction() {
|
private void updateConfirmedPriorityIntroduction() {
|
||||||
final boolean confirmed = Prefs.getBoolean(mContext,
|
final boolean confirmed = Prefs.getBoolean(mContext,
|
||||||
Prefs.Key.DND_CONFIRMED_PRIORITY_INTRODUCTION, false);
|
Prefs.Key.DND_CONFIRMED_PRIORITY_INTRODUCTION, false);
|
||||||
if (confirmed == mConfirmedIntroduction) return;
|
if (confirmed == mConfirmedPriorityIntroduction) return;
|
||||||
mConfirmedIntroduction = confirmed;
|
mConfirmedPriorityIntroduction = confirmed;
|
||||||
if (DEBUG) Log.d(mTag, "Confirmed introduction: " + mConfirmedIntroduction);
|
if (DEBUG) Log.d(mTag, "Confirmed priority introduction: "
|
||||||
|
+ mConfirmedPriorityIntroduction);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateConfirmedSilenceIntroduction() {
|
||||||
|
final boolean confirmed = Prefs.getBoolean(mContext,
|
||||||
|
Prefs.Key.DND_CONFIRMED_SILENCE_INTRODUCTION, false);
|
||||||
|
if (confirmed == mConfirmedSilenceIntroduction) return;
|
||||||
|
mConfirmedSilenceIntroduction = confirmed;
|
||||||
|
if (DEBUG) Log.d(mTag, "Confirmed silence introduction: "
|
||||||
|
+ mConfirmedSilenceIntroduction);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -981,12 +906,16 @@ public class ZenModePanel extends LinearLayout {
|
|||||||
@Override
|
@Override
|
||||||
public void onSelected(final Object value) {
|
public void onSelected(final Object value) {
|
||||||
if (value != null && mZenButtons.isShown() && isAttachedToWindow()) {
|
if (value != null && mZenButtons.isShown() && isAttachedToWindow()) {
|
||||||
if (DEBUG) Log.d(mTag, "mZenButtonsCallback selected=" + value);
|
final int zen = (Integer) value;
|
||||||
|
if (DEBUG) Log.d(mTag, "mZenButtonsCallback selected=" + zen);
|
||||||
final Uri realConditionId = getRealConditionId(mSessionExitCondition);
|
final Uri realConditionId = getRealConditionId(mSessionExitCondition);
|
||||||
AsyncTask.execute(new Runnable() {
|
AsyncTask.execute(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
mController.setZen((Integer) value, realConditionId, TAG + ".selectZen");
|
mController.setZen(zen, realConditionId, TAG + ".selectZen");
|
||||||
|
if (zen != Global.ZEN_MODE_OFF) {
|
||||||
|
Prefs.putInt(mContext, Prefs.Key.DND_FAVORITE_ZEN, zen);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1803,9 +1803,7 @@ public class AudioService extends IAudioService.Stub {
|
|||||||
if (!shouldMute) {
|
if (!shouldMute) {
|
||||||
// unmute
|
// unmute
|
||||||
// ring and notifications volume should never be 0 when not silenced
|
// ring and notifications volume should never be 0 when not silenced
|
||||||
// on voice capable devices or devices that support vibration
|
if (mStreamVolumeAlias[streamType] == AudioSystem.STREAM_RING) {
|
||||||
if ((isPlatformVoice() || mHasVibrator) &&
|
|
||||||
mStreamVolumeAlias[streamType] == AudioSystem.STREAM_RING) {
|
|
||||||
synchronized (VolumeStreamState.class) {
|
synchronized (VolumeStreamState.class) {
|
||||||
final VolumeStreamState vss = mStreamStates[streamType];
|
final VolumeStreamState vss = mStreamStates[streamType];
|
||||||
for (int i = 0; i < vss.mIndexMap.size(); i++) {
|
for (int i = 0; i < vss.mIndexMap.size(); i++) {
|
||||||
@@ -2986,10 +2984,7 @@ public class AudioService extends IAudioService.Stub {
|
|||||||
mLoweredFromNormalToVibrateTime = SystemClock.uptimeMillis();
|
mLoweredFromNormalToVibrateTime = SystemClock.uptimeMillis();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// (oldIndex < step) is equivalent to (old UI index == 0)
|
if (oldIndex == step && mVolumePolicy.volumeDownToEnterSilent) {
|
||||||
if ((oldIndex < step)
|
|
||||||
&& mVolumePolicy.volumeDownToEnterSilent
|
|
||||||
&& mPrevVolDirection != AudioManager.ADJUST_LOWER) {
|
|
||||||
ringerMode = RINGER_MODE_SILENT;
|
ringerMode = RINGER_MODE_SILENT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3018,7 +3013,8 @@ public class AudioService extends IAudioService.Stub {
|
|||||||
if (mVolumePolicy.volumeDownToEnterSilent) {
|
if (mVolumePolicy.volumeDownToEnterSilent) {
|
||||||
final long diff = SystemClock.uptimeMillis()
|
final long diff = SystemClock.uptimeMillis()
|
||||||
- mLoweredFromNormalToVibrateTime;
|
- mLoweredFromNormalToVibrateTime;
|
||||||
if (diff > mVolumePolicy.vibrateToSilentDebounce) {
|
if (diff > mVolumePolicy.vibrateToSilentDebounce
|
||||||
|
&& mRingerModeDelegate.canVolumeDownEnterSilent()) {
|
||||||
ringerMode = RINGER_MODE_SILENT;
|
ringerMode = RINGER_MODE_SILENT;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -115,8 +115,8 @@ public class ZenLog {
|
|||||||
append(TYPE_UNSUBSCRIBE, uri + "," + subscribeResult(provider, e));
|
append(TYPE_UNSUBSCRIBE, uri + "," + subscribeResult(provider, e));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void traceConfig(ZenModeConfig oldConfig, ZenModeConfig newConfig) {
|
public static void traceConfig(String reason, ZenModeConfig newConfig) {
|
||||||
append(TYPE_CONFIG, newConfig != null ? newConfig.toString() : null);
|
append(TYPE_CONFIG, reason + "," + (newConfig != null ? newConfig.toString() : null));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void traceDisableEffects(NotificationRecord record, String reason) {
|
public static void traceDisableEffects(NotificationRecord record, String reason) {
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package com.android.server.notification;
|
package com.android.server.notification;
|
||||||
|
|
||||||
import static android.media.AudioAttributes.USAGE_ALARM;
|
import static android.media.AudioAttributes.USAGE_ALARM;
|
||||||
|
import static android.media.AudioAttributes.USAGE_MEDIA;
|
||||||
import static android.media.AudioAttributes.USAGE_NOTIFICATION;
|
import static android.media.AudioAttributes.USAGE_NOTIFICATION;
|
||||||
import static android.media.AudioAttributes.USAGE_NOTIFICATION_RINGTONE;
|
import static android.media.AudioAttributes.USAGE_NOTIFICATION_RINGTONE;
|
||||||
|
|
||||||
@@ -262,8 +263,8 @@ public class ZenModeHelper {
|
|||||||
}
|
}
|
||||||
mConditions.evaluateConfig(config); // may modify config
|
mConditions.evaluateConfig(config); // may modify config
|
||||||
if (config.equals(mConfig)) return true;
|
if (config.equals(mConfig)) return true;
|
||||||
if (DEBUG) Log.d(TAG, "setConfig reason=" + reason);
|
if (DEBUG) Log.d(TAG, "setConfig reason=" + reason, new Throwable());
|
||||||
ZenLog.traceConfig(mConfig, config);
|
ZenLog.traceConfig(reason, config);
|
||||||
final boolean policyChanged = !Objects.equals(getNotificationPolicy(mConfig),
|
final boolean policyChanged = !Objects.equals(getNotificationPolicy(mConfig),
|
||||||
getNotificationPolicy(config));
|
getNotificationPolicy(config));
|
||||||
mConfig = config;
|
mConfig = config;
|
||||||
@@ -329,9 +330,10 @@ public class ZenModeHelper {
|
|||||||
|| mEffectsSuppressed;
|
|| mEffectsSuppressed;
|
||||||
applyRestrictions(muteCalls, USAGE_NOTIFICATION_RINGTONE);
|
applyRestrictions(muteCalls, USAGE_NOTIFICATION_RINGTONE);
|
||||||
|
|
||||||
// alarm restrictions
|
// alarm/media restrictions
|
||||||
final boolean muteAlarms = mZenMode == Global.ZEN_MODE_NO_INTERRUPTIONS;
|
final boolean zenNone = mZenMode == Global.ZEN_MODE_NO_INTERRUPTIONS;
|
||||||
applyRestrictions(muteAlarms, USAGE_ALARM);
|
applyRestrictions(zenNone, USAGE_ALARM);
|
||||||
|
applyRestrictions(zenNone, USAGE_MEDIA);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void applyRestrictions(boolean mute, int usage) {
|
private void applyRestrictions(boolean mute, int usage) {
|
||||||
@@ -590,6 +592,11 @@ public class ZenModeHelper {
|
|||||||
ringerModeInternal, ringerModeInternalOut);
|
ringerModeInternal, ringerModeInternalOut);
|
||||||
return ringerModeInternalOut;
|
return ringerModeInternalOut;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canVolumeDownEnterSilent() {
|
||||||
|
return mZenMode == Global.ZEN_MODE_OFF;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final class SettingsObserver extends ContentObserver {
|
private final class SettingsObserver extends ContentObserver {
|
||||||
|
|||||||
Reference in New Issue
Block a user