diff options
Diffstat (limited to 'packages/SystemUI')
35 files changed, 905 insertions, 412 deletions
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index 158e133..7a58c87 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -106,6 +106,9 @@ <uses-permission android:name="android.permission.TRUST_LISTENER" /> <uses-permission android:name="android.permission.USE_FINGERPRINT" /> + <!-- Needed for WallpaperManager.clear in ImageWallpaper.updateWallpaperLocked --> + <uses-permission android:name="android.permission.SET_WALLPAPER"/> + <!-- Recents --> <uses-permission android:name="android.permission.BIND_APPWIDGET" /> diff --git a/packages/SystemUI/res/drawable/vector_drawable_place_bottom.xml b/packages/SystemUI/res/drawable/vector_drawable_place_bottom.xml new file mode 100644 index 0000000..14f1981 --- /dev/null +++ b/packages/SystemUI/res/drawable/vector_drawable_place_bottom.xml @@ -0,0 +1,24 @@ +<!-- +Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24.0dp" + android:height="24.0dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#FF000000" + android:pathData="M0.0,0.0l0.0,24.0l24.0,0.0L24.0,0.0L0.0,0.0zM4.0,10.0l16.0,0.0l0.0,10.0L4.0,20.0L4.0,10.0z"/> +</vector> diff --git a/packages/SystemUI/res/drawable/vector_drawable_place_fullscreen.xml b/packages/SystemUI/res/drawable/vector_drawable_place_fullscreen.xml new file mode 100644 index 0000000..aee0b7f --- /dev/null +++ b/packages/SystemUI/res/drawable/vector_drawable_place_fullscreen.xml @@ -0,0 +1,33 @@ +<!-- +Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24.0dp" + android:height="24.0dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#FF000000" + android:pathData="M0.0,8.0l4.0,0.0 0.0,-4.0 4.0,0.0 0.0,-4.0 -8.0,0.0z"/> + <path + android:fillColor="#FF000000" + android:pathData="M4.0,16.0l-4.0,0.0 0.0,8.0 8.0,0.0 0.0,-4.0 -4.0,0.0z"/> + <path + android:fillColor="#FF000000" + android:pathData="M16.0,0.0l0.0,4.0 4.0,0.0 0.0,4.0 4.0,0.0 0.0,-8.0z"/> + <path + android:fillColor="#FF000000" + android:pathData="M20.0,20.0l-4.0,0.0 0.0,4.0 8.0,0.0 0.0,-8.0 -4.0,0.0z"/> +</vector> diff --git a/packages/SystemUI/res/drawable/vector_drawable_place_left.xml b/packages/SystemUI/res/drawable/vector_drawable_place_left.xml new file mode 100644 index 0000000..078f83c --- /dev/null +++ b/packages/SystemUI/res/drawable/vector_drawable_place_left.xml @@ -0,0 +1,24 @@ +<!-- +Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24.0dp" + android:height="24.0dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#FF000000" + android:pathData="M24.0,0.0L0.0,0.0l0.0,24.0l24.0,0.0L24.0,0.0zM14.0,4.0l0.0,16.0L4.0,20.0L4.0,4.0L14.0,4.0z"/> +</vector> diff --git a/packages/SystemUI/res/drawable/vector_drawable_place_right.xml b/packages/SystemUI/res/drawable/vector_drawable_place_right.xml new file mode 100644 index 0000000..86730db --- /dev/null +++ b/packages/SystemUI/res/drawable/vector_drawable_place_right.xml @@ -0,0 +1,24 @@ +<!-- +Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24.0dp" + android:height="24.0dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#FF000000" + android:pathData="M0.0,24.0l24.0,0.0L24.0,0.0L0.0,0.0L0.0,24.0zM10.0,20.0L10.0,4.0l10.0,0.0l0.0,16.0L10.0,20.0z"/> +</vector> diff --git a/packages/SystemUI/res/drawable/vector_drawable_place_top.xml b/packages/SystemUI/res/drawable/vector_drawable_place_top.xml new file mode 100644 index 0000000..92e01af --- /dev/null +++ b/packages/SystemUI/res/drawable/vector_drawable_place_top.xml @@ -0,0 +1,24 @@ +<!-- +Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24.0dp" + android:height="24.0dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#FF000000" + android:pathData="M24.0,24.0L24.0,0.0L0.0,0.0l0.0,24.0L24.0,24.0zM20.0,14.0L4.0,14.0L4.0,4.0l16.0,0.0L20.0,14.0z"/> +</vector> diff --git a/packages/SystemUI/res/layout/recents_multistack_stack_size_dialog.xml b/packages/SystemUI/res/layout/recents_multistack_stack_size_dialog.xml deleted file mode 100644 index 36e54a0..0000000 --- a/packages/SystemUI/res/layout/recents_multistack_stack_size_dialog.xml +++ /dev/null @@ -1,70 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2015 The Android Open Source Project - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> - -<LinearLayout - xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:padding="16dp" - android:orientation="vertical" - android:descendantFocusability="beforeDescendants" - android:focusableInTouchMode="true"> - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="horizontal"> - <EditText - android:id="@+id/inset_left" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:layout_weight="1" - android:hint="Left" - android:singleLine="true" - android:imeOptions="actionNext" - android:inputType="number" - android:selectAllOnFocus="true" /> - <EditText - android:id="@+id/inset_top" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:layout_weight="1" - android:hint="Top" - android:singleLine="true" - android:imeOptions="actionNext" - android:inputType="number" - android:selectAllOnFocus="true" /> - <EditText - android:id="@+id/inset_right" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:layout_weight="1" - android:hint="Right" - android:singleLine="true" - android:imeOptions="actionNext" - android:inputType="number" - android:selectAllOnFocus="true" /> - <EditText - android:id="@+id/inset_bottom" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:layout_weight="1" - android:hint="Bottom" - android:singleLine="true" - android:imeOptions="actionDone" - android:inputType="number" - android:selectAllOnFocus="true" /> - </LinearLayout> -</LinearLayout>
\ No newline at end of file diff --git a/packages/SystemUI/res/layout/recents_task_resize_dialog.xml b/packages/SystemUI/res/layout/recents_task_resize_dialog.xml new file mode 100644 index 0000000..a8c6ee9 --- /dev/null +++ b/packages/SystemUI/res/layout/recents_task_resize_dialog.xml @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:padding="16dp" + android:orientation="vertical" + android:descendantFocusability="beforeDescendants" + android:focusableInTouchMode="true"> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal"> + <Button + android:id="@+id/place_left" + android:layout_width="36dp" + android:layout_height="36dp" + android:layout_weight="1" + android:layout_margin="10dp" + android:background="@drawable/vector_drawable_place_left" /> + <Button + android:id="@+id/place_right" + android:layout_width="36dp" + android:layout_height="36dp" + android:layout_weight="1" + android:layout_margin="10dp" + android:background="@drawable/vector_drawable_place_right" /> + <Button + android:id="@+id/place_top" + android:layout_width="36dp" + android:layout_height="36dp" + android:layout_weight="1" + android:layout_margin="10dp" + android:background="@drawable/vector_drawable_place_top" /> + <Button + android:id="@+id/place_bottom" + android:layout_width="36dp" + android:layout_height="36dp" + android:layout_weight="1" + android:layout_margin="10dp" + android:background="@drawable/vector_drawable_place_bottom" /> + <Button + android:id="@+id/place_full" + android:layout_width="36dp" + android:layout_height="36dp" + android:layout_weight="1" + android:layout_margin="10dp" + android:background="@drawable/vector_drawable_place_fullscreen" /> + </LinearLayout> +</LinearLayout>
\ No newline at end of file diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index 34e4beb..d234701 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -257,8 +257,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Geen netwerk nie"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi af"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Geen gestoorde netwerke beskikbaar nie"</string> - <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> - <skip /> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"Saai uit"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"Saai tans uit"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Onbenoemde toestel"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Gereed om uit te saai"</string> diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index 104067a..2bcb2c1 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -261,8 +261,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"لا تتوفر شبكة"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"إيقاف Wi-Fi"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"لا تتوفر أية شبكة محفوظة"</string> - <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> - <skip /> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"إرسال"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"جارٍ الإرسال"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"جهاز لا يحمل اسمًا"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"جاهز للإرسال"</string> diff --git a/packages/SystemUI/res/values-en-rAU-land/strings.xml b/packages/SystemUI/res/values-en-rAU-land/strings.xml new file mode 100644 index 0000000..ba773b8 --- /dev/null +++ b/packages/SystemUI/res/values-en-rAU-land/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/** + * Copyright (c) 2010, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="toast_rotation_locked" msgid="7609673011431556092">"Screen is now locked in landscape orientation."</string> +</resources> diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml new file mode 100644 index 0000000..ee3f826 --- /dev/null +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -0,0 +1,383 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/** + * Copyright (c) 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. + */ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_label" msgid="7164937344850004466">"System UI"</string> + <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Clear"</string> + <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Remove from list"</string> + <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"App info"</string> + <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Your recent screens appear here"</string> + <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Dismiss recent apps"</string> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d screens in Overview</item> + <item quantity="one">1 screen in Overview</item> + </plurals> + <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"No notifications"</string> + <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Ongoing"</string> + <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifications"</string> + <string name="battery_low_title" msgid="6456385927409742437">"Battery is low"</string> + <string name="battery_low_percent_format" msgid="2900940511201380775">"<xliff:g id="PERCENTAGE">%s</xliff:g> remaining"</string> + <string name="battery_low_percent_format_saver_started" msgid="6859235584035338833">"<xliff:g id="PERCENTAGE">%s</xliff:g> remaining. Battery saver is on."</string> + <string name="invalid_charger" msgid="4549105996740522523">"USB charging not supported.\nUse only the supplied charger."</string> + <string name="invalid_charger_title" msgid="3515740382572798460">"USB charging not supported."</string> + <string name="invalid_charger_text" msgid="5474997287953892710">"Use only the supplied charger."</string> + <string name="battery_low_why" msgid="4553600287639198111">"Settings"</string> + <string name="battery_saver_confirmation_title" msgid="5299585433050361634">"Turn on battery saver?"</string> + <string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Turn on"</string> + <string name="battery_saver_start_action" msgid="5576697451677486320">"Turn on battery saver"</string> + <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Settings"</string> + <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string> + <string name="status_bar_settings_airplane" msgid="4879879698500955300">"Aeroplane mode"</string> + <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Auto-rotate screen"</string> + <string name="status_bar_settings_mute_label" msgid="554682549917429396">"MUTE"</string> + <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string> + <string name="status_bar_settings_notifications" msgid="397146176280905137">"Notifications"</string> + <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth tethered"</string> + <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Set up input methods"</string> + <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Physical keyboard"</string> + <string name="usb_device_permission_prompt" msgid="834698001271562057">"Allow the app <xliff:g id="APPLICATION">%1$s</xliff:g> to access the USB device?"</string> + <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Allow the app <xliff:g id="APPLICATION">%1$s</xliff:g> to access the USB accessory?"</string> + <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Open <xliff:g id="ACTIVITY">%1$s</xliff:g> when this USB device is connected?"</string> + <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Open <xliff:g id="ACTIVITY">%1$s</xliff:g> when this USB accessory is connected?"</string> + <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"No installed apps work with this USB accessory. Learn more about this accessory at <xliff:g id="URL">%1$s</xliff:g>"</string> + <string name="title_usb_accessory" msgid="4966265263465181372">"USB accessory"</string> + <string name="label_view" msgid="6304565553218192990">"View"</string> + <string name="always_use_device" msgid="1450287437017315906">"Use by default for this USB device"</string> + <string name="always_use_accessory" msgid="1210954576979621596">"Use by default for this USB accessory"</string> + <string name="usb_debugging_title" msgid="4513918393387141949">"Allow USB debugging?"</string> + <string name="usb_debugging_message" msgid="2220143855912376496">"The computer\'s RSA key fingerprint is:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> + <string name="usb_debugging_always" msgid="303335496705863070">"Always allow from this computer"</string> + <string name="compat_mode_on" msgid="6623839244840638213">"Zoom to fill screen"</string> + <string name="compat_mode_off" msgid="4434467572461327898">"Stretch to fill screen"</string> + <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Saving screenshot…"</string> + <string name="screenshot_saving_title" msgid="8242282144535555697">"Saving screenshot…"</string> + <string name="screenshot_saving_text" msgid="2419718443411738818">"Screenshot is being saved."</string> + <string name="screenshot_saved_title" msgid="6461865960961414961">"Screenshot captured."</string> + <string name="screenshot_saved_text" msgid="1152839647677558815">"Touch to view your screenshot."</string> + <string name="screenshot_failed_title" msgid="705781116746922771">"Couldn\'t capture screenshot."</string> + <string name="screenshot_failed_text" msgid="1260203058661337274">"Can\'t take screenshot due to limited storage space, or it isn\'t allowed by the app or your organisation."</string> + <string name="usb_preference_title" msgid="6551050377388882787">"USB file transfer options"</string> + <string name="use_mtp_button_title" msgid="4333504413563023626">"Mount as a media player (MTP)"</string> + <string name="use_ptp_button_title" msgid="7517127540301625751">"Mount as a camera (PTP)"</string> + <string name="installer_cd_button_title" msgid="2312667578562201583">"Install Android File Transfer application for Mac"</string> + <string name="accessibility_back" msgid="567011538994429120">"Back"</string> + <string name="accessibility_home" msgid="8217216074895377641">"Home"</string> + <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string> + <string name="accessibility_recent" msgid="5208608566793607626">"Overview"</string> + <string name="accessibility_search_light" msgid="1103867596330271848">"Search"</string> + <string name="accessibility_camera_button" msgid="8064671582820358152">"Camera"</string> + <string name="accessibility_phone_button" msgid="6738112589538563574">"Phone"</string> + <string name="accessibility_unlock_button" msgid="128158454631118828">"Unlock"</string> + <string name="unlock_label" msgid="8779712358041029439">"unlock"</string> + <string name="phone_label" msgid="2320074140205331708">"open phone"</string> + <string name="camera_label" msgid="7261107956054836961">"open camera"</string> + <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Compatibility zoom button."</string> + <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom smaller to larger screen."</string> + <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth connected."</string> + <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth disconnected."</string> + <string name="accessibility_no_battery" msgid="358343022352820946">"No battery."</string> + <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Battery one bar."</string> + <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Battery two bars."</string> + <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Battery three bars."</string> + <string name="accessibility_battery_full" msgid="8909122401720158582">"Battery full."</string> + <string name="accessibility_no_phone" msgid="4894708937052611281">"No phone."</string> + <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Phone one bar."</string> + <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Phone two bars."</string> + <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Phone three bars."</string> + <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Phone signal full."</string> + <string name="accessibility_no_data" msgid="4791966295096867555">"No data."</string> + <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Data one bar."</string> + <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Data two bars."</string> + <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Data three bars."</string> + <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Data signal full."</string> + <string name="accessibility_wifi_off" msgid="3177380296697933627">"Wi-Fi off."</string> + <string name="accessibility_no_wifi" msgid="1425476551827924474">"Wi-Fi disconnected."</string> + <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"Wi-Fi one bar."</string> + <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"Wi-Fi two bars."</string> + <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"Wi-Fi three bars."</string> + <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"Wi-Fi signal full."</string> + <string name="accessibility_wifi_name" msgid="7202151365171148501">"Connected to <xliff:g id="WIFI">%s</xliff:g>."</string> + <string name="accessibility_bluetooth_name" msgid="8441517146585531676">"Connected to <xliff:g id="BLUETOOTH">%s</xliff:g>."</string> + <string name="accessibility_no_wimax" msgid="4329180129727630368">"No WiMAX."</string> + <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"WiMAX one bar."</string> + <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX two bars."</string> + <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX three bars."</string> + <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX signal full."</string> + <string name="accessibility_no_signal" msgid="7064645320782585167">"No signal."</string> + <string name="accessibility_not_connected" msgid="6395326276213402883">"Not connected."</string> + <string name="accessibility_zero_bars" msgid="3806060224467027887">"Zero bars."</string> + <string name="accessibility_one_bar" msgid="1685730113192081895">"One bar."</string> + <string name="accessibility_two_bars" msgid="6437363648385206679">"Two bars."</string> + <string name="accessibility_three_bars" msgid="2648241415119396648">"Three bars."</string> + <string name="accessibility_signal_full" msgid="9122922886519676839">"Signal full."</string> + <string name="accessibility_desc_on" msgid="2385254693624345265">"On."</string> + <string name="accessibility_desc_off" msgid="6475508157786853157">"Off."</string> + <string name="accessibility_desc_connected" msgid="8366256693719499665">"Connected."</string> + <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Connecting."</string> + <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string> + <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string> + <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string> + <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string> + <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string> + <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> + <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> + <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> + <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> + <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string> + <string name="accessibility_no_sim" msgid="8274017118472455155">"No SIM."</string> + <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth tethering"</string> + <string name="accessibility_airplane_mode" msgid="834748999790763092">"Aeroplane mode"</string> + <string name="accessibility_battery_level" msgid="7451474187113371965">"Battery <xliff:g id="NUMBER">%d</xliff:g> per cent."</string> + <string name="accessibility_settings_button" msgid="799583911231893380">"System settings"</string> + <string name="accessibility_notifications_button" msgid="4498000369779421892">"Notifications."</string> + <string name="accessibility_remove_notification" msgid="3603099514902182350">"Clear notification."</string> + <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS enabled."</string> + <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS acquiring."</string> + <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter enabled."</string> + <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Ringer vibrate."</string> + <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Ringer silent."</string> + <!-- no translation found for accessibility_casting (6887382141726543668) --> + <skip /> + <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Dismiss <xliff:g id="APP">%s</xliff:g>."</string> + <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> dismissed."</string> + <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"All recent applications dismissed."</string> + <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Starting <xliff:g id="APP">%s</xliff:g>."</string> + <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notification dismissed."</string> + <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Notification shade."</string> + <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Quick settings."</string> + <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Lock screen."</string> + <string name="accessibility_desc_settings" msgid="3417884241751434521">"Settings"</string> + <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Overview."</string> + <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"User <xliff:g id="USER">%s</xliff:g>."</string> + <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string> + <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi turned off."</string> + <string name="accessibility_quick_settings_wifi_changed_on" msgid="6440117170789528622">"Wi-Fi turned on."</string> + <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"Mobile <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string> + <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Battery <xliff:g id="STATE">%s</xliff:g>."</string> + <string name="accessibility_quick_settings_airplane_off" msgid="7786329360056634412">"Aeroplane mode off."</string> + <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Aeroplane mode on."</string> + <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Aeroplane mode turned off."</string> + <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Aeroplane mode turned on."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\'Do not disturb\' on, priority only."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"\'Do not disturb\' on, no interruptions."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\'Do not disturb\' off."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\'Do not disturb\' turned off."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"\'Do not disturb\' turned on."</string> + <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth off."</string> + <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth on."</string> + <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth connecting."</string> + <string name="accessibility_quick_settings_bluetooth_connected" msgid="4306637793614573659">"Bluetooth connected."</string> + <string name="accessibility_quick_settings_bluetooth_changed_off" msgid="2730003763480934529">"Bluetooth turned off."</string> + <string name="accessibility_quick_settings_bluetooth_changed_on" msgid="8722351798763206577">"Bluetooth turned on."</string> + <string name="accessibility_quick_settings_location_off" msgid="5119080556976115520">"Location reporting off."</string> + <string name="accessibility_quick_settings_location_on" msgid="5809937096590102036">"Location reporting on."</string> + <string name="accessibility_quick_settings_location_changed_off" msgid="8526845571503387376">"Location reporting turned off."</string> + <string name="accessibility_quick_settings_location_changed_on" msgid="339403053079338468">"Location reporting turned on."</string> + <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarm set for <xliff:g id="TIME">%s</xliff:g>."</string> + <string name="accessibility_quick_settings_close" msgid="3115847794692516306">"Close panel."</string> + <string name="accessibility_quick_settings_more_time" msgid="3659274935356197708">"More time."</string> + <string name="accessibility_quick_settings_less_time" msgid="2404728746293515623">"Less time."</string> + <string name="accessibility_quick_settings_flashlight_off" msgid="4936432000069786988">"Torch off."</string> + <string name="accessibility_quick_settings_flashlight_on" msgid="2003479320007841077">"Torch on."</string> + <string name="accessibility_quick_settings_flashlight_changed_off" msgid="3303701786768224304">"Torch turned off."</string> + <string name="accessibility_quick_settings_flashlight_changed_on" msgid="6531793301533894686">"Torch turned on."</string> + <string name="accessibility_quick_settings_color_inversion_changed_off" msgid="4406577213290173911">"Colour inversion turned off."</string> + <string name="accessibility_quick_settings_color_inversion_changed_on" msgid="6897462320184911126">"Colour inversion turned on."</string> + <string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mobile hotspot turned off."</string> + <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobile hotspot turned on."</string> + <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Screen casting stopped."</string> + <string name="accessibility_brightness" msgid="8003681285547803095">"Display brightness"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G data is paused"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G data is paused"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Mobile data is paused"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Data is paused"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Because your set data limit was reached, the device has paused data usage for the remainder of this cycle.\n\nResuming may lead to charges from your operator."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Resume"</string> + <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"No Internet connection"</string> + <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi connected"</string> + <string name="gps_notification_searching_text" msgid="8574247005642736060">"Searching for GPS"</string> + <string name="gps_notification_found_text" msgid="4619274244146446464">"Location set by GPS"</string> + <string name="accessibility_location_active" msgid="2427290146138169014">"Location requests active"</string> + <string name="accessibility_clear_all" msgid="5235938559247164925">"Clear all notifications."</string> + <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"Notification settings"</string> + <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> settings"</string> + <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Screen will rotate automatically."</string> + <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Screen is locked in landscape orientation."</string> + <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Screen is locked in portrait orientation."</string> + <string name="accessibility_rotation_lock_off_changed" msgid="8134601071026305153">"Screen will now rotate automatically."</string> + <string name="accessibility_rotation_lock_on_landscape_changed" msgid="3135965553707519743">"Screen is now locked in landscape orientation."</string> + <string name="accessibility_rotation_lock_on_portrait_changed" msgid="8922481981834012126">"Screen is now locked in portrait orientation."</string> + <string name="dessert_case" msgid="1295161776223959221">"Dessert Case"</string> + <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string> + <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> + <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Aeroplane mode"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Do not disturb"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Priority only"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"No interruptions"</string> + <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> + <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Devices)"</string> + <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Off"</string> + <string name="quick_settings_bluetooth_detail_empty_text" msgid="4910015762433302860">"No paired devices available"</string> + <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brightness"</string> + <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Auto-rotate"</string> + <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Rotation locked"</string> + <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Portrait"</string> + <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Landscape"</string> + <string name="quick_settings_ime_label" msgid="7073463064369468429">"Input Method"</string> + <string name="quick_settings_location_label" msgid="5011327048748762257">"Location"</string> + <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Location Off"</string> + <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Media device"</string> + <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string> + <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Emergency Calls Only"</string> + <string name="quick_settings_settings_label" msgid="5326556592578065401">"Settings"</string> + <string name="quick_settings_time_label" msgid="4635969182239736408">"Time"</string> + <string name="quick_settings_user_label" msgid="5238995632130897840">"Me"</string> + <string name="quick_settings_user_title" msgid="4467690427642392403">"User"</string> + <string name="quick_settings_user_new_user" msgid="9030521362023479778">"New user"</string> + <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string> + <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Not Connected"</string> + <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No Network"</string> + <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Off"</string> + <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"No saved networks available"</string> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"Cast"</string> + <string name="quick_settings_casting" msgid="6601710681033353316">"Casting"</string> + <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Unnamed device"</string> + <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Ready to cast"</string> + <string name="quick_settings_cast_detail_empty_text" msgid="311785821261640623">"No devices available"</string> + <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brightness"</string> + <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string> + <string name="quick_settings_inversion_label" msgid="8790919884718619648">"Invert colours"</string> + <string name="quick_settings_color_space_label" msgid="853443689745584770">"Colour correction mode"</string> + <string name="quick_settings_more_settings" msgid="326112621462813682">"More settings"</string> + <string name="quick_settings_done" msgid="3402999958839153376">"Done"</string> + <string name="quick_settings_connected" msgid="1722253542984847487">"Connected"</string> + <string name="quick_settings_connecting" msgid="47623027419264404">"Connecting..."</string> + <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Tethering"</string> + <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string> + <string name="quick_settings_notifications_label" msgid="4818156442169154523">"Notifications"</string> + <string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Torch"</string> + <string name="quick_settings_cellular_detail_title" msgid="8575062783675171695">"Mobile data"</string> + <string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Data usage"</string> + <string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"Remaining data"</string> + <string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"Over limit"</string> + <string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> used"</string> + <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> limit"</string> + <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> warning"</string> + <string name="recents_empty_message" msgid="8682129509540827999">"Your recent screens appear here"</string> + <string name="recents_app_info_button_label" msgid="2890317189376000030">"Application Info"</string> + <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"screen pinning"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"search"</string> + <string name="recents_launch_error_message" msgid="2969287838120550506">"Could not start <xliff:g id="APP">%s</xliff:g>."</string> + <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Dismiss all applications"</string> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Split Horizontal"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Split Vertical"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Split Customised"</string> + <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Charged"</string> + <string name="expanded_header_battery_charging" msgid="205623198487189724">"Charging"</string> + <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> until full"</string> + <string name="expanded_header_battery_not_charging" msgid="4798147152367049732">"Not charging"</string> + <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Network may\nbe monitored"</string> + <string name="description_target_search" msgid="3091587249776033139">"Search"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Slide up for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Slide left for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"No interruptions. Not even alarms."</string> + <string name="zen_no_interruptions" msgid="7970973750143632592">"No interruptions"</string> + <string name="zen_important_interruptions" msgid="3477041776609757628">"Priority interruptions only"</string> + <string name="zen_alarm_information_time" msgid="5235772206174372272">"Your next alarm is at <xliff:g id="ALARM_TIME">%s</xliff:g>"</string> + <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Your next alarm is <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string> + <string name="zen_alarm_warning" msgid="6873910860111498041">"You won\'t hear your alarm at <xliff:g id="ALARM_TIME">%s</xliff:g>"</string> + <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string> + <string name="speed_bump_explanation" msgid="1288875699658819755">"Less urgent notifications below"</string> + <string name="notification_tap_again" msgid="8524949573675922138">"Touch again to open"</string> + <string name="keyguard_unlock" msgid="8043466894212841998">"Swipe up to unlock"</string> + <string name="phone_hint" msgid="3101468054914424646">"Swipe right for phone"</string> + <string name="camera_hint" msgid="5241441720959174226">"Swipe left for camera"</string> + <string name="interruption_level_none" msgid="3831278883136066646">"None"</string> + <string name="interruption_level_priority" msgid="6517366750688942030">"Priority"</string> + <string name="interruption_level_all" msgid="1330581184930945764">"All"</string> + <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Charging (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> until full)"</string> + <string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"Switch user"</string> + <string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Switch user, current user <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string> + <string name="accessibility_multi_user_switch_quick_contact" msgid="3020367729287990475">"Show profile"</string> + <string name="user_add_user" msgid="5110251524486079492">"Add user"</string> + <string name="user_new_user_name" msgid="426540612051178753">"New user"</string> + <string name="guest_nickname" msgid="8059989128963789678">"Guest"</string> + <string name="guest_new_guest" msgid="600537543078847803">"Add guest"</string> + <string name="guest_exit_guest" msgid="7187359342030096885">"Remove guest"</string> + <string name="guest_exit_guest_dialog_title" msgid="8480693520521766688">"Remove guest?"</string> + <string name="guest_exit_guest_dialog_message" msgid="4155503224769676625">"All apps and data in this session will be deleted."</string> + <string name="guest_exit_guest_dialog_remove" msgid="7402231963862520531">"Remove"</string> + <string name="guest_wipe_session_title" msgid="6419439912885956132">"Welcome back, guest!"</string> + <string name="guest_wipe_session_message" msgid="8476238178270112811">"Do you want to continue your session?"</string> + <string name="guest_wipe_session_wipe" msgid="5065558566939858884">"Start again"</string> + <string name="guest_wipe_session_dontwipe" msgid="1401113462524894716">"Yes, continue"</string> + <string name="user_add_user_title" msgid="4553596395824132638">"Add new user?"</string> + <string name="user_add_user_message_short" msgid="2161624834066214559">"When you add a new user, that person needs to set up their space.\n\nAny user can update apps for all other users."</string> + <string name="battery_saver_notification_title" msgid="237918726750955859">"Battery saver is on"</string> + <string name="battery_saver_notification_text" msgid="820318788126672692">"Reduces performance and background data"</string> + <string name="battery_saver_notification_action_text" msgid="109158658238110382">"Turn off battery saver"</string> + <string name="notification_hidden_text" msgid="1135169301897151909">"Contents hidden"</string> + <string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> will start capturing everything that\'s displayed on your screen."</string> + <string name="media_projection_remember_text" msgid="3103510882172746752">"Don\'t show again"</string> + <string name="clear_all_notifications_text" msgid="814192889771462828">"Clear all"</string> + <string name="media_projection_action_text" msgid="8470872969457985954">"Start now"</string> + <string name="empty_shade_text" msgid="708135716272867002">"No notifications"</string> + <string name="device_owned_footer" msgid="3802752663326030053">"Device may be monitored"</string> + <string name="profile_owned_footer" msgid="8021888108553696069">"Profile may be monitored"</string> + <string name="vpn_footer" msgid="2388611096129106812">"Network may be monitored"</string> + <string name="monitoring_title_device_owned" msgid="7121079311903859610">"Device monitoring"</string> + <string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profile monitoring"</string> + <string name="monitoring_title" msgid="169206259253048106">"Network monitoring"</string> + <string name="disable_vpn" msgid="4435534311510272506">"Disable VPN"</string> + <string name="disconnect_vpn" msgid="1324915059568548655">"Disconnect VPN"</string> + <string name="monitoring_description_device_owned" msgid="7512371572956715493">"This device is managed by:\n<xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nYour administrator can monitor your device and network activity, including emails, apps and secure websites.\n\nFor more information, contact your administrator."</string> + <string name="monitoring_description_vpn" msgid="7288268682714305659">"You gave \"<xliff:g id="APPLICATION">%1$s</xliff:g>\" permission to set up a VPN connection.\n\nThis app can monitor your device and network activity, including emails, apps and secure websites."</string> + <string name="monitoring_description_legacy_vpn" msgid="4740349017929725435">"You\'re connected to a VPN (\"<xliff:g id="APPLICATION">%1$s</xliff:g>\").\n\nYour VPN service provider can monitor your device and network activity including emails, apps and secure websites."</string> + <string name="monitoring_description_vpn_device_owned" msgid="696121105616356493">"This device is managed by:\n<xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nYour administrator is capable of monitoring your network activity including emails, apps and secure websites. For more information, contact your administrator.\n\nAlso, you gave \"<xliff:g id="APPLICATION">%2$s</xliff:g>\" permission to set up a VPN connection. This app can monitor network activity too."</string> + <string name="monitoring_description_legacy_vpn_device_owned" msgid="649791650224064248">"This device is managed by:\n<xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nYour administrator is capable of monitoring your network activity including emails, apps and secure websites. For more information, contact your administrator.\n\nAlso, you\'re connected to a VPN (\"<xliff:g id="APPLICATION">%2$s</xliff:g>\"). Your VPN service provider can monitor network activity too."</string> + <string name="monitoring_description_profile_owned" msgid="2370062794285691713">"This profile is managed by:\n<xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nYour administrator can monitor your device and network activity, including emails, apps and secure websites.\n\nFor more information, contact your administrator."</string> + <string name="monitoring_description_device_and_profile_owned" msgid="8685301493845456293">"This device is managed by:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>\nYour profile is managed by:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>\n\nYour administrator can monitor your device and network activity, including emails, apps and secure websites.\n\nFor more information, contact your administrator."</string> + <string name="monitoring_description_vpn_profile_owned" msgid="847491346263295767">"This profile is managed by:\n<xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nYour administrator is capable of monitoring your network activity including emails, apps and secure websites. For more information, contact your administrator.\n\nAlso, you gave \"<xliff:g id="APPLICATION">%2$s</xliff:g>\" permission to set up a VPN connection. This app can monitor network activity too."</string> + <string name="monitoring_description_legacy_vpn_profile_owned" msgid="4095516964132237051">"This profile is managed by:\n<xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nYour administrator is capable of monitoring your network activity including emails, apps and secure websites. For more information, contact your administrator.\n\nAlso, you\'re connected to a VPN (\"<xliff:g id="APPLICATION">%2$s</xliff:g>\"). Your VPN service provider can monitor network activity too."</string> + <string name="monitoring_description_vpn_device_and_profile_owned" msgid="9193588924767232909">"This device is managed by:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>\nYour profile is managed by:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>\n\nYour administrator is capable of monitoring your network activity including emails, apps and secure websites. For more information, contact your administrator.\n\nAlso, you gave \"<xliff:g id="APPLICATION">%3$s</xliff:g>\" permission to set up a VPN connection. This app can monitor network activity too."</string> + <string name="monitoring_description_legacy_vpn_device_and_profile_owned" msgid="6935475023447698473">"This device is managed by:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>\nYour profile is managed by:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>\n\nYour administrator is capable of monitoring your network activity including emails, apps and secure websites. For more information, contact your administrator.\n\nAlso, you\'re connected to a VPN (\"<xliff:g id="APPLICATION">%3$s</xliff:g>\"). Your VPN service provider can monitor network activity too."</string> + <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Device will stay locked until you manually unlock"</string> + <string name="hidden_notifications_title" msgid="7139628534207443290">"Get notifications faster"</string> + <string name="hidden_notifications_text" msgid="2326409389088668981">"See them before you unlock"</string> + <string name="hidden_notifications_cancel" msgid="3690709735122344913">"No, thanks"</string> + <string name="hidden_notifications_setup" msgid="41079514801976810">"Setup"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"See all"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Hide all"</string> + <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> + <string name="screen_pinning_title" msgid="3273740381976175811">"Screen is pinned"</string> + <string name="screen_pinning_description" msgid="1346522416878235405">"This keeps it in view until you unpin. Touch and hold Back and Overview at the same time to unpin."</string> + <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"This keeps it in view until you unpin. Touch and hold Overview to unpin."</string> + <string name="screen_pinning_positive" msgid="3783985798366751226">"Got it"</string> + <string name="screen_pinning_negative" msgid="3741602308343880268">"No, thanks"</string> + <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Hide <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> + <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"It will reappear the next time you turn it on in settings."</string> + <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Hide"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> wants to be the volume dialogue."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Allow"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Deny"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> is the volume dialogue"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Touch to restore the original."</string> +</resources> diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index 9ac2a64..ee3f826 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -257,8 +257,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No Network"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Off"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"No saved networks available"</string> - <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> - <skip /> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"Cast"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"Casting"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Unnamed device"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Ready to cast"</string> diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index 9ac2a64..ee3f826 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -257,8 +257,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No Network"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Off"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"No saved networks available"</string> - <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> - <skip /> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"Cast"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"Casting"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Unnamed device"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Ready to cast"</string> diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index 398e0b0..18d8f76 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -257,8 +257,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"شبکهای موجود نیست"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi خاموش است"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"شبکه ذخیره شدهای در دسترس نیست"</string> - <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> - <skip /> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"فرستادن"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"در حال فرستادن"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"دستگاه بدون نام"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"آماده برای فرستادن"</string> diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index 66a7df0..5bf8d13 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -257,8 +257,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Tidak Ada Jaringan"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Mati"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Jaringan yang tersimpan tak tersedia"</string> - <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> - <skip /> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"Transmisi"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"Melakukan transmisi"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Perangkat tanpa nama"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Siap melakukan transmisi"</string> diff --git a/packages/SystemUI/res/values-lo-rLA/strings.xml b/packages/SystemUI/res/values-lo-rLA/strings.xml index b5e1bfe..6ae0c71 100644 --- a/packages/SystemUI/res/values-lo-rLA/strings.xml +++ b/packages/SystemUI/res/values-lo-rLA/strings.xml @@ -257,8 +257,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ບໍ່ມີເຄືອຂ່າຍ"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ປິດ"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"ບໍ່ມີເຄືອຂ່າຍທີ່ບັນທຶກໄວ້ທີ່ສາມາດໃຊ້ໄດ້"</string> - <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> - <skip /> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"ຄາສທ໌"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"ກຳລັງສົ່ງສັນຍານ"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"ອຸປະກອນບໍ່ມີຊື່"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"ພ້ອມສົ່ງສັນຍານແລ້ວ"</string> diff --git a/packages/SystemUI/res/values-mn-rMN/strings.xml b/packages/SystemUI/res/values-mn-rMN/strings.xml index a767983..f7268c2 100644 --- a/packages/SystemUI/res/values-mn-rMN/strings.xml +++ b/packages/SystemUI/res/values-mn-rMN/strings.xml @@ -255,8 +255,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Сүлжээгүй"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi унтарсан"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Хадгалагдсан сүлжээ байхгүй"</string> - <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> - <skip /> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"Дамжуулах"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"Дамжуулж байна"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Нэргүй төхөөрөмж"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Дамжуулахад бэлэн"</string> diff --git a/packages/SystemUI/res/values-my-rMM/strings.xml b/packages/SystemUI/res/values-my-rMM/strings.xml index b6feaa2..58e5239 100644 --- a/packages/SystemUI/res/values-my-rMM/strings.xml +++ b/packages/SystemUI/res/values-my-rMM/strings.xml @@ -257,8 +257,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ကွန်ရက်မရှိပါ"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"ဝိုင်ဖိုင်ပိတ်ရန်"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"သိမ်းဆည်းထား ကွန်ရက်များ မရှိ"</string> - <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> - <skip /> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"Cast"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"ကာစ်တင်"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"အမည်မတပ် ကိရိယာ"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"ကာစ်တ် လုပ်ရန် အသင့် ရှိနေပြီ"</string> diff --git a/packages/SystemUI/res/values-ne-rNP/strings.xml b/packages/SystemUI/res/values-ne-rNP/strings.xml index 71247d9..3d5d213 100644 --- a/packages/SystemUI/res/values-ne-rNP/strings.xml +++ b/packages/SystemUI/res/values-ne-rNP/strings.xml @@ -257,8 +257,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"नेटवर्क छैन"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"वाइफाइ बन्द"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"उपलब्ध सञ्जाल सुरक्षित गरिएन"</string> - <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> - <skip /> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"Cast"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"प्रसारण गर्दै"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"बेनाम उपकरण"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"प्रसारण गर्न तयार"</string> diff --git a/packages/SystemUI/res/values-si-rLK/strings.xml b/packages/SystemUI/res/values-si-rLK/strings.xml index becf69d..ef864de 100644 --- a/packages/SystemUI/res/values-si-rLK/strings.xml +++ b/packages/SystemUI/res/values-si-rLK/strings.xml @@ -257,8 +257,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ජාලයක් නැත"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi අක්රියයි"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"තිබෙන ජාල සුරැකුවේ නැත"</string> - <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> - <skip /> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"Cast"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"කාස්ට් කිරීම"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"නම් නොකළ උපාංගය"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"කාස්ට් කිරීමට සුදානම්"</string> diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index 493c9e7..f60a85a 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -257,8 +257,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Walang Network"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Naka-off ang Wi-Fi"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Walang available na naka-save na mga network"</string> - <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> - <skip /> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"I-cast"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"Nagka-cast"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Walang pangalang device"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Handang mag-cast"</string> diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index 78eadee..6636693 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -259,8 +259,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"沒有網絡"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi 關閉"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"找不到已儲存的網絡"</string> - <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> - <skip /> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"投放"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"正在放送"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"未命名的裝置"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"放送準備完成"</string> diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 66d494b..b696787 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -216,6 +216,10 @@ <string name="phone_label">open phone</string> <!-- Click action label for accessibility for the phone button. [CHAR LIMIT=NONE] --> <string name="camera_label">open camera</string> + <!-- Caption for "Recents resize" developer debug feature. [CHAR LIMIT=NONE] --> + <string name="recents_caption_resize">Select new task layout</string> + <!-- Button name for "Cancel". [CHAR LIMIT=NONE] --> + <string name="cancel">Cancel</string> <!-- Content description of the compatibility zoom button for accessibility (not shown on the screen). [CHAR LIMIT=NONE] --> <string name="accessibility_compatibility_zoom_button">Compatibility zoom button.</string> diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java index 5c1a317..cb78deb 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java @@ -17,7 +17,6 @@ package com.android.systemui.qs.tiles; import android.app.ActivityManager; -import android.os.SystemClock; import com.android.systemui.R; import com.android.systemui.qs.QSTile; @@ -27,16 +26,11 @@ import com.android.systemui.statusbar.policy.FlashlightController; public class FlashlightTile extends QSTile<QSTile.BooleanState> implements FlashlightController.FlashlightListener { - /** Grace period for which we consider the flashlight - * still available because it was recently on. */ - private static final long RECENTLY_ON_DURATION_MILLIS = 500; - private final AnimationIcon mEnable = new AnimationIcon(R.drawable.ic_signal_flashlight_enable_animation); private final AnimationIcon mDisable = new AnimationIcon(R.drawable.ic_signal_flashlight_disable_animation); private final FlashlightController mFlashlightController; - private long mWasLastOn; public FlashlightTile(Host host) { super(host); @@ -69,33 +63,17 @@ public class FlashlightTile extends QSTile<QSTile.BooleanState> implements return; } boolean newState = !mState.value; - mFlashlightController.setFlashlight(newState); refreshState(newState ? UserBoolean.USER_TRUE : UserBoolean.USER_FALSE); + mFlashlightController.setFlashlight(newState); } @Override protected void handleUpdateState(BooleanState state, Object arg) { - if (state.value) { - mWasLastOn = SystemClock.uptimeMillis(); - } - + state.visible = mFlashlightController.isAvailable(); + state.label = mHost.getContext().getString(R.string.quick_settings_flashlight_label); if (arg instanceof UserBoolean) { state.value = ((UserBoolean) arg).value; } - - if (!state.value && mWasLastOn != 0) { - if (SystemClock.uptimeMillis() > mWasLastOn + RECENTLY_ON_DURATION_MILLIS) { - mWasLastOn = 0; - } else { - mHandler.removeCallbacks(mRecentlyOnTimeout); - mHandler.postAtTime(mRecentlyOnTimeout, mWasLastOn + RECENTLY_ON_DURATION_MILLIS); - } - } - - // Always show the tile when the flashlight is or was recently on. This is needed because - // the camera is not available while it is being used for the flashlight. - state.visible = mWasLastOn != 0 || mFlashlightController.isAvailable(); - state.label = mHost.getContext().getString(R.string.quick_settings_flashlight_label); final AnimationIcon icon = state.value ? mEnable : mDisable; icon.setAllowAnimation(arg instanceof UserBoolean && ((UserBoolean) arg).userInitiated); state.icon = icon; @@ -115,8 +93,8 @@ public class FlashlightTile extends QSTile<QSTile.BooleanState> implements } @Override - public void onFlashlightOff() { - refreshState(UserBoolean.BACKGROUND_FALSE); + public void onFlashlightChanged(boolean enabled) { + refreshState(enabled ? UserBoolean.BACKGROUND_TRUE : UserBoolean.BACKGROUND_FALSE); } @Override @@ -128,11 +106,4 @@ public class FlashlightTile extends QSTile<QSTile.BooleanState> implements public void onFlashlightAvailabilityChanged(boolean available) { refreshState(); } - - private Runnable mRecentlyOnTimeout = new Runnable() { - @Override - public void run() { - refreshState(); - } - }; } diff --git a/packages/SystemUI/src/com/android/systemui/recents/Recents.java b/packages/SystemUI/src/com/android/systemui/recents/Recents.java index 9dd82fc..2d1fab0 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/Recents.java +++ b/packages/SystemUI/src/com/android/systemui/recents/Recents.java @@ -42,6 +42,7 @@ import android.view.View; import com.android.systemui.R; import com.android.systemui.RecentsComponent; import com.android.systemui.SystemUI; +import com.android.systemui.SystemUIApplication; import com.android.systemui.recents.misc.Console; import com.android.systemui.recents.misc.SystemServicesProxy; import com.android.systemui.recents.model.RecentsTaskLoadPlan; @@ -53,6 +54,7 @@ import com.android.systemui.recents.views.TaskStackView; import com.android.systemui.recents.views.TaskStackViewLayoutAlgorithm; import com.android.systemui.recents.views.TaskViewHeader; import com.android.systemui.recents.views.TaskViewTransform; +import com.android.systemui.statusbar.phone.PhoneStatusBar; import java.util.ArrayList; import java.util.concurrent.atomic.AtomicBoolean; @@ -79,6 +81,8 @@ public class Recents extends SystemUI // Owner proxy events final public static String ACTION_PROXY_NOTIFY_RECENTS_VISIBLITY_TO_OWNER = "action_notify_recents_visibility_change"; + final public static String ACTION_PROXY_SCREEN_PINNING_REQUEST_TO_OWNER = + "action_screen_pinning_request"; final public static String ACTION_START_ENTER_ANIMATION = "action_start_enter_animation"; final public static String ACTION_TOGGLE_RECENTS_ACTIVITY = "action_toggle_recents_activity"; @@ -148,6 +152,9 @@ public class Recents extends SystemUI case ACTION_PROXY_NOTIFY_RECENTS_VISIBLITY_TO_OWNER: visibilityChanged(intent.getBooleanExtra(EXTRA_RECENTS_VISIBILITY, false)); break; + case ACTION_PROXY_SCREEN_PINNING_REQUEST_TO_OWNER: + onStartScreenPinning(context); + break; } } } @@ -234,6 +241,7 @@ public class Recents extends SystemUI mProxyBroadcastReceiver = new RecentsOwnerEventProxyReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction(Recents.ACTION_PROXY_NOTIFY_RECENTS_VISIBLITY_TO_OWNER); + filter.addAction(Recents.ACTION_PROXY_SCREEN_PINNING_REQUEST_TO_OWNER); mContext.registerReceiverAsUser(mProxyBroadcastReceiver, UserHandle.CURRENT, filter, null, mHandler); } @@ -377,7 +385,7 @@ public class Recents extends SystemUI } // Return early if there are no tasks in the focused stack - if (focusedStack.getTaskCount() == 0) return; + if (focusedStack == null || focusedStack.getTaskCount() == 0) return; ActivityManager.RunningTaskInfo runningTask = mSystemServicesProxy.getTopMostTask(); // Return early if there is no running task (can't determine affiliated tasks in this case) @@ -801,6 +809,27 @@ public class Recents extends SystemUI } } + /** Notifies the status bar to trigger screen pinning. */ + @ProxyFromAnyToPrimaryUser + public static void startScreenPinning(Context context, SystemServicesProxy ssp) { + if (ssp.isForegroundUserOwner()) { + onStartScreenPinning(context); + } else { + Intent intent = createLocalBroadcastIntent(context, + ACTION_PROXY_SCREEN_PINNING_REQUEST_TO_OWNER); + context.sendBroadcastAsUser(intent, UserHandle.OWNER); + } + } + static void onStartScreenPinning(Context context) { + // For the primary user, the context for the SystemUI component is the SystemUIApplication + SystemUIApplication app = (SystemUIApplication) + getInstanceAndStartIfNeeded(context).mContext; + PhoneStatusBar statusBar = app.getComponent(PhoneStatusBar.class); + if (statusBar != null) { + statusBar.showScreenPinningRequest(false); + } + } + /** * Returns the preloaded load plan and invalidates it. */ diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java index 1248672..f014f09 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java @@ -85,8 +85,6 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView // Runnables to finish the Recents activity FinishRecentsRunnable mFinishLaunchHomeRunnable; - private PhoneStatusBar mStatusBar; - /** * A common Runnable to finish Recents either by calling finish() (with a custom animation) or * launching Home with some ActivityOptions. Generally we always launch home when we exit @@ -381,8 +379,6 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView mEmptyViewStub = (ViewStub) findViewById(R.id.empty_view_stub); mDebugOverlayStub = (ViewStub) findViewById(R.id.debug_overlay_stub); mScrimViews = new SystemBarScrimViews(this, mConfig); - mStatusBar = ((SystemUIApplication) getApplication()) - .getComponent(PhoneStatusBar.class); inflateDebugOverlay(); // Bind the search app widget when we first start up @@ -596,14 +592,14 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView private RecentsResizeTaskDialog getResizeTaskDebugDialog() { if (mResizeTaskDebugDialog == null) { - mResizeTaskDebugDialog = new RecentsResizeTaskDialog(getFragmentManager()); + mResizeTaskDebugDialog = new RecentsResizeTaskDialog(getFragmentManager(), this); } return mResizeTaskDebugDialog; } @Override public void onTaskResize(Task t) { - getResizeTaskDebugDialog().showResizeTaskDialog(t); + getResizeTaskDebugDialog().showResizeTaskDialog(t, mRecentsView); } /**** RecentsView.RecentsViewCallbacks Implementation ****/ @@ -631,9 +627,9 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView @Override public void onScreenPinningRequest() { - if (mStatusBar != null) { - mStatusBar.showScreenPinningRequest(false); - } + RecentsTaskLoader loader = RecentsTaskLoader.getInstance(); + SystemServicesProxy ssp = loader.getSystemServicesProxy(); + Recents.startScreenPinning(this, ssp); } /**** RecentsAppWidgetHost.RecentsAppWidgetHostCallbacks Implementation ****/ diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java index 9263543..abeb2b0 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java @@ -292,7 +292,7 @@ public class RecentsConfiguration { Settings.Global.DEVELOPMENT_SETTINGS_ENABLED) != 0; lockToAppEnabled = ssp.getSystemSetting(context, Settings.System.LOCK_TO_APP_ENABLED) != 0; - multiStackEnabled = "1".equals(ssp.getSystemProperty("overview.enableMultiStack")); + multiStackEnabled = "true".equals(ssp.getSystemProperty("persist.sys.debug.multi_window")); } /** Called when the configuration has changed, and we want to reset any configuration specific diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsResizeTaskDialog.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsResizeTaskDialog.java index d67eceb..7c11894 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsResizeTaskDialog.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsResizeTaskDialog.java @@ -16,31 +16,23 @@ package com.android.systemui.recents; -import android.app.ActivityManager; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.app.FragmentManager; -import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; -import android.content.Intent; -import android.content.pm.ActivityInfo; -import android.content.pm.ResolveInfo; import android.graphics.Rect; import android.os.Bundle; -import android.util.MutableInt; -import android.util.SparseArray; import android.view.LayoutInflater; import android.view.View; -import android.widget.EditText; -import android.widget.Toast; +import android.widget.Button; import com.android.systemui.R; import com.android.systemui.recents.misc.SystemServicesProxy; import com.android.systemui.recents.model.RecentsTaskLoader; import com.android.systemui.recents.model.Task; - -import java.util.List; +import com.android.systemui.recents.RecentsActivity; +import com.android.systemui.recents.views.RecentsView; /** * A helper for the dialogs that show when task debugging is on. @@ -49,80 +41,137 @@ public class RecentsResizeTaskDialog extends DialogFragment { static final String TAG = "RecentsResizeTaskDialog"; - // The task we want to resize. - Task mTaskToResize; - FragmentManager mFragmentManager; - View mResizeTaskDialogContent; + // The various window arrangements we can handle. + private static final int PLACE_LEFT = 1; + private static final int PLACE_RIGHT = 2; + private static final int PLACE_TOP = 3; + private static final int PLACE_BOTTOM = 4; + private static final int PLACE_FULL = 5; - public RecentsResizeTaskDialog() {} + // The task we want to resize. + private Task mTaskToResize; + private Task mNextTaskToResize; + private FragmentManager mFragmentManager; + private View mResizeTaskDialogContent; + private RecentsActivity mRecentsActivity; + private RecentsView mRecentsView; + private SystemServicesProxy mSsp; - public RecentsResizeTaskDialog(FragmentManager mgr) { + public RecentsResizeTaskDialog(FragmentManager mgr, RecentsActivity activity) { mFragmentManager = mgr; + mRecentsActivity = activity; + mSsp = RecentsTaskLoader.getInstance().getSystemServicesProxy(); } /** Shows the resize-task dialog. */ - void showResizeTaskDialog(Task t) { - mTaskToResize = t; + void showResizeTaskDialog(Task mainTask, RecentsView rv) { + mTaskToResize = mainTask; + mRecentsView = rv; + mNextTaskToResize = mRecentsView.getNextTaskOrTopTask(mainTask); + show(mFragmentManager, TAG); } /** Creates a new resize-task dialog. */ private void createResizeTaskDialog(final Context context, LayoutInflater inflater, - AlertDialog.Builder builder, final SystemServicesProxy ssp) { - builder.setTitle("Resize Task - Enter new dimensions"); + AlertDialog.Builder builder) { + builder.setTitle(R.string.recents_caption_resize); mResizeTaskDialogContent = - inflater.inflate(R.layout.recents_multistack_stack_size_dialog, null, false); - Rect bounds = ssp.getTaskBounds(mTaskToResize.key.stackId); - setDimensionInEditText(mResizeTaskDialogContent, R.id.inset_left, bounds.left); - setDimensionInEditText(mResizeTaskDialogContent, R.id.inset_top, bounds.top); - setDimensionInEditText(mResizeTaskDialogContent, R.id.inset_right, bounds.right); - setDimensionInEditText(mResizeTaskDialogContent, R.id.inset_bottom, bounds.bottom); - builder.setView(mResizeTaskDialogContent); - builder.setPositiveButton("Resize Task", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - int left = getDimensionFromEditText(mResizeTaskDialogContent, R.id.inset_left); - int top = getDimensionFromEditText(mResizeTaskDialogContent, R.id.inset_top); - int right = getDimensionFromEditText(mResizeTaskDialogContent, R.id.inset_right); - int bottom = getDimensionFromEditText(mResizeTaskDialogContent, R.id.inset_bottom); - if (bottom <= top || right <= left) { - Toast.makeText(context, "Invalid dimensions", Toast.LENGTH_SHORT).show(); - dismiss(); - return; - } - ssp.resizeTask(mTaskToResize.key.id, new Rect(left, top, right, bottom)); - dismiss(); + inflater.inflate(R.layout.recents_task_resize_dialog, null, false); + + ((Button)mResizeTaskDialogContent.findViewById(R.id.place_left)).setOnClickListener( + new View.OnClickListener() { + public void onClick(View v) { + placeTasks(PLACE_LEFT); + } + }); + ((Button)mResizeTaskDialogContent.findViewById(R.id.place_right)).setOnClickListener( + new View.OnClickListener() { + public void onClick(View v) { + placeTasks(PLACE_RIGHT); + } + }); + ((Button)mResizeTaskDialogContent.findViewById(R.id.place_top)).setOnClickListener( + new View.OnClickListener() { + public void onClick(View v) { + placeTasks(PLACE_TOP); } }); - builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { + ((Button)mResizeTaskDialogContent.findViewById(R.id.place_bottom)).setOnClickListener( + new View.OnClickListener() { + public void onClick(View v) { + placeTasks(PLACE_BOTTOM); + } + }); + ((Button)mResizeTaskDialogContent.findViewById(R.id.place_full)).setOnClickListener( + new View.OnClickListener() { + public void onClick(View v) { + placeTasks(PLACE_FULL); + } + }); + + builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dismiss(); } }); + + builder.setView(mResizeTaskDialogContent); } - /** Helper to get an integer value from an edit text. */ - private int getDimensionFromEditText(View container, int id) { - String text = ((EditText) container.findViewById(id)).getText().toString(); - if (text.trim().length() != 0) { - return Integer.parseInt(text.trim()); + /** Helper function to place window(s) on the display according to an arrangement request. */ + private void placeTasks(int arrangement) { + Rect focusedBounds = mSsp.getWindowRect(); + Rect otherBounds = new Rect(focusedBounds); + + switch (arrangement) { + case PLACE_LEFT: + focusedBounds.right = focusedBounds.centerX(); + otherBounds.left = focusedBounds.right; + break; + case PLACE_RIGHT: + otherBounds.right = otherBounds.centerX(); + focusedBounds.left = otherBounds.right; + break; + case PLACE_TOP: + focusedBounds.bottom = focusedBounds.centerY(); + otherBounds.top = focusedBounds.bottom; + break; + case PLACE_BOTTOM: + otherBounds.bottom = otherBounds.centerY(); + focusedBounds.top = otherBounds.bottom; + break; + case PLACE_FULL: + // Null the rectangle to avoid the other task to show up. + otherBounds = new Rect(); + break; } - return 0; - } - /** Helper to set an integer value to an edit text. */ - private void setDimensionInEditText(View container, int id, int value) { - ((EditText) container.findViewById(id)).setText("" + value); + // Resize all other tasks to go to the other side. + if (mNextTaskToResize != null && !otherBounds.isEmpty()) { + mSsp.resizeTask(mNextTaskToResize.key.id, otherBounds); + } + mSsp.resizeTask(mTaskToResize.key.id, focusedBounds); + + // Get rid of the dialog. + dismiss(); + mRecentsActivity.dismissRecentsToHomeRaw(false); + + // Show tasks - beginning with the other first so that the focus ends on the selected one. + // TODO: Remove this once issue b/19893373 is resolved. + if (mNextTaskToResize != null && !otherBounds.isEmpty()) { + mRecentsView.launchTask(mNextTaskToResize); + } + mRecentsView.launchTask(mTaskToResize); } @Override public Dialog onCreateDialog(Bundle args) { final Context context = this.getActivity(); - final SystemServicesProxy ssp = RecentsTaskLoader.getInstance().getSystemServicesProxy(); LayoutInflater inflater = getActivity().getLayoutInflater(); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - createResizeTaskDialog(context, inflater, builder, ssp); + createResizeTaskDialog(context, inflater, builder); return builder.create(); } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java index a473a29..d60df9c 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java +++ b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java @@ -259,7 +259,7 @@ public class SystemServicesProxy { public Rect getTaskBounds(int stackId) { ActivityManager.StackInfo info = getAllStackInfos().get(stackId); if (info != null) - return getAllStackInfos().get(stackId).bounds; + return info.bounds; return new Rect(); } diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java index 448a7a9..abed7a5 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java @@ -149,6 +149,31 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV return mTaskStackViews; } + /** Gets the next task in the stack - or if the last - the top task */ + public Task getNextTaskOrTopTask(Task taskToSearch) { + Task returnTask = null; + boolean found = false; + List<TaskStackView> stackViews = getTaskStackViews(); + int stackCount = stackViews.size(); + for (int i = stackCount - 1; i >= 0; --i) { + TaskStack stack = stackViews.get(i).getStack(); + ArrayList<Task> taskList = stack.getTasks(); + // Iterate the stack views and try and find the focused task + for (int j = taskList.size() - 1; j >= 0; --j) { + Task task = taskList.get(j); + // Return the next task in the line. + if (found) + return task; + // Remember the first possible task as the top task. + if (returnTask == null) + returnTask = task; + if (task == taskToSearch) + found = true; + } + } + return returnTask; + } + /** Launches the focused task from the first stack if possible */ public boolean launchFocusedTask() { // Get the first stack view @@ -172,6 +197,28 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV return false; } + /** Launches a given task. */ + public boolean launchTask(Task task) { + // Get the first stack view + List<TaskStackView> stackViews = getTaskStackViews(); + int stackCount = stackViews.size(); + for (int i = 0; i < stackCount; i++) { + TaskStackView stackView = stackViews.get(i); + TaskStack stack = stackView.getStack(); + // Iterate the stack views and try and find the given task. + List<TaskView> taskViews = stackView.getTaskViews(); + int taskViewCount = taskViews.size(); + for (int j = 0; j < taskViewCount; j++) { + TaskView tv = taskViews.get(j); + if (tv.getTask() == task) { + onTaskViewClicked(stackView, tv, stack, task, false); + return true; + } + } + } + return false; + } + /** Launches the task that Recents was launched from, if possible */ public boolean launchPreviousTask() { // Get the first stack view diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java index ca08319..42399a3 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java @@ -26,14 +26,15 @@ import android.content.Context; import android.content.res.ColorStateList; import android.graphics.Canvas; import android.graphics.Color; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.GradientDrawable; +import android.graphics.drawable.RippleDrawable; import android.graphics.Outline; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.PorterDuffXfermode; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.GradientDrawable; -import android.graphics.drawable.RippleDrawable; +import android.graphics.Rect; import android.util.AttributeSet; import android.view.View; import android.view.ViewOutlineProvider; @@ -43,7 +44,9 @@ import android.widget.TextView; import com.android.systemui.R; import com.android.systemui.recents.Constants; import com.android.systemui.recents.RecentsConfiguration; +import com.android.systemui.recents.misc.SystemServicesProxy; import com.android.systemui.recents.misc.Utilities; +import com.android.systemui.recents.model.RecentsTaskLoader; import com.android.systemui.recents.model.Task; @@ -51,6 +54,7 @@ import com.android.systemui.recents.model.Task; public class TaskViewHeader extends FrameLayout { RecentsConfiguration mConfig; + private SystemServicesProxy mSsp; // Header views ImageView mMoveTaskButton; @@ -91,6 +95,7 @@ public class TaskViewHeader extends FrameLayout { public TaskViewHeader(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); mConfig = RecentsConfiguration.getInstance(); + mSsp = RecentsTaskLoader.getInstance().getSystemServicesProxy(); setWillNotDraw(false); setClipToOutline(true); setOutlineProvider(new ViewOutlineProvider() { @@ -124,9 +129,6 @@ public class TaskViewHeader extends FrameLayout { mActivityDescription = (TextView) findViewById(R.id.activity_description); mDismissButton = (ImageView) findViewById(R.id.dismiss_task); mMoveTaskButton = (ImageView) findViewById(R.id.move_task); - if (mConfig.multiStackEnabled) { - mMoveTaskButton.setVisibility(View.VISIBLE); - } // Hide the backgrounds if they are ripple drawables if (!Constants.DebugFlags.App.EnableTaskFiltering) { @@ -209,6 +211,32 @@ public class TaskViewHeader extends FrameLayout { mLightDismissDrawable : mDarkDismissDrawable); mDismissButton.setContentDescription(String.format(mDismissContentDescription, t.activityLabel)); + mMoveTaskButton.setVisibility((mConfig.multiStackEnabled) ? View.VISIBLE : View.INVISIBLE); + } + + /** Updates the resize task bar button. */ + void updateResizeTaskBarIcon(Task t) { + Rect display = mSsp.getWindowRect(); + Rect taskRect = mSsp.getTaskBounds(t.key.stackId); + int resId = R.drawable.star; + if (display.equals(taskRect)) { + resId = R.drawable.vector_drawable_place_fullscreen; + } else { + boolean top = display.top == taskRect.top; + boolean bottom = display.bottom == taskRect.bottom; + boolean left = display.left == taskRect.left; + boolean right = display.right == taskRect.right; + if (top && bottom && left) { + resId = R.drawable.vector_drawable_place_left; + } else if (top && bottom && right) { + resId = R.drawable.vector_drawable_place_right; + } else if (top && left && right) { + resId = R.drawable.vector_drawable_place_top; + } else if (bottom && left && right) { + resId = R.drawable.vector_drawable_place_bottom; + } + } + mMoveTaskButton.setImageResource(resId); } /** Unbinds the bar view from the task */ diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java index 0c21b20..a247c8e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java @@ -336,7 +336,6 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL } public void launchCamera() { - mFlashlightController.killFlashlight(); Intent intent = getCameraIntent(); boolean wouldLaunchResolverActivity = PreviewInflater.wouldLaunchResolverActivity( mContext, intent, mLockPatternUtils.getCurrentUser()); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightController.java index c9ba8f6..cd1914c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightController.java @@ -17,20 +17,14 @@ package com.android.systemui.statusbar.policy; import android.content.Context; -import android.graphics.SurfaceTexture; import android.hardware.camera2.CameraAccessException; -import android.hardware.camera2.CameraCaptureSession; import android.hardware.camera2.CameraCharacteristics; -import android.hardware.camera2.CameraDevice; import android.hardware.camera2.CameraManager; -import android.hardware.camera2.CameraMetadata; -import android.hardware.camera2.CaptureRequest; import android.os.Handler; import android.os.HandlerThread; import android.os.Process; +import android.text.TextUtils; import android.util.Log; -import android.util.Size; -import android.view.Surface; import java.lang.ref.WeakReference; import java.util.ArrayList; @@ -44,7 +38,7 @@ public class FlashlightController { private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private static final int DISPATCH_ERROR = 0; - private static final int DISPATCH_OFF = 1; + private static final int DISPATCH_CHANGED = 1; private static final int DISPATCH_AVAILABILITY_CHANGED = 2; private final CameraManager mCameraManager; @@ -57,52 +51,50 @@ public class FlashlightController { /** Lock on {@code this} when accessing */ private boolean mFlashlightEnabled; - private String mCameraId; - private boolean mCameraAvailable; - private CameraDevice mCameraDevice; - private CaptureRequest mFlashlightRequest; - private CameraCaptureSession mSession; - private SurfaceTexture mSurfaceTexture; - private Surface mSurface; + private final String mCameraId; + private boolean mTorchAvailable; public FlashlightController(Context mContext) { mCameraManager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE); - initialize(); - } - public void initialize() { + String cameraId = null; try { - mCameraId = getCameraId(); + cameraId = getCameraId(); } catch (Throwable e) { Log.e(TAG, "Couldn't initialize.", e); return; + } finally { + mCameraId = cameraId; } if (mCameraId != null) { ensureHandler(); - mCameraManager.registerAvailabilityCallback(mAvailabilityCallback, mHandler); + mCameraManager.registerTorchCallback(mTorchCallback, mHandler); } } - public synchronized void setFlashlight(boolean enabled) { - if (mFlashlightEnabled != enabled) { - mFlashlightEnabled = enabled; - postUpdateFlashlight(); - } - } - - public void killFlashlight() { - boolean enabled; + public void setFlashlight(boolean enabled) { + boolean pendingError = false; synchronized (this) { - enabled = mFlashlightEnabled; + if (mFlashlightEnabled != enabled) { + mFlashlightEnabled = enabled; + try { + mCameraManager.setTorchMode(mCameraId, enabled); + } catch (CameraAccessException e) { + Log.e(TAG, "Couldn't set torch mode", e); + mFlashlightEnabled = false; + pendingError = true; + } + } } - if (enabled) { - mHandler.post(mKillFlashlightRunnable); + dispatchModeChanged(mFlashlightEnabled); + if (pendingError) { + dispatchError(); } } public synchronized boolean isAvailable() { - return mCameraAvailable; + return mTorchAvailable; } public void addListener(FlashlightListener l) { @@ -126,42 +118,6 @@ public class FlashlightController { } } - private void startDevice() throws CameraAccessException { - mCameraManager.openCamera(getCameraId(), mCameraListener, mHandler); - } - - private void startSession() throws CameraAccessException { - mSurfaceTexture = new SurfaceTexture(false); - Size size = getSmallestSize(mCameraDevice.getId()); - mSurfaceTexture.setDefaultBufferSize(size.getWidth(), size.getHeight()); - mSurface = new Surface(mSurfaceTexture); - ArrayList<Surface> outputs = new ArrayList<>(1); - outputs.add(mSurface); - mCameraDevice.createCaptureSession(outputs, mSessionListener, mHandler); - } - - private Size getSmallestSize(String cameraId) throws CameraAccessException { - Size[] outputSizes = mCameraManager.getCameraCharacteristics(cameraId) - .get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP) - .getOutputSizes(SurfaceTexture.class); - if (outputSizes == null || outputSizes.length == 0) { - throw new IllegalStateException( - "Camera " + cameraId + "doesn't support any outputSize."); - } - Size chosen = outputSizes[0]; - for (Size s : outputSizes) { - if (chosen.getWidth() >= s.getWidth() && chosen.getHeight() >= s.getHeight()) { - chosen = s; - } - } - return chosen; - } - - private void postUpdateFlashlight() { - ensureHandler(); - mHandler.post(mUpdateFlashlightRunnable); - } - private String getCameraId() throws CameraAccessException { String[] ids = mCameraManager.getCameraIdList(); for (String id : ids) { @@ -176,70 +132,12 @@ public class FlashlightController { return null; } - private void updateFlashlight(boolean forceDisable) { - try { - boolean enabled; - synchronized (this) { - enabled = mFlashlightEnabled && !forceDisable; - } - if (enabled) { - if (mCameraDevice == null) { - startDevice(); - return; - } - if (mSession == null) { - startSession(); - return; - } - if (mFlashlightRequest == null) { - CaptureRequest.Builder builder = mCameraDevice.createCaptureRequest( - CameraDevice.TEMPLATE_PREVIEW); - builder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_TORCH); - builder.addTarget(mSurface); - CaptureRequest request = builder.build(); - mSession.capture(request, null, mHandler); - mFlashlightRequest = request; - } - } else { - if (mCameraDevice != null) { - mCameraDevice.close(); - teardown(); - } - } - - } catch (CameraAccessException|IllegalStateException|UnsupportedOperationException e) { - Log.e(TAG, "Error in updateFlashlight", e); - handleError(); - } - } - - private void teardown() { - mCameraDevice = null; - mSession = null; - mFlashlightRequest = null; - if (mSurface != null) { - mSurface.release(); - mSurfaceTexture.release(); - } - mSurface = null; - mSurfaceTexture = null; - } - - private void handleError() { - synchronized (this) { - mFlashlightEnabled = false; - } - dispatchError(); - dispatchOff(); - updateFlashlight(true /* forceDisable */); - } - - private void dispatchOff() { - dispatchListeners(DISPATCH_OFF, false /* argument (ignored) */); + private void dispatchModeChanged(boolean enabled) { + dispatchListeners(DISPATCH_CHANGED, enabled); } private void dispatchError() { - dispatchListeners(DISPATCH_ERROR, false /* argument (ignored) */); + dispatchListeners(DISPATCH_CHANGED, false /* argument (ignored) */); } private void dispatchAvailabilityChanged(boolean available) { @@ -255,8 +153,8 @@ public class FlashlightController { if (l != null) { if (message == DISPATCH_ERROR) { l.onFlashlightError(); - } else if (message == DISPATCH_OFF) { - l.onFlashlightOff(); + } else if (message == DISPATCH_CHANGED) { + l.onFlashlightChanged(argument); } else if (message == DISPATCH_AVAILABILITY_CHANGED) { l.onFlashlightAvailabilityChanged(argument); } @@ -279,106 +177,57 @@ public class FlashlightController { } } - private final CameraDevice.StateListener mCameraListener = new CameraDevice.StateListener() { - @Override - public void onOpened(CameraDevice camera) { - mCameraDevice = camera; - postUpdateFlashlight(); - } - - @Override - public void onDisconnected(CameraDevice camera) { - if (mCameraDevice == camera) { - dispatchOff(); - teardown(); - } - } - - @Override - public void onError(CameraDevice camera, int error) { - Log.e(TAG, "Camera error: camera=" + camera + " error=" + error); - if (camera == mCameraDevice || mCameraDevice == null) { - handleError(); - } - } - }; + private final CameraManager.TorchCallback mTorchCallback = + new CameraManager.TorchCallback() { - private final CameraCaptureSession.StateListener mSessionListener = - new CameraCaptureSession.StateListener() { @Override - public void onConfigured(CameraCaptureSession session) { - if (session.getDevice() == mCameraDevice) { - mSession = session; - } else { - session.close(); - } - postUpdateFlashlight(); - } - - @Override - public void onConfigureFailed(CameraCaptureSession session) { - Log.e(TAG, "Configure failed."); - if (mSession == null || mSession == session) { - handleError(); - } - } - }; - - private final Runnable mUpdateFlashlightRunnable = new Runnable() { - @Override - public void run() { - updateFlashlight(false /* forceDisable */); - } - }; - - private final Runnable mKillFlashlightRunnable = new Runnable() { - @Override - public void run() { - synchronized (this) { - mFlashlightEnabled = false; + public void onTorchModeUnavailable(String cameraId) { + if (TextUtils.equals(cameraId, mCameraId)) { + setCameraAvailable(false); } - updateFlashlight(true /* forceDisable */); - dispatchOff(); } - }; - private final CameraManager.AvailabilityCallback mAvailabilityCallback = - new CameraManager.AvailabilityCallback() { @Override - public void onCameraAvailable(String cameraId) { - if (DEBUG) Log.d(TAG, "onCameraAvailable(" + cameraId + ")"); - if (cameraId.equals(mCameraId)) { + public void onTorchModeChanged(String cameraId, boolean enabled) { + if (TextUtils.equals(cameraId, mCameraId)) { setCameraAvailable(true); - } - } - - @Override - public void onCameraUnavailable(String cameraId) { - if (DEBUG) Log.d(TAG, "onCameraUnavailable(" + cameraId + ")"); - if (cameraId.equals(mCameraId)) { - setCameraAvailable(false); + setTorchMode(enabled); } } private void setCameraAvailable(boolean available) { boolean changed; synchronized (FlashlightController.this) { - changed = mCameraAvailable != available; - mCameraAvailable = available; + changed = mTorchAvailable != available; + mTorchAvailable = available; } if (changed) { if (DEBUG) Log.d(TAG, "dispatchAvailabilityChanged(" + available + ")"); dispatchAvailabilityChanged(available); } } + + private void setTorchMode(boolean enabled) { + boolean changed; + synchronized (FlashlightController.this) { + changed = mFlashlightEnabled != enabled; + mFlashlightEnabled = enabled; + } + if (changed) { + if (DEBUG) Log.d(TAG, "dispatchModeChanged(" + enabled + ")"); + dispatchModeChanged(enabled); + } + } }; public interface FlashlightListener { /** - * Called when the flashlight turns off unexpectedly. + * Called when the flashlight was turned off or on. + * @param enabled true if the flashlight is currently turned on. */ - void onFlashlightOff(); + void onFlashlightChanged(boolean enabled); + /** * Called when there is an error that turns the flashlight off. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java index 2fbb812..f0dd943 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java @@ -190,7 +190,8 @@ public class SecurityControllerImpl implements SecurityController { NetworkCapabilities networkCapabilities = mConnectivityManager.getNetworkCapabilities(network); if (DEBUG) Log.d(TAG, "onAvailable " + network.netId + " : " + networkCapabilities); - if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) { + if (networkCapabilities != null && + networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) { setCurrentNetid(network.netId); } }; |