summaryrefslogtreecommitdiffstats
path: root/packages
diff options
context:
space:
mode:
Diffstat (limited to 'packages')
-rw-r--r--packages/Keyguard/res/drawable-hdpi/ic_alarm_small.pngbin0 -> 1159 bytes
-rw-r--r--packages/Keyguard/res/drawable-hdpi/ic_lockscreen_alarm.pngbin1398 -> 0 bytes
-rw-r--r--packages/Keyguard/res/drawable-mdpi/ic_alarm_small.pngbin0 -> 758 bytes
-rw-r--r--packages/Keyguard/res/drawable-mdpi/ic_lockscreen_alarm.pngbin839 -> 0 bytes
-rw-r--r--packages/Keyguard/res/drawable-sw600dp-hdpi/ic_alarm_small.pngbin0 -> 1320 bytes
-rw-r--r--packages/Keyguard/res/drawable-sw600dp-mdpi/ic_alarm_small.pngbin0 -> 847 bytes
-rw-r--r--packages/Keyguard/res/drawable-sw600dp-xhdpi/ic_alarm_small.pngbin0 -> 1836 bytes
-rw-r--r--packages/Keyguard/res/drawable-sw600dp-xxhdpi/ic_alarm_small.pngbin0 -> 2696 bytes
-rw-r--r--packages/Keyguard/res/drawable-xhdpi/ic_alarm_small.pngbin0 -> 1590 bytes
-rw-r--r--packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_alarm.pngbin2130 -> 0 bytes
-rw-r--r--packages/Keyguard/res/drawable-xxhdpi/ic_alarm_small.pngbin0 -> 2513 bytes
-rw-r--r--packages/Keyguard/res/layout-land/keyguard_status_area.xml58
-rw-r--r--packages/Keyguard/res/layout-port/keyguard_status_area.xml61
-rw-r--r--packages/Keyguard/res/layout/keyguard_status_area.xml50
-rw-r--r--packages/Keyguard/res/layout/keyguard_status_view.xml38
-rw-r--r--packages/Keyguard/res/layout/keyguard_transport_control_view.xml163
-rw-r--r--packages/Keyguard/res/layout/keyguard_widget_remove_drop_target.xml2
-rw-r--r--packages/Keyguard/res/values-land/dimens.xml11
-rw-r--r--packages/Keyguard/res/values-large/dimens.xml7
-rw-r--r--packages/Keyguard/res/values-sw600dp/dimens.xml10
-rw-r--r--packages/Keyguard/res/values-sw720dp/dimens.xml3
-rw-r--r--packages/Keyguard/res/values-xlarge/dimens.xml27
-rw-r--r--packages/Keyguard/res/values/alias.xml5
-rw-r--r--packages/Keyguard/res/values/colors.xml4
-rw-r--r--packages/Keyguard/res/values/dimens.xml26
-rw-r--r--packages/Keyguard/res/values/donottranslate.xml22
-rw-r--r--packages/Keyguard/res/values/strings.xml11
-rw-r--r--packages/Keyguard/res/values/styles.xml15
-rw-r--r--packages/Keyguard/src/com/android/keyguard/ClockView.java223
-rw-r--r--packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java9
-rw-r--r--packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java28
-rw-r--r--packages/Keyguard/src/com/android/keyguard/KeyguardTransportControlView.java514
-rw-r--r--packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java42
-rw-r--r--packages/PrintSpooler/res/layout/select_printer_activity.xml15
-rw-r--r--packages/PrintSpooler/res/values-af/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-am/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-ar/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-bg/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-ca/strings.xml5
-rw-r--r--packages/PrintSpooler/res/values-cs/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-da/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-de/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-el/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-en-rGB/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-en-rIN/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-es-rUS/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-es/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-et-rEE/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-fa/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-fi/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-fr-rCA/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-fr/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-hi/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-hr/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-hu/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-hy-rAM/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-in/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-it/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-iw/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-ja/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-ka-rGE/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-km-rKH/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-ko/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-lo-rLA/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-lt/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-lv/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-mn-rMN/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-ms-rMY/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-nb/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-nl/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-pl/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-pt-rPT/strings.xml5
-rw-r--r--packages/PrintSpooler/res/values-pt/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-ro/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-ru/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-sk/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-sl/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-sr/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-sv/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-sw/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-th/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-tl/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-tr/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-uk/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-vi/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-zh-rCN/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-zh-rHK/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-zh-rTW/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values-zu/strings.xml3
-rw-r--r--packages/PrintSpooler/res/values/strings.xml2
-rw-r--r--packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java5
-rw-r--r--packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java5
-rw-r--r--packages/PrintSpooler/src/com/android/printspooler/SelectPrinterFragment.java15
-rw-r--r--packages/Shell/res/values-da/strings.xml2
-rw-r--r--packages/SystemUI/res/drawable-hdpi/search_light.pngbin1289 -> 1614 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/search_light.pngbin937 -> 1110 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/search_light.pngbin1770 -> 2294 bytes
-rw-r--r--packages/SystemUI/res/drawable-xxhdpi/search_light.pngbin2522 -> 4323 bytes
-rw-r--r--packages/SystemUI/res/values/strings.xml6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java135
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java207
101 files changed, 1126 insertions, 764 deletions
diff --git a/packages/Keyguard/res/drawable-hdpi/ic_alarm_small.png b/packages/Keyguard/res/drawable-hdpi/ic_alarm_small.png
new file mode 100644
index 0000000..3819029
--- /dev/null
+++ b/packages/Keyguard/res/drawable-hdpi/ic_alarm_small.png
Binary files differ
diff --git a/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_alarm.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_alarm.png
deleted file mode 100644
index d7a8cfc..0000000
--- a/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_alarm.png
+++ /dev/null
Binary files differ
diff --git a/packages/Keyguard/res/drawable-mdpi/ic_alarm_small.png b/packages/Keyguard/res/drawable-mdpi/ic_alarm_small.png
new file mode 100644
index 0000000..2aeedaf
--- /dev/null
+++ b/packages/Keyguard/res/drawable-mdpi/ic_alarm_small.png
Binary files differ
diff --git a/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_alarm.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_alarm.png
deleted file mode 100644
index 330ade1..0000000
--- a/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_alarm.png
+++ /dev/null
Binary files differ
diff --git a/packages/Keyguard/res/drawable-sw600dp-hdpi/ic_alarm_small.png b/packages/Keyguard/res/drawable-sw600dp-hdpi/ic_alarm_small.png
new file mode 100644
index 0000000..e28b3f6
--- /dev/null
+++ b/packages/Keyguard/res/drawable-sw600dp-hdpi/ic_alarm_small.png
Binary files differ
diff --git a/packages/Keyguard/res/drawable-sw600dp-mdpi/ic_alarm_small.png b/packages/Keyguard/res/drawable-sw600dp-mdpi/ic_alarm_small.png
new file mode 100644
index 0000000..f727d01
--- /dev/null
+++ b/packages/Keyguard/res/drawable-sw600dp-mdpi/ic_alarm_small.png
Binary files differ
diff --git a/packages/Keyguard/res/drawable-sw600dp-xhdpi/ic_alarm_small.png b/packages/Keyguard/res/drawable-sw600dp-xhdpi/ic_alarm_small.png
new file mode 100644
index 0000000..d9c0623
--- /dev/null
+++ b/packages/Keyguard/res/drawable-sw600dp-xhdpi/ic_alarm_small.png
Binary files differ
diff --git a/packages/Keyguard/res/drawable-sw600dp-xxhdpi/ic_alarm_small.png b/packages/Keyguard/res/drawable-sw600dp-xxhdpi/ic_alarm_small.png
new file mode 100644
index 0000000..a36bf1f
--- /dev/null
+++ b/packages/Keyguard/res/drawable-sw600dp-xxhdpi/ic_alarm_small.png
Binary files differ
diff --git a/packages/Keyguard/res/drawable-xhdpi/ic_alarm_small.png b/packages/Keyguard/res/drawable-xhdpi/ic_alarm_small.png
new file mode 100644
index 0000000..0290bdc
--- /dev/null
+++ b/packages/Keyguard/res/drawable-xhdpi/ic_alarm_small.png
Binary files differ
diff --git a/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_alarm.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_alarm.png
deleted file mode 100644
index e6cceef..0000000
--- a/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_alarm.png
+++ /dev/null
Binary files differ
diff --git a/packages/Keyguard/res/drawable-xxhdpi/ic_alarm_small.png b/packages/Keyguard/res/drawable-xxhdpi/ic_alarm_small.png
new file mode 100644
index 0000000..66968e8
--- /dev/null
+++ b/packages/Keyguard/res/drawable-xxhdpi/ic_alarm_small.png
Binary files differ
diff --git a/packages/Keyguard/res/layout-land/keyguard_status_area.xml b/packages/Keyguard/res/layout-land/keyguard_status_area.xml
deleted file mode 100644
index d450c5c..0000000
--- a/packages/Keyguard/res/layout-land/keyguard_status_area.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2009, 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.
-*/
--->
-
-<!-- This is a view that shows general status information in Keyguard. -->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/keyguard_status_area"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="end"
- android:layout_marginTop="-16dp"
- android:orientation="vertical">
-
- <TextView
- android:id="@+id/date"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="end"
- android:layout_marginEnd="@dimen/kg_status_line_font_right_margin"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/kg_status_date_font_size"
- android:textAllCaps="@bool/kg_use_all_caps"
- />
-
- <TextView
- android:id="@+id/alarm_status"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="end"
- android:layout_marginTop="28dp"
- android:layout_marginEnd="@dimen/kg_status_line_font_right_margin"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearance"
- android:textSize="@dimen/kg_status_line_font_size"
- android:drawablePadding="4dip"
- android:textAllCaps="@bool/kg_use_all_caps"
- />
-
-</LinearLayout> \ No newline at end of file
diff --git a/packages/Keyguard/res/layout-port/keyguard_status_area.xml b/packages/Keyguard/res/layout-port/keyguard_status_area.xml
deleted file mode 100644
index af0d2e8..0000000
--- a/packages/Keyguard/res/layout-port/keyguard_status_area.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2009, 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.
-*/
--->
-
-<!-- This is a view that shows general status information in Keyguard. -->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/keyguard_status_area"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="right"
- android:orientation="vertical">
-
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="0dp"
- android:layout_gravity="right">
- <TextView
- android:id="@+id/date"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="@dimen/kg_status_line_font_right_margin"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/kg_status_date_font_size"
- android:textAllCaps="@bool/kg_use_all_caps"
- />
-
- <TextView
- android:id="@+id/alarm_status"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="@dimen/kg_status_line_font_right_margin"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearance"
- android:textSize="@dimen/kg_status_line_font_size"
- android:drawablePadding="4dip"
- android:textAllCaps="@bool/kg_use_all_caps"
- />
- </LinearLayout>
-
-</LinearLayout>
diff --git a/packages/Keyguard/res/layout/keyguard_status_area.xml b/packages/Keyguard/res/layout/keyguard_status_area.xml
new file mode 100644
index 0000000..d1f3873
--- /dev/null
+++ b/packages/Keyguard/res/layout/keyguard_status_area.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2013, 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.
+*/
+-->
+
+<!-- This is a view that shows general status information in Keyguard. -->
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:gravity="center">
+ <TextClock android:id="@+id/date_view"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textColor="@color/clock_white"
+ android:format12Hour="@string/abbrev_wday_month_day_no_year"
+ android:format24Hour="@string/abbrev_wday_month_day_no_year"
+ style="@style/widget_label"
+ android:gravity="center"
+ />
+ <TextView android:id="@+id/alarm_status"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:drawablePadding="2dip"
+ android:drawableLeft="@drawable/ic_alarm_small"
+ android:drawableStart="@drawable/ic_alarm_small"
+ android:textColor="@color/clock_gray"
+ style="@style/widget_label"
+ android:layout_marginLeft="8dip"
+ android:layout_marginStart="8dip"
+ android:gravity="center"
+ android:visibility="gone"
+ />
+</LinearLayout>
diff --git a/packages/Keyguard/res/layout/keyguard_status_view.xml b/packages/Keyguard/res/layout/keyguard_status_view.xml
index 2304d9f..5857fc2 100644
--- a/packages/Keyguard/res/layout/keyguard_status_view.xml
+++ b/packages/Keyguard/res/layout/keyguard_status_view.xml
@@ -35,34 +35,26 @@
android:layout_height="match_parent"
android:gravity="center_horizontal|top"
android:contentDescription="@string/keyguard_accessibility_status">
-
- <LinearLayout android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal|top"
- android:orientation="vertical"
- android:focusable="true">
- <com.android.keyguard.ClockView
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal|top"
+ android:orientation="vertical"
+ android:focusable="true">
+ <TextClock
android:id="@+id/clock_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginEnd="@dimen/kg_status_line_font_right_margin"
- android:layout_gravity="right">
-
- <TextView android:id="@+id/clock_text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="none"
- android:textSize="@dimen/kg_status_clock_font_size"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="#ffffffff"
- android:drawablePadding="2dip"
- />
-
- </com.android.keyguard.ClockView>
+ android:layout_gravity="center_horizontal|top"
+ android:textColor="@color/clock_white"
+ android:singleLine="true"
+ style="@style/widget_big_thin"
+ android:format12Hour="@string/keyguard_widget_12_hours_format"
+ android:format24Hour="@string/keyguard_widget_24_hours_format"
+ android:baselineAligned="true"
+ android:layout_marginBottom="@dimen/bottom_text_spacing_digital" />
<include layout="@layout/keyguard_status_area" />
</LinearLayout>
-
</com.android.keyguard.KeyguardStatusView>
</com.android.keyguard.KeyguardWidgetFrame>
diff --git a/packages/Keyguard/res/layout/keyguard_transport_control_view.xml b/packages/Keyguard/res/layout/keyguard_transport_control_view.xml
index 801999a..81c7425 100644
--- a/packages/Keyguard/res/layout/keyguard_transport_control_view.xml
+++ b/packages/Keyguard/res/layout/keyguard_transport_control_view.xml
@@ -22,34 +22,133 @@
android:gravity="center_horizontal"
android:id="@+id/keyguard_transport_control">
- <!-- Use ImageView for its cropping features; otherwise could be android:background -->
- <ImageView
- android:id="@+id/albumart"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_gravity="fill"
- android:scaleType="centerCrop"
- android:adjustViewBounds="false"
- android:contentDescription="@string/keygaurd_accessibility_media_controls" />
-
-
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_gravity="bottom">
- <TextView
- android:id="@+id/title"
+ android:layout_gravity="top"
+ android:gravity="center">
+ <ImageView
+ android:id="@+id/badge"
+ android:layout_width="32dp"
+ android:layout_height="32dp"
+ android:scaleType="fitCenter" />
+ <FrameLayout
+ android:id="@+id/info_container"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dip"
- android:layout_marginStart="16dip"
- android:layout_marginEnd="16dip"
- android:gravity="center_horizontal"
- android:singleLine="true"
- android:ellipsize="end"
- android:textAppearance="?android:attr/textAppearanceMedium"
- />
+ android:layout_height="wrap_content">
+ <LinearLayout
+ android:id="@+id/metadata_container"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center">
+ <TextView
+ android:id="@+id/title"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="16dip"
+ android:layout_marginEnd="16dip"
+ android:gravity="center_horizontal"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:fontFamily="sans-serif-light" />
+ <TextView
+ android:id="@+id/artist_album"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="16dip"
+ android:layout_marginEnd="16dip"
+ android:gravity="center_horizontal"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textColor="?android:attr/textColorSecondary" />
+ </LinearLayout>
+ <RelativeLayout
+ android:id="@+id/transient_seek"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:visibility="invisible">
+ <SeekBar
+ android:id="@+id/transient_seek_bar"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+ <TextView
+ android:id="@+id/transient_seek_time_elapsed"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentStart="true"
+ android:layout_below="@id/transient_seek_bar"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textSize="12dp" />
+ <TextView
+ android:id="@+id/transient_seek_time_remaining"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentEnd="true"
+ android:layout_below="@id/transient_seek_bar"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textSize="12dp" />
+ </RelativeLayout>
+ <LinearLayout
+ android:id="@+id/transient_rating"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:visibility="invisible">
+ <RatingBar
+ android:id="@+id/transient_rating_bar_stars"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+ <LinearLayout
+ android:id="@+id/transient_rating_thumbs"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+ <FrameLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1">
+ <ImageButton
+ android:id="@+id/btn_thumbs_up"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:src="@drawable/ic_media_previous"
+ android:background="?android:attr/selectableItemBackground"
+ android:minWidth="48dp"
+ android:minHeight="48dp"
+ android:contentDescription="@string/keyguard_accessibility_transport_thumbs_up_description"/>
+ </FrameLayout>
+ <FrameLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1">
+ <ImageButton
+ android:id="@+id/btn_thumbs_down"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:src="@drawable/ic_media_next"
+ android:background="?android:attr/selectableItemBackground"
+ android:minWidth="48dp"
+ android:minHeight="48dp"
+ android:contentDescription="@string/keyguard_accessibility_transport_thumbs_down_description"/>
+ </FrameLayout>
+ </LinearLayout>
+ <ToggleButton
+ android:id="@+id/transient_rating_heart"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:visibility="invisible"
+ android:minWidth="48dp"
+ android:minHeight="48dp"
+ android:contentDescription="@string/keyguard_accessibility_transport_heart_description" />
+ </LinearLayout>
+ </FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -59,45 +158,45 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1">
- <ImageView
+ <ImageButton
android:id="@+id/btn_prev"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_media_previous"
- android:clickable="true"
android:background="?android:attr/selectableItemBackground"
- android:padding="10dip"
+ android:minWidth="48dp"
+ android:minHeight="48dp"
android:contentDescription="@string/keyguard_accessibility_transport_prev_description"/>
</FrameLayout>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1">
- <ImageView
+ <ImageButton
android:id="@+id/btn_play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:clickable="true"
android:src="@drawable/ic_media_play"
android:background="?android:attr/selectableItemBackground"
- android:padding="10dip"
+ android:minWidth="48dp"
+ android:minHeight="48dp"
android:contentDescription="@string/keyguard_accessibility_transport_play_description"/>
</FrameLayout>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1">
- <ImageView
+ <ImageButton
android:id="@+id/btn_next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:clickable="true"
android:src="@drawable/ic_media_next"
android:background="?android:attr/selectableItemBackground"
- android:padding="10dip"
+ android:minWidth="48dp"
+ android:minHeight="48dp"
android:contentDescription="@string/keyguard_accessibility_transport_next_description"/>
</FrameLayout>
</LinearLayout>
diff --git a/packages/Keyguard/res/layout/keyguard_widget_remove_drop_target.xml b/packages/Keyguard/res/layout/keyguard_widget_remove_drop_target.xml
index 294c386..58b5b27 100644
--- a/packages/Keyguard/res/layout/keyguard_widget_remove_drop_target.xml
+++ b/packages/Keyguard/res/layout/keyguard_widget_remove_drop_target.xml
@@ -26,7 +26,7 @@
android:drawablePadding="4dp"
android:text="@string/kg_reordering_delete_drop_target_text"
android:textColor="#FFF"
- android:textSize="13sp"
+ android:textSize="12dp"
android:shadowColor="#000"
android:shadowDy="1.0"
android:shadowRadius="1.0"
diff --git a/packages/Keyguard/res/values-land/dimens.xml b/packages/Keyguard/res/values-land/dimens.xml
index 64e043c..bf30332 100644
--- a/packages/Keyguard/res/values-land/dimens.xml
+++ b/packages/Keyguard/res/values-land/dimens.xml
@@ -19,17 +19,6 @@
-->
<resources>
- <!-- Default height of a key in the password keyboard for alpha -->
- <dimen name="password_keyboard_key_height_alpha">47dip</dimen>
- <!-- Default height of a key in the password keyboard for numeric -->
- <dimen name="password_keyboard_key_height_numeric">50dip</dimen>
- <!-- Default correction for the space key in the password keyboard -->
- <dimen name="password_keyboard_spacebar_vertical_correction">2dip</dimen>
- <dimen name="preference_widget_width">72dp</dimen>
-
- <!-- Size of clock font in LockScreen on Unsecure unlock screen. -->
- <dimen name="keyguard_lockscreen_clock_font_size">70sp</dimen>
-
<!-- Shift emergency button from the left edge by this amount. Used by landscape layout on
phones -->
<dimen name="kg_emergency_button_shift">30dp</dimen>
diff --git a/packages/Keyguard/res/values-large/dimens.xml b/packages/Keyguard/res/values-large/dimens.xml
index 8cd614d..0b5d4ad 100644
--- a/packages/Keyguard/res/values-large/dimens.xml
+++ b/packages/Keyguard/res/values-large/dimens.xml
@@ -17,13 +17,6 @@
*/
-->
<resources>
- <!-- Default height of a key in the password keyboard for alpha -->
- <dimen name="password_keyboard_key_height_alpha">75dip</dimen>
- <!-- Default height of a key in the password keyboard for numeric -->
- <dimen name="password_keyboard_key_height_numeric">75dip</dimen>
- <!-- keyboardHeight = key_height*4 + key_bottom_gap*3 -->
- <dimen name="password_keyboard_height">48.0mm</dimen>
-
<!-- Minimum width of the search view text entry area. -->
<dimen name="search_view_text_min_width">192dip</dimen>
diff --git a/packages/Keyguard/res/values-sw600dp/dimens.xml b/packages/Keyguard/res/values-sw600dp/dimens.xml
index c0e3937..f8a1362 100644
--- a/packages/Keyguard/res/values-sw600dp/dimens.xml
+++ b/packages/Keyguard/res/values-sw600dp/dimens.xml
@@ -18,9 +18,6 @@
*/
-->
<resources>
- <!-- Size of clock font in LockScreen. -->
- <dimen name="keyguard_pattern_unlock_clock_font_size">112sp</dimen>
-
<!-- Size of lockscreen outerring on unsecure unlock LockScreen -->
<dimen name="keyguard_lockscreen_outerring_diameter">364dp</dimen>
@@ -37,9 +34,6 @@
<!-- Size of the clock font in keyguard's status view -->
<dimen name="kg_status_clock_font_size">141dp</dimen>
- <!-- Size of the date font in keyguard's status view -->
- <dimen name="kg_status_date_font_size">25.5dp</dimen>
-
<!-- Size of the generic status lines keyguard's status view -->
<dimen name="kg_status_line_font_size">16sp</dimen>
@@ -68,4 +62,8 @@
<!-- Margin around the various security views -->
<dimen name="keyguard_muliuser_selector_margin">12dp</dimen>
+ <!-- Overload default clock widget parameters -->
+ <dimen name="widget_label_font_size">16dp</dimen>
+ <dimen name="widget_big_font_size">141dp</dimen>
+
</resources>
diff --git a/packages/Keyguard/res/values-sw720dp/dimens.xml b/packages/Keyguard/res/values-sw720dp/dimens.xml
index b29ac22..0790b79 100644
--- a/packages/Keyguard/res/values-sw720dp/dimens.xml
+++ b/packages/Keyguard/res/values-sw720dp/dimens.xml
@@ -21,9 +21,6 @@
<!-- Size of the clock font in keyguard's status view -->
<dimen name="kg_status_clock_font_size">188dp</dimen>
- <!-- Size of the date font in keyguard's status view -->
- <dimen name="kg_status_date_font_size">34dp</dimen>
-
<!-- Size of the generic status lines keyguard's status view -->
<dimen name="kg_status_line_font_size">19sp</dimen>
diff --git a/packages/Keyguard/res/values-xlarge/dimens.xml b/packages/Keyguard/res/values-xlarge/dimens.xml
deleted file mode 100644
index b8cf287..0000000
--- a/packages/Keyguard/res/values-xlarge/dimens.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/* //device/apps/common/assets/res/any/dimens.xml
-**
-** Copyright 2006, 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>
- <!-- Default height of a key in the password keyboard for alpha -->
- <dimen name="password_keyboard_key_height_alpha">75dip</dimen>
- <!-- Default height of a key in the password keyboard for numeric -->
- <dimen name="password_keyboard_key_height_numeric">75dip</dimen>
- <!-- keyboardHeight = key_height*4 + key_bottom_gap*3 -->
- <dimen name="password_keyboard_height">48.0mm</dimen>
-</resources>
diff --git a/packages/Keyguard/res/values/alias.xml b/packages/Keyguard/res/values/alias.xml
index c964391..b22311e 100644
--- a/packages/Keyguard/res/values/alias.xml
+++ b/packages/Keyguard/res/values/alias.xml
@@ -34,9 +34,6 @@
<!-- Alias used to reference framework drawable in keyguard. -->
<item type="drawable" name="ic_contact_picture">@*android:drawable/ic_contact_picture</item>
- <!-- Alias used to reference framework drawable in keyguard. -->
- <item type="drawable" name="ic_lock_idle_alarm">@*android:drawable/ic_lock_idle_alarm</item>
-
<!-- Alias used to reference framework "OK" string in keyguard. -->
<item type="string" name="ok">@*android:string/ok</item>
@@ -52,4 +49,4 @@
<!-- Alias used to reference framework activity duration. -->
<item type="integer" name="config_activityDefaultDur">@*android:integer/config_activityDefaultDur</item>
-</resources> \ No newline at end of file
+</resources>
diff --git a/packages/Keyguard/res/values/colors.xml b/packages/Keyguard/res/values/colors.xml
index 0c56a43..a9e8061 100644
--- a/packages/Keyguard/res/values/colors.xml
+++ b/packages/Keyguard/res/values/colors.xml
@@ -23,4 +23,8 @@
<!-- FaceLock -->
<color name="facelock_spotlight_mask">#CC000000</color>
+
+ <!-- Clock -->
+ <color name="clock_white">#ffffffff</color>
+ <color name="clock_gray">#80ffffff</color>
</resources>
diff --git a/packages/Keyguard/res/values/dimens.xml b/packages/Keyguard/res/values/dimens.xml
index ce72f43..8039b09 100644
--- a/packages/Keyguard/res/values/dimens.xml
+++ b/packages/Keyguard/res/values/dimens.xml
@@ -18,17 +18,6 @@
*/
-->
<resources>
- <!-- Default height of a key in the password keyboard for alpha (used by keyguard) -->
- <dimen name="password_keyboard_key_height_alpha">56dip</dimen>
- <!-- Default height of a key in the password keyboard for numeric (used by keyguard) -->
- <dimen name="password_keyboard_key_height_numeric">56dip</dimen>
- <!-- Default correction for the space key in the password keyboard (used by keyguard) -->
- <dimen name="password_keyboard_spacebar_vertical_correction">4dip</dimen>
- <!-- Default horizontal gap between keys in the password keyboard (used by keyguard) -->
- <dimen name="password_keyboard_horizontalGap">3dip</dimen>
- <!-- Default vertical gap between keys in the password keyboard (used by keyguard) -->
- <dimen name="password_keyboard_verticalGap">9dip</dimen>
-
<!-- Size of lockscreen outerring on unsecure unlock LockScreen -->
<dimen name="keyguard_lockscreen_outerring_diameter">270dp</dimen>
@@ -47,9 +36,6 @@
<!-- Default distance from each snap target that GlowPadView considers a "hit" -->
<dimen name="glowpadview_inner_radius">15dip</dimen>
- <!-- Size of clock font in LockScreen on Unsecure unlock screen. -->
- <dimen name="keyguard_lockscreen_clock_font_size">80dip</dimen>
-
<!-- Size of status line font on Unsecure unlock LockScreen. -->
<dimen name="keyguard_lockscreen_status_line_font_size">14dip</dimen>
@@ -84,11 +70,8 @@
<!-- Size of the clock font in keyguard's status view -->
<dimen name="kg_status_clock_font_size">75dp</dimen>
- <!-- Size of the date font in keyguard's status view -->
- <dimen name="kg_status_date_font_size">15dp</dimen>
-
<!-- Size of the generic status lines keyguard's status view -->
- <dimen name="kg_status_line_font_size">13dp</dimen>
+ <dimen name="kg_status_line_font_size">12dp</dimen>
<!-- Size of margin on the right of keyguard's status view -->
<dimen name="kg_status_line_font_right_margin">16dp</dimen>
@@ -166,5 +149,12 @@
used on tablets; on phones, this size is determined by the space left by the
security mode. -->
<dimen name="kg_small_widget_height">160dp</dimen>
+
+ <!-- Default clock parameters -->
+ <dimen name="bottom_text_spacing_digital">-8dp</dimen>
+ <dimen name="label_font_size">14dp</dimen>
+ <dimen name="widget_label_font_size">12dp</dimen>
+ <dimen name="widget_big_font_size">80dp</dimen>
+ <dimen name="big_font_size">120dp</dimen>
</resources>
diff --git a/packages/Keyguard/res/values/donottranslate.xml b/packages/Keyguard/res/values/donottranslate.xml
new file mode 100644
index 0000000..71d3ed7
--- /dev/null
+++ b/packages/Keyguard/res/values/donottranslate.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- String matching the lock screen format for displaying the date. -->
+ <string name="abbrev_wday_month_day_no_year">EEE, MMMM d</string>
+ <!-- Format for describing the date, for accessibility. -->
+ <string name="full_wday_month_day_no_year">EEEE, MMMM d</string>
+</resources>
diff --git a/packages/Keyguard/res/values/strings.xml b/packages/Keyguard/res/values/strings.xml
index 89e7240..abc4483 100644
--- a/packages/Keyguard/res/values/strings.xml
+++ b/packages/Keyguard/res/values/strings.xml
@@ -94,6 +94,10 @@
progress dialog in the meantime. this is the emssage. -->
<string name="keyguard_sim_unlock_progress_dialog_message">Unlocking SIM card\u2026</string>
+ <!-- Time format strings for fall-back clock widget -->
+ <string name="keyguard_widget_12_hours_format" translatable="false">h&#58;mm</string>
+ <!-- Time format strings for fall-back clock widget -->
+ <string name="keyguard_widget_24_hours_format" translatable="false">kk&#58;mm</string>
<!-- Accessibility description sent when user changes the current lock screen widget. [CHAR_LIMIT=none] -->
<string name="keyguard_accessibility_widget_changed">%1$s. Widget %2$d of %3$d.</string>
@@ -148,6 +152,13 @@
<string name="keyguard_accessibility_transport_play_description">Play button</string>
<!-- Shown on transport control of lockscreen. Pressing button pauses playback -->
<string name="keyguard_accessibility_transport_stop_description">Stop button</string>
+ <!-- Shown on transport control of lockscreen. Pressing button rates the track as "thumbs up." -->
+ <string name="keyguard_accessibility_transport_thumbs_up_description">Thumbs up</string>
+ <!-- Shown on transport control of lockscreen. Pressing button rates the track as "thumbs down." -->
+ <string name="keyguard_accessibility_transport_thumbs_down_description">Thumbs down</string>
+ <!-- Shown on transport control of lockscreen. Pressing button toggles the "heart" rating. -->
+ <string name="keyguard_accessibility_transport_heart_description">Heart</string>
+
<!-- Accessibility description for when the device prompts the user to dismiss keyguard
in order to complete an action. This will be followed by a message about the current
diff --git a/packages/Keyguard/res/values/styles.xml b/packages/Keyguard/res/values/styles.xml
index a31f708..44f560f 100644
--- a/packages/Keyguard/res/values/styles.xml
+++ b/packages/Keyguard/res/values/styles.xml
@@ -52,5 +52,20 @@
<item name="android:windowEnterAnimation">@anim/lock_screen_enter</item>
<item name="android:windowExitAnimation">@anim/lock_screen_exit</item>
</style>
+
+ <!-- Built-in clock widget stuff -->
+ <style name="widget_label">
+ <item name="android:textStyle">bold</item>
+ <item name="android:textAllCaps">true</item>
+ <item name="android:fontFamily">sans-serif-condensed</item>
+ <item name="android:textSize">@dimen/kg_status_line_font_size</item>
+ </style>
+ <style name="big_thin">
+ <item name="android:textSize">@dimen/big_font_size</item>
+ <item name="android:fontFamily">sans-serif-thin</item>
+ </style>
+ <style name="widget_big_thin" parent="big_thin">
+ <item name="android:textSize">@dimen/widget_big_font_size</item>
+ </style>
</resources>
diff --git a/packages/Keyguard/src/com/android/keyguard/ClockView.java b/packages/Keyguard/src/com/android/keyguard/ClockView.java
deleted file mode 100644
index ad85e9a..0000000
--- a/packages/Keyguard/src/com/android/keyguard/ClockView.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Copyright (C) 2012 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.
- */
-
-package com.android.keyguard;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.database.ContentObserver;
-import android.graphics.Typeface;
-import android.os.Handler;
-import android.os.UserHandle;
-import android.provider.Settings;
-import android.text.format.DateFormat;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
-
-import java.lang.ref.WeakReference;
-import java.text.DateFormatSymbols;
-import java.util.Calendar;
-
-/**
- * Displays the time
- */
-public class ClockView extends RelativeLayout {
- private static final String ANDROID_CLOCK_FONT_FILE = "/system/fonts/AndroidClock.ttf";
- private final static String M12 = "h:mm";
- private final static String M24 = "HH:mm";
-
- private Calendar mCalendar;
- private String mFormat;
- private TextView mTimeView;
- private AmPm mAmPm;
- private ContentObserver mFormatChangeObserver;
- private int mAttached = 0; // for debugging - tells us whether attach/detach is unbalanced
-
- /* called by system on minute ticks */
- private final Handler mHandler = new Handler();
- private BroadcastReceiver mIntentReceiver;
-
- private static class TimeChangedReceiver extends BroadcastReceiver {
- private WeakReference<ClockView> mClock;
- private Context mContext;
-
- public TimeChangedReceiver(ClockView clock) {
- mClock = new WeakReference<ClockView>(clock);
- mContext = clock.getContext();
- }
-
- @Override
- public void onReceive(Context context, Intent intent) {
- // Post a runnable to avoid blocking the broadcast.
- final boolean timezoneChanged =
- intent.getAction().equals(Intent.ACTION_TIMEZONE_CHANGED);
- final ClockView clock = mClock.get();
- if (clock != null) {
- clock.mHandler.post(new Runnable() {
- public void run() {
- if (timezoneChanged) {
- clock.mCalendar = Calendar.getInstance();
- }
- clock.updateTime();
- }
- });
- } else {
- try {
- mContext.unregisterReceiver(this);
- } catch (RuntimeException e) {
- // Shouldn't happen
- }
- }
- }
- };
-
- static class AmPm {
- private TextView mAmPmTextView;
- private String mAmString, mPmString;
-
- AmPm(View parent, Typeface tf) {
- // No longer used, uncomment if we decide to use AM/PM indicator again
- // mAmPmTextView = (TextView) parent.findViewById(R.id.am_pm);
- if (mAmPmTextView != null && tf != null) {
- mAmPmTextView.setTypeface(tf);
- }
-
- String[] ampm = new DateFormatSymbols().getAmPmStrings();
- mAmString = ampm[0];
- mPmString = ampm[1];
- }
-
- void setShowAmPm(boolean show) {
- if (mAmPmTextView != null) {
- mAmPmTextView.setVisibility(show ? View.VISIBLE : View.GONE);
- }
- }
-
- void setIsMorning(boolean isMorning) {
- if (mAmPmTextView != null) {
- mAmPmTextView.setText(isMorning ? mAmString : mPmString);
- }
- }
- }
-
- private static class FormatChangeObserver extends ContentObserver {
- private WeakReference<ClockView> mClock;
- private Context mContext;
- public FormatChangeObserver(ClockView clock) {
- super(new Handler());
- mClock = new WeakReference<ClockView>(clock);
- mContext = clock.getContext();
- }
- @Override
- public void onChange(boolean selfChange) {
- ClockView digitalClock = mClock.get();
- if (digitalClock != null) {
- digitalClock.setDateFormat();
- digitalClock.updateTime();
- } else {
- try {
- mContext.getContentResolver().unregisterContentObserver(this);
- } catch (RuntimeException e) {
- // Shouldn't happen
- }
- }
- }
- }
-
- public ClockView(Context context) {
- this(context, null);
- }
-
- public ClockView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- @Override
- protected void onFinishInflate() {
- super.onFinishInflate();
- mTimeView = (TextView) findViewById(R.id.clock_text);
- mTimeView.setTypeface(Typeface.createFromFile(ANDROID_CLOCK_FONT_FILE));
- mAmPm = new AmPm(this, null);
- mCalendar = Calendar.getInstance();
- setDateFormat();
- }
-
- @Override
- protected void onAttachedToWindow() {
- super.onAttachedToWindow();
-
- mAttached++;
-
- /* monitor time ticks, time changed, timezone */
- if (mIntentReceiver == null) {
- mIntentReceiver = new TimeChangedReceiver(this);
- IntentFilter filter = new IntentFilter();
- filter.addAction(Intent.ACTION_TIME_TICK);
- filter.addAction(Intent.ACTION_TIME_CHANGED);
- filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
- mContext.registerReceiverAsUser(mIntentReceiver, UserHandle.OWNER, filter, null, null );
- }
-
- /* monitor 12/24-hour display preference */
- if (mFormatChangeObserver == null) {
- mFormatChangeObserver = new FormatChangeObserver(this);
- mContext.getContentResolver().registerContentObserver(
- Settings.System.CONTENT_URI, true, mFormatChangeObserver);
- }
-
- updateTime();
- }
-
- @Override
- protected void onDetachedFromWindow() {
- super.onDetachedFromWindow();
-
- mAttached--;
-
- if (mIntentReceiver != null) {
- mContext.unregisterReceiver(mIntentReceiver);
- }
- if (mFormatChangeObserver != null) {
- mContext.getContentResolver().unregisterContentObserver(
- mFormatChangeObserver);
- }
-
- mFormatChangeObserver = null;
- mIntentReceiver = null;
- }
-
- void updateTime(Calendar c) {
- mCalendar = c;
- updateTime();
- }
-
- public void updateTime() {
- mCalendar.setTimeInMillis(System.currentTimeMillis());
-
- CharSequence newTime = DateFormat.format(mFormat, mCalendar);
- mTimeView.setText(newTime);
- mAmPm.setIsMorning(mCalendar.get(Calendar.AM_PM) == 0);
- }
-
- private void setDateFormat() {
- mFormat = android.text.format.DateFormat.is24HourFormat(getContext()) ? M24 : M12;
- mAmPm.setShowAmPm(mFormat.equals(M12));
- }
-}
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
index bc8c866..63aab4d 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
@@ -134,6 +134,10 @@ public class KeyguardHostView extends KeyguardViewBase {
void userActivity();
}
+ interface TransportControlCallback {
+ void userActivity();
+ }
+
/*package*/ interface OnDismissAction {
/* returns true if the dismiss should be deferred */
boolean onDismiss();
@@ -1222,6 +1226,11 @@ public class KeyguardHostView extends KeyguardViewBase {
LayoutInflater inflater = LayoutInflater.from(mContext);
mTransportControl = (KeyguardTransportControlView)
inflater.inflate(R.layout.keyguard_transport_control_view, this, false);
+ mTransportControl.setTransportControlCallback(new TransportControlCallback() {
+ public void userActivity() {
+ mViewMediatorCallback.userActivity();
+ }
+ });
}
return mTransportControl;
}
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java
index 0289a1f..ffb619b 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java
@@ -38,17 +38,9 @@ public class KeyguardStatusView extends GridLayout {
private static final boolean DEBUG = KeyguardViewMediator.DEBUG;
private static final String TAG = "KeyguardStatusView";
- public static final int LOCK_ICON = 0; // R.drawable.ic_lock_idle_lock;
- public static final int ALARM_ICON = R.drawable.ic_lock_idle_alarm;
- public static final int CHARGING_ICON = 0; //R.drawable.ic_lock_idle_charging;
- public static final int BATTERY_LOW_ICON = 0; //R.drawable.ic_lock_idle_low_battery;
-
- private SimpleDateFormat mDateFormat;
private LockPatternUtils mLockPatternUtils;
- private TextView mDateView;
private TextView mAlarmStatusView;
- private ClockView mClockView;
private KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() {
@@ -81,21 +73,12 @@ public class KeyguardStatusView extends GridLayout {
@Override
protected void onFinishInflate() {
super.onFinishInflate();
- Resources res = getContext().getResources();
- final Locale locale = Locale.getDefault();
- final String datePattern = res.getString(R.string.system_ui_date_pattern);
- final String bestFormat = ICU.getBestDateTimePattern(datePattern, locale.toString());
- mDateFormat = new SimpleDateFormat(bestFormat, locale);
- mDateView = (TextView) findViewById(R.id.date);
+
mAlarmStatusView = (TextView) findViewById(R.id.alarm_status);
- mClockView = (ClockView) findViewById(R.id.clock_view);
mLockPatternUtils = new LockPatternUtils(getContext());
- // Use custom font in mDateView
- mDateView.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD);
-
// Required to get Marquee to work.
- final View marqueeViews[] = { mDateView, mAlarmStatusView };
+ final View marqueeViews[] = { mAlarmStatusView };
for (int i = 0; i < marqueeViews.length; i++) {
View v = marqueeViews[i];
if (v == null) {
@@ -107,8 +90,6 @@ public class KeyguardStatusView extends GridLayout {
}
protected void refresh() {
- mClockView.updateTime();
- refreshDate();
refreshAlarmStatus(); // might as well
}
@@ -117,17 +98,12 @@ public class KeyguardStatusView extends GridLayout {
String nextAlarm = mLockPatternUtils.getNextAlarm();
if (!TextUtils.isEmpty(nextAlarm)) {
mAlarmStatusView.setText(nextAlarm);
- mAlarmStatusView.setCompoundDrawablesWithIntrinsicBounds(ALARM_ICON, 0, 0, 0);
mAlarmStatusView.setVisibility(View.VISIBLE);
} else {
mAlarmStatusView.setVisibility(View.GONE);
}
}
- void refreshDate() {
- mDateView.setText(mDateFormat.format(new Date()));
- }
-
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardTransportControlView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardTransportControlView.java
index 2a5f979..83d8ab1 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardTransportControlView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardTransportControlView.java
@@ -16,191 +16,263 @@
package com.android.keyguard;
-import android.app.PendingIntent;
-import android.app.PendingIntent.CanceledException;
import android.content.Context;
-import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.res.Configuration;
import android.graphics.Bitmap;
+import android.graphics.ColorMatrix;
+import android.graphics.ColorMatrixColorFilter;
+import android.graphics.drawable.Drawable;
import android.media.AudioManager;
-import android.media.IRemoteControlDisplay;
+import android.media.MediaMetadataEditor;
import android.media.MediaMetadataRetriever;
import android.media.RemoteControlClient;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
+import android.media.RemoteController;
import android.os.Parcel;
import android.os.Parcelable;
-import android.os.RemoteException;
import android.os.SystemClock;
-import android.text.Spannable;
import android.text.TextUtils;
-import android.text.style.ForegroundColorSpan;
+import android.text.format.DateFormat;
+import android.transition.ChangeBounds;
+import android.transition.ChangeText;
+import android.transition.Fade;
+import android.transition.TransitionManager;
+import android.transition.TransitionSet;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
-import android.view.View.OnClickListener;
+import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
+import android.widget.SeekBar;
import android.widget.TextView;
-import java.lang.ref.WeakReference;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.TimeZone;
+
/**
* This is the widget responsible for showing music controls in keyguard.
*/
-public class KeyguardTransportControlView extends FrameLayout implements OnClickListener {
+public class KeyguardTransportControlView extends FrameLayout {
- private static final int MSG_UPDATE_STATE = 100;
- private static final int MSG_SET_METADATA = 101;
- private static final int MSG_SET_TRANSPORT_CONTROLS = 102;
- private static final int MSG_SET_ARTWORK = 103;
- private static final int MSG_SET_GENERATION_ID = 104;
private static final int DISPLAY_TIMEOUT_MS = 5000; // 5s
+ private static final int RESET_TO_METADATA_DELAY = 5000;
protected static final boolean DEBUG = false;
protected static final String TAG = "TransportControlView";
- private ImageView mAlbumArt;
+ private static final boolean ANIMATE_TRANSITIONS = false;
+
+ private ViewGroup mMetadataContainer;
+ private ViewGroup mInfoContainer;
private TextView mTrackTitle;
+ private TextView mTrackArtistAlbum;
+
+ private View mTransientSeek;
+ private SeekBar mTransientSeekBar;
+ private TextView mTransientSeekTimeElapsed;
+ private TextView mTransientSeekTimeRemaining;
+
private ImageView mBtnPrev;
private ImageView mBtnPlay;
private ImageView mBtnNext;
- private int mClientGeneration;
private Metadata mMetadata = new Metadata();
- private boolean mAttached;
- private PendingIntent mClientIntent;
private int mTransportControlFlags;
private int mCurrentPlayState;
private AudioManager mAudioManager;
- private IRemoteControlDisplayWeak mIRCD;
+ private RemoteController mRemoteController;
+
+ private ImageView mBadge;
+
+ private boolean mSeekEnabled;
+ private boolean mUserSeeking;
+ private java.text.DateFormat mFormat;
/**
* The metadata which should be populated into the view once we've been attached
*/
- private Bundle mPopulateMetadataWhenAttached = null;
+ private RemoteController.MetadataEditor mPopulateMetadataWhenAttached = null;
- // This handler is required to ensure messages from IRCD are handled in sequence and on
- // the UI thread.
- private Handler mHandler = new Handler() {
+ private RemoteController.OnClientUpdateListener mRCClientUpdateListener =
+ new RemoteController.OnClientUpdateListener() {
@Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case MSG_UPDATE_STATE:
- if (mClientGeneration == msg.arg1) updatePlayPauseState(msg.arg2);
- break;
+ public void onClientChange(boolean clearing) {
+ if (clearing) {
+ clearMetadata();
+ }
+ }
- case MSG_SET_METADATA:
- if (mClientGeneration == msg.arg1) updateMetadata((Bundle) msg.obj);
- break;
+ @Override
+ public void onClientPlaybackStateUpdate(int state) {
+ setSeekBarsEnabled(false);
+ updatePlayPauseState(state);
+ }
- case MSG_SET_TRANSPORT_CONTROLS:
- if (mClientGeneration == msg.arg1) updateTransportControls(msg.arg2);
- break;
+ @Override
+ public void onClientPlaybackStateUpdate(int state, long stateChangeTimeMs,
+ long currentPosMs, float speed) {
+ setSeekBarsEnabled(mMetadata != null && mMetadata.duration > 0);
+ updatePlayPauseState(state);
+ if (DEBUG) Log.d(TAG, "onClientPlaybackStateUpdate(state=" + state +
+ ", stateChangeTimeMs=" + stateChangeTimeMs + ", currentPosMs=" + currentPosMs +
+ ", speed=" + speed + ")");
+ }
- case MSG_SET_ARTWORK:
- if (mClientGeneration == msg.arg1) {
- mMetadata.bitmap = (Bitmap) msg.obj;
- KeyguardUpdateMonitor.getInstance(getContext()).dispatchSetBackground(
- mMetadata.bitmap);
- }
- break;
+ @Override
+ public void onClientTransportControlUpdate(int transportControlFlags) {
+ updateTransportControls(transportControlFlags);
+ }
- case MSG_SET_GENERATION_ID:
- if (DEBUG) Log.v(TAG, "New genId = " + msg.arg1 + ", clearing = " + msg.arg2);
- mClientGeneration = msg.arg1;
- mClientIntent = (PendingIntent) msg.obj;
- break;
+ @Override
+ public void onClientMetadataUpdate(RemoteController.MetadataEditor metadataEditor) {
+ updateMetadata(metadataEditor);
+ }
+ };
+ private final Runnable mUpdateSeekBars = new Runnable() {
+ public void run() {
+ if (updateSeekBars()) {
+ postDelayed(this, 1000);
}
}
};
- /**
- * This class is required to have weak linkage to the current TransportControlView
- * because the remote process can hold a strong reference to this binder object and
- * we can't predict when it will be GC'd in the remote process. Without this code, it
- * would allow a heavyweight object to be held on this side of the binder when there's
- * no requirement to run a GC on the other side.
- */
- private static class IRemoteControlDisplayWeak extends IRemoteControlDisplay.Stub {
- private WeakReference<Handler> mLocalHandler;
-
- IRemoteControlDisplayWeak(Handler handler) {
- mLocalHandler = new WeakReference<Handler>(handler);
+ private final Runnable mResetToMetadata = new Runnable() {
+ public void run() {
+ resetToMetadata();
}
+ };
- public void setPlaybackState(int generationId, int state, long stateChangeTimeMs,
- long currentPosMs, float speed) {
- Handler handler = mLocalHandler.get();
- if (handler != null) {
- handler.obtainMessage(MSG_UPDATE_STATE, generationId, state).sendToTarget();
+ private final OnClickListener mTransportCommandListener = new OnClickListener() {
+ public void onClick(View v) {
+ int keyCode = -1;
+ if (v == mBtnPrev) {
+ keyCode = KeyEvent.KEYCODE_MEDIA_PREVIOUS;
+ } else if (v == mBtnNext) {
+ keyCode = KeyEvent.KEYCODE_MEDIA_NEXT;
+ } else if (v == mBtnPlay) {
+ keyCode = KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE;
}
- }
-
- public void setMetadata(int generationId, Bundle metadata) {
- Handler handler = mLocalHandler.get();
- if (handler != null) {
- handler.obtainMessage(MSG_SET_METADATA, generationId, 0, metadata).sendToTarget();
+ if (keyCode != -1) {
+ sendMediaButtonClick(keyCode);
}
}
+ };
- public void setTransportControlInfo(int generationId, int flags, int posCapabilities) {
- Handler handler = mLocalHandler.get();
- if (handler != null) {
- handler.obtainMessage(MSG_SET_TRANSPORT_CONTROLS, generationId, flags)
- .sendToTarget();
+ private final OnLongClickListener mTransportShowSeekBarListener = new OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View v) {
+ if (mSeekEnabled) {
+ return tryToggleSeekBar();
}
+ return false;
}
+ };
- public void setArtwork(int generationId, Bitmap bitmap) {
- Handler handler = mLocalHandler.get();
- if (handler != null) {
- handler.obtainMessage(MSG_SET_ARTWORK, generationId, 0, bitmap).sendToTarget();
+ private final SeekBar.OnSeekBarChangeListener mOnSeekBarChangeListener =
+ new SeekBar.OnSeekBarChangeListener() {
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+ if (fromUser) {
+ scrubTo(progress);
+ delayResetToMetadata();
}
+ updateSeekDisplay();
}
- public void setAllMetadata(int generationId, Bundle metadata, Bitmap bitmap) {
- Handler handler = mLocalHandler.get();
- if (handler != null) {
- handler.obtainMessage(MSG_SET_METADATA, generationId, 0, metadata).sendToTarget();
- handler.obtainMessage(MSG_SET_ARTWORK, generationId, 0, bitmap).sendToTarget();
- }
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {
+ mUserSeeking = true;
}
- public void setCurrentClientId(int clientGeneration, PendingIntent mediaIntent,
- boolean clearing) throws RemoteException {
- Handler handler = mLocalHandler.get();
- if (handler != null) {
- handler.obtainMessage(MSG_SET_GENERATION_ID,
- clientGeneration, (clearing ? 1 : 0), mediaIntent).sendToTarget();
- }
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {
+ mUserSeeking = false;
}
};
+ private static final int TRANSITION_DURATION = 200;
+ private final TransitionSet mMetadataChangeTransition;
+
+ KeyguardHostView.TransportControlCallback mTransportControlCallback;
+
public KeyguardTransportControlView(Context context, AttributeSet attrs) {
super(context, attrs);
if (DEBUG) Log.v(TAG, "Create TCV " + this);
mAudioManager = new AudioManager(mContext);
mCurrentPlayState = RemoteControlClient.PLAYSTATE_NONE; // until we get a callback
- mIRCD = new IRemoteControlDisplayWeak(mHandler);
+ mRemoteController = new RemoteController(context);
+ mRemoteController.setOnClientUpdateListener(mRCClientUpdateListener);
+
+ final DisplayMetrics dm = context.getResources().getDisplayMetrics();
+ final int dim = Math.max(dm.widthPixels, dm.heightPixels);
+ mRemoteController.setArtworkConfiguration(true, dim, dim);
+
+ final ChangeText tc = new ChangeText();
+ tc.setChangeBehavior(ChangeText.CHANGE_BEHAVIOR_OUT_IN);
+ final TransitionSet inner = new TransitionSet();
+ inner.addTransition(tc).addTransition(new ChangeBounds());
+ final TransitionSet tg = new TransitionSet();
+ tg.addTransition(new Fade(Fade.OUT)).addTransition(inner).
+ addTransition(new Fade(Fade.IN));
+ tg.setOrdering(TransitionSet.ORDERING_SEQUENTIAL);
+ tg.setDuration(TRANSITION_DURATION);
+ mMetadataChangeTransition = tg;
}
private void updateTransportControls(int transportControlFlags) {
mTransportControlFlags = transportControlFlags;
+ setSeekBarsEnabled(
+ (transportControlFlags & RemoteControlClient.FLAG_KEY_MEDIA_POSITION_UPDATE) != 0);
+ }
+
+ void setSeekBarsEnabled(boolean enabled) {
+ if (enabled == mSeekEnabled) return;
+
+ mSeekEnabled = enabled;
+ if (mTransientSeek.getVisibility() == VISIBLE) {
+ mTransientSeek.setVisibility(INVISIBLE);
+ mMetadataContainer.setVisibility(VISIBLE);
+ mUserSeeking = false;
+ cancelResetToMetadata();
+ }
+ if (enabled) {
+ mUpdateSeekBars.run();
+ postDelayed(mUpdateSeekBars, 1000);
+ } else {
+ removeCallbacks(mUpdateSeekBars);
+ }
+ }
+
+ public void setTransportControlCallback(KeyguardHostView.TransportControlCallback
+ transportControlCallback) {
+ mTransportControlCallback = transportControlCallback;
}
@Override
public void onFinishInflate() {
super.onFinishInflate();
+ mInfoContainer = (ViewGroup) findViewById(R.id.info_container);
+ mMetadataContainer = (ViewGroup) findViewById(R.id.metadata_container);
+ mBadge = (ImageView) findViewById(R.id.badge);
mTrackTitle = (TextView) findViewById(R.id.title);
mTrackTitle.setSelected(true); // enable marquee
- mAlbumArt = (ImageView) findViewById(R.id.albumart);
+ mTrackArtistAlbum = (TextView) findViewById(R.id.artist_album);
+ mTrackArtistAlbum.setSelected(true);
+ mTransientSeek = findViewById(R.id.transient_seek);
+ mTransientSeekBar = (SeekBar) findViewById(R.id.transient_seek_bar);
+ mTransientSeekBar.setOnSeekBarChangeListener(mOnSeekBarChangeListener);
+ mTransientSeekTimeElapsed = (TextView) findViewById(R.id.transient_seek_time_elapsed);
+ mTransientSeekTimeRemaining = (TextView) findViewById(R.id.transient_seek_time_remaining);
mBtnPrev = (ImageView) findViewById(R.id.btn_prev);
mBtnPlay = (ImageView) findViewById(R.id.btn_play);
mBtnNext = (ImageView) findViewById(R.id.btn_next);
final View buttons[] = { mBtnPrev, mBtnPlay, mBtnNext };
for (View view : buttons) {
- view.setOnClickListener(this);
+ view.setOnClickListener(mTransportCommandListener);
+ view.setOnLongClickListener(mTransportShowSeekBarListener);
}
}
@@ -212,32 +284,34 @@ public class KeyguardTransportControlView extends FrameLayout implements OnClick
updateMetadata(mPopulateMetadataWhenAttached);
mPopulateMetadataWhenAttached = null;
}
- if (!mAttached) {
- if (DEBUG) Log.v(TAG, "Registering TCV " + this);
- mAudioManager.registerRemoteControlDisplay(mIRCD);
- }
- mAttached = true;
+ if (DEBUG) Log.v(TAG, "Registering TCV " + this);
+ mAudioManager.registerRemoteController(mRemoteController);
}
@Override
- protected void onSizeChanged (int w, int h, int oldw, int oldh) {
- if (mAttached) {
- final DisplayMetrics dm = getContext().getResources().getDisplayMetrics();
- int dim = Math.max(dm.widthPixels, dm.heightPixels);
- if (DEBUG) Log.v(TAG, "TCV uses bitmap size=" + dim);
- mAudioManager.remoteControlDisplayUsesBitmapSize(mIRCD, dim, dim);
- }
+ protected void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ final DisplayMetrics dm = getContext().getResources().getDisplayMetrics();
+ final int dim = Math.max(dm.widthPixels, dm.heightPixels);
+ mRemoteController.setArtworkConfiguration(true, dim, dim);
}
@Override
public void onDetachedFromWindow() {
if (DEBUG) Log.v(TAG, "onDetachFromWindow()");
super.onDetachedFromWindow();
- if (mAttached) {
- if (DEBUG) Log.v(TAG, "Unregistering TCV " + this);
- mAudioManager.unregisterRemoteControlDisplay(mIRCD);
- }
- mAttached = false;
+ if (DEBUG) Log.v(TAG, "Unregistering TCV " + this);
+ mAudioManager.unregisterRemoteController(mRemoteController);
+ mUserSeeking = false;
+ }
+
+ void setBadgeIcon(Drawable bmp) {
+ mBadge.setImageDrawable(bmp);
+
+ final ColorMatrix cm = new ColorMatrix();
+ cm.setSaturation(0);
+ mBadge.setColorFilter(new ColorMatrixColorFilter(cm));
+ mBadge.setImageAlpha(0xef);
}
class Metadata {
@@ -245,21 +319,39 @@ public class KeyguardTransportControlView extends FrameLayout implements OnClick
private String trackTitle;
private String albumTitle;
private Bitmap bitmap;
+ private long duration;
+
+ public void clear() {
+ artist = null;
+ trackTitle = null;
+ albumTitle = null;
+ bitmap = null;
+ duration = -1;
+ }
public String toString() {
- return "Metadata[artist=" + artist + " trackTitle=" + trackTitle + " albumTitle=" + albumTitle + "]";
+ return "Metadata[artist=" + artist + " trackTitle=" + trackTitle +
+ " albumTitle=" + albumTitle + " duration=" + duration + "]";
}
}
- private String getMdString(Bundle data, int id) {
- return data.getString(Integer.toString(id));
+ void clearMetadata() {
+ mPopulateMetadataWhenAttached = null;
+ mMetadata.clear();
+ populateMetadata();
}
- private void updateMetadata(Bundle data) {
- if (mAttached) {
- mMetadata.artist = getMdString(data, MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST);
- mMetadata.trackTitle = getMdString(data, MediaMetadataRetriever.METADATA_KEY_TITLE);
- mMetadata.albumTitle = getMdString(data, MediaMetadataRetriever.METADATA_KEY_ALBUM);
+ void updateMetadata(RemoteController.MetadataEditor data) {
+ if (isAttachedToWindow()) {
+ mMetadata.artist = data.getString(MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST,
+ mMetadata.artist);
+ mMetadata.trackTitle = data.getString(MediaMetadataRetriever.METADATA_KEY_TITLE,
+ mMetadata.trackTitle);
+ mMetadata.albumTitle = data.getString(MediaMetadataRetriever.METADATA_KEY_ALBUM,
+ mMetadata.albumTitle);
+ mMetadata.duration = data.getLong(MediaMetadataRetriever.METADATA_KEY_DURATION, -1);
+ mMetadata.bitmap = data.getBitmap(MediaMetadataEditor.BITMAP_KEY_ARTWORK,
+ mMetadata.bitmap);
populateMetadata();
} else {
mPopulateMetadataWhenAttached = data;
@@ -270,12 +362,22 @@ public class KeyguardTransportControlView extends FrameLayout implements OnClick
* Populates the given metadata into the view
*/
private void populateMetadata() {
- StringBuilder sb = new StringBuilder();
- int trackTitleLength = 0;
+ if (ANIMATE_TRANSITIONS && isLaidOut() && mMetadataContainer.getVisibility() == VISIBLE) {
+ TransitionManager.beginDelayedTransition(mMetadataContainer, mMetadataChangeTransition);
+ }
+
+ final String remoteClientPackage = mRemoteController.getRemoteControlClientPackageName();
+ Drawable badgeIcon = null;
+ try {
+ badgeIcon = getContext().getPackageManager().getApplicationIcon(remoteClientPackage);
+ } catch (PackageManager.NameNotFoundException e) {
+ Log.e(TAG, "Couldn't get remote control client package icon", e);
+ }
+ setBadgeIcon(badgeIcon);
if (!TextUtils.isEmpty(mMetadata.trackTitle)) {
- sb.append(mMetadata.trackTitle);
- trackTitleLength = mMetadata.trackTitle.length();
+ mTrackTitle.setText(mMetadata.trackTitle);
}
+ StringBuilder sb = new StringBuilder();
if (!TextUtils.isEmpty(mMetadata.artist)) {
if (sb.length() != 0) {
sb.append(" - ");
@@ -288,16 +390,27 @@ public class KeyguardTransportControlView extends FrameLayout implements OnClick
}
sb.append(mMetadata.albumTitle);
}
- mTrackTitle.setText(sb.toString(), TextView.BufferType.SPANNABLE);
- Spannable str = (Spannable) mTrackTitle.getText();
- if (trackTitleLength != 0) {
- str.setSpan(new ForegroundColorSpan(0xffffffff), 0, trackTitleLength,
- Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- trackTitleLength++;
- }
- if (sb.length() > trackTitleLength) {
- str.setSpan(new ForegroundColorSpan(0x7fffffff), trackTitleLength, sb.length(),
- Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+ mTrackArtistAlbum.setText(sb.toString());
+
+ if (mMetadata.duration >= 0) {
+ setSeekBarsEnabled(true);
+ setSeekBarDuration(mMetadata.duration);
+
+ final String skeleton;
+
+ if (mMetadata.duration >= 86400000) {
+ skeleton = "DDD kk mm ss";
+ } else if (mMetadata.duration >= 3600000) {
+ skeleton = "kk mm ss";
+ } else {
+ skeleton = "mm ss";
+ }
+ mFormat = new SimpleDateFormat(DateFormat.getBestDateTimePattern(
+ getContext().getResources().getConfiguration().locale,
+ skeleton));
+ mFormat.setTimeZone(TimeZone.getTimeZone("GMT+0"));
+ } else {
+ setSeekBarsEnabled(false);
}
KeyguardUpdateMonitor.getInstance(getContext()).dispatchSetBackground(
@@ -314,6 +427,66 @@ public class KeyguardTransportControlView extends FrameLayout implements OnClick
updatePlayPauseState(mCurrentPlayState);
}
+ void updateSeekDisplay() {
+ if (mMetadata != null && mRemoteController != null && mFormat != null) {
+ final long timeElapsed = mRemoteController.getEstimatedMediaPosition();
+ final long duration = mMetadata.duration;
+ final long remaining = duration - timeElapsed;
+
+ mTransientSeekTimeElapsed.setText(mFormat.format(new Date(timeElapsed)));
+ mTransientSeekTimeRemaining.setText(mFormat.format(new Date(remaining)));
+
+ if (DEBUG) Log.d(TAG, "updateSeekDisplay timeElapsed=" + timeElapsed +
+ " duration=" + duration + " remaining=" + remaining);
+ }
+ }
+
+ boolean tryToggleSeekBar() {
+ if (ANIMATE_TRANSITIONS) {
+ TransitionManager.beginDelayedTransition(mInfoContainer);
+ }
+ if (mTransientSeek.getVisibility() == VISIBLE) {
+ mTransientSeek.setVisibility(INVISIBLE);
+ mMetadataContainer.setVisibility(VISIBLE);
+ cancelResetToMetadata();
+ } else {
+ mTransientSeek.setVisibility(VISIBLE);
+ mMetadataContainer.setVisibility(INVISIBLE);
+ delayResetToMetadata();
+ }
+ mTransportControlCallback.userActivity();
+ return true;
+ }
+
+ void resetToMetadata() {
+ if (ANIMATE_TRANSITIONS) {
+ TransitionManager.beginDelayedTransition(mInfoContainer);
+ }
+ if (mTransientSeek.getVisibility() == VISIBLE) {
+ mTransientSeek.setVisibility(INVISIBLE);
+ mMetadataContainer.setVisibility(VISIBLE);
+ }
+ // TODO Also hide ratings, if applicable
+ }
+
+ void delayResetToMetadata() {
+ removeCallbacks(mResetToMetadata);
+ postDelayed(mResetToMetadata, RESET_TO_METADATA_DELAY);
+ }
+
+ void cancelResetToMetadata() {
+ removeCallbacks(mResetToMetadata);
+ }
+
+ void setSeekBarDuration(long duration) {
+ mTransientSeekBar.setMax((int) duration);
+ }
+
+ void scrubTo(int progress) {
+ mRemoteController.seekTo(progress);
+ mTransportControlCallback.userActivity();
+ }
+
private static void setVisibilityBasedOnFlag(View view, int flags, int flag) {
if ((flags & flag) != 0) {
view.setVisibility(View.VISIBLE);
@@ -341,6 +514,9 @@ public class KeyguardTransportControlView extends FrameLayout implements OnClick
case RemoteControlClient.PLAYSTATE_PLAYING:
imageResId = R.drawable.ic_media_pause;
imageDescId = R.string.keyguard_transport_pause_description;
+ if (mSeekEnabled) {
+ postDelayed(mUpdateSeekBars, 1000);
+ }
break;
case RemoteControlClient.PLAYSTATE_BUFFERING:
@@ -354,11 +530,30 @@ public class KeyguardTransportControlView extends FrameLayout implements OnClick
imageDescId = R.string.keyguard_transport_play_description;
break;
}
+
+ if (state != RemoteControlClient.PLAYSTATE_PLAYING) {
+ removeCallbacks(mUpdateSeekBars);
+ updateSeekBars();
+ }
mBtnPlay.setImageResource(imageResId);
mBtnPlay.setContentDescription(getResources().getString(imageDescId));
mCurrentPlayState = state;
}
+ boolean updateSeekBars() {
+ final int position = (int) mRemoteController.getEstimatedMediaPosition();
+ if (position >= 0) {
+ if (!mUserSeeking) {
+ mTransientSeekBar.setProgress(position);
+ }
+ return true;
+ }
+ Log.w(TAG, "Updating seek bars; received invalid estimated media position (" +
+ position + "). Disabling seek.");
+ setSeekBarsEnabled(false);
+ return false;
+ }
+
static class SavedState extends BaseSavedState {
boolean clientPresent;
@@ -389,48 +584,13 @@ public class KeyguardTransportControlView extends FrameLayout implements OnClick
};
}
- public void onClick(View v) {
- int keyCode = -1;
- if (v == mBtnPrev) {
- keyCode = KeyEvent.KEYCODE_MEDIA_PREVIOUS;
- } else if (v == mBtnNext) {
- keyCode = KeyEvent.KEYCODE_MEDIA_NEXT;
- } else if (v == mBtnPlay) {
- keyCode = KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE;
-
- }
- if (keyCode != -1) {
- sendMediaButtonClick(keyCode);
- }
- }
-
private void sendMediaButtonClick(int keyCode) {
- if (mClientIntent == null) {
- // Shouldn't be possible because this view should be hidden in this case.
- Log.e(TAG, "sendMediaButtonClick(): No client is currently registered");
- return;
- }
- // use the registered PendingIntent that will be processed by the registered
- // media button event receiver, which is the component of mClientIntent
- KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode);
- Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
- intent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent);
- try {
- mClientIntent.send(getContext(), 0, intent);
- } catch (CanceledException e) {
- Log.e(TAG, "Error sending intent for media button down: "+e);
- e.printStackTrace();
- }
+ // TODO We should think about sending these up/down events accurately with touch up/down
+ // on the buttons, but in the near term this will interfere with the long press behavior.
+ mRemoteController.sendMediaKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, keyCode));
+ mRemoteController.sendMediaKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, keyCode));
- keyEvent = new KeyEvent(KeyEvent.ACTION_UP, keyCode);
- intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
- intent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent);
- try {
- mClientIntent.send(getContext(), 0, intent);
- } catch (CanceledException e) {
- Log.e(TAG, "Error sending intent for media button up: "+e);
- e.printStackTrace();
- }
+ mTransportControlCallback.userActivity();
}
public boolean providesClock() {
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java b/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java
index ec3eb15..dc28bd0 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java
@@ -124,6 +124,7 @@ public class KeyguardViewMediator {
private static final int SHOW_ASSISTANT = 14;
private static final int DISPATCH_EVENT = 15;
private static final int LAUNCH_CAMERA = 16;
+ private static final int DISMISS = 17;
/**
* The default amount of time we stay awake (used for all key input)
@@ -910,12 +911,16 @@ public class KeyguardViewMediator {
/**
* Dismiss the keyguard through the security layers.
*/
- public void dismiss() {
+ public void handleDismiss() {
if (mShowing && !mHidden) {
mKeyguardViewManager.dismiss();
}
}
+ public void dismiss() {
+ mHandler.sendEmptyMessage(DISMISS);
+ }
+
/**
* Send message to keyguard telling it to reset its state.
* @param options options about how to show the keyguard
@@ -1014,14 +1019,13 @@ public class KeyguardViewMediator {
};
public void keyguardDone(boolean authenticated, boolean wakeup) {
- mKeyguardDonePending = false;
+ if (DEBUG) Log.d(TAG, "keyguardDone(" + authenticated + ")");
+ EventLog.writeEvent(70000, 2);
synchronized (this) {
- EventLog.writeEvent(70000, 2);
- if (DEBUG) Log.d(TAG, "keyguardDone(" + authenticated + ")");
- Message msg = mHandler.obtainMessage(KEYGUARD_DONE, authenticated ? 1 : 0,
- wakeup ? 1 : 0);
- mHandler.sendMessage(msg);
+ mKeyguardDonePending = false;
}
+ Message msg = mHandler.obtainMessage(KEYGUARD_DONE, authenticated ? 1 : 0, wakeup ? 1 : 0);
+ mHandler.sendMessage(msg);
}
/**
@@ -1037,31 +1041,31 @@ public class KeyguardViewMediator {
switch (msg.what) {
case SHOW:
handleShow((Bundle) msg.obj);
- return ;
+ break;
case HIDE:
handleHide();
- return ;
+ break;
case RESET:
handleReset((Bundle) msg.obj);
- return ;
+ break;
case VERIFY_UNLOCK:
handleVerifyUnlock();
- return;
+ break;
case NOTIFY_SCREEN_OFF:
handleNotifyScreenOff();
- return;
+ break;
case NOTIFY_SCREEN_ON:
handleNotifyScreenOn((IKeyguardShowCallback) msg.obj);
- return;
+ break;
case KEYGUARD_DONE:
handleKeyguardDone(msg.arg1 != 0, msg.arg2 != 0);
- return;
+ break;
case KEYGUARD_DONE_DRAWING:
handleKeyguardDoneDrawing();
- return;
+ break;
case KEYGUARD_DONE_AUTHENTICATING:
keyguardDone(true, true);
- return;
+ break;
case SET_HIDDEN:
handleSetHidden(msg.arg1 != 0);
break;
@@ -1079,6 +1083,9 @@ public class KeyguardViewMediator {
case LAUNCH_CAMERA:
handleLaunchCamera();
break;
+ case DISMISS:
+ handleDismiss();
+ break;
}
}
};
@@ -1178,8 +1185,7 @@ public class KeyguardViewMediator {
private void updateActivityLockScreenState() {
try {
- ActivityManagerNative.getDefault().setLockScreenShown(
- mShowing && !mHidden);
+ ActivityManagerNative.getDefault().setLockScreenShown(mShowing && !mHidden);
} catch (RemoteException e) {
}
}
diff --git a/packages/PrintSpooler/res/layout/select_printer_activity.xml b/packages/PrintSpooler/res/layout/select_printer_activity.xml
index e86e9aa..2792dcf 100644
--- a/packages/PrintSpooler/res/layout/select_printer_activity.xml
+++ b/packages/PrintSpooler/res/layout/select_printer_activity.xml
@@ -38,25 +38,30 @@
android:layout_gravity="center"
android:gravity="center"
android:orientation="vertical">
-
+
<ImageView
- android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="12dip"
android:src="@*android:drawable/ic_grayedout_printer"
- android:contentDescription="@string/print_no_printers_found">
+ android:contentDescription="@string/print_searching_for_printers">
</ImageView>
<TextView
- android:id="@+id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="?android:attr/textColorSecondary"
- android:text="@string/print_no_printers_found">
+ android:text="@string/print_searching_for_printers">
</TextView>
+ <ProgressBar
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:indeterminate="true"
+ style="@android:style/Widget.Holo.ProgressBar.Horizontal">
+ </ProgressBar>
+
</LinearLayout>
</FrameLayout>
diff --git a/packages/PrintSpooler/res/values-af/strings.xml b/packages/PrintSpooler/res/values-af/strings.xml
index 7e15080..6361df4 100644
--- a/packages/PrintSpooler/res/values-af/strings.xml
+++ b/packages/PrintSpooler/res/values-af/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Alle drukkers…"</string>
<string name="search" msgid="5421724265322228497">"Deursoek"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Alle drukkers"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Voeg diens by"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Kies drukdiens"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Soek in Play-winkel"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Geen drukkers gekry nie"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Druk tans <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Kanselleer tans <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Drukkerfout by <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-am/strings.xml b/packages/PrintSpooler/res/values-am/strings.xml
index bac0527..be683ba 100644
--- a/packages/PrintSpooler/res/values-am/strings.xml
+++ b/packages/PrintSpooler/res/values-am/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"ሁሉም አታሚዎች…"</string>
<string name="search" msgid="5421724265322228497">"ፍለጋ"</string>
<string name="all_printers_label" msgid="3178848870161526399">"ሁሉም አታሚዎች"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"አገልግሎት አክል"</string>
<string name="choose_print_service" msgid="3740309762324459694">"የህትመት አገልግሎት ይምረጡ"</string>
- <string name="search_play_store" msgid="1575218005860538249">"በPlay ሱቅ ውስጥ ይፈልጉ"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"ምንም አታሚዎች አልተገኙም"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>ን በማተም ላይ"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>ን በመተው ላይ"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"የአታሚ ስህተት <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-ar/strings.xml b/packages/PrintSpooler/res/values-ar/strings.xml
index 4cca804..eae6a91 100644
--- a/packages/PrintSpooler/res/values-ar/strings.xml
+++ b/packages/PrintSpooler/res/values-ar/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"جميع الطابعات…"</string>
<string name="search" msgid="5421724265322228497">"بحث"</string>
<string name="all_printers_label" msgid="3178848870161526399">"جميع الطابعات"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"إضافة خدمة"</string>
<string name="choose_print_service" msgid="3740309762324459694">"اختر خدمة طباعة"</string>
- <string name="search_play_store" msgid="1575218005860538249">"البحث في سوق Play"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"لم يتم العثور على طابعات"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"جارٍ طباعة <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"جارٍ إلغاء <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"خطا في الطابعة <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-bg/strings.xml b/packages/PrintSpooler/res/values-bg/strings.xml
index dc5c4f9..f4410a0 100644
--- a/packages/PrintSpooler/res/values-bg/strings.xml
+++ b/packages/PrintSpooler/res/values-bg/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Всички принтери…"</string>
<string name="search" msgid="5421724265322228497">"Търсене"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Всички принтери"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Добавяне на услуга"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Избиране на услуга за отпечатване"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Търсене в Google Play Магазин"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Няма намерени принтери"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"„<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>“ се отпечатва"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"„<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>“ се анулира"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Грешка в принтера при „<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>“"</string>
diff --git a/packages/PrintSpooler/res/values-ca/strings.xml b/packages/PrintSpooler/res/values-ca/strings.xml
index 9bc03f9..79de899 100644
--- a/packages/PrintSpooler/res/values-ca/strings.xml
+++ b/packages/PrintSpooler/res/values-ca/strings.xml
@@ -30,13 +30,14 @@
<string name="install_for_print_preview" msgid="6366303997385509332">"Instal·la un lector de PDF per a visualitz. prèvia"</string>
<string name="printing_app_crashed" msgid="854477616686566398">"L\'aplicació d\'impressió ha fallat"</string>
<string name="page_count_unknown" msgid="7412881437770983864">"no disponible"</string>
- <string name="generating_print_job" msgid="3119608742651698916">"S\'està gener. tasca impressió"</string>
+ <string name="generating_print_job" msgid="3119608742651698916">"Generant tasca impressió"</string>
<string name="save_as_pdf" msgid="5718454119847596853">"Desa com a PDF"</string>
<string name="all_printers" msgid="5018829726861876202">"Totes les impressores…"</string>
<string name="search" msgid="5421724265322228497">"Cerca"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Totes les impressores"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Afegeix un servei"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Selecció del servei d\'impressió"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Cerca a Play Store"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"No s\'ha trobat cap impressora"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"S\'està imprimint <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"S\'està cancel·lant <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Error d\'impressora <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-cs/strings.xml b/packages/PrintSpooler/res/values-cs/strings.xml
index f402eb3..151165f 100644
--- a/packages/PrintSpooler/res/values-cs/strings.xml
+++ b/packages/PrintSpooler/res/values-cs/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Všechny tiskárny…"</string>
<string name="search" msgid="5421724265322228497">"Hledat"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Všechny tiskárny"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Přidat službu"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Zvolte službu tisku"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Vyhledat v Obchodě Play"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Nebyly nalezeny žádné tiskárny"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Tisk úlohy <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Rušení úlohy <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Chyba tiskárny u úlohy <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-da/strings.xml b/packages/PrintSpooler/res/values-da/strings.xml
index 26457b6..e9c4d6d 100644
--- a/packages/PrintSpooler/res/values-da/strings.xml
+++ b/packages/PrintSpooler/res/values-da/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Alle printere..."</string>
<string name="search" msgid="5421724265322228497">"Søg"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Alle printere"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Tilføj tjeneste"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Vælg udskriftstjeneste"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Søg i Play Butik"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Der blev ikke fundet nogen printere"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> udskrives"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> annulleres"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Udskriften <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> mislykkedes"</string>
diff --git a/packages/PrintSpooler/res/values-de/strings.xml b/packages/PrintSpooler/res/values-de/strings.xml
index ceffeda..417792e 100644
--- a/packages/PrintSpooler/res/values-de/strings.xml
+++ b/packages/PrintSpooler/res/values-de/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Alle Drucker…"</string>
<string name="search" msgid="5421724265322228497">"Suchen"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Alle Drucker"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Dienst hinzufügen"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Druckdienst auswählen"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Im Play Store suchen"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Keine Drucker gefunden"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> wird gedruckt..."</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> wird abgebrochen..."</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Druckerfehler <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-el/strings.xml b/packages/PrintSpooler/res/values-el/strings.xml
index 44ba5d4..331315d 100644
--- a/packages/PrintSpooler/res/values-el/strings.xml
+++ b/packages/PrintSpooler/res/values-el/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Όλοι οι εκτυπωτές…"</string>
<string name="search" msgid="5421724265322228497">"Αναζήτηση"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Όλοι οι εκτυπωτές"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Προσθήκη υπηρεσίας"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Επιλέξτε υπηρεσία εκτύπωσης"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Αναζήτηση στο play store"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Δεν βρέθηκαν εκτυπωτές"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Εκτύπωση <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Ακύρωση <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Σφάλμα εκτυπωτή <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-en-rGB/strings.xml b/packages/PrintSpooler/res/values-en-rGB/strings.xml
index 7b77483..5fc9c68 100644
--- a/packages/PrintSpooler/res/values-en-rGB/strings.xml
+++ b/packages/PrintSpooler/res/values-en-rGB/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"All printers…"</string>
<string name="search" msgid="5421724265322228497">"Search"</string>
<string name="all_printers_label" msgid="3178848870161526399">"All printers"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Add service"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Choose print service"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Search in Play Store"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"No printers found"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Printing <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Cancelling <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Printer error <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-en-rIN/strings.xml b/packages/PrintSpooler/res/values-en-rIN/strings.xml
index 7b77483..5fc9c68 100644
--- a/packages/PrintSpooler/res/values-en-rIN/strings.xml
+++ b/packages/PrintSpooler/res/values-en-rIN/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"All printers…"</string>
<string name="search" msgid="5421724265322228497">"Search"</string>
<string name="all_printers_label" msgid="3178848870161526399">"All printers"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Add service"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Choose print service"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Search in Play Store"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"No printers found"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Printing <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Cancelling <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Printer error <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-es-rUS/strings.xml b/packages/PrintSpooler/res/values-es-rUS/strings.xml
index 8f76e9d..c2b97d8 100644
--- a/packages/PrintSpooler/res/values-es-rUS/strings.xml
+++ b/packages/PrintSpooler/res/values-es-rUS/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Todas las impresoras…"</string>
<string name="search" msgid="5421724265322228497">"Buscar"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Todas las impresoras"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Agregar servicio"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Elegir servicio de impresión"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Buscar en Play Store"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"No se encontraron impresoras"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Imprimiendo <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Cancelando <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Error de impresora <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-es/strings.xml b/packages/PrintSpooler/res/values-es/strings.xml
index f7c5790..350834a 100644
--- a/packages/PrintSpooler/res/values-es/strings.xml
+++ b/packages/PrintSpooler/res/values-es/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Todas las impresoras…"</string>
<string name="search" msgid="5421724265322228497">"Buscar"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Todas las impresoras"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Añadir servicio"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Seleccionar servicio de impresión"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Buscar en Play Store"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"No se encontraron impresoras"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Imprimiendo <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Cancelando <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Error de impresora <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-et-rEE/strings.xml b/packages/PrintSpooler/res/values-et-rEE/strings.xml
index 0d28170..94a6775 100644
--- a/packages/PrintSpooler/res/values-et-rEE/strings.xml
+++ b/packages/PrintSpooler/res/values-et-rEE/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Kõik printerid …"</string>
<string name="search" msgid="5421724265322228497">"Otsing"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Kõik printerid"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Lisa teenus"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Prinditeenuse valimine"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Otsi Play poest"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Printereid ei leitud"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Prinditöö <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> printimine"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Prinditöö <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> tühistamine"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Printeri viga: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-fa/strings.xml b/packages/PrintSpooler/res/values-fa/strings.xml
index b5435c6..320dfb0 100644
--- a/packages/PrintSpooler/res/values-fa/strings.xml
+++ b/packages/PrintSpooler/res/values-fa/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"همه چاپگرها..."</string>
<string name="search" msgid="5421724265322228497">"جستجو"</string>
<string name="all_printers_label" msgid="3178848870161526399">"همه چاپگرها"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"افزودن سرویس"</string>
<string name="choose_print_service" msgid="3740309762324459694">"انتخاب سرویس چاپ"</string>
- <string name="search_play_store" msgid="1575218005860538249">"جستجو در فروشگاه Play"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"هیچ چاپگری یافت نشد"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"در حال چاپ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"در حال لغو <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"خطای چاپگر <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-fi/strings.xml b/packages/PrintSpooler/res/values-fi/strings.xml
index cbf9931..9e92744 100644
--- a/packages/PrintSpooler/res/values-fi/strings.xml
+++ b/packages/PrintSpooler/res/values-fi/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Kaikki tulostimet…"</string>
<string name="search" msgid="5421724265322228497">"Haku"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Kaikki tulostimet"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Lisää palvelu"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Valitse tulostuspalvelu"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Haku Play-kaupasta"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Tulostimia ei löydy"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Tulostetaan <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Peruutetaan työ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Tulostinvirhe työlle <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-fr-rCA/strings.xml b/packages/PrintSpooler/res/values-fr-rCA/strings.xml
index f5c504f..779fd7d 100644
--- a/packages/PrintSpooler/res/values-fr-rCA/strings.xml
+++ b/packages/PrintSpooler/res/values-fr-rCA/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Toutes les imprimantes…"</string>
<string name="search" msgid="5421724265322228497">"Rechercher"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Toutes les imprimantes"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Ajouter le service"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Sélectionner le service d\'impression"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Rechercher dans la boutique Google Play Store"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Aucune imprimante trouvée"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Impression de <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> en cours…"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Annulation de « <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> »…"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Erreur impression : « <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> »"</string>
diff --git a/packages/PrintSpooler/res/values-fr/strings.xml b/packages/PrintSpooler/res/values-fr/strings.xml
index 2d6a7a1..440e549 100644
--- a/packages/PrintSpooler/res/values-fr/strings.xml
+++ b/packages/PrintSpooler/res/values-fr/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Toutes les imprimantes…"</string>
<string name="search" msgid="5421724265322228497">"Rechercher"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Toutes les imprimantes"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Ajouter un service"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Sélectionner le service d\'impression"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Rechercher sur le Play Store"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Aucune imprimante trouvée"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Impression de \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\" en cours…"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Annulation de \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\" en cours…"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Erreur impression pour \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\""</string>
diff --git a/packages/PrintSpooler/res/values-hi/strings.xml b/packages/PrintSpooler/res/values-hi/strings.xml
index 59a88a8..59a4054 100644
--- a/packages/PrintSpooler/res/values-hi/strings.xml
+++ b/packages/PrintSpooler/res/values-hi/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"सभी प्रिंटर..."</string>
<string name="search" msgid="5421724265322228497">"खोजें"</string>
<string name="all_printers_label" msgid="3178848870161526399">"सभी प्रिंटर"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"सेवा जोड़ें"</string>
<string name="choose_print_service" msgid="3740309762324459694">"प्रिंट सेवा चुनें"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Play स्टोर में खोजें"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"कोई प्रिंटर नहीं मिला"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> प्रिंट हो रहा है"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> रद्द हो रहा है"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"प्रिंटर त्रुटि <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-hr/strings.xml b/packages/PrintSpooler/res/values-hr/strings.xml
index 399e14e..19f546e 100644
--- a/packages/PrintSpooler/res/values-hr/strings.xml
+++ b/packages/PrintSpooler/res/values-hr/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Svi pisači…"</string>
<string name="search" msgid="5421724265322228497">"Pretraživanje"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Svi pisači"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Dodaj uslugu"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Odaberite uslugu ispisa"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Pretraži u Trgovini Play"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Nije pronađen nijedan pisač"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Ispisivanje <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Otkazivanje zadatka <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Pogreška pisača <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-hu/strings.xml b/packages/PrintSpooler/res/values-hu/strings.xml
index ea997c5..31505f0 100644
--- a/packages/PrintSpooler/res/values-hu/strings.xml
+++ b/packages/PrintSpooler/res/values-hu/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Az összes nyomtató…"</string>
<string name="search" msgid="5421724265322228497">"Keresés"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Az összes nyomtató"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Szolgáltatás hozzáadása"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Nyomtatási szolgáltatás kiválasztása"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Keresés a Play Áruházban"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Nem található nyomtató"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"A(z) <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> nyomtatása"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"A(z) <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> törlése"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Nyomtatási hiba: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-hy-rAM/strings.xml b/packages/PrintSpooler/res/values-hy-rAM/strings.xml
index 47d8627..1634984 100644
--- a/packages/PrintSpooler/res/values-hy-rAM/strings.xml
+++ b/packages/PrintSpooler/res/values-hy-rAM/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Բոլոր տպիչները..."</string>
<string name="search" msgid="5421724265322228497">"Որոնել"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Բոլոր տպիչները"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Ավելացնել ծառայություն"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Ընտրեք տպելու ծառայությունը"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Որոնել Play Store-ում"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Տպիչներ չեն գտնվել"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Տպվում է՝ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>-ը չեղարկվում է"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Տպիչի սխալ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-in/strings.xml b/packages/PrintSpooler/res/values-in/strings.xml
index d4878cd..790b645 100644
--- a/packages/PrintSpooler/res/values-in/strings.xml
+++ b/packages/PrintSpooler/res/values-in/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Semua printer…"</string>
<string name="search" msgid="5421724265322228497">"Cari"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Semua printer"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Tambahkan layanan"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Pilih layanan cetak"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Cari di Play Store"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Tidak ditemukan printer"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Mencetak <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Membatalkan <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Ada kesalahan printer <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-it/strings.xml b/packages/PrintSpooler/res/values-it/strings.xml
index a623bb6..d8f8eab 100644
--- a/packages/PrintSpooler/res/values-it/strings.xml
+++ b/packages/PrintSpooler/res/values-it/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Tutte le stampanti…"</string>
<string name="search" msgid="5421724265322228497">"Cerca"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Tutte le stampanti"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Aggiungi servizio"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Scegli servizio di stampa"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Cerca nel Play Store"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Nessuna stampante trovata"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Stampa di <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Annullamento di <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Errore della stampante: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-iw/strings.xml b/packages/PrintSpooler/res/values-iw/strings.xml
index 15b097c..44a001a 100644
--- a/packages/PrintSpooler/res/values-iw/strings.xml
+++ b/packages/PrintSpooler/res/values-iw/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"כל המדפסות…"</string>
<string name="search" msgid="5421724265322228497">"חפש"</string>
<string name="all_printers_label" msgid="3178848870161526399">"כל המדפסות"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"הוסף שירות"</string>
<string name="choose_print_service" msgid="3740309762324459694">"בחר שירות הדפסה"</string>
- <string name="search_play_store" msgid="1575218005860538249">"חפש בחנות Play"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"לא נמצאו מדפסות"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"מדפיס את <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"מבטל את <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"שגיאת מדפסת ב-<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-ja/strings.xml b/packages/PrintSpooler/res/values-ja/strings.xml
index 116c7fe..0a8a458 100644
--- a/packages/PrintSpooler/res/values-ja/strings.xml
+++ b/packages/PrintSpooler/res/values-ja/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"すべてのプリンタ…"</string>
<string name="search" msgid="5421724265322228497">"検索"</string>
<string name="all_printers_label" msgid="3178848870161526399">"すべてのプリンタ"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"サービスを追加"</string>
<string name="choose_print_service" msgid="3740309762324459694">"印刷サービスの選択"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Playストアで検索"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"プリンタが見つかりません"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>を印刷しています"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>をキャンセルしています"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"プリンタエラー: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-ka-rGE/strings.xml b/packages/PrintSpooler/res/values-ka-rGE/strings.xml
index 320d57c..4a99c60 100644
--- a/packages/PrintSpooler/res/values-ka-rGE/strings.xml
+++ b/packages/PrintSpooler/res/values-ka-rGE/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"ყველა პრინტერი…"</string>
<string name="search" msgid="5421724265322228497">"ძიება"</string>
<string name="all_printers_label" msgid="3178848870161526399">"ყველა პრინტერი"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"სერვისის დამატება"</string>
<string name="choose_print_service" msgid="3740309762324459694">"აირჩიეთ ბეჭდვის სერვისი"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Play Store-ში ძიება"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"პრინტერები ვერ მოიძებნა"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"იბეჭდება <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"მიმდინარეობს <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>-ის გაუქმება"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"ბეჭდვის შეცდომა <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-km-rKH/strings.xml b/packages/PrintSpooler/res/values-km-rKH/strings.xml
index b9a52f1..1d682e3 100644
--- a/packages/PrintSpooler/res/values-km-rKH/strings.xml
+++ b/packages/PrintSpooler/res/values-km-rKH/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"ម៉ាស៊ីន​បោះពុម្ព​ទាំងអស់ ..."</string>
<string name="search" msgid="5421724265322228497">"ស្វែងរក"</string>
<string name="all_printers_label" msgid="3178848870161526399">"ម៉ាស៊ីន​បោះពុម្ព​ទាំងអស់"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"បន្ថែម​សេវាកម្ម"</string>
<string name="choose_print_service" msgid="3740309762324459694">"ជ្រើស​សេវា​បោះពុម្ព"</string>
- <string name="search_play_store" msgid="1575218005860538249">"ស្វែងរក​ក្នុង​ឃ្លាំង​កម្មវិធី"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"រក​មិន​ឃើញ​ម៉ាស៊ីន​បោះពុម្ព"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"កំពុង​​បោះពុម្ព <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"ការ​បោះបង់ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"កំហុស​ម៉ាស៊ីន​បោះពុម្ព <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-ko/strings.xml b/packages/PrintSpooler/res/values-ko/strings.xml
index c09b5c3..d7cd175 100644
--- a/packages/PrintSpooler/res/values-ko/strings.xml
+++ b/packages/PrintSpooler/res/values-ko/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"모든 프린터…"</string>
<string name="search" msgid="5421724265322228497">"검색"</string>
<string name="all_printers_label" msgid="3178848870161526399">"모든 프린터"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"서비스 추가"</string>
<string name="choose_print_service" msgid="3740309762324459694">"인쇄 서비스 선택"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Play 스토어에서 검색"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"프린터 없음"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> 인쇄 중"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> 취소 중"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"프린터 오류: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-lo-rLA/strings.xml b/packages/PrintSpooler/res/values-lo-rLA/strings.xml
index f6d5fcd..ced114b 100644
--- a/packages/PrintSpooler/res/values-lo-rLA/strings.xml
+++ b/packages/PrintSpooler/res/values-lo-rLA/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"ທຸກເຄື່ອງພິມ..."</string>
<string name="search" msgid="5421724265322228497">"ຊອກຫາ"</string>
<string name="all_printers_label" msgid="3178848870161526399">"ທຸກເຄື່ອງພິມ"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"ເພີ່ມບໍລິການ"</string>
<string name="choose_print_service" msgid="3740309762324459694">"ເລືອກບໍລິການການພິມ"</string>
- <string name="search_play_store" msgid="1575218005860538249">"ຊອກຫາໃນ play store"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"ບໍ່ພົບເຄື່ອງພິມ"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"ກຳລັງພິມ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"ກຳລັງຍົກເລີກ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"ເຄື່ອງພິມເກີດຂໍ້ຜິດພາດ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-lt/strings.xml b/packages/PrintSpooler/res/values-lt/strings.xml
index 6778b75..69c8675 100644
--- a/packages/PrintSpooler/res/values-lt/strings.xml
+++ b/packages/PrintSpooler/res/values-lt/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Visi spausdintuvai…"</string>
<string name="search" msgid="5421724265322228497">"Ieškoti"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Visi spausdintuvai"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Pridėti paslaugą"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Pasirinkite spausdinimo paslaugą"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Ieškoti „Google Play“ parduotuvėje"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Nerasta jokių spausdintuvų"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Spausdinama: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Atšaukiama: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Spausdintuvo klaida: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-lv/strings.xml b/packages/PrintSpooler/res/values-lv/strings.xml
index a255001..aae7b97 100644
--- a/packages/PrintSpooler/res/values-lv/strings.xml
+++ b/packages/PrintSpooler/res/values-lv/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Visi printeri…"</string>
<string name="search" msgid="5421724265322228497">"Meklēt"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Visi printeri"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Pievienot pakalpojumu"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Izvēlieties drukāšanas pakalpojumu"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Meklēt Play veikalā"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Netika atrasts neviens printeris."</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Notiek darba <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> drukāšana…"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Pārtrauc drukas darbu <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>…"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Printera kļūda ar darbu <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-mn-rMN/strings.xml b/packages/PrintSpooler/res/values-mn-rMN/strings.xml
index 3ab1baa..af5f066 100644
--- a/packages/PrintSpooler/res/values-mn-rMN/strings.xml
+++ b/packages/PrintSpooler/res/values-mn-rMN/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Бүх принтерүүд…"</string>
<string name="search" msgid="5421724265322228497">"Хайх"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Бүх принтерүүд"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Үйлчилгээ нэмэх"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Хэвлэх үйлчилгээг сонгох"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Play Store-с хайх"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Принтер олдсонгүй"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Хэвлэж байна <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Цуцлаж байна <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Принтерийн алдаа <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-ms-rMY/strings.xml b/packages/PrintSpooler/res/values-ms-rMY/strings.xml
index bfbe51e..753728a 100644
--- a/packages/PrintSpooler/res/values-ms-rMY/strings.xml
+++ b/packages/PrintSpooler/res/values-ms-rMY/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Semua pencetak..."</string>
<string name="search" msgid="5421724265322228497">"Cari"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Semua pencetak"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Tambahkan perkhidmatan"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Pilih perkhidmatan cetak"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Cari di gedung play"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Tiada pencetak ditemui"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Mencetak <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Membatalkan <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Ralat pencetak <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-nb/strings.xml b/packages/PrintSpooler/res/values-nb/strings.xml
index d5dc300..57d33ec 100644
--- a/packages/PrintSpooler/res/values-nb/strings.xml
+++ b/packages/PrintSpooler/res/values-nb/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Alle skrivere"</string>
<string name="search" msgid="5421724265322228497">"Søk"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Alle skrivere"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Legg til tjeneste"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Velg utskriftstjeneste"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Søk i Play-butikken"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Fant ingen skrivere"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Skriver ut <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Avbryter <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Skriverfeil <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-nl/strings.xml b/packages/PrintSpooler/res/values-nl/strings.xml
index 2d27eed..2548edd 100644
--- a/packages/PrintSpooler/res/values-nl/strings.xml
+++ b/packages/PrintSpooler/res/values-nl/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Alle printers…"</string>
<string name="search" msgid="5421724265322228497">"Zoeken"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Alle printers"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Service toevoegen"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Afdrukservice kiezen"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Zoeken in de Play Store"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Geen printers gevonden"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> afdrukken"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> annuleren"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Printerfout <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-pl/strings.xml b/packages/PrintSpooler/res/values-pl/strings.xml
index 6f8aab2..76c4aba 100644
--- a/packages/PrintSpooler/res/values-pl/strings.xml
+++ b/packages/PrintSpooler/res/values-pl/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Wszystkie drukarki…"</string>
<string name="search" msgid="5421724265322228497">"Szukaj"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Wszystkie drukarki"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Dodaj usługę"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Wybierz usługę drukowania"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Szukaj w Sklepie Play"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Nie znaleziono drukarek"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Drukowanie: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Anulowanie: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Błąd drukarki: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-pt-rPT/strings.xml b/packages/PrintSpooler/res/values-pt-rPT/strings.xml
index db37f90..ad7845e 100644
--- a/packages/PrintSpooler/res/values-pt-rPT/strings.xml
+++ b/packages/PrintSpooler/res/values-pt-rPT/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Todas as impressoras..."</string>
<string name="search" msgid="5421724265322228497">"Pesquisar"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Todas as impressoras"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Adicionar serviço"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Escolher o serviço de impressão"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Pesquisar na Play Store"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Nenhuma impressora encontrada"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"A imprimir <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"A cancelar <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Erro da impressora <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
@@ -47,7 +48,7 @@
<string name="reason_unknown" msgid="5507940196503246139">"desconhecido"</string>
<string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – indisponível"</string>
<string-array name="color_mode_labels">
- <item msgid="7602948745415174937">"Preto e branco:"</item>
+ <item msgid="7602948745415174937">"Preto e branco"</item>
<item msgid="2762241247228983754">"Cor"</item>
</string-array>
<string-array name="orientation_labels">
diff --git a/packages/PrintSpooler/res/values-pt/strings.xml b/packages/PrintSpooler/res/values-pt/strings.xml
index 1a7a737..9eb5a5a 100644
--- a/packages/PrintSpooler/res/values-pt/strings.xml
+++ b/packages/PrintSpooler/res/values-pt/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Todas as impressoras…"</string>
<string name="search" msgid="5421724265322228497">"Pesquisar"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Todas as impressoras"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Adicionar serviço"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Selecione o serviço de impressão"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Pesquisar na Play Store"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Nenhuma impressora encontrada"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Imprimindo <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Cancelando <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Erro ao imprimir <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-ro/strings.xml b/packages/PrintSpooler/res/values-ro/strings.xml
index 588717d..f95203c 100644
--- a/packages/PrintSpooler/res/values-ro/strings.xml
+++ b/packages/PrintSpooler/res/values-ro/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Toate imprimantele..."</string>
<string name="search" msgid="5421724265322228497">"Căutați"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Toate imprimantele"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Adăugați un serviciu"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Alegeți serviciul de printare"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Căutați în Magazin Play"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Nu au fost găsite imprimante"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Se printează <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Se anulează <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Eroare de printare: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-ru/strings.xml b/packages/PrintSpooler/res/values-ru/strings.xml
index cbb5f1b..a96cd8c 100644
--- a/packages/PrintSpooler/res/values-ru/strings.xml
+++ b/packages/PrintSpooler/res/values-ru/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Все принтеры"</string>
<string name="search" msgid="5421724265322228497">"Поиск"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Все принтеры"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Добавить службу печати"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Выберите службу печати"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Поиск в Google Play"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Ничего не найдено"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Печать задания \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\"…"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Отмена задания <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>…"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Ошибка задания \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\""</string>
diff --git a/packages/PrintSpooler/res/values-sk/strings.xml b/packages/PrintSpooler/res/values-sk/strings.xml
index 993ee53..8c41e26 100644
--- a/packages/PrintSpooler/res/values-sk/strings.xml
+++ b/packages/PrintSpooler/res/values-sk/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Všetky tlačiarne..."</string>
<string name="search" msgid="5421724265322228497">"VYHĽADÁVANIE"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Všetky tlačiarne"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Pridať službu"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Výber tlačovej služby"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Vyhľadať v Obchode Play"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Nenašli sa žiadne tlačiarne"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Prebieha tlač úlohy <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Prebieha zrušenie úlohy <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Chyba tlačiarne – úloha <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-sl/strings.xml b/packages/PrintSpooler/res/values-sl/strings.xml
index a6dd0e2..398268a 100644
--- a/packages/PrintSpooler/res/values-sl/strings.xml
+++ b/packages/PrintSpooler/res/values-sl/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Vsi tiskalniki …"</string>
<string name="search" msgid="5421724265322228497">"Iskanje"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Vsi tiskalniki"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Dodaj storitev"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Izberite tiskalno storitev"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Iskanje v Trgovini Play"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Tiskalnikov ni mogoče najti"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Tiskanje: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Preklic: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Napaka tiskalnika: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-sr/strings.xml b/packages/PrintSpooler/res/values-sr/strings.xml
index 3b03e10..6c15ede 100644
--- a/packages/PrintSpooler/res/values-sr/strings.xml
+++ b/packages/PrintSpooler/res/values-sr/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Сви штампачи…"</string>
<string name="search" msgid="5421724265322228497">"Претражи"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Сви штампачи"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Додај услугу"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Изаберите услугу штампања"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Претражи у Play продавници"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Није пронађен ниједан штампач"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Штампа се <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Отказује се <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Грешка штампача <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-sv/strings.xml b/packages/PrintSpooler/res/values-sv/strings.xml
index 0faa851..3ceefe8 100644
--- a/packages/PrintSpooler/res/values-sv/strings.xml
+++ b/packages/PrintSpooler/res/values-sv/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Alla skrivare ..."</string>
<string name="search" msgid="5421724265322228497">"Sök"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Alla skrivare"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Lägg till tjänst"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Välj utskriftstjänst"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Sök i Play Butik"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Det gick inte att hitta några skrivare"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Skriver ut <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Avbryter <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Skrivarfel för <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-sw/strings.xml b/packages/PrintSpooler/res/values-sw/strings.xml
index b97c6a3..99cf501 100644
--- a/packages/PrintSpooler/res/values-sw/strings.xml
+++ b/packages/PrintSpooler/res/values-sw/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Printa zote..."</string>
<string name="search" msgid="5421724265322228497">"Tafuta"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Printa zote"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Ongeza huduma"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Chagua huduma ya printa"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Tafuta katika duka la Google Play"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Hakuna printa zilizopatikana"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Inachapisha <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Inaghairi <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Hitilafu ya kuchapisha <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-th/strings.xml b/packages/PrintSpooler/res/values-th/strings.xml
index ba20aaf..9f5de68 100644
--- a/packages/PrintSpooler/res/values-th/strings.xml
+++ b/packages/PrintSpooler/res/values-th/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"เครื่องพิมพ์ทั้งหมด…"</string>
<string name="search" msgid="5421724265322228497">"ค้นหา"</string>
<string name="all_printers_label" msgid="3178848870161526399">"เครื่องพิมพ์ทั้งหมด"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"เพิ่มบริการ"</string>
<string name="choose_print_service" msgid="3740309762324459694">"เลือกบริการพิมพ์"</string>
- <string name="search_play_store" msgid="1575218005860538249">"ค้นหาใน Play สโตร์"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"ไม่พบเครื่องพิมพ์"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"กำลังพิมพ์ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"กำลังยกเลิก <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"ข้อผิดพลาดเครื่องพิมพ์ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-tl/strings.xml b/packages/PrintSpooler/res/values-tl/strings.xml
index a0fd8ad..1a89dac 100644
--- a/packages/PrintSpooler/res/values-tl/strings.xml
+++ b/packages/PrintSpooler/res/values-tl/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Lahat ng printer…"</string>
<string name="search" msgid="5421724265322228497">"Hanapin"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Lahat ng printer"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Magdagdag ng serbisyo"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Pumili ng serbisyo ng pag-print"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Hanapin sa play store"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Walang mga printer na nakita"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Pini-print ang <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Kinakansela ang <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Error sa printer <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-tr/strings.xml b/packages/PrintSpooler/res/values-tr/strings.xml
index 4b45829..088e407 100644
--- a/packages/PrintSpooler/res/values-tr/strings.xml
+++ b/packages/PrintSpooler/res/values-tr/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Tüm yazıcılar…"</string>
<string name="search" msgid="5421724265322228497">"Ara"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Tüm yazıcılar"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Hizmet ekle"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Yazdırma hizmetini seçin"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Google Play Store\'da ara"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Yazıcı bulunamadı"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> yazdırılıyor"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> iptal ediliyor"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Yazıcı hatası: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-uk/strings.xml b/packages/PrintSpooler/res/values-uk/strings.xml
index 0aa514f..f88da45 100644
--- a/packages/PrintSpooler/res/values-uk/strings.xml
+++ b/packages/PrintSpooler/res/values-uk/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Усі принтери…"</string>
<string name="search" msgid="5421724265322228497">"Пошук"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Усі принтери"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Додати службу"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Вибрати службу друку"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Шукати в магазині Play"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Принтери не знайдено"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Завдання \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\" друкується"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Завдання \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\" скасовується"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Помилка завдання \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\""</string>
diff --git a/packages/PrintSpooler/res/values-vi/strings.xml b/packages/PrintSpooler/res/values-vi/strings.xml
index bb06d8b..2938522 100644
--- a/packages/PrintSpooler/res/values-vi/strings.xml
+++ b/packages/PrintSpooler/res/values-vi/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Tất cả máy in…"</string>
<string name="search" msgid="5421724265322228497">"Tìm kiếm"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Tất cả máy in"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Thêm dịch vụ"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Chọn dịch vụ in"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Tìm kiếm trong Cửa hàng Play"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Không tìm thấy máy in"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"In <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Hủy <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Lỗi máy in <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-zh-rCN/strings.xml b/packages/PrintSpooler/res/values-zh-rCN/strings.xml
index 564b47e..068d05c 100644
--- a/packages/PrintSpooler/res/values-zh-rCN/strings.xml
+++ b/packages/PrintSpooler/res/values-zh-rCN/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"所有打印机…"</string>
<string name="search" msgid="5421724265322228497">"搜索"</string>
<string name="all_printers_label" msgid="3178848870161526399">"所有打印机"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"添加服务"</string>
<string name="choose_print_service" msgid="3740309762324459694">"选择打印服务"</string>
- <string name="search_play_store" msgid="1575218005860538249">"在 Play 商店中搜索"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"找不到打印机"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"正在打印“<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>”"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"正在取消打印“<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>”"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"打印机在打印“<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>”时出错"</string>
diff --git a/packages/PrintSpooler/res/values-zh-rHK/strings.xml b/packages/PrintSpooler/res/values-zh-rHK/strings.xml
index 99eb30a..dbf3d36 100644
--- a/packages/PrintSpooler/res/values-zh-rHK/strings.xml
+++ b/packages/PrintSpooler/res/values-zh-rHK/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"所有打印機…"</string>
<string name="search" msgid="5421724265322228497">"搜尋"</string>
<string name="all_printers_label" msgid="3178848870161526399">"所有打印機"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"新增服務"</string>
<string name="choose_print_service" msgid="3740309762324459694">"選擇列印服務"</string>
- <string name="search_play_store" msgid="1575218005860538249">"前往「Play 商店」搜尋"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"找不到打印機"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"正在列印 <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"正在取消 <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"打印機錯誤:<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-zh-rTW/strings.xml b/packages/PrintSpooler/res/values-zh-rTW/strings.xml
index 4f20161..26b1554 100644
--- a/packages/PrintSpooler/res/values-zh-rTW/strings.xml
+++ b/packages/PrintSpooler/res/values-zh-rTW/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"所有印表機…"</string>
<string name="search" msgid="5421724265322228497">"搜尋"</string>
<string name="all_printers_label" msgid="3178848870161526399">"所有印表機"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"新增服務"</string>
<string name="choose_print_service" msgid="3740309762324459694">"選擇列印服務"</string>
- <string name="search_play_store" msgid="1575218005860538249">"前往 Play 商店搜尋"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"找不到印表機"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"正在列印 <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"正在取消 <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"印表機發生錯誤:<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-zu/strings.xml b/packages/PrintSpooler/res/values-zu/strings.xml
index 7ad8ce2..e93fb1a 100644
--- a/packages/PrintSpooler/res/values-zu/strings.xml
+++ b/packages/PrintSpooler/res/values-zu/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Wonke amaphrinta…"</string>
<string name="search" msgid="5421724265322228497">"Sesha"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Wonke amaphrinta"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Engeza isevisi"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Khetha isevisi yephrinta"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Sesha ku-Google Play Isitolo"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Awekho amaphrinta atholiwe"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Iphrinta i-<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Ikhansela i-<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Iphutha lephrinta ye-<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values/strings.xml b/packages/PrintSpooler/res/values/strings.xml
index 41775a1..5b947ba 100644
--- a/packages/PrintSpooler/res/values/strings.xml
+++ b/packages/PrintSpooler/res/values/strings.xml
@@ -84,7 +84,7 @@
<string name="choose_print_service">Choose print service</string>
<!-- Title for the prompt shown as a placeholder if no printers are found while searching. [CHAR LIMIT=50] -->
- <string name="print_no_printers_found">No printers found</string>
+ <string name="print_searching_for_printers">Searching for printers</string>
<!-- Notifications -->
diff --git a/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java b/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java
index 8474115..0c593ef 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java
@@ -1613,7 +1613,6 @@ public class PrintJobConfigActivity extends Activity {
mCopiesEditText = (EditText) findViewById(R.id.copies_edittext);
mCopiesEditText.setText(MIN_COPIES_STRING);
mCopiesEditText.addTextChangedListener(mCopiesTextWatcher);
- mCopiesEditText.selectAll();
if (!TextUtils.equals(mCopiesEditText.getText(), MIN_COPIES_STRING)) {
mIgnoreNextCopiesChange = true;
}
@@ -1622,6 +1621,7 @@ public class PrintJobConfigActivity extends Activity {
// Destination.
mDestinationSpinner = (Spinner) findViewById(R.id.destination_spinner);
+ mDestinationSpinner.setDropDownWidth(ViewGroup.LayoutParams.MATCH_PARENT);
mDestinationSpinner.setAdapter(mDestinationSpinnerAdapter);
mDestinationSpinner.setOnItemSelectedListener(mOnItemSelectedListener);
if (mDestinationSpinnerAdapter.getCount() > 0 && mController.hasStarted()) {
@@ -1954,7 +1954,6 @@ public class PrintJobConfigActivity extends Activity {
&& TextUtils.isEmpty(mCopiesEditText.getText())) {
mIgnoreNextCopiesChange = true;
mCopiesEditText.setText(String.valueOf(MIN_COPIES));
- mCopiesEditText.selectAll();
mCopiesEditText.requestFocus();
}
@@ -2151,6 +2150,8 @@ public class PrintJobConfigActivity extends Activity {
R.layout.printer_dropdown_item, parent, false);
}
+ convertView.getLayoutParams().width = mDestinationSpinner.getWidth();
+
CharSequence title = null;
CharSequence subtitle = null;
Drawable icon = null;
diff --git a/packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java b/packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java
index d1d71cd..d1b42bc 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java
@@ -440,8 +440,9 @@ public final class PrintSpoolerService extends Service {
if (fileForJobMap == null) {
fileForJobMap = new ArrayMap<PrintJobId, File>();
}
- String printJobIdString = file.getName().substring(0,
- PRINT_JOB_FILE_PREFIX.length());
+ String printJobIdString = file.getName().substring(
+ PRINT_JOB_FILE_PREFIX.length(),
+ file.getName().indexOf('.'));
PrintJobId printJobId = PrintJobId.unflattenFromString(
printJobIdString);
fileForJobMap.put(printJobId, file);
diff --git a/packages/PrintSpooler/src/com/android/printspooler/SelectPrinterFragment.java b/packages/PrintSpooler/src/com/android/printspooler/SelectPrinterFragment.java
index c888e2c..114c151 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/SelectPrinterFragment.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/SelectPrinterFragment.java
@@ -36,6 +36,7 @@ import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
+import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.print.PrintManager;
@@ -53,6 +54,7 @@ import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
+import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.TextView;
@@ -357,11 +359,12 @@ public final class SelectPrinterFragment extends ListFragment {
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = getActivity().getLayoutInflater().inflate(
- R.layout.spinner_dropdown_item, parent, false);
+ R.layout.printer_dropdown_item, parent, false);
}
CharSequence title = null;
CharSequence subtitle = null;
+ Drawable icon = null;
PrinterInfo printer = (PrinterInfo) getItem(position);
title = printer.getName();
@@ -370,6 +373,7 @@ public final class SelectPrinterFragment extends ListFragment {
PackageInfo packageInfo = pm.getPackageInfo(printer.getId()
.getServiceName().getPackageName(), 0);
subtitle = packageInfo.applicationInfo.loadLabel(pm);
+ icon = packageInfo.applicationInfo.loadIcon(pm);
} catch (NameNotFoundException nnfe) {
/* ignore */
}
@@ -386,6 +390,15 @@ public final class SelectPrinterFragment extends ListFragment {
subtitleView.setVisibility(View.GONE);
}
+
+ ImageView iconView = (ImageView) convertView.findViewById(R.id.icon);
+ if (icon != null) {
+ iconView.setImageDrawable(icon);
+ iconView.setVisibility(View.VISIBLE);
+ } else {
+ iconView.setVisibility(View.GONE);
+ }
+
return convertView;
}
diff --git a/packages/Shell/res/values-da/strings.xml b/packages/Shell/res/values-da/strings.xml
index 01ea42b..a8a3605 100644
--- a/packages/Shell/res/values-da/strings.xml
+++ b/packages/Shell/res/values-da/strings.xml
@@ -19,6 +19,6 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Fejlrapporten er registreret"</string>
<string name="bugreport_finished_text" msgid="3559904746859400732">"Tryk for at dele din fejlrapport"</string>
- <string name="bugreport_confirm" msgid="5130698467795669780">"Fejlrapporter indeholder data fra systemets forskellige logfiler, herunder personlige og private oplysninger. Del kun fejlrapporter med apps og personer, du har tillid til."</string>
+ <string name="bugreport_confirm" msgid="5130698467795669780">"Fejlrapporter indeholder data fra systemets forskellige logfiler, f.eks. personlige og private oplysninger. Del kun fejlrapporter med apps og personer, du har tillid til."</string>
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Vis denne meddelelse næste gang"</string>
</resources>
diff --git a/packages/SystemUI/res/drawable-hdpi/search_light.png b/packages/SystemUI/res/drawable-hdpi/search_light.png
index 9a8f771..c8b5a2e 100644
--- a/packages/SystemUI/res/drawable-hdpi/search_light.png
+++ b/packages/SystemUI/res/drawable-hdpi/search_light.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/search_light.png b/packages/SystemUI/res/drawable-mdpi/search_light.png
index c355b6a..4b5b2a4 100644
--- a/packages/SystemUI/res/drawable-mdpi/search_light.png
+++ b/packages/SystemUI/res/drawable-mdpi/search_light.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/search_light.png b/packages/SystemUI/res/drawable-xhdpi/search_light.png
index 68b70eb..3aa890f 100644
--- a/packages/SystemUI/res/drawable-xhdpi/search_light.png
+++ b/packages/SystemUI/res/drawable-xhdpi/search_light.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/search_light.png b/packages/SystemUI/res/drawable-xxhdpi/search_light.png
index faa97f8..74ad3c8 100644
--- a/packages/SystemUI/res/drawable-xxhdpi/search_light.png
+++ b/packages/SystemUI/res/drawable-xxhdpi/search_light.png
Binary files differ
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 58865ab..73786f0 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -496,6 +496,12 @@
<string name="quick_settings_brightness_dialog_title">Brightness</string>
<!-- QuickSettings: Brightness dialog auto brightness button [CHAR LIMIT=NONE] -->
<string name="quick_settings_brightness_dialog_auto_brightness_label">AUTO</string>
+ <!-- QuickSettings: Color inversion mode [CHAR LIMIT=NONE] -->
+ <string name="quick_settings_inversion_label">Color inversion mode</string>
+ <!-- QuickSettings: Enhanced contrast mode [CHAR LIMIT=NONE] -->
+ <string name="quick_settings_contrast_label">Enhanced contrast mode</string>
+ <!-- QuickSettings: Color correction mode [CHAR LIMIT=NONE] -->
+ <string name="quick_settings_color_space_label">Color correction mode</string>
<!-- Glyph to be overlaid atop the battery when the level is extremely low. Do not translate. -->
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java
index 36ba4d9..6e24fd3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java
@@ -25,6 +25,7 @@ import android.app.admin.DevicePolicyManager;
import android.bluetooth.BluetoothAdapter;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
+import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
@@ -84,6 +85,7 @@ class QuickSettings {
static final boolean DEBUG_GONE_TILES = false;
private static final String TAG = "QuickSettings";
public static final boolean SHOW_IME_TILE = false;
+ public static final boolean SHOW_ACCESSIBILITY_TILES = true;
public static final boolean LONG_PRESS_TOGGLES = true;
@@ -399,6 +401,35 @@ class QuickSettings {
new QuickSettingsModel.BasicRefreshCallback(settingsTile));
parent.addView(settingsTile);
mDynamicSpannedTiles.add(settingsTile);
+
+ if (SHOW_ACCESSIBILITY_TILES) {
+ // Color inversion tile
+ final SystemSettingTile inversionTile = new SystemSettingTile(mContext);
+ inversionTile.setUri(Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED,
+ SystemSettingTile.TYPE_SECURE);
+ inversionTile.setFragment("Settings$AccessibilityInversionSettingsActivity");
+ mModel.addInversionTile(inversionTile, inversionTile.getRefreshCallback());
+ parent.addView(inversionTile);
+ mDynamicSpannedTiles.add(inversionTile);
+
+ // Contrast enhancement tile
+ final SystemSettingTile contrastTile = new SystemSettingTile(mContext);
+ contrastTile.setUri(Settings.Secure.ACCESSIBILITY_DISPLAY_CONTRAST_ENABLED,
+ SystemSettingTile.TYPE_SECURE);
+ contrastTile.setFragment("Settings$AccessibilityContrastSettingsActivity");
+ mModel.addContrastTile(contrastTile, contrastTile.getRefreshCallback());
+ parent.addView(contrastTile);
+ mDynamicSpannedTiles.add(contrastTile);
+
+ // Color space adjustment tile
+ final SystemSettingTile colorSpaceTile = new SystemSettingTile(mContext);
+ colorSpaceTile.setUri(Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED,
+ SystemSettingTile.TYPE_SECURE);
+ colorSpaceTile.setFragment("Settings$AccessibilityDaltonizerSettingsActivity");
+ mModel.addColorSpaceTile(colorSpaceTile, colorSpaceTile.getRefreshCallback());
+ parent.addView(colorSpaceTile);
+ mDynamicSpannedTiles.add(colorSpaceTile);
+ }
}
private void addSystemTiles(ViewGroup parent, LayoutInflater inflater) {
@@ -933,4 +964,108 @@ class QuickSettings {
}
}
}
+
+ /**
+ * Quick Setting tile that represents a secure setting. This type of tile
+ * can toggle a URI within Settings.Secure on click and launch a Settings
+ * fragment on long-click.
+ */
+ public class SystemSettingTile extends QuickSettingsBasicTile {
+ private static final int TYPE_GLOBAL = 0;
+ private static final int TYPE_SECURE = 1;
+ private static final int TYPE_SYSTEM = 2;
+
+ private final QuickSettingsModel.BasicRefreshCallback mRefreshCallback;
+
+ private String mFragment;
+ private String mName;
+ private int mType;
+
+ public SystemSettingTile(Context context) {
+ super(context);
+
+ mRefreshCallback = new QuickSettingsModel.BasicRefreshCallback(this);
+ mRefreshCallback.setShowWhenEnabled(true);
+ }
+
+ @Override
+ public boolean performLongClick() {
+ if (mFragment != null) {
+ collapsePanels();
+
+ final Intent intent = new Intent();
+ intent.setComponent(new ComponentName(
+ "com.android.settings", "com.android.settings." + mFragment));
+ startSettingsActivity(intent);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean performClick() {
+ if (mName != null) {
+ collapsePanels();
+
+ final ContentResolver cr = mContext.getContentResolver();
+ switch (mType) {
+ case TYPE_GLOBAL: {
+ final boolean enable = Settings.Global.getInt(cr, mName, 0) == 0;
+ Settings.Global.putInt(cr, mName, enable ? 1 : 0);
+ } break;
+ case TYPE_SECURE: {
+ final boolean enable = Settings.Secure.getIntForUser(
+ cr, mName, 0, UserHandle.USER_CURRENT) == 0;
+ Settings.Secure.putIntForUser(
+ cr, mName, enable ? 1 : 0, UserHandle.USER_CURRENT);
+ } break;
+ case TYPE_SYSTEM: {
+ final boolean enable = Settings.System.getIntForUser(
+ cr, mName, 0, UserHandle.USER_CURRENT) == 0;
+ Settings.System.putIntForUser(
+ cr, mName, enable ? 1 : 0, UserHandle.USER_CURRENT);
+ } break;
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Specifies the fragment within the com.android.settings package to
+ * launch when this tile is long-clicked.
+ *
+ * @param fragment a fragment name within the com.android.settings
+ * package
+ */
+ public void setFragment(String fragment) {
+ mFragment = fragment;
+ setLongClickable(fragment != null);
+ }
+
+ /**
+ * Specifies the setting name and type to toggle when this tile is
+ * clicked.
+ *
+ * @param name a setting name
+ * @param type the type of setting, one of:
+ * <ul>
+ * <li>{@link #TYPE_GLOBAL}
+ * <li>{@link #TYPE_SECURE}
+ * <li>{@link #TYPE_SYSTEM}
+ * </ul>
+ */
+ public void setUri(String name, int type) {
+ mName = name;
+ mType = type;
+ setClickable(mName != null);
+ }
+
+ /**
+ * @return the refresh callback for this tile
+ */
+ public QuickSettingsModel.BasicRefreshCallback getRefreshCallback() {
+ return mRefreshCallback;
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java
index 9d0418d..b6a81b8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java
@@ -29,6 +29,7 @@ import android.database.ContentObserver;
import android.graphics.drawable.Drawable;
import android.hardware.display.WifiDisplayStatus;
import android.net.ConnectivityManager;
+import android.net.Uri;
import android.os.Handler;
import android.os.UserHandle;
import android.provider.Settings;
@@ -90,6 +91,19 @@ class QuickSettingsModel implements BluetoothStateChangeCallback,
static class BrightnessState extends State {
boolean autoBrightness;
}
+ static class InversionState extends State {
+ boolean toggled;
+ int type;
+ }
+ static class ContrastState extends State {
+ boolean toggled;
+ float contrast;
+ float brightness;
+ }
+ static class ColorSpaceState extends State {
+ boolean toggled;
+ int type;
+ }
public static class BluetoothState extends State {
boolean connected = false;
String stateContentDescription;
@@ -198,12 +212,96 @@ class QuickSettingsModel implements BluetoothStateChangeCallback,
}
}
+ /** ContentObserver to watch display inversion */
+ private class DisplayInversionObserver extends ContentObserver {
+ public DisplayInversionObserver(Handler handler) {
+ super(handler);
+ }
+
+ @Override
+ public void onChange(boolean selfChange) {
+ onInversionChanged();
+ }
+
+ public void startObserving() {
+ final ContentResolver cr = mContext.getContentResolver();
+ cr.unregisterContentObserver(this);
+ cr.registerContentObserver(Settings.Secure.getUriFor(
+ Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED),
+ false, this, mUserTracker.getCurrentUserId());
+ cr.registerContentObserver(Settings.Secure.getUriFor(
+ Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_QUICK_SETTING_ENABLED),
+ false, this, mUserTracker.getCurrentUserId());
+ cr.registerContentObserver(Settings.Secure.getUriFor(
+ Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION),
+ false, this, mUserTracker.getCurrentUserId());
+ }
+ }
+
+ /** ContentObserver to watch display contrast */
+ private class DisplayContrastObserver extends ContentObserver {
+ public DisplayContrastObserver(Handler handler) {
+ super(handler);
+ }
+
+ @Override
+ public void onChange(boolean selfChange) {
+ onContrastChanged();
+ }
+
+ public void startObserving() {
+ final ContentResolver cr = mContext.getContentResolver();
+ cr.unregisterContentObserver(this);
+ cr.registerContentObserver(Settings.Secure.getUriFor(
+ Settings.Secure.ACCESSIBILITY_DISPLAY_CONTRAST_ENABLED),
+ false, this, mUserTracker.getCurrentUserId());
+ cr.registerContentObserver(Settings.Secure.getUriFor(
+ Settings.Secure.ACCESSIBILITY_DISPLAY_CONTRAST_QUICK_SETTING_ENABLED),
+ false, this, mUserTracker.getCurrentUserId());
+ cr.registerContentObserver(Settings.Secure.getUriFor(
+ Settings.Secure.ACCESSIBILITY_DISPLAY_CONTRAST),
+ false, this, mUserTracker.getCurrentUserId());
+ cr.registerContentObserver(Settings.Secure.getUriFor(
+ Settings.Secure.ACCESSIBILITY_DISPLAY_BRIGHTNESS),
+ false, this, mUserTracker.getCurrentUserId());
+ }
+ }
+
+ /** ContentObserver to watch display color space adjustment */
+ private class DisplayColorSpaceObserver extends ContentObserver {
+ public DisplayColorSpaceObserver(Handler handler) {
+ super(handler);
+ }
+
+ @Override
+ public void onChange(boolean selfChange) {
+ onColorSpaceChanged();
+ }
+
+ public void startObserving() {
+ final ContentResolver cr = mContext.getContentResolver();
+ cr.unregisterContentObserver(this);
+ cr.registerContentObserver(Settings.Secure.getUriFor(
+ Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED),
+ false, this, mUserTracker.getCurrentUserId());
+ cr.registerContentObserver(Settings.Secure.getUriFor(
+ Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_QUICK_SETTING_ENABLED),
+ false, this, mUserTracker.getCurrentUserId());
+ cr.registerContentObserver(Settings.Secure.getUriFor(
+ Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER),
+ false, this, mUserTracker.getCurrentUserId());
+ }
+ }
+
private final Context mContext;
private final Handler mHandler;
private final CurrentUserTracker mUserTracker;
private final NextAlarmObserver mNextAlarmObserver;
private final BugreportObserver mBugreportObserver;
private final BrightnessObserver mBrightnessObserver;
+ private final DisplayInversionObserver mInversionObserver;
+ private final DisplayContrastObserver mContrastObserver;
+ private final DisplayColorSpaceObserver mColorSpaceObserver;
private final boolean mHasMobileData;
@@ -259,6 +357,18 @@ class QuickSettingsModel implements BluetoothStateChangeCallback,
private RefreshCallback mBrightnessCallback;
private BrightnessState mBrightnessState = new BrightnessState();
+ private QuickSettingsTileView mInversionTile;
+ private RefreshCallback mInversionCallback;
+ private InversionState mInversionState = new InversionState();
+
+ private QuickSettingsTileView mContrastTile;
+ private RefreshCallback mContrastCallback;
+ private ContrastState mContrastState = new ContrastState();
+
+ private QuickSettingsTileView mColorSpaceTile;
+ private RefreshCallback mColorSpaceCallback;
+ private ColorSpaceState mColorSpaceState = new ColorSpaceState();
+
private QuickSettingsTileView mBugreportTile;
private RefreshCallback mBugreportCallback;
private State mBugreportState = new State();
@@ -277,10 +387,17 @@ class QuickSettingsModel implements BluetoothStateChangeCallback,
mContext = context;
mHandler = new Handler();
mUserTracker = new CurrentUserTracker(mContext) {
+ @Override
public void onUserSwitched(int newUserId) {
mBrightnessObserver.startObserving();
+ mInversionObserver.startObserving();
+ mContrastObserver.startObserving();
+ mColorSpaceObserver.startObserving();
onRotationLockChanged();
onBrightnessLevelChanged();
+ onInversionChanged();
+ onContrastChanged();
+ onColorSpaceChanged();
onNextAlarmChanged();
onBugreportChanged();
}
@@ -292,6 +409,12 @@ class QuickSettingsModel implements BluetoothStateChangeCallback,
mBugreportObserver.startObserving();
mBrightnessObserver = new BrightnessObserver(mHandler);
mBrightnessObserver.startObserving();
+ mInversionObserver = new DisplayInversionObserver(mHandler);
+ mInversionObserver.startObserving();
+ mContrastObserver = new DisplayContrastObserver(mHandler);
+ mContrastObserver.startObserving();
+ mColorSpaceObserver = new DisplayColorSpaceObserver(mHandler);
+ mColorSpaceObserver.startObserving();
ConnectivityManager cm = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
@@ -762,6 +885,90 @@ class QuickSettingsModel implements BluetoothStateChangeCallback,
onBrightnessLevelChanged();
}
+ // Color inversion
+ void addInversionTile(QuickSettingsTileView view, RefreshCallback cb) {
+ mInversionTile = view;
+ mInversionCallback = cb;
+ onInversionChanged();
+ }
+ public void onInversionChanged() {
+ final Resources res = mContext.getResources();
+ final ContentResolver cr = mContext.getContentResolver();
+ final int currentUserId = mUserTracker.getCurrentUserId();
+ final boolean quickSettingEnabled = Settings.Secure.getIntForUser(
+ cr, Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_QUICK_SETTING_ENABLED, 0,
+ currentUserId) == 1;
+ final boolean enabled = Settings.Secure.getIntForUser(
+ cr, Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED, 0, currentUserId) == 1;
+ final int type = Settings.Secure.getIntForUser(
+ cr, Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION, 0, currentUserId);
+ mInversionState.enabled = quickSettingEnabled;
+ mInversionState.toggled = enabled;
+ mInversionState.type = type;
+ // TODO: Add real icon assets.
+ mInversionState.iconId = enabled ? R.drawable.ic_qs_bluetooth_on
+ : R.drawable.ic_qs_bluetooth_off;
+ mInversionState.label = res.getString(R.string.quick_settings_inversion_label);
+ mInversionCallback.refreshView(mInversionTile, mInversionState);
+ }
+
+ // Contrast enhancement
+ void addContrastTile(QuickSettingsTileView view, RefreshCallback cb) {
+ mContrastTile = view;
+ mContrastCallback = cb;
+ onContrastChanged();
+ }
+ public void onContrastChanged() {
+ final Resources res = mContext.getResources();
+ final ContentResolver cr = mContext.getContentResolver();
+ final int currentUserId = mUserTracker.getCurrentUserId();
+ final boolean quickSettingEnabled = Settings.Secure.getIntForUser(
+ cr, Settings.Secure.ACCESSIBILITY_DISPLAY_CONTRAST_QUICK_SETTING_ENABLED, 0,
+ currentUserId) == 1;
+ final boolean enabled = Settings.Secure.getIntForUser(
+ cr, Settings.Secure.ACCESSIBILITY_DISPLAY_CONTRAST_ENABLED, 0, currentUserId) == 1;
+ final float contrast = Settings.Secure.getFloatForUser(
+ cr, Settings.Secure.ACCESSIBILITY_DISPLAY_CONTRAST, 1, currentUserId);
+ final float brightness = Settings.Secure.getFloatForUser(
+ cr, Settings.Secure.ACCESSIBILITY_DISPLAY_BRIGHTNESS, 0, currentUserId);
+ mContrastState.enabled = quickSettingEnabled;
+ mContrastState.toggled = enabled;
+ mContrastState.contrast = contrast;
+ mContrastState.brightness = brightness;
+ // TODO: Add real icon assets.
+ mContrastState.iconId = enabled ? R.drawable.ic_qs_bluetooth_on
+ : R.drawable.ic_qs_bluetooth_off;
+ mContrastState.label = res.getString(R.string.quick_settings_contrast_label);
+ mContrastCallback.refreshView(mContrastTile, mContrastState);
+ }
+
+ // Color space adjustment
+ void addColorSpaceTile(QuickSettingsTileView view, RefreshCallback cb) {
+ mColorSpaceTile = view;
+ mColorSpaceCallback = cb;
+ onColorSpaceChanged();
+ }
+ public void onColorSpaceChanged() {
+ final Resources res = mContext.getResources();
+ final ContentResolver cr = mContext.getContentResolver();
+ final int currentUserId = mUserTracker.getCurrentUserId();
+ final boolean quickSettingEnabled = Settings.Secure.getIntForUser(
+ cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_QUICK_SETTING_ENABLED, 0,
+ currentUserId) == 1;
+ final boolean enabled = Settings.Secure.getIntForUser(cr,
+ Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, 0, currentUserId) == 1;
+ final int type = Settings.Secure.getIntForUser(
+ cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER, 0, currentUserId);
+ mColorSpaceState.enabled = quickSettingEnabled;
+ mColorSpaceState.toggled = enabled;
+ mColorSpaceState.type = type;
+ // TODO: Add real icon assets.
+ mColorSpaceState.iconId = enabled ? R.drawable.ic_qs_bluetooth_on
+ : R.drawable.ic_qs_bluetooth_off;
+ mColorSpaceState.label = res.getString(R.string.quick_settings_color_space_label);
+ mColorSpaceCallback.refreshView(mColorSpaceTile, mColorSpaceState);
+ }
+
// SSL CA Cert warning.
public void addSslCaCertWarningTile(QuickSettingsTileView view, RefreshCallback cb) {
mSslCaCertWarningTile = view;