diff options
author | Xin Li <delphij@google.com> | 2024-03-06 09:30:06 -0800 |
---|---|---|
committer | Xin Li <delphij@google.com> | 2024-03-06 09:30:06 -0800 |
commit | 0a19d853fa8042e184788c2da2ed7d3b889b165a (patch) | |
tree | f86037efa286448f802ffcc1fce929e01f5bbe02 | |
parent | e97783b38925690aba7633c21effa56fbc2e0070 (diff) | |
parent | e224e186edb36908ad02a1cbaf338614ce5c7d69 (diff) | |
download | ThemePicker-0a19d853fa8042e184788c2da2ed7d3b889b165a.tar.gz |
Bug: 319669529
Merged-In: I08772f7df3f3c78e2b7c94bcadce1e0784255a77
Change-Id: I964ee4c686efede980f593364e4de38e3330eba0
267 files changed, 4127 insertions, 11797 deletions
@@ -35,6 +35,13 @@ filegroup { ], } +// Production-only files that should be excluded in tests. +filegroup { + name: "ThemePicker_src_prod", + visibility: [":__subpackages__"], + srcs: ["src_override/com/android/customization/picker/CustomizationPickerApplication.java"], +} + filegroup { name: "ThemePicker_Manifest", srcs: [ @@ -66,8 +73,9 @@ genrule { + "$(location soong_zip) -o $(out) -C $$RES_DIR -D $$RES_DIR" } +// Common defaults that doesn't have ThemePicker specifics. java_defaults { - name: "ThemePicker_defaults", + name: "ThemePicker_common_defaults", static_libs: [ "guava", @@ -92,7 +100,6 @@ java_defaults { srcs: [ ":WallpaperPicker2_srcs", ":ThemePicker_srcs", - ":ThemePicker_src_overrides", ], required: ["android.software.theme_picker.xml"], @@ -111,6 +118,12 @@ java_defaults { system_ext_specific: true, } +java_defaults { + name: "ThemePicker_defaults", + defaults: ["ThemePicker_common_defaults"], + srcs: [":ThemePicker_src_overrides"], +} + prebuilt_etc { name: "android.software.theme_picker.xml", system_ext_specific: true, diff --git a/PREUPLOAD.cfg b/PREUPLOAD.cfg index b659bfa8..a165f4b9 100644 --- a/PREUPLOAD.cfg +++ b/PREUPLOAD.cfg @@ -2,3 +2,5 @@ checkstyle_hook = ${REPO_ROOT}/prebuilts/checkstyle/checkstyle.py --sha ${PREUPLOAD_COMMIT} ktfmt_hook = ${REPO_ROOT}/external/ktfmt/ktfmt.py --check -i ${REPO_ROOT}/packages/apps/ThemePicker/ktfmt_includes.txt ${PREUPLOAD_FILES} + +flag_hook = ${REPO_ROOT}/frameworks/base/packages/SystemUI/flag_check.py --msg=${PREUPLOAD_COMMIT_MESSAGE} --files=${PREUPLOAD_FILES} --project=${REPO_PATH} diff --git a/TEST_MAPPING b/TEST_MAPPING index 6345ffb8..560897b1 100644 --- a/TEST_MAPPING +++ b/TEST_MAPPING @@ -2,6 +2,7 @@ "presubmit": [ { "name": "WallpaperPickerGoogleTests", + "keywords": ["internal"], "options": [ { "exclude-annotation": "org.junit.Ignore" diff --git a/res/layout-land/activity_custom_theme.xml b/res/layout-land/activity_custom_theme.xml deleted file mode 100644 index 59296dfe..00000000 --- a/res/layout-land/activity_custom_theme.xml +++ /dev/null @@ -1,63 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2019 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. ---> -<FrameLayout - xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - xmlns:tools="http://schemas.android.com/tools" - android:layout_width="match_parent" - android:layout_height="match_parent" - tools:context="com.android.customization.picker.theme.CustomThemeActivity"> - - <FrameLayout - android:id="@+id/fragment_container" - android:layout_width="match_parent" - android:layout_height="match_parent"/> - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_gravity="bottom" - android:orientation="horizontal"> - <Space - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_weight="1" - android:layout_gravity="bottom"/> - - <FrameLayout - android:id="@+id/custom_theme_nav" - android:layout_width="0dp" - android:layout_height="@dimen/custom_theme_nav_height" - android:layout_weight="1" - android:paddingHorizontal="12dp"> - <Button - android:id="@+id/previous_button" - style="@style/ActionSecondaryButton" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="start|center_vertical" - android:text="@string/custom_theme_previous"/> - <Button - android:id="@+id/next_button" - style="@style/ActionPrimaryButton" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="end|center_vertical" - android:text="@string/custom_theme_next"/> - </FrameLayout> - </LinearLayout> - -</FrameLayout> diff --git a/res/layout-land/fragment_custom_theme_component.xml b/res/layout-land/fragment_custom_theme_component.xml deleted file mode 100644 index 2679bdf2..00000000 --- a/res/layout-land/fragment_custom_theme_component.xml +++ /dev/null @@ -1,75 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2019 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="match_parent" - android:layout_height="match_parent" - android:orientation="vertical" - android:background="?android:colorPrimary"> - <include layout="@layout/section_header"/> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="horizontal"> - - <FrameLayout - android:id="@+id/component_preview_container" - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_weight="1" - android:background="?android:colorPrimary"> - <include - android:id="@+id/component_preview_content" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_marginHorizontal="@dimen/preview_page_horizontal_margin" - android:layout_marginTop="@dimen/preview_page_top_margin" - android:layout_marginBottom="@dimen/component_preview_page_bottom_margin" - layout="@layout/theme_component_preview"/> - </FrameLayout> - <View - android:layout_width="1dp" - android:layout_height="match_parent" - android:background="?android:colorForeground"/> - <LinearLayout - android:id="@+id/options_section" - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_weight="1" - android:paddingTop="10dp" - android:paddingBottom="@dimen/custom_theme_nav_height" - android:orientation="vertical"> - - <TextView - android:id="@+id/component_options_title" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:layout_margin="10dp" - android:textAlignment="center" - android:textAppearance="@style/TitleTextAppearance"/> - - <androidx.recyclerview.widget.RecyclerView - android:id="@+id/options_container" - android:layout_width="match_parent" - android:layout_height="0dp" - android:layout_weight="1"/> - - </LinearLayout> - </LinearLayout> -</LinearLayout> diff --git a/res/layout-land/fragment_custom_theme_name.xml b/res/layout-land/fragment_custom_theme_name.xml deleted file mode 100644 index a60b9c23..00000000 --- a/res/layout-land/fragment_custom_theme_name.xml +++ /dev/null @@ -1,76 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2019 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="match_parent" - android:layout_height="match_parent" - android:orientation="vertical" - android:background="?android:colorPrimary"> - <include layout="@layout/section_header"/> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="horizontal"> - <FrameLayout - android:id="@+id/component_preview_container" - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_weight="1" - android:paddingTop="@dimen/preview_content_padding_top" - android:paddingBottom="@dimen/preview_content_padding_bottom" - android:clipToPadding="false" - android:background="?android:colorSecondary"> - <include layout="@layout/theme_preview_card"/> - </FrameLayout> - <LinearLayout - android:id="@+id/options_section" - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_weight="1" - android:paddingTop="10dp" - android:paddingBottom="@dimen/custom_theme_nav_height" - android:paddingVertical="10dp" - android:clipToPadding="false" - android:orientation="vertical"> - - <TextView - android:id="@+id/component_options_title" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:layout_margin="10dp" - android:textAlignment="center" - android:textAppearance="@style/TitleTextAppearance"/> - - <FrameLayout - android:layout_width="match_parent" - android:layout_height="@dimen/options_container_height" - android:layout_gravity="center"> - - <EditText - style="@style/CustomThemeNameEditText" - android:id="@+id/custom_theme_name" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:minWidth="300dp"/> - </FrameLayout> - - </LinearLayout> - </LinearLayout> -</LinearLayout> diff --git a/res/layout-land/fragment_theme_picker.xml b/res/layout-land/fragment_theme_picker.xml deleted file mode 100644 index d3580379..00000000 --- a/res/layout-land/fragment_theme_picker.xml +++ /dev/null @@ -1,82 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2019 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="match_parent" - android:layout_height="match_parent" - android:orientation="vertical" - android:background="?android:colorPrimary"> - <include layout="@layout/section_header"/> - - <FrameLayout - android:layout_width="match_parent" - android:layout_height="match_parent"> - <LinearLayout - android:id="@+id/content_section" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="horizontal"> - - <FrameLayout - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_weight="1"> - <FrameLayout - android:id="@+id/preview_card_container" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:paddingTop="@dimen/preview_content_padding_top" - android:paddingBottom="@dimen/preview_content_padding_bottom" - android:clipToPadding="false" - android:background="?android:colorSecondary"> - <include layout="@layout/theme_preview_card"/> - </FrameLayout> - </FrameLayout> - - <androidx.recyclerview.widget.RecyclerView - android:id="@+id/options_container" - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_weight="1" - android:paddingVertical="10dp" /> - </LinearLayout> - - <androidx.core.widget.ContentLoadingProgressBar - android:id="@+id/loading_indicator" - style="@android:style/Widget.DeviceDefault.ProgressBar" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginTop="200dp" - android:layout_gravity="center_horizontal|top" - android:indeterminate="true"/> - - <FrameLayout - android:id="@+id/error_section" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:visibility="gone"> - <TextView - android:id="@+id/error_message" - style="@style/TitleTextAppearance" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:gravity="center" - android:text="@string/something_went_wrong"/> - </FrameLayout> - </FrameLayout> -</LinearLayout> diff --git a/res/layout/activity_custom_theme.xml b/res/layout/activity_custom_theme.xml deleted file mode 100644 index 24d58b7b..00000000 --- a/res/layout/activity_custom_theme.xml +++ /dev/null @@ -1,53 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2019 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" - xmlns:app="http://schemas.android.com/apk/res-auto" - xmlns:tools="http://schemas.android.com/tools" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical" - tools:context="com.android.customization.picker.theme.CustomThemeActivity"> - - <FrameLayout - android:id="@+id/fragment_container" - android:layout_width="match_parent" - android:layout_height="0dp" - android:layout_weight="1"/> - - <FrameLayout - android:id="@+id/custom_theme_nav" - android:layout_width="match_parent" - android:layout_height="@dimen/custom_theme_nav_height" - android:paddingHorizontal="12dp" - android:background="?android:colorPrimary"> - <Button - android:id="@+id/previous_button" - style="@style/ActionSecondaryButton" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="start|center_vertical" - android:text="@string/custom_theme_previous"/> - <Button - android:id="@+id/next_button" - style="@style/ActionPrimaryButton" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="end|center_vertical" - android:text="@string/custom_theme_next"/> - </FrameLayout> -</LinearLayout> diff --git a/res/layout/clock_color_option.xml b/res/layout/clock_color_option.xml index e5aa3d60..6d820629 100644 --- a/res/layout/clock_color_option.xml +++ b/res/layout/clock_color_option.xml @@ -22,7 +22,7 @@ android:orientation="vertical" android:clipChildren="false"> - <include layout="@layout/color_option_2"/> + <include layout="@layout/color_option"/> <TextView android:id="@+id/text" diff --git a/res/layout/clock_size_radio_button_group.xml b/res/layout/clock_size_radio_button_group.xml deleted file mode 100644 index 56d0ab75..00000000 --- a/res/layout/clock_size_radio_button_group.xml +++ /dev/null @@ -1,88 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?><!-- - ~ Copyright (C) 2023 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="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical"> - - <LinearLayout - android:id="@+id/button_container_dynamic" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginBottom="8dp" - android:orientation="horizontal"> - - <RadioButton - android:id="@+id/radio_button_dynamic" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center_vertical" - android:layout_marginEnd="8dp" - android:clickable="false" /> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical"> - - <TextView - style="@style/SectionTitleTextStyle" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/clock_size_dynamic" /> - - <TextView - style="@style/SectionSubtitleTextStyle" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/clock_size_dynamic_description" /> - </LinearLayout> - </LinearLayout> - - <LinearLayout - android:id="@+id/button_container_small" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:minHeight="@dimen/touch_target_min_height" - android:orientation="horizontal"> - - <RadioButton - android:id="@+id/radio_button_large" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center_vertical" - android:layout_marginEnd="8dp" - android:clickable="false" /> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical"> - <TextView - style="@style/SectionTitleTextStyle" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/clock_size_small" /> - - <TextView - style="@style/SectionSubtitleTextStyle" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/clock_size_small_description" /> - </LinearLayout> - </LinearLayout> -</LinearLayout>
\ No newline at end of file diff --git a/res/layout/color_option.xml b/res/layout/color_option.xml index d9a71364..dff03d03 100644 --- a/res/layout/color_option.xml +++ b/res/layout/color_option.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?><!-- - Copyright (C) 2022 The Android Open Source Project + Copyright (C) 2023 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. @@ -13,91 +13,39 @@ See the License for the specific language governing permissions and limitations under the License. --> -<!-- Enclosing layout must be match_parent so that we can center content within --> -<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - android:layout_width="match_parent" +<!-- Content description is set programmatically on the parent FrameLayout --> +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="@dimen/option_item_size" android:layout_height="wrap_content" - android:layout_gravity="center" - android:clipChildren="false" - android:gravity="center" - android:padding="@dimen/option_tile_grid_tile_padding_min"> + android:orientation="vertical" + android:clipChildren="false"> + <FrameLayout + android:id="@+id/icon_container" + android:layout_width="@dimen/option_item_size" + android:layout_height="@dimen/option_item_size" + android:clipChildren="false"> + + <ImageView + android:id="@id/selection_border" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@drawable/option_item_border" + android:alpha="0" + android:importantForAccessibility="no" /> + + <ImageView + android:id="@id/background" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@drawable/option_item_background" + android:importantForAccessibility="no" /> + + <com.android.customization.picker.color.ui.view.ColorOptionIconView + android:id="@+id/foreground" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_margin="@dimen/color_seed_chip_margin2"/> + </FrameLayout> +</LinearLayout> - <!-- - This displays the background. It is dynamically sized, constrained remain square and - have a maximum size, and be centered within its parent. - --> - <androidx.constraintlayout.widget.ConstraintLayout - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_gravity="center" - android:background="@drawable/option_border_color" - android:gravity="center" - android:padding="@dimen/option_tile_grid_icon_padding_min" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintDimensionRatio="1:1" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" - app:layout_constraintWidth_max="@dimen/option_tile_width"> - - <!-- This is the color wheel itself, constrained to a maximum size and centered --> - <androidx.constraintlayout.widget.ConstraintLayout - android:id="@+id/option_tile" - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_gravity="center" - android:gravity="center" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintHeight_max="@dimen/component_color_chip_small_diameter_default" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" - app:layout_constraintWidth_max="@dimen/component_color_chip_small_diameter_default"> - - <ImageView - android:id="@+id/color_preview_0" - android:layout_width="0dp" - android:layout_height="0dp" - android:adjustViewBounds="true" - android:src="@drawable/color_chip_seed_filled0" - app:layout_constraintHeight_percent=".50" - app:layout_constraintLeft_toLeftOf="parent" - app:layout_constraintTop_toTopOf="parent" - app:layout_constraintWidth_percent=".50" /> - - <ImageView - android:id="@+id/color_preview_1" - android:layout_width="0dp" - android:layout_height="0dp" - android:adjustViewBounds="true" - android:src="@drawable/color_chip_seed_filled2" - app:layout_constraintHeight_percent=".50" - app:layout_constraintLeft_toRightOf="@id/color_preview_0" - app:layout_constraintTop_toTopOf="parent" - app:layout_constraintWidth_percent=".50" /> - - <ImageView - android:id="@+id/color_preview_2" - android:layout_width="0dp" - android:layout_height="0dp" - android:adjustViewBounds="true" - android:src="@drawable/color_chip_seed_filled1" - app:layout_constraintHeight_percent=".50" - app:layout_constraintLeft_toLeftOf="parent" - app:layout_constraintTop_toBottomOf="@id/color_preview_0" - app:layout_constraintWidth_percent=".50" /> - - <ImageView - android:id="@+id/color_preview_3" - android:layout_width="0dp" - android:layout_height="0dp" - android:adjustViewBounds="true" - android:src="@drawable/color_chip_seed_filled3" - app:layout_constraintHeight_percent=".50" - app:layout_constraintLeft_toRightOf="@id/color_preview_2" - app:layout_constraintTop_toBottomOf="@id/color_preview_1" - app:layout_constraintWidth_percent=".50" /> - </androidx.constraintlayout.widget.ConstraintLayout> - </androidx.constraintlayout.widget.ConstraintLayout> -</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/res/layout/color_option_2.xml b/res/layout/color_option_2.xml deleted file mode 100644 index dff03d03..00000000 --- a/res/layout/color_option_2.xml +++ /dev/null @@ -1,51 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?><!-- - Copyright (C) 2023 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. ---> -<!-- Content description is set programmatically on the parent FrameLayout --> -<LinearLayout - xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="@dimen/option_item_size" - android:layout_height="wrap_content" - android:orientation="vertical" - android:clipChildren="false"> - <FrameLayout - android:id="@+id/icon_container" - android:layout_width="@dimen/option_item_size" - android:layout_height="@dimen/option_item_size" - android:clipChildren="false"> - - <ImageView - android:id="@id/selection_border" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:background="@drawable/option_item_border" - android:alpha="0" - android:importantForAccessibility="no" /> - - <ImageView - android:id="@id/background" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:background="@drawable/option_item_background" - android:importantForAccessibility="no" /> - - <com.android.customization.picker.color.ui.view.ColorOptionIconView - android:id="@+id/foreground" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_margin="@dimen/color_seed_chip_margin2"/> - </FrameLayout> -</LinearLayout> - diff --git a/res/layout/color_options_view.xml b/res/layout/color_options_view.xml deleted file mode 100644 index 65028a60..00000000 --- a/res/layout/color_options_view.xml +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2022 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. ---> -<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="match_parent"> - - <androidx.recyclerview.widget.RecyclerView - android:id="@+id/color_option_container" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_gravity="center_horizontal" - android:orientation="horizontal" /> -</FrameLayout> diff --git a/res/layout/color_pages_view.xml b/res/layout/color_pages_view.xml deleted file mode 100644 index 3ccbd41a..00000000 --- a/res/layout/color_pages_view.xml +++ /dev/null @@ -1,33 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2022 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="match_parent" - android:layout_height="match_parent" - android:orientation="vertical"> - - <androidx.viewpager2.widget.ViewPager2 - android:id="@+id/color_page_container" - android:layout_width="match_parent" - android:layout_height="wrap_content"/> - <com.android.wallpaper.widget.PageIndicator - android:id="@+id/color_page_indicator" - android:layout_marginTop="@dimen/color_page_indicator_margin_top" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:visibility="gone" - android:layout_gravity="center"/> -</LinearLayout> diff --git a/res/layout/color_section_view2.xml b/res/layout/color_section_view.xml index 9dbdf151..cfa9be3a 100644 --- a/res/layout/color_section_view2.xml +++ b/res/layout/color_section_view.xml @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. --> -<com.android.customization.picker.color.ui.view.ColorSectionView2 xmlns:android="http://schemas.android.com/apk/res/android" +<com.android.customization.picker.color.ui.view.ColorSectionView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" @@ -64,4 +64,4 @@ android:textColor="@color/system_primary" android:visibility="gone" tools:ignore="UseCompatTextViewDrawableXml" /> -</com.android.customization.picker.color.ui.view.ColorSectionView2> +</com.android.customization.picker.color.ui.view.ColorSectionView> diff --git a/res/layout/custom_theme_option.xml b/res/layout/custom_theme_option.xml deleted file mode 100644 index aff43a99..00000000 --- a/res/layout/custom_theme_option.xml +++ /dev/null @@ -1,51 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2019 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="match_parent" - android:layout_height="wrap_content" - android:paddingHorizontal="@dimen/option_padding_horizontal" - android:paddingBottom="@dimen/option_bottom_margin" - android:clipChildren="false" - android:clipToPadding="false" - android:orientation="vertical"> - - <TextView - android:id="@+id/option_label" - android:layout_width="@dimen/option_tile_width" - android:layout_height="wrap_content" - android:layout_gravity="center_horizontal" - android:layout_marginBottom="@dimen/theme_option_label_margin" - android:ellipsize="end" - android:gravity="center_horizontal" - android:maxLines="1" - android:textAppearance="@style/OptionTitleTextAppearance"/> - <FrameLayout - android:id="@+id/option_tile" - android:layout_width="@dimen/option_tile_width" - android:layout_height="@dimen/option_tile_width" - android:layout_gravity="center_horizontal" - android:paddingHorizontal="@dimen/option_tile_padding_horizontal" - android:paddingVertical="@dimen/option_tile_padding_vertical" - android:background="@drawable/option_border_custom"> - <ImageView - android:layout_width="@dimen/option_icon_size" - android:layout_height="@dimen/option_icon_size" - android:layout_gravity="center" - android:src="@drawable/ic_add_24px" - android:tint="?android:attr/colorAccent" /> - </FrameLayout> -</LinearLayout> diff --git a/res/layout/fragment_clock_settings.xml b/res/layout/fragment_clock_settings.xml index 5736265d..75dae7e8 100644 --- a/res/layout/fragment_clock_settings.xml +++ b/res/layout/fragment_clock_settings.xml @@ -14,7 +14,6 @@ ~ limitations under the License. ~ --> - <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" @@ -153,17 +152,37 @@ android:layout_gravity="center_vertical" android:minHeight="48dp" android:thumb="@null" + android:contentDescription="@string/accessibility_clock_slider_description" android:background="@null" android:paddingHorizontal="16dp" android:progressDrawable="@drawable/saturation_progress_drawable" android:splitTrack="false" /> </LinearLayout> - <com.android.customization.picker.clock.ui.view.ClockSizeRadioButtonGroup + <RadioGroup android:id="@+id/clock_size_radio_button_group" android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingHorizontal="16dp" /> + android:orientation="vertical" + android:layout_marginHorizontal="16dp"> + <!-- The radio button text is set when binding the view --> + <RadioButton android:id="@+id/radio_dynamic" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:paddingStart="8dp" + android:maxLines="3" + android:ellipsize="end" + android:singleLine="false" + android:layout_marginBottom="8dp"/> + <!-- The radio button text is set when binding the view --> + <RadioButton android:id="@+id/radio_small" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:paddingStart="8dp" + android:maxLines="3" + android:ellipsize="end" + android:singleLine="false" /> + </RadioGroup> </FrameLayout> </LinearLayout> </LinearLayout> diff --git a/res/layout/fragment_color_picker.xml b/res/layout/fragment_color_picker.xml index ebff6a4c..d33fb1fb 100644 --- a/res/layout/fragment_color_picker.xml +++ b/res/layout/fragment_color_picker.xml @@ -133,7 +133,7 @@ It's critical for any TextViews inside the included layout to have text. --> <include - layout="@layout/color_option_2" + layout="@layout/color_option" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="invisible" /> diff --git a/res/layout/fragment_custom_theme_component.xml b/res/layout/fragment_custom_theme_component.xml deleted file mode 100644 index 7bae84bd..00000000 --- a/res/layout/fragment_custom_theme_component.xml +++ /dev/null @@ -1,93 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2019 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" - xmlns:app="http://schemas.android.com/apk/res-auto" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical" - android:background="?android:colorPrimary"> - <include layout="@layout/section_header"/> - - <androidx.constraintlayout.widget.ConstraintLayout - android:layout_width="match_parent" - android:layout_height="match_parent"> - - <FrameLayout - android:id="@+id/component_preview_container" - android:layout_width="match_parent" - android:layout_height="0dp" - android:background="?android:colorPrimary" - app:layout_constrainedHeight="true" - app:layout_constraintBottom_toTopOf="@+id/divider" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintHeight_max="@dimen/preview_pager_max_height" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" - app:layout_constraintVertical_bias="0.0" - app:layout_constraintHeight_percent="@dimen/preview_pager_maximum_height_ratio"> - - <include - android:id="@+id/component_preview_content" - layout="@layout/theme_component_preview" - android:layout_width="match_parent" - android:layout_height="match_parent"/> - </FrameLayout> - - <View - android:id="@+id/divider" - android:layout_width="match_parent" - android:layout_height="1dp" - android:background="?android:colorForeground" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/component_preview_container" - app:layout_constraintBottom_toTopOf="@+id/component_scroll_view"/> - - <ScrollView - android:id="@+id/component_scroll_view" - android:layout_width="match_parent" - android:layout_height="0dp" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/divider" - app:layout_constraintBottom_toBottomOf="parent"> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical"> - - <TextView - android:id="@+id/component_options_title" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginVertical="18dp" - android:layout_marginHorizontal="16dp" - android:textAlignment="center" - android:textAppearance="@style/TitleTextAppearance" - android:textSize="@dimen/component_options_title_size" /> - - <androidx.recyclerview.widget.RecyclerView - android:id="@+id/options_container" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_gravity="center_horizontal"/> - </LinearLayout> - </ScrollView> - </androidx.constraintlayout.widget.ConstraintLayout> -</LinearLayout> diff --git a/res/layout/fragment_custom_theme_name.xml b/res/layout/fragment_custom_theme_name.xml deleted file mode 100644 index 98edd293..00000000 --- a/res/layout/fragment_custom_theme_name.xml +++ /dev/null @@ -1,86 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2019 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" - xmlns:app="http://schemas.android.com/apk/res-auto" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical"> - <include layout="@layout/section_header"/> - - <androidx.constraintlayout.widget.ConstraintLayout - android:layout_width="match_parent" - android:layout_height="match_parent"> - - <FrameLayout - android:id="@+id/component_preview_container" - android:layout_width="match_parent" - android:layout_height="0dp" - android:paddingTop="@dimen/preview_content_padding_top" - android:paddingBottom="@dimen/preview_content_padding_bottom" - android:clipToPadding="false" - app:layout_constrainedHeight="true" - app:layout_constraintBottom_toTopOf="@+id/component_scroll_view" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintHeight_max="@dimen/preview_pager_max_height" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" - app:layout_constraintVertical_bias="0.0" - app:layout_constraintHeight_percent="@dimen/preview_pager_maximum_height_ratio"> - - <include layout="@layout/theme_preview_card"/> - </FrameLayout> - - <ScrollView - android:id="@+id/component_scroll_view" - android:layout_width="match_parent" - android:layout_height="0dp" - android:background="?android:colorPrimary" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/component_preview_container" - app:layout_constraintBottom_toBottomOf="parent"> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical"> - - <TextView - android:id="@+id/component_options_title" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginVertical="18dp" - android:layout_marginHorizontal="16dp" - android:textAlignment="center" - android:textAppearance="@style/TitleTextAppearance" - android:textSize="@dimen/component_options_title_size"/> - - <EditText - android:id="@+id/custom_theme_name" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginVertical="16dp" - android:layout_marginHorizontal="16dp" - android:layout_gravity="center|top" - android:importantForAutofill="no" - android:minWidth="300dp" - style="@style/CustomThemeNameEditText"/> - </LinearLayout> - </ScrollView> - </androidx.constraintlayout.widget.ConstraintLayout> -</LinearLayout> diff --git a/res/layout/fragment_grid.xml b/res/layout/fragment_grid.xml index 8c97d452..f022268b 100644 --- a/res/layout/fragment_grid.xml +++ b/res/layout/fragment_grid.xml @@ -81,7 +81,7 @@ It's critical for any TextViews inside the included layout to have text. --> <include - layout="@layout/grid_option_2" + layout="@layout/grid_option" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="invisible" /> diff --git a/res/layout/fragment_theme_full_preview.xml b/res/layout/fragment_theme_full_preview.xml deleted file mode 100644 index 762af073..00000000 --- a/res/layout/fragment_theme_full_preview.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2020 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="match_parent" - android:layout_height="match_parent" - android:orientation="vertical"> - - <include layout="@layout/section_header"/> - - <FrameLayout - android:layout_width="match_parent" - android:layout_height="0dp" - android:layout_weight="1" - android:paddingTop="@dimen/full_preview_page_default_padding_top" - android:paddingBottom="@dimen/full_preview_page_default_padding_bottom" - android:clipToPadding="false"> - - <include layout="@layout/theme_preview_card"/> - </FrameLayout> -</LinearLayout>
\ No newline at end of file diff --git a/res/layout/fragment_theme_picker.xml b/res/layout/fragment_theme_picker.xml deleted file mode 100644 index 0ecfdd0d..00000000 --- a/res/layout/fragment_theme_picker.xml +++ /dev/null @@ -1,87 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2018 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" - xmlns:app="http://schemas.android.com/apk/res-auto" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical"> - <include layout="@layout/section_header"/> - - <FrameLayout - android:layout_width="match_parent" - android:layout_height="match_parent"> - - <androidx.constraintlayout.widget.ConstraintLayout - android:id="@+id/content_section" - android:layout_width="match_parent" - android:layout_height="match_parent"> - <FrameLayout - android:id="@+id/preview_card_container" - android:layout_width="match_parent" - android:layout_height="0dp" - android:paddingTop="@dimen/preview_content_padding_top" - android:paddingBottom="@dimen/preview_content_padding_bottom" - android:clipToPadding="false" - app:layout_constrainedHeight="true" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toTopOf="parent" - app:layout_constraintBottom_toTopOf="@id/options_container" - app:layout_constraintHeight_max="@dimen/preview_pager_max_height" - app:layout_constraintVertical_bias="0.0" - app:layout_constraintHeight_percent="@dimen/preview_pager_maximum_height_ratio"> - <include layout="@layout/theme_preview_card"/> - </FrameLayout> - - <androidx.recyclerview.widget.RecyclerView - android:id="@+id/options_container" - android:layout_width="match_parent" - android:layout_height="0dp" - android:layout_gravity="bottom|center_horizontal" - android:layout_marginTop="10dp" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toBottomOf="@+id/preview_card_container" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintVertical_bias="1.0"/> - </androidx.constraintlayout.widget.ConstraintLayout> - - <androidx.core.widget.ContentLoadingProgressBar - android:id="@+id/loading_indicator" - style="@android:style/Widget.DeviceDefault.ProgressBar" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginTop="200dp" - android:layout_gravity="center_horizontal|top" - android:indeterminate="true"/> - - <FrameLayout - android:id="@+id/error_section" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:visibility="gone"> - <TextView - android:id="@+id/error_message" - style="@style/TitleTextAppearance" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:gravity="center" - android:text="@string/something_went_wrong"/> - </FrameLayout> - </FrameLayout> -</LinearLayout> diff --git a/res/layout/grid_option.xml b/res/layout/grid_option.xml index 0931deaf..efed018c 100644 --- a/res/layout/grid_option.xml +++ b/res/layout/grid_option.xml @@ -1,47 +1,70 @@ <?xml version="1.0" encoding="utf-8"?> <!-- - Copyright (C) 2019 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" + ~ Copyright (C) 2023 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" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="@dimen/option_item_size" android:layout_height="wrap_content" - android:paddingBottom="@dimen/option_bottom_margin" - android:clipChildren="false" - android:clipToPadding="false" - android:orientation="vertical"> + android:orientation="vertical" + android:gravity="center_horizontal" + android:clipChildren="false"> <FrameLayout - android:id="@+id/option_tile" - android:layout_width="@dimen/option_tile_width" - android:layout_height="@dimen/option_tile_width" - android:layout_gravity="center_horizontal" - android:padding="@dimen/option_tile_padding_vertical" - android:background="@drawable/option_border" - android:gravity="center"> + android:layout_width="@dimen/option_item_size" + android:layout_height="@dimen/option_item_size" + android:clipChildren="false"> + + <ImageView + android:id="@id/selection_border" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@drawable/option_item_border" + android:alpha="0" + android:importantForAccessibility="no" /> + <ImageView - android:id="@+id/grid_option_thumbnail" + android:id="@id/background" android:layout_width="match_parent" - android:layout_height="match_parent"/> + android:layout_height="match_parent" + android:background="@drawable/option_item_background" + android:importantForAccessibility="no" /> + + <ImageView + android:id="@id/foreground" + android:layout_width="58dp" + android:layout_height="58dp" + android:layout_gravity="center" /> + </FrameLayout> + <View + android:layout_width="0dp" + android:layout_height="8dp" /> + <TextView - android:id="@+id/option_label" + android:id="@id/text" android:layout_width="wrap_content" - android:layout_height="24dp" - android:layout_gravity="center_horizontal" - android:layout_marginTop="@dimen/theme_option_label_margin" - android:gravity="center" - android:textAppearance="@style/OptionTitleTextAppearance" /> + android:layout_height="wrap_content" + android:textColor="@color/system_on_surface" + android:singleLine="true" + android:ellipsize="end" + android:text="Placeholder for stable size calculation, please do not remove." + tools:ignore="HardcodedText" /> + </LinearLayout> diff --git a/res/layout/grid_option_2.xml b/res/layout/grid_option_2.xml deleted file mode 100644 index efed018c..00000000 --- a/res/layout/grid_option_2.xml +++ /dev/null @@ -1,70 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - ~ Copyright (C) 2023 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" - xmlns:tools="http://schemas.android.com/tools" - android:layout_width="@dimen/option_item_size" - android:layout_height="wrap_content" - android:orientation="vertical" - android:gravity="center_horizontal" - android:clipChildren="false"> - - <FrameLayout - android:layout_width="@dimen/option_item_size" - android:layout_height="@dimen/option_item_size" - android:clipChildren="false"> - - <ImageView - android:id="@id/selection_border" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:background="@drawable/option_item_border" - android:alpha="0" - android:importantForAccessibility="no" /> - - <ImageView - android:id="@id/background" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:background="@drawable/option_item_background" - android:importantForAccessibility="no" /> - - <ImageView - android:id="@id/foreground" - android:layout_width="58dp" - android:layout_height="58dp" - android:layout_gravity="center" /> - - </FrameLayout> - - <View - android:layout_width="0dp" - android:layout_height="8dp" /> - - <TextView - android:id="@id/text" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:textColor="@color/system_on_surface" - android:singleLine="true" - android:ellipsize="end" - android:text="Placeholder for stable size calculation, please do not remove." - tools:ignore="HardcodedText" /> - -</LinearLayout> diff --git a/res/layout/grid_section_view.xml b/res/layout/grid_section_view.xml index a7b2b1f9..b423ea7c 100644 --- a/res/layout/grid_section_view.xml +++ b/res/layout/grid_section_view.xml @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. --> -<com.android.customization.picker.grid.GridSectionView +<com.android.customization.picker.grid.ui.view.GridSectionView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" @@ -53,4 +53,4 @@ android:background="@drawable/picker_section_icon_background" android:contentDescription="@string/gird_picker_entry_content_description" /> -</com.android.customization.picker.grid.GridSectionView>
\ No newline at end of file +</com.android.customization.picker.grid.ui.view.GridSectionView>
\ No newline at end of file diff --git a/res/layout/notification_section.xml b/res/layout/notification_section.xml index f490e00f..3e29a4e8 100644 --- a/res/layout/notification_section.xml +++ b/res/layout/notification_section.xml @@ -39,6 +39,7 @@ android:id="@+id/switcher" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:focusable="false" android:clickable="false" android:layout_gravity="center" style="@style/Switch.SettingsLib" diff --git a/res/layout/preview_card_color_content.xml b/res/layout/preview_card_color_content.xml deleted file mode 100644 index 9ab90c14..00000000 --- a/res/layout/preview_card_color_content.xml +++ /dev/null @@ -1,160 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2019 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="match_parent" - android:layout_height="match_parent" - android:layout_gravity="center" - android:gravity="center_horizontal" - android:orientation="vertical"> - <LinearLayout - android:layout_width="@dimen/preview_theme_color_component_size" - android:layout_height="wrap_content" - android:gravity="center|bottom" - android:orientation="horizontal"> - <FrameLayout - android:layout_width="@dimen/preview_theme_icon_size" - android:layout_height="@dimen/preview_theme_icon_size" - android:layout_weight="1"> - <ImageView - android:layout_width="@dimen/preview_theme_icon_size" - android:layout_height="@dimen/preview_theme_icon_size" - android:layout_gravity="center" - android:id="@+id/preview_color_qs_0_bg"/> - <ImageView - android:layout_width="@dimen/preview_theme_tile_size" - android:layout_height="@dimen/preview_theme_tile_size" - android:layout_gravity="center" - android:id="@+id/preview_color_qs_0_icon" - android:tint="@color/tile_enabled_icon_color"/> - </FrameLayout> - <Space - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_weight="0" /> - <FrameLayout - android:layout_width="@dimen/preview_theme_icon_size" - android:layout_height="@dimen/preview_theme_icon_size" - android:layout_weight="1"> - <ImageView - android:layout_width="@dimen/preview_theme_icon_size" - android:layout_height="@dimen/preview_theme_icon_size" - android:layout_gravity="center" - android:id="@+id/preview_color_qs_1_bg"/> - <ImageView - android:layout_width="@dimen/preview_theme_tile_size" - android:layout_height="@dimen/preview_theme_tile_size" - android:layout_gravity="center" - android:id="@+id/preview_color_qs_1_icon" - android:tint="@color/tile_enabled_icon_color"/> - </FrameLayout> - <Space - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_weight="0" /> - <FrameLayout - android:layout_width="@dimen/preview_theme_icon_size" - android:layout_height="@dimen/preview_theme_icon_size" - android:layout_weight="1"> - <ImageView - android:layout_width="@dimen/preview_theme_icon_size" - android:layout_height="@dimen/preview_theme_icon_size" - android:layout_gravity="center" - android:id="@+id/preview_color_qs_2_bg"/> - <ImageView - android:layout_width="@dimen/preview_theme_tile_size" - android:layout_height="@dimen/preview_theme_tile_size" - android:layout_gravity="center" - android:id="@+id/preview_color_qs_2_icon" - android:color="@color/tile_enabled_icon_color"/> - </FrameLayout> - </LinearLayout> - <Space - android:layout_width="match_parent" - android:layout_height="0dp" - android:layout_weight="1" /> - <LinearLayout - android:layout_width="@dimen/preview_theme_color_component_size" - android:layout_height="wrap_content" - android:layout_weight="0" - android:orientation="horizontal" - android:gravity="center"> - <SeekBar - android:id="@+id/preview_seekbar" - android:layout_height="wrap_content" - android:layout_width="match_parent" - android:tint="@color/theme_preview_icon_color" - android:maxHeight="2dp" - android:progress="1" - android:clickable="true" - android:max="3"/> - </LinearLayout> - <Space - android:layout_width="match_parent" - android:layout_height="0dp" - android:layout_weight="1" /> - <LinearLayout - android:layout_width="@dimen/preview_theme_color_component_size" - android:layout_height="wrap_content" - android:gravity="center" - android:orientation="horizontal"> - <FrameLayout - android:layout_width="@dimen/preview_theme_icon_size" - android:layout_height="@dimen/preview_theme_icon_size" - android:layout_weight="1"> - <CheckBox - android:id="@+id/preview_check_selected" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:checked="true" - android:enabled="false"/> - </FrameLayout> - <Space - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_weight="0" /> - <FrameLayout - android:layout_width="@dimen/preview_theme_icon_size" - android:layout_height="@dimen/preview_theme_icon_size" - android:layout_weight="1"> - <RadioButton - android:id="@+id/preview_radio_selected" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:checked="true" - android:enabled="false"/> - </FrameLayout> - <Space - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_weight="0" /> - <FrameLayout - android:layout_width="@dimen/preview_theme_icon_size" - android:layout_height="@dimen/preview_theme_icon_size" - android:layout_weight="1"> - <Switch - android:id="@+id/preview_toggle_selected" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:checked="true" - android:enabled="false"/> - </FrameLayout> - </LinearLayout> -</LinearLayout> diff --git a/res/layout/preview_card_font_content.xml b/res/layout/preview_card_font_content.xml deleted file mode 100644 index 408778ee..00000000 --- a/res/layout/preview_card_font_content.xml +++ /dev/null @@ -1,55 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2019 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" - xmlns:tools="http://schemas.android.com/tools" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_gravity="center" - android:orientation="vertical" - tools:showIn="@layout/theme_preview_card"> - <TextView - style="@style/FontCardTitleStyle" - android:id="@+id/font_card_title" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:gravity="center_horizontal" - android:maxLines="1" - android:text="@string/font_card_title"/> - <Space - android:layout_width="match_parent" - android:layout_height="0dp" - android:layout_weight="1"/> - <View - android:id="@+id/font_card_divider" - android:layout_width="16dp" - android:layout_height="2dp" - android:layout_gravity="center" - android:background="?android:colorAccent"/> - <Space - android:layout_width="match_parent" - android:layout_height="0dp" - android:layout_weight="1"/> - <TextView - style="@style/FontCardBodyTextStyle" - android:id="@+id/font_card_body" - android:layout_height="wrap_content" - android:layout_gravity="bottom|center_horizontal" - android:gravity="center_horizontal" - android:text="@string/font_card_body"/> -</LinearLayout>
\ No newline at end of file diff --git a/res/layout/preview_card_icon_content.xml b/res/layout/preview_card_icon_content.xml deleted file mode 100644 index 29620c82..00000000 --- a/res/layout/preview_card_icon_content.xml +++ /dev/null @@ -1,91 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2019 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="match_parent" - android:layout_height="match_parent" - android:layout_gravity="center" - android:gravity="center_horizontal" - android:orientation="vertical"> - <LinearLayout - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:gravity="center_horizontal" - android:orientation="horizontal"> - <ImageView - android:id="@+id/preview_icon_0" - android:layout_width="@dimen/preview_theme_icon_size" - android:layout_height="@dimen/preview_theme_icon_size" - android:layout_weight="1" - android:tint="@color/theme_preview_icon_color"/> - <Space - android:layout_width="@dimen/preview_theme_icon_size" - android:layout_height="match_parent" - android:layout_weight="0" /> - <ImageView - android:id="@+id/preview_icon_1" - android:layout_width="@dimen/preview_theme_icon_size" - android:layout_height="@dimen/preview_theme_icon_size" - android:layout_weight="1" - android:tint="@color/theme_preview_icon_color"/> - <Space - android:layout_width="@dimen/preview_theme_icon_size" - android:layout_height="match_parent" - android:layout_weight="0" /> - <ImageView - android:id="@+id/preview_icon_2" - android:layout_width="@dimen/preview_theme_icon_size" - android:layout_height="@dimen/preview_theme_icon_size" - android:layout_weight="1" - android:tint="@color/theme_preview_icon_color"/> - </LinearLayout> - <Space - android:layout_width="match_parent" - android:layout_height="68dp" /> - <LinearLayout - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:gravity="bottom|center_horizontal" - android:orientation="horizontal"> - <ImageView - android:id="@+id/preview_icon_3" - android:layout_width="@dimen/preview_theme_icon_size" - android:layout_height="@dimen/preview_theme_icon_size" - android:layout_weight="1" - android:tint="@color/theme_preview_icon_color"/> - <Space - android:layout_width="@dimen/preview_theme_icon_size" - android:layout_height="match_parent" - android:layout_weight="0" /> - <ImageView - android:id="@+id/preview_icon_4" - android:layout_width="@dimen/preview_theme_icon_size" - android:layout_height="@dimen/preview_theme_icon_size" - android:layout_weight="1" - android:tint="@color/theme_preview_icon_color"/> - <Space - android:layout_width="@dimen/preview_theme_icon_size" - android:layout_height="match_parent" - android:layout_weight="0" /> - <ImageView - android:id="@+id/preview_icon_5" - android:layout_width="@dimen/preview_theme_icon_size" - android:layout_height="@dimen/preview_theme_icon_size" - android:layout_weight="1" - android:tint="@color/theme_preview_icon_color"/> - </LinearLayout> -</LinearLayout>
\ No newline at end of file diff --git a/res/layout/preview_card_shape_content.xml b/res/layout/preview_card_shape_content.xml deleted file mode 100644 index 0afa6bce..00000000 --- a/res/layout/preview_card_shape_content.xml +++ /dev/null @@ -1,127 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2019 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="match_parent" - android:layout_height="match_parent" - android:layout_gravity="center" - android:gravity="center_horizontal" - android:orientation="vertical"> - <LinearLayout - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:gravity="center_horizontal" - android:orientation="horizontal"> - <FrameLayout - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_weight="1"> - <ImageView - android:id="@+id/shape_preview_icon_0" - android:layout_width="@dimen/preview_theme_shape_size" - android:layout_height="@dimen/preview_theme_shape_size" - android:layout_gravity="center_horizontal" - android:layout_margin="4dp" - android:elevation="4dp"/> - </FrameLayout> - <Space - android:layout_width="@dimen/preview_theme_shape_size" - android:layout_height="match_parent" - android:layout_weight="0" /> - <FrameLayout - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_weight="1"> - <ImageView - android:id="@+id/shape_preview_icon_1" - android:layout_width="@dimen/preview_theme_shape_size" - android:layout_height="@dimen/preview_theme_shape_size" - android:layout_gravity="center_horizontal" - android:layout_margin="4dp" - android:elevation="4dp"/> - </FrameLayout> - <Space - android:layout_width="@dimen/preview_theme_shape_size" - android:layout_height="match_parent" - android:layout_weight="0" /> - <FrameLayout - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_weight="1"> - <ImageView - android:id="@+id/shape_preview_icon_2" - android:layout_width="@dimen/preview_theme_shape_size" - android:layout_height="@dimen/preview_theme_shape_size" - android:layout_gravity="center_horizontal" - android:layout_margin="4dp" - android:elevation="4dp"/> - </FrameLayout> - </LinearLayout> - <Space - android:layout_width="match_parent" - android:layout_height="60dp" /> - <LinearLayout - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:gravity="bottom|center_horizontal" - android:orientation="horizontal"> - <FrameLayout - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_weight="1"> - <ImageView - android:id="@+id/shape_preview_icon_3" - android:layout_width="@dimen/preview_theme_shape_size" - android:layout_height="@dimen/preview_theme_shape_size" - android:layout_gravity="center_horizontal" - android:layout_margin="4dp" - android:elevation="4dp"/> - </FrameLayout> - <Space - android:layout_width="@dimen/preview_theme_shape_size" - android:layout_height="match_parent" - android:layout_weight="0" /> - <FrameLayout - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_weight="1"> - <ImageView - android:id="@+id/shape_preview_icon_4" - android:layout_width="@dimen/preview_theme_shape_size" - android:layout_height="@dimen/preview_theme_shape_size" - android:layout_gravity="center_horizontal" - android:layout_margin="4dp" - android:elevation="4dp"/> - </FrameLayout> - <Space - android:layout_width="@dimen/preview_theme_shape_size" - android:layout_height="match_parent" - android:layout_weight="0" /> - <FrameLayout - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_weight="1"> - <ImageView - android:id="@+id/shape_preview_icon_5" - android:layout_width="@dimen/preview_theme_shape_size" - android:layout_height="@dimen/preview_theme_shape_size" - android:layout_margin="4dp" - android:layout_gravity="center_horizontal" - android:elevation="4dp"/> - </FrameLayout> - </LinearLayout> -</LinearLayout>
\ No newline at end of file diff --git a/res/layout/theme_color_option.xml b/res/layout/theme_color_option.xml deleted file mode 100644 index 8d55626b..00000000 --- a/res/layout/theme_color_option.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2019 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. ---> -<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:layout_marginTop="28dp" - android:layout_marginHorizontal="@dimen/component_options_margin_horizontal"> - - <ImageView - android:id="@+id/option_tile" - android:layout_width="@dimen/component_color_chip_container_size" - android:layout_height="@dimen/component_color_chip_container_size" - android:layout_gravity="center" - android:scaleType="center"/> -</FrameLayout> diff --git a/res/layout/theme_component_preview.xml b/res/layout/theme_component_preview.xml deleted file mode 100644 index 67abe6b6..00000000 --- a/res/layout/theme_component_preview.xml +++ /dev/null @@ -1,58 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2019 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. ---> -<androidx.constraintlayout.widget.ConstraintLayout - xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - xmlns:tools="http://schemas.android.com/tools" - android:id="@+id/theme_preview_card_background" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:clipToPadding="false" - android:maxHeight="@dimen/preview_theme_max_height" - android:minHeight="@dimen/preview_theme_min_height" - android:paddingTop="64dp"> - - <TextView - android:id="@+id/theme_preview_card_header" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center_horizontal" - android:drawablePadding="@dimen/theme_preview_header_drawable_padding" - android:textAppearance="@style/CardTitleTextAppearance" - android:importantForAccessibility="no" - app:layout_constraintBottom_toTopOf="@id/theme_preview_card_body_container" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintHorizontal_bias="0.5" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" - app:layout_constraintVertical_chainStyle="spread_inside" - tools:text="Default"/> - - <FrameLayout - android:id="@+id/theme_preview_card_body_container" - android:layout_width="match_parent" - android:layout_height="0dp" - android:layout_marginTop="@dimen/preview_theme_content_margin" - android:clipChildren="false" - android:importantForAccessibility="noHideDescendants" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintHeight_max="@dimen/preview_theme_content_max_height" - app:layout_constraintHeight_min="@dimen/preview_theme_content_min_height" - app:layout_constraintHorizontal_bias="0.5" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/theme_preview_card_header"/> -</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/res/layout/theme_font_option.xml b/res/layout/theme_font_option.xml deleted file mode 100644 index dea4f789..00000000 --- a/res/layout/theme_font_option.xml +++ /dev/null @@ -1,41 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2019 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:orientation="vertical"> - - <FrameLayout - android:id="@+id/option_tile" - android:layout_width="@dimen/option_tile_width" - android:layout_height="@dimen/option_tile_width" - android:layout_gravity="center_horizontal" - android:paddingHorizontal="@dimen/option_tile_padding_horizontal" - android:paddingVertical="@dimen/option_tile_padding_vertical" - android:layout_marginHorizontal="@dimen/component_options_margin_horizontal" - android:background="@drawable/option_border"> - <TextView - android:id="@+id/thumbnail_text" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:textSize="@dimen/font_comonent_option_thumbnail_size" - android:textAlignment="center" - android:textColor="?android:attr/colorForeground" - android:text="@string/font_component_option_thumbnail"/> - </FrameLayout> -</LinearLayout> diff --git a/res/layout/theme_icon_option.xml b/res/layout/theme_icon_option.xml deleted file mode 100644 index 292b8cdc..00000000 --- a/res/layout/theme_icon_option.xml +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2019 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:orientation="vertical"> - - <FrameLayout - android:id="@+id/option_tile" - android:layout_width="@dimen/option_tile_width" - android:layout_height="@dimen/option_tile_width" - android:layout_gravity="center_horizontal" - android:paddingHorizontal="@dimen/option_tile_padding_horizontal" - android:paddingVertical="@dimen/option_tile_padding_vertical" - android:layout_marginHorizontal="@dimen/component_options_margin_horizontal" - android:background="@drawable/option_border"> - <ImageView - android:id="@+id/option_icon" - android:layout_width="@dimen/component_icon_thumb_size" - android:layout_height="@dimen/component_icon_thumb_size" - android:layout_gravity="center" - android:tint="?android:colorForeground"/> - </FrameLayout> -</LinearLayout> diff --git a/res/layout/theme_info_view.xml b/res/layout/theme_info_view.xml deleted file mode 100644 index 085a35e3..00000000 --- a/res/layout/theme_info_view.xml +++ /dev/null @@ -1,76 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2020 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. ---> -<com.android.customization.picker.theme.ThemeInfoView - xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center_horizontal" - android:orientation="vertical" - android:padding="@dimen/wallpaper_info_pane_padding" - android:theme="@style/WallpaperPicker.BottomPaneStyle"> - - <TextView - android:id="@+id/style_info_title" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginBottom="@dimen/theme_info_margin" - android:gravity="center" - android:lineHeight="24dp" - android:textAppearance="@style/SubtitleTextAppearance" - android:textColor="?android:textColorPrimary" - android:textSize="16sp" - android:text="@string/style_info_description"/> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="horizontal" - android:gravity="center"> - - <TextView - android:id="@+id/font_preview" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:layout_marginHorizontal="@dimen/theme_info_margin" - android:importantForAccessibility="no" - android:textSize="@dimen/theme_info_text_size" - android:textColor="?android:attr/colorForeground" - android:text="@string/font_component_option_thumbnail"/> - - <ImageView - android:id="@+id/qs_preview_icon" - android:layout_width="@dimen/theme_info_icon_size" - android:layout_height="@dimen/theme_info_icon_size" - android:layout_marginHorizontal="@dimen/theme_info_margin" - android:tint="?android:textColorPrimary"/> - - <ImageView - android:id="@+id/app_preview_icon" - android:layout_width="@dimen/theme_info_icon_size" - android:layout_height="@dimen/theme_info_icon_size" - android:layout_marginHorizontal="@dimen/theme_info_margin" - android:layout_marginVertical="@dimen/theme_info_app_preview_icon_margin" - android:elevation="@dimen/theme_info_app_preview_icon_elevation"/> - - <ImageView - android:id="@+id/shape_preview_icon" - android:layout_width="@dimen/theme_info_icon_size" - android:layout_height="@dimen/theme_info_icon_size" - android:layout_marginHorizontal="@dimen/theme_info_margin"/> - </LinearLayout> -</com.android.customization.picker.theme.ThemeInfoView>
\ No newline at end of file diff --git a/res/layout/theme_option.xml b/res/layout/theme_option.xml deleted file mode 100644 index bdf82d0b..00000000 --- a/res/layout/theme_option.xml +++ /dev/null @@ -1,74 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2019 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="match_parent" - android:layout_height="wrap_content" - android:paddingHorizontal="@dimen/option_padding_horizontal" - android:paddingBottom="@dimen/option_bottom_margin" - android:clipChildren="false" - android:clipToPadding="false" - android:orientation="vertical"> - - <TextView - android:id="@+id/option_label" - android:layout_width="@dimen/option_tile_width" - android:layout_height="wrap_content" - android:layout_gravity="center_horizontal" - android:layout_marginBottom="@dimen/theme_option_label_margin" - android:ellipsize="end" - android:gravity="center_horizontal" - android:maxLines="1" - android:textAppearance="@style/OptionTitleTextAppearance"/> - <RelativeLayout - android:id="@+id/option_tile" - android:layout_width="@dimen/option_tile_width" - android:layout_height="@dimen/option_tile_width" - android:layout_gravity="center_horizontal" - android:paddingHorizontal="@dimen/option_tile_padding_horizontal" - android:paddingVertical="@dimen/option_tile_padding_vertical" - android:background="@drawable/option_border"> - <ImageView - android:id="@+id/theme_option_icon" - android:layout_width="@dimen/theme_option_icon_sample_width" - android:layout_height="@dimen/theme_option_icon_sample_height" - android:layout_alignParentTop="true" - android:layout_alignParentStart="true" - android:tint="?android:colorForeground"/> - <ImageView - android:id="@+id/theme_option_shape" - android:layout_width="@dimen/theme_option_shape_sample_width" - android:layout_height="@dimen/theme_option_shape_sample_height" - android:layout_alignBottom="@+id/theme_option_icon" - android:layout_toEndOf="@id/theme_option_icon" - android:layout_marginStart="@dimen/theme_option_sample_margin"/> - <TextView - android:id="@+id/theme_option_font" - android:layout_width="@dimen/theme_option_font_sample_width" - android:layout_height="@dimen/theme_option_font_sample_height" - android:layout_gravity="center" - android:layout_below="@id/theme_option_icon" - android:layout_marginTop="@dimen/option_bottom_margin" - android:autoSizeMaxTextSize="@dimen/theme_option_font_text_size" - android:autoSizeMinTextSize="@dimen/theme_option_font_min_text_size" - android:autoSizeTextType="uniform" - android:gravity="center" - android:letterSpacing=".2" - android:text="@string/theme_font_example" - android:textAlignment="center" - android:textSize="@dimen/theme_option_font_text_size" /> - </RelativeLayout> -</LinearLayout> diff --git a/res/layout/theme_preview_app_icon_shape.xml b/res/layout/theme_preview_app_icon_shape.xml deleted file mode 100644 index fe95f904..00000000 --- a/res/layout/theme_preview_app_icon_shape.xml +++ /dev/null @@ -1,149 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2020 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. ---> -<androidx.constraintlayout.widget.ConstraintLayout - xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical"> - - <androidx.constraintlayout.widget.ConstraintLayout - android:id="@+id/app_row_0" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="horizontal" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toTopOf="parent" - app:layout_constraintBottom_toTopOf="@id/app_row_1"> - - <LinearLayout - android:id="@+id/app_item_0" - android:layout_width="@dimen/preview_theme_app_icon_size" - android:layout_height="wrap_content" - android:gravity="center_horizontal" - android:orientation="vertical" - android:clipChildren="false" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintEnd_toStartOf="@id/app_item_1" - app:layout_constraintTop_toTopOf="parent" - app:layout_constraintBottom_toBottomOf="parent"> - <ImageView - android:id="@+id/shape_preview_icon_0" - android:layout_width="@dimen/preview_theme_app_icon_size" - android:layout_height="@dimen/preview_theme_app_icon_size" - android:elevation="4dp"/> - <TextView - android:id="@+id/shape_preview_icon_app_name_0" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginTop="@dimen/preview_theme_app_icon_shape_text_margin_top" - android:textSize="@dimen/preview_theme_app_icon_shape_text_size" - android:lineHeight="20dp" - android:singleLine="true"/> - </LinearLayout> - - <LinearLayout - android:id="@+id/app_item_1" - android:layout_width="@dimen/preview_theme_app_icon_size" - android:layout_height="wrap_content" - android:gravity="center_horizontal" - android:orientation="vertical" - android:clipChildren="false" - app:layout_constraintStart_toEndOf="@id/app_item_0" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toTopOf="parent" - app:layout_constraintBottom_toBottomOf="parent"> - <ImageView - android:id="@+id/shape_preview_icon_1" - android:layout_width="@dimen/preview_theme_app_icon_size" - android:layout_height="@dimen/preview_theme_app_icon_size" - android:elevation="4dp"/> - <TextView - android:id="@+id/shape_preview_icon_app_name_1" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginTop="@dimen/preview_theme_app_icon_shape_text_margin_top" - android:textSize="@dimen/preview_theme_app_icon_shape_text_size" - android:lineHeight="20dp" - android:singleLine="true"/> - </LinearLayout> - - </androidx.constraintlayout.widget.ConstraintLayout> - - <androidx.constraintlayout.widget.ConstraintLayout - android:id="@+id/app_row_1" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="horizontal" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toBottomOf="@id/app_row_0" - app:layout_constraintBottom_toBottomOf="parent"> - <LinearLayout - android:id="@+id/app_item_2" - android:layout_width="@dimen/preview_theme_app_icon_size" - android:layout_height="wrap_content" - android:gravity="center_horizontal" - android:orientation="vertical" - android:clipChildren="false" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintEnd_toStartOf="@id/app_item_3" - app:layout_constraintTop_toTopOf="parent" - app:layout_constraintBottom_toBottomOf="parent"> - <ImageView - android:id="@+id/shape_preview_icon_2" - android:layout_width="@dimen/preview_theme_app_icon_size" - android:layout_height="@dimen/preview_theme_app_icon_size" - android:elevation="4dp"/> - <TextView - android:id="@+id/shape_preview_icon_app_name_2" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginTop="@dimen/preview_theme_app_icon_shape_text_margin_top" - android:textSize="@dimen/preview_theme_app_icon_shape_text_size" - android:lineHeight="20dp" - android:singleLine="true"/> - </LinearLayout> - - <LinearLayout - android:id="@+id/app_item_3" - android:layout_width="@dimen/preview_theme_app_icon_size" - android:layout_height="wrap_content" - android:gravity="center_horizontal" - android:orientation="vertical" - android:clipChildren="false" - app:layout_constraintStart_toEndOf="@id/app_item_2" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toTopOf="parent" - app:layout_constraintBottom_toBottomOf="parent"> - <ImageView - android:id="@+id/shape_preview_icon_3" - android:layout_width="@dimen/preview_theme_app_icon_size" - android:layout_height="@dimen/preview_theme_app_icon_size" - android:elevation="4dp"/> - <TextView - android:id="@+id/shape_preview_icon_app_name_3" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginTop="@dimen/preview_theme_app_icon_shape_text_margin_top" - android:textSize="@dimen/preview_theme_app_icon_shape_text_size" - android:lineHeight="20dp" - android:singleLine="true"/> - </LinearLayout> - </androidx.constraintlayout.widget.ConstraintLayout> -</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/res/layout/theme_preview_card.xml b/res/layout/theme_preview_card.xml deleted file mode 100644 index 4fc8995c..00000000 --- a/res/layout/theme_preview_card.xml +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2020 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. ---> -<androidx.cardview.widget.CardView - xmlns:android="http://schemas.android.com/apk/res/android" - style="@style/FullContentPreviewCard" - android:id="@+id/theme_preview_card" - android:contentDescription="@string/theme_preview_card_content_description" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_gravity="center"> - - <ImageView - android:id="@+id/wallpaper_preview_image" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:background="?android:colorPrimary" /> - - <SurfaceView - android:id="@+id/wallpaper_preview_surface" - android:layout_width="match_parent" - android:layout_height="match_parent" /> - - <FrameLayout - android:id="@+id/theme_preview_container" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:importantForAccessibility="noHideDescendants" /> -</androidx.cardview.widget.CardView>
\ No newline at end of file diff --git a/res/layout/theme_preview_color_icons.xml b/res/layout/theme_preview_color_icons.xml deleted file mode 100644 index e87a7a1d..00000000 --- a/res/layout/theme_preview_color_icons.xml +++ /dev/null @@ -1,181 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2020 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. ---> -<androidx.cardview.widget.CardView - xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - android:id="@+id/color_icons_section" - android:layout_width="match_parent" - android:layout_height="match_parent"> - - <androidx.constraintlayout.widget.ConstraintLayout - android:layout_width="match_parent" - android:layout_height="match_parent" - android:paddingHorizontal="@dimen/preview_theme_color_icons_padding_horizontal" - android:paddingTop="@dimen/preview_theme_color_icons_padding_top" - android:paddingBottom="@dimen/preview_theme_color_icons_padding_bottom" - android:orientation="vertical" - android:background="?android:colorBackground"> - - <!-- Title --> - <TextView - android:id="@+id/color_icons_section_title" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:text="@string/theme_preview_icons_section_title" - android:textSize="@dimen/preview_theme_color_icons_title_text_size" - android:textColor="?android:textColorSecondary" - android:lineHeight="16dp" - android:gravity="center" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toTopOf="parent" - app:layout_constraintBottom_toTopOf="@id/qs_icons" - app:layout_constraintVertical_bias="0.0" - app:layout_constraintVertical_chainStyle="spread_inside" /> - - <!-- QS icons --> - <LinearLayout - android:id="@+id/qs_icons" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="horizontal" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toBottomOf="@id/color_icons_section_title" - app:layout_constraintBottom_toTopOf="@id/button_icons"> - <FrameLayout - android:layout_width="@dimen/preview_theme_color_icons_icon_size" - android:layout_height="@dimen/preview_theme_color_icons_icon_size"> - <ImageView - android:id="@+id/preview_color_qs_0_bg" - android:layout_width="@dimen/preview_theme_color_icons_icon_size" - android:layout_height="@dimen/preview_theme_color_icons_icon_size"/> - <ImageView - android:id="@+id/preview_color_qs_0_icon" - android:layout_width="@dimen/preview_theme_color_icons_tile_size" - android:layout_height="@dimen/preview_theme_color_icons_tile_size" - android:tint="?android:textColorPrimary" - android:layout_gravity="center"/> - </FrameLayout> - <Space - android:layout_width="0dp" - android:layout_height="wrap_content" - android:layout_weight="1"/> - <FrameLayout - android:layout_width="@dimen/preview_theme_color_icons_icon_size" - android:layout_height="@dimen/preview_theme_color_icons_icon_size" - android:layout_gravity="center_horizontal"> - <ImageView - android:id="@+id/preview_color_qs_1_bg" - android:layout_width="@dimen/preview_theme_color_icons_icon_size" - android:layout_height="@dimen/preview_theme_color_icons_icon_size"/> - <ImageView - android:id="@+id/preview_color_qs_1_icon" - android:layout_width="@dimen/preview_theme_color_icons_tile_size" - android:layout_height="@dimen/preview_theme_color_icons_tile_size" - android:tint="?android:textColorPrimary" - android:layout_gravity="center"/> - </FrameLayout> - <Space - android:layout_width="0dp" - android:layout_height="wrap_content" - android:layout_weight="1"/> - <FrameLayout - android:layout_width="@dimen/preview_theme_color_icons_icon_size" - android:layout_height="@dimen/preview_theme_color_icons_icon_size"> - <ImageView - android:id="@+id/preview_color_qs_2_bg" - android:layout_width="@dimen/preview_theme_color_icons_icon_size" - android:layout_height="@dimen/preview_theme_color_icons_icon_size"/> - <ImageView - android:id="@+id/preview_color_qs_2_icon" - android:layout_width="@dimen/preview_theme_color_icons_tile_size" - android:layout_height="@dimen/preview_theme_color_icons_tile_size" - android:tint="?android:textColorPrimary" - android:layout_gravity="center"/> - </FrameLayout> - <Space - android:layout_width="0dp" - android:layout_height="wrap_content" - android:layout_weight="1"/> - <FrameLayout - android:layout_width="@dimen/preview_theme_color_icons_icon_size" - android:layout_height="@dimen/preview_theme_color_icons_icon_size"> - <ImageView - android:id="@+id/preview_color_qs_3_bg" - android:layout_width="@dimen/preview_theme_color_icons_icon_size" - android:layout_height="@dimen/preview_theme_color_icons_icon_size"/> - <ImageView - android:id="@+id/preview_color_qs_3_icon" - android:layout_width="@dimen/preview_theme_color_icons_tile_size" - android:layout_height="@dimen/preview_theme_color_icons_tile_size" - android:tint="?android:textColorPrimary" - android:layout_gravity="center"/> - </FrameLayout> - </LinearLayout> - - <!-- Icons of CheckBox/RadioButton/Switch. --> - <RelativeLayout - android:id="@+id/button_icons" - android:layout_width="match_parent" - android:layout_height="wrap_content" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toBottomOf="@id/qs_icons" - app:layout_constraintBottom_toBottomOf="parent"> - <FrameLayout - android:layout_width="@dimen/preview_theme_icon_size" - android:layout_height="@dimen/preview_theme_icon_size" - android:layout_alignParentStart="true"> - <CheckBox - android:id="@+id/preview_check_selected" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:checked="true" - android:enabled="false"/> - </FrameLayout> - - <FrameLayout - android:layout_width="@dimen/preview_theme_icon_size" - android:layout_height="@dimen/preview_theme_icon_size" - android:layout_centerHorizontal="true"> - <RadioButton - android:id="@+id/preview_radio_selected" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:checked="true" - android:enabled="false"/> - </FrameLayout> - - <FrameLayout - android:layout_width="wrap_content" - android:layout_height="@dimen/preview_theme_icon_size" - android:layout_alignParentEnd="true"> - <Switch - android:id="@+id/preview_toggle_selected" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:checked="true" - android:enabled="false"/> - </FrameLayout> - </RelativeLayout> - - </androidx.constraintlayout.widget.ConstraintLayout> -</androidx.cardview.widget.CardView> diff --git a/res/layout/theme_preview_content.xml b/res/layout/theme_preview_content.xml deleted file mode 100644 index 4b296171..00000000 --- a/res/layout/theme_preview_content.xml +++ /dev/null @@ -1,92 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2020 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. ---> -<androidx.constraintlayout.widget.ConstraintLayout - xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:paddingTop="@dimen/preview_theme_content_padding_top" - android:paddingBottom="@dimen/preview_theme_content_padding_bottom" - android:clipToPadding="false" - android:clipChildren="false"> - - <FrameLayout - android:id="@+id/topbar_container" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginHorizontal="@dimen/preview_theme_topbar_container_margin_horizontal" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toTopOf="parent" - app:layout_constraintBottom_toTopOf="@id/smart_space_date" - app:layout_constraintVertical_bias="0.0" - app:layout_constraintVertical_chainStyle="spread_inside"> - <include layout="@layout/theme_preview_topbar" /> - </FrameLayout> - - <TextView - android:id="@+id/smart_space_date" - android:layout_width="match_parent" - android:layout_height="0dp" - android:textSize="@dimen/preview_theme_smart_space_date_size" - android:singleLine="true" - android:gravity="center|bottom" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toBottomOf="@id/topbar_container" - app:layout_constraintBottom_toTopOf="@id/app_icon_shape_container" - app:layout_constraintHeight_percent="0.1" /> - - <FrameLayout - android:id="@+id/app_icon_shape_container" - android:layout_width="match_parent" - android:layout_height="0dp" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toBottomOf="@id/smart_space_date" - app:layout_constraintBottom_toTopOf="@id/color_icons_container" - app:layout_constraintHeight_percent="0.49"> - <include layout="@layout/theme_preview_app_icon_shape" /> - </FrameLayout> - - <FrameLayout - android:id="@+id/color_icons_container" - android:layout_width="match_parent" - android:layout_height="0dp" - android:layout_marginHorizontal="@dimen/preview_theme_color_icons_container_margin_horizontal" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toBottomOf="@id/app_icon_shape_container" - app:layout_constraintBottom_toTopOf="@id/theme_qsb_container" - app:layout_constraintHeight_percent="0.275"> - <include layout="@layout/theme_preview_color_icons" /> - </FrameLayout> - - <FrameLayout - android:id="@+id/theme_qsb_container" - android:layout_width="match_parent" - android:layout_height="0dp" - android:layout_marginHorizontal="@dimen/preview_theme_qsb_container_margin_horizontal" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toBottomOf="@id/color_icons_container" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintHeight_percent="0.1"> - <include layout="@layout/theme_cover_qsb" /> - </FrameLayout> - -</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/res/layout/theme_preview_topbar.xml b/res/layout/theme_preview_topbar.xml deleted file mode 100644 index af69de96..00000000 --- a/res/layout/theme_preview_topbar.xml +++ /dev/null @@ -1,56 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2019 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. ---> -<FrameLayout - xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - android:id="@+id/theme_preview_top_bar" - android:layout_width="match_parent" - android:layout_height="wrap_content" - tools:visibility="visible" - tools:showIn="@layout/theme_preview_card"> - <TextView - android:id="@+id/theme_preview_clock" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="start|center_vertical" - android:textColor="?android:textColorSecondary" - android:textSize="@dimen/preview_theme_cover_topbar_clock_size" - tools:text="8:10"/> - <LinearLayout - android:id="@+id/theme_preview_top_bar_icons" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="end|center_vertical" - android:orientation="horizontal"> - <ImageView - android:id="@+id/preview_icon_0" - android:layout_width="@dimen/preview_theme_cover_topbar_icon_size" - android:layout_height="@dimen/preview_theme_cover_topbar_icon_size" - android:tint="?android:textColorSecondary"/> - <ImageView - android:id="@+id/preview_icon_1" - android:layout_width="@dimen/preview_theme_cover_topbar_icon_size" - android:layout_height="@dimen/preview_theme_cover_topbar_icon_size" - android:layout_marginHorizontal="8dp" - android:tint="?android:textColorSecondary"/> - <ImageView - android:id="@+id/preview_icon_2" - android:layout_width="@dimen/preview_theme_cover_topbar_icon_size" - android:layout_height="@dimen/preview_theme_cover_topbar_icon_size" - android:tint="?android:textColorSecondary"/> - </LinearLayout> -</FrameLayout>
\ No newline at end of file diff --git a/res/layout/theme_shape_option.xml b/res/layout/theme_shape_option.xml deleted file mode 100644 index c5682c0b..00000000 --- a/res/layout/theme_shape_option.xml +++ /dev/null @@ -1,33 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2019 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:orientation="vertical"> - <FrameLayout - android:id="@+id/option_tile" - android:layout_width="@dimen/option_tile_width" - android:layout_height="@dimen/option_tile_width" - android:layout_gravity="center" - android:layout_marginHorizontal="@dimen/component_options_margin_horizontal"> - <ImageView - android:id="@+id/shape_thumbnail" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_gravity="center"/> - </FrameLayout> -</LinearLayout> diff --git a/res/menu/custom_theme_editor_menu.xml b/res/menu/custom_theme_editor_menu.xml deleted file mode 100644 index 70191810..00000000 --- a/res/menu/custom_theme_editor_menu.xml +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2019 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. ---> -<menu xmlns:android="http://schemas.android.com/apk/res/android"> - <item - android:id="@+id/custom_theme_delete" - android:title="@string/custom_theme_delete" - android:icon="@drawable/ic_delete_24px" - android:showAsAction="always"/> -</menu>
\ No newline at end of file diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index e016927e..f6ba1f8f 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Gepasmaakte horlosie"</string> <string name="clock_description" msgid="3563839327378948">"Kies gepasmaakte horlosie"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Verander ’n gepasmaakte horlosie"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Horlosie-instellings"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Horlosieskermopsie <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Horlosiekleur en grootte"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Horlosiekleur en grootte"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Kleur"</string> @@ -40,7 +41,8 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Horlosiegrootte verander na gelang van sluitskerminhoud"</string> <string name="clock_size_large" msgid="3143248715744138979">"Groot"</string> <string name="clock_size_small" msgid="2280449912094164133">"Klein"</string> - <string name="grid_title" msgid="1688173478777254123">"Programrooster"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"’n Klein horlosie word in die hoek van jou skerm gewys"</string> + <string name="grid_title" msgid="1688173478777254123">"Approoster"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Pas toe"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Tik om te wysig"</string> <string name="keep_my_wallpaper" msgid="8012385376769568517">"Hou huidige muurpapier"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Voeg jou gunstelinglettertipes op elke skerm by"</string> <string name="grid_options_title" msgid="7071930966989877023">"Kies \'n roostergrootte"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> x <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Roostergrootteverandering sal werkspasie herlaai; kan paar sekondes neem."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Herlaai tans werkspasie met %1$s rooster"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Kon nie werkspasie met %1$s rooster herlaai nie"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Styl is suksesvol gestel"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Horlosie is suksesvol gestel"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Rooster is suksesvol gestel"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Gepasmaakte kleur"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Gepasmaakte vorm"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Gepasmaakte stylnaam"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Kleurintensiteit"</string> <string name="mode_title" msgid="2394873501427436055">"Donkertema"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Tydelik gedeaktiveer vanweë Batterybespaarder"</string> <string name="mode_changed" msgid="2243581369395418584">"Tema het verander"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Links-kortpad"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Regs-kortpad"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Geen"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Merk die volgende as jy “<xliff:g id="APPNAME">%1$s</xliff:g>” wil kies"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Kan nie kortpad byvoeg nie"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Maak <xliff:g id="APPNAME">%1$s</xliff:g> oop"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Om die <xliff:g id="APPNAME">%1$s</xliff:g>-app as ’n kortpad by te voeg, moet jy seker maak dat"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Klaar"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Geen"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Wys kennisgewings op die sluitskerm"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Versteek kennisgewings op die sluitskerm"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"Meer sluitskermopsies"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"Privaatheid, Wat Speel, en meer"</string> <string name="more_colors" msgid="3191071655353004591">"Nog kleure"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Primêre omvattende tema"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Primêre neutrale tema"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Primêre intense tema"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Primêre ekspressiewe tema"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Verstekkleuropsie"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Kleuropsie <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Swiep links om ’n ander horlosieskerm te kies"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Swiep regs om ’n ander horlosieskerm te kies"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Gepasmaakte horlosies"</string> </resources> diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index 2c611574..d377f400 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"ብጁ ሰዓት"</string> <string name="clock_description" msgid="3563839327378948">"ብጁ ሰዓት ይምረጡ"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"ብጁ ሰዓትን ይለውጡ"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"የClock ቅንብሮች"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"የሰዓት ፊት አማራጭ <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"የClock ቀለም እና መጠን"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"የClock ቀለም እና መጠን"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>፣ <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"ቀለም"</string> @@ -37,19 +38,20 @@ <string name="clock_color_teal" msgid="7499223425741344251">"ደማቅ አረንጓዴ-ሰማያዊ"</string> <string name="clock_size" msgid="5028923902364418263">"መጠን"</string> <string name="clock_size_dynamic" msgid="1023930312455061642">"ተለዋዋጭ"</string> - <string name="clock_size_dynamic_description" msgid="2776620745774561662">"የClock መጠን በማያ ገጽ ቁልፍ ይዘት መሰረት ይለወጣል"</string> + <string name="clock_size_dynamic_description" msgid="2776620745774561662">"የClock መጠን በማያ ገፅ ቁልፍ ይዘት መሰረት ይለወጣል"</string> <string name="clock_size_large" msgid="3143248715744138979">"ትልቅ"</string> <string name="clock_size_small" msgid="2280449912094164133">"ትንሽ"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"በእርስዎ ማያ ገፅ ጥግ ላይ ትንሽ ሰዓት ይታያል"</string> <string name="grid_title" msgid="1688173478777254123">"የመተግበሪያ ፍርግርግ"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"ተግብር"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"ለማርትዕ መታ ያድርጉ"</string> <string name="keep_my_wallpaper" msgid="8012385376769568517">"የአሁኑን ልጣፍ ያቆዩት"</string> - <string name="theme_preview_card_content_description" msgid="5989222908619535533">"የቅጥ ቅድመ-እይታ"</string> - <string name="grid_preview_card_content_description" msgid="8449383777584714842">"የፍርግርግ ቅድመ-እይታ"</string> - <string name="font_preview_content_description" msgid="128230439293337891">"የቅርጸ-ቁምፊ ቅድመ-እይታ"</string> - <string name="icon_preview_content_description" msgid="7761101284351952890">"የአዶ ቅድመ-እይታ"</string> - <string name="color_preview_content_description" msgid="4879120462082058124">"የቀለም ቅድመ-እይታ"</string> - <string name="shape_preview_content_description" msgid="6479487796176550432">"የቅርጽ ቅድመ-እይታ"</string> + <string name="theme_preview_card_content_description" msgid="5989222908619535533">"የቅጥ ቅድመ-ዕይታ"</string> + <string name="grid_preview_card_content_description" msgid="8449383777584714842">"የፍርግርግ ቅድመ-ዕይታ"</string> + <string name="font_preview_content_description" msgid="128230439293337891">"የቅርጸ-ቁምፊ ቅድመ-ዕይታ"</string> + <string name="icon_preview_content_description" msgid="7761101284351952890">"የአዶ ቅድመ-ዕይታ"</string> + <string name="color_preview_content_description" msgid="4879120462082058124">"የቀለም ቅድመ-ዕይታ"</string> + <string name="shape_preview_content_description" msgid="6479487796176550432">"የቅርጽ ቅድመ-ዕይታ"</string> <string name="option_applied_description" msgid="5022305212078053534">"<xliff:g id="ID_1">%1$s</xliff:g>፣ አሁን ላይ ተፈጻሚ ሆኗል"</string> <string name="option_applied_previewed_description" msgid="5269654286638446858">"<xliff:g id="ID_1">%1$s</xliff:g>, currently applied and previewed"</string> <string name="option_previewed_description" msgid="3467217598865047661">"<xliff:g id="ID_1">%1$s</xliff:g>, currently previewed"</string> @@ -62,9 +64,12 @@ <string name="preview_name_shape" msgid="5676971146080968721">"ቅርጽ"</string> <string name="preview_name_wallpaper" msgid="1738652462949531828">"ልጣፍ"</string> <string name="font_card_title" msgid="2343292653502548685">"ABC • abc • 123"</string> - <string name="font_card_body" msgid="6790525594503904468">"የእርስዎን ተወዳጅ ቁፊዎች ወደ ሁሉም ማያ ገጽ ያክሉ"</string> + <string name="font_card_body" msgid="6790525594503904468">"የእርስዎን ተወዳጅ ቁፊዎች ወደ ሁሉም ማያ ገፅ ያክሉ"</string> <string name="grid_options_title" msgid="7071930966989877023">"የፍርግርግ መጠን ይምረጡ"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"የፍርግርግ መጠንን መለወጥ መሥሪያ ቦታን ዳግም ይጭናል እና ጥቂት ደቂቃዎችን ሊወስድ ይችላል።"</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"በ%1$s ፍርግርግ መሥሪያ ቦታን እንደገና መጫን"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"በ%1$s ፍርግርግ መሥሪያ ቦታን እንደገና መጫን አልተሳካም"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"ቅጥ በተሳካ ሁኔታ ተቀናብሯል"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"ሰዓት በተሳካ ሁኔታ ተቀናብሯል"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"ፍርግርግ በተሳካ ሁኔታ ተቀናብሯል"</string> @@ -89,15 +94,16 @@ <string name="use_style_instead_body" msgid="3051937045807471496">"የመረጧቸው ክፍላተ አካላት የ <xliff:g id="ID_1">%1$s</xliff:g> ቅጥ ጋር ይዛመዳሉ። በምትኩ <xliff:g id="ID_2">%1$s</xliff:g> መጠቀም ይፈልጋሉ?"</string> <string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g>ን ይጠቀሙ"</string> <string name="no_thanks" msgid="7286616980115687627">"አይ፣ አመሰግናለሁ"</string> - <string name="clock_preview_content_description" msgid="5460561185905717460">"የ<xliff:g id="ID_1">%1$s</xliff:g> ሰዓት ቅድመ-እይታ"</string> + <string name="clock_preview_content_description" msgid="5460561185905717460">"የ<xliff:g id="ID_1">%1$s</xliff:g> ሰዓት ቅድመ-ዕይታ"</string> <string name="something_went_wrong" msgid="529840112449799117">"ውይ! የሆነ ችግር ተፈጥሯል።"</string> <string name="theme_preview_icons_section_title" msgid="7064768910744000643">"ቀለም / አዶዎች"</string> - <string name="style_info_description" msgid="2612473574431003251">"የቅርጸ-ቁምፊ፣ የአዶዎች፣ የመተግበሪያ ቅርጽ እና የቀለም ቅድመ-እይታ"</string> + <string name="style_info_description" msgid="2612473574431003251">"የቅርጸ-ቁምፊ፣ የአዶዎች፣ የመተግበሪያ ቅርጽ እና የቀለም ቅድመ-ዕይታ"</string> <string name="accessibility_custom_font_title" msgid="966867359157303705">"ብጁ ቅርጸ-ቁምፊ"</string> <string name="accessibility_custom_icon_title" msgid="5753297905849062296">"ብጁ አዶ"</string> <string name="accessibility_custom_color_title" msgid="4124246598886320663">"ብጁ ቀለም"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"ብጁ ቅርጽ"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"ብጁ የቅጥ ስም"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"የቀለም ጥንካሬ"</string> <string name="mode_title" msgid="2394873501427436055">"ጠቆር ያለ ገጽታ"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"በባትሪ ኃይል ቆጣቢ ምክንያት ለጊዜው ተሰናክሏል"</string> <string name="mode_changed" msgid="2243581369395418584">"ገጽታ ተቀይሯል"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"የግራ አቋራጭ"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"የቀኝ አቋራጭ"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"ምንም"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"«<xliff:g id="APPNAME">%1$s</xliff:g>»ን ለመምረጥ የሚከተሉትን ይፈትሹ"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"አቋራጭን ማከል አልተቻለም"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> ይክፈቱ"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"የ<xliff:g id="APPNAME">%1$s</xliff:g> መተግበሪያን እንደ አቋራጭ ለማከል የሚከተሉትን ማድረግዎን እርግጠኛ ይሁኑ"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"ተከናውኗል"</string> @@ -124,13 +130,17 @@ <string name="keyguard_quick_affordance_section_title" msgid="2806304242671717309">"አቋራጮች"</string> <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>፣ <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"ምንም"</string> - <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"በማያ ገጽ ቁልፉ ላይ ማሳወቂያዎችን አሳይ"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"በማያ ገጽ ቁልፉ ላይ ማሳወቂያዎችን ደብቅ"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"በማያ ገፅ ቁልፉ ላይ ማሳወቂያዎችን አሳይ"</string> + <string name="more_settings_section_title" msgid="1331425454775815958">"ተጨማሪ የማያ ገፅ ቁልፍ አማራጮች"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"ግላዊነት፣ አሁን በመጫወት ላይ እና ሌሎችም"</string> <string name="more_colors" msgid="3191071655353004591">"ተጨማሪ ቀለማት"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"የመጀመሪያ ተለዋዋጭ ገጽታ"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"የመጀመሪያ ገለልተኛ ገጽታ"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"የመጀመሪያ ንቁ ገጽታ"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"የመጀመሪያ ገላጭ ገጽታ"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"ነባሪ የቀለም አማራጭ"</string> <string name="content_description_color_option" msgid="4169813692012119578">"የቀለም አማራጭ <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"የተለየ የሰዓት መልክ ለመምረጥ ወደ ግራ ያንሸራትቱ"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"የተለየ የሰዓት መልክ ለመምረጥ ወደ ቀኝ ያንሸራትቱ"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"ብጁ ሰዓቶች"</string> </resources> diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index f3a3fae0..86670d76 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"خلفية شاشة ساعة مخصّصة"</string> <string name="clock_description" msgid="3563839327378948">"اختيار خلفية شاشة ساعة مخصّصة"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"تغيير خلفية شاشة ساعة مخصّصة"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"إعدادات الساعة"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"خيار تصميم الساعة: <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"لون الساعة وحجمها"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"لون الساعة وحجمها"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g> و<xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"اللون"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"يتغير حجم الساعة وفقًا للمحتوى على شاشة القفل."</string> <string name="clock_size_large" msgid="3143248715744138979">"كبير"</string> <string name="clock_size_small" msgid="2280449912094164133">"صغير"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"تظهر ساعة صغيرة في زاوية الشاشة."</string> <string name="grid_title" msgid="1688173478777254123">"شبكة التطبيقات"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"تطبيق"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"انقُر للتعديل."</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"يمكنك إضافة خطوطك المفضّلة إلى كل شاشة."</string> <string name="grid_options_title" msgid="7071930966989877023">"اختيار حجم الشبكة"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"سيؤدي تغيير حجم الشبكة إلى إعادة تحميل مساحة العمل وقد يستغرق ذلك بضع ثوانٍ."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"إعادة تحميل مساحة العمل باستخدام شبكة %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"تعذّرت إعادة تحميل مساحة العمل باستخدام شبكة %1$s."</string> <string name="applied_theme_msg" msgid="3749018706366796244">"تم ضبط النمط."</string> <string name="applied_clock_msg" msgid="1303338016701443767">"تم ضبط الساعة."</string> <string name="applied_grid_msg" msgid="3250499654436933034">"تم ضبط الشبكة."</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"لون مخصص"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"شكل مخصص"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"اسم نمط مخصص"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"كثافة اللون"</string> <string name="mode_title" msgid="2394873501427436055">"المظهر الداكن"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"تم الإيقاف مؤقتًا بسبب تفعيل ميزة \"توفير شحن البطارية\"."</string> <string name="mode_changed" msgid="2243581369395418584">"تم تغيير المظهر."</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"اختصار اليمين"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"اختصار اليسار"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"بدون أزرار"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"لاختيار \"<xliff:g id="APPNAME">%1$s</xliff:g>\"، تأكّد مما يلي:"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"تعذُّر إضافة الاختصار"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"فتح <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"لإضافة تطبيق \"<xliff:g id="APPNAME">%1$s</xliff:g>\" كاختصار، تأكَّد من"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"تم"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"\"<xliff:g id="FIRST">%1$s</xliff:g>\" و\"<xliff:g id="SECOND">%2$s</xliff:g>\""</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"بدون اختصارات"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"إظهار الإشعارات على شاشة القفل"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"إخفاء الإشعارات على شاشة القفل"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"المزيد من خيارات شاشة القفل"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"الخصوصية وميزة \"التعرّف التلقائي على الموسيقى\" وغير ذلك"</string> <string name="more_colors" msgid="3191071655353004591">"المزيد من الألوان"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"مظهر ديناميكي أساسي"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"مظهر أساسي محايد"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"مظهر أساسي نابض بالحياة"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"مظهر أساسي معبِّر"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"خيار اللون التلقائي"</string> <string name="content_description_color_option" msgid="4169813692012119578">"خيار اللون <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"مرِّر سريعًا لليمين لاختيار تصميم ساعة مختلف."</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"مرِّر سريعًا لليسار لاختيار تصميم ساعة مختلف."</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"تصميمات ساعة مخصّصة"</string> </resources> diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml index 6279d5d0..ac66386d 100644 --- a/res/values-as/strings.xml +++ b/res/values-as/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"কাষ্টম ঘড়ী"</string> <string name="clock_description" msgid="3563839327378948">"কাষ্টম ঘড়ী বাছক"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"কাষ্টম ঘড়ী সলনি কৰক"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"ঘড়ীৰ ছেটিং"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"ক্লক ফে’চৰ বিকল্প <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"ঘড়ীৰ ৰং আৰু আকাৰ"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"ঘড়ীৰ ৰং আৰু আকাৰ"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"ৰং"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"বন্ধ স্ক্ৰীনৰ সমল অনুসৰি ঘড়ীৰ আকাৰ সলনি হয়"</string> <string name="clock_size_large" msgid="3143248715744138979">"ডাঙৰ"</string> <string name="clock_size_small" msgid="2280449912094164133">"সৰু"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"আপোনাৰ স্ক্ৰীনখনৰ চুকত এটা সৰু ঘড়ীয়ে দেখুৱায়"</string> <string name="grid_title" msgid="1688173478777254123">"এপৰ গ্ৰিড"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"প্ৰয়োগ কৰক"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"সম্পাদনা কৰিবলৈ টিপক"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"প্ৰত্যেকখন স্ক্ৰীনত আপোনাৰ প্ৰিয় ফ’ণ্ট যোগ দিয়ক"</string> <string name="grid_options_title" msgid="7071930966989877023">"এটা গ্ৰিডৰ আকাৰ বাছনি কৰক"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"গ্ৰিড আকাৰ সলনি কৰিলে ৱৰ্কস্পেছ পুনৰ ল’ড হ’ব আৰু কেইছেকেণ্ডমান সময় লাগিব পাৰে।"</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"%1$s গ্ৰিডৰ সৈতে ৱৰ্কস্পেছ পুনৰ ল’ড কৰি থকা হৈছে"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"%1$s গ্ৰিডৰ সৈতে ৱৰ্কস্পেছ পুনৰ ল’ড কৰিব পৰা নগ’ল"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"শৈলী সফলতাৰে ছেট কৰা হ’ল"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"ঘড়ী সফলতাৰে ছেট কৰা হ’ল"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"গ্ৰিড সফলতাৰে ছেট কৰা হ’ল"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"কাষ্টম ৰং"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"কাষ্টম আকৃতি"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"কাষ্টম শৈলীৰ নাম"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"ৰঙৰ গাঢ়তা"</string> <string name="mode_title" msgid="2394873501427436055">"গাঢ় ৰঙৰ থীম"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"বেটাৰী সঞ্চয়কাৰীৰ বাবে অস্থায়ীভাৱে অক্ষম কৰা হৈছে"</string> <string name="mode_changed" msgid="2243581369395418584">"থীম সলনি কৰা হৈছে"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"বাওঁ শ্বৰ্টকাট"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"সোঁ শ্বৰ্টকাট"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"নাই"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"`<xliff:g id="APPNAME">%1$s</xliff:g>` বাছনি কৰিবলৈ এয়া পৰীক্ষা কৰক"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"শ্বৰ্টকাট যোগ কৰিব নোৱাৰি"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> খোলক"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> এপ্টোক এটা শ্বৰ্টকাট হিচাপে যোগ দিবলৈ, এইকেইটা কথা নিশ্চিত কৰক"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"কৰা হ’ল"</string> @@ -124,13 +130,17 @@ <string name="keyguard_quick_affordance_section_title" msgid="2806304242671717309">"শ্বৰ্টকাট"</string> <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"নাই"</string> - <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"বন্ধ স্ক্ৰীনত জাননী দেখুৱাওক"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"বন্ধ স্ক্ৰীনত জাননী লুকুৱাওক"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"লক স্ক্ৰীনত জাননী দেখুৱাওক"</string> + <string name="more_settings_section_title" msgid="1331425454775815958">"লক স্ক্ৰীনৰ অধিক বিকল্প"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"গোপনীয়তা, সদ্য পৰিৱেশিত গীত আৰু অধিক"</string> <string name="more_colors" msgid="3191071655353004591">"অধিক ৰং"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"প্ৰাথমিক ডাইনামিক থীম"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"প্ৰাথমিক নিৰপেক্ষ থীম"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"প্ৰাথমিক জীৱন্ত থীম"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"প্ৰাথমিক অভিব্যক্তিপূৰ্ণ থীম"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"ডিফ’ল্ট ৰঙৰ বিকল্প"</string> <string name="content_description_color_option" msgid="4169813692012119578">"ৰঙৰ বিকল্প <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"অন্য কোনো ক্লক ফে’চ বাছনি কৰিবলৈ বাওঁফাললৈ ছোৱাইপ কৰক"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"অন্য কোনো ক্লক ফে’চ বাছনি কৰিবলৈ সোঁফাললৈ ছোৱাইপ কৰক"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"কাষ্টম ঘড়ী"</string> </resources> diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml index 8a971ed5..8b04e461 100644 --- a/res/values-az/strings.xml +++ b/res/values-az/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Fərdi Saat"</string> <string name="clock_description" msgid="3563839327378948">"Fərdi saat seç"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Fərdi saatı dəyişdir"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Saat Ayarları"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Siferblat seçimi <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Saat rəngi və ölçü"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Saat rəngi və ölçüsü"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Rəng"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Saat ölçüsü kilid ekranının məzmununa görə dəyişir"</string> <string name="clock_size_large" msgid="3143248715744138979">"Böyük"</string> <string name="clock_size_small" msgid="2280449912094164133">"Kiçik"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Ekranın mərkəzində kiçik saat görünür"</string> <string name="grid_title" msgid="1688173478777254123">"Tətbiq toru"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Tətbiq edin"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Redaktə etmək üçün klikləyin"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Sevimli şriftlərinizi hər ekrana əlavə edin"</string> <string name="grid_options_title" msgid="7071930966989877023">"Tor ölçüsü seçin"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Tor ölçüsü dəyişəndə iş yeri yenidən yüklənəcək."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"%1$s toru ilə iş yeri yenidən yüklənir"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"%1$s toru ilə iş yeri yenidən yüklənmədi"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Üslub uğurla ayarlandı"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Saat uğurla ayarlandı"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Tor uğurla ayarlandı"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Fərdi rəng"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Fərdi forma"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Fərdi üslub adı"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Rəng intensivliyi"</string> <string name="mode_title" msgid="2394873501427436055">"Tünd tema"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Enerjiyə Qənaət rejiminə görə müvəqqəti deaktivdir"</string> <string name="mode_changed" msgid="2243581369395418584">"Tema dəyişdirildi"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Sol qısayol"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Sağ qısayol"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Heç biri"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"\"<xliff:g id="APPNAME">%1$s</xliff:g>\" seçmək üçün aşağıdakıları yoxlayın"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Qısayol əlavə etmək olmur"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> linkini açın"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> tətbiqini qısayol kimi əlavə etmək üçün bunları təmin edin:"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Hazırdır"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Heç biri"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Kilid ekranında bildirişləri göstərin"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Kilid ekranında bildirişləri gizlədin"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"Digər kilid ekranı seçimləri"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"Məxfilik, İndi Efirdə və s."</string> <string name="more_colors" msgid="3191071655353004591">"Digər rənglər"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Əsas dinamik tema"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Əsas neytral tema"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Əsas canlı tema"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Əsas ekspressiv tema"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Defolt rəng seçimi"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Rəng seçimi <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Fərqli siferblat seçmək üçün sola sürüşdürün"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Fərqli siferblat seçmək üçün sağa sürüşdürün"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Fərdi saatlar"</string> </resources> diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml index f887be1f..423424cc 100644 --- a/res/values-b+sr+Latn/strings.xml +++ b/res/values-b+sr+Latn/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Prilagođeni sat"</string> <string name="clock_description" msgid="3563839327378948">"Prilagođeni sat"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Promenite prilagođeni sat"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Podešavanja sata"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Opcija brojčanika <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Boja i veličina sata"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Boja i veličina sata"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Boja"</string> @@ -39,7 +40,8 @@ <string name="clock_size_dynamic" msgid="1023930312455061642">"Dinamički"</string> <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Veličina sata se menja u skladu sa sadržajem zaključanog ekrana"</string> <string name="clock_size_large" msgid="3143248715744138979">"Veliko"</string> - <string name="clock_size_small" msgid="2280449912094164133">"Malo"</string> + <string name="clock_size_small" msgid="2280449912094164133">"Mali"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Mali sat se prikazuje u uglu ekrana"</string> <string name="grid_title" msgid="1688173478777254123">"Mreža apl."</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Primeni"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Dodirnite da biste izmenili"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Dodajte omiljene fontove na svaki ekran"</string> <string name="grid_options_title" msgid="7071930966989877023">"Odaberite veličinu mreže"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Nova veličina mreže ponovo učitava radni prostor za par sekundi."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Radni prostor se ponovo učitava uz mrežu %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Ponovno učitavanje radnog prostora uz mrežu %1$s nije uspelo"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Stil je podešen"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Podešavanje sata je uspelo"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Mreža je podešena"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Prilagođena boja"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Prilagođeni oblik"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Prilagođeni naziv stila"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Intenzitet boja"</string> <string name="mode_title" msgid="2394873501427436055">"Tamna tema"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Privremeno je onemogućeno zbog uštede baterije"</string> <string name="mode_changed" msgid="2243581369395418584">"Tema je promenjena"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Leva prečica"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Desna prečica"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Ništa"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Da biste izabrali „<xliff:g id="APPNAME">%1$s</xliff:g>“, proverite sledeće"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Dodavanje prečice nije uspelo"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Otvorite: <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Da biste dodali aplikaciju <xliff:g id="APPNAME">%1$s</xliff:g> kao prečicu, uverite se"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Gotovo"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Ništa"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Prikazuj obaveštenja na zaključanom ekranu"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Sakrij obaveštenja na zaključanom ekranu"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"Još opcija za zaključani ekran"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"Privatnost, Trenutno svira i drugo"</string> <string name="more_colors" msgid="3191071655353004591">"Još boja"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Primarna dinamična tema"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Primarna neutralna tema"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Primarna intenzivna tema"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Primarna ekspresivna tema"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Podrazumevana opcija boje"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Opcija boje <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Prevucite nalevo da biste odabrali drugi brojčanik"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Prevucite nadesno da biste odabrali drugi brojčanik"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Prilagođeni satovi"</string> </resources> diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml index fec9d8b6..dc2321dc 100644 --- a/res/values-be/strings.xml +++ b/res/values-be/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Гадзіннік"</string> <string name="clock_description" msgid="3563839327378948">"Выбар цыферблата"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Змяненне цыферблата"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Гадзіннік"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Выбраны цыферблат: <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Колер/памер гадз-ка"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Колер і памер гадзінніка"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Колер"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Памер гадзінніка змяняецца ў залежнасці ад змесціва на экране блакіроўкі"</string> <string name="clock_size_large" msgid="3143248715744138979">"Вялікі"</string> <string name="clock_size_small" msgid="2280449912094164133">"Дробны"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Невялікі гадзіннік у вугле экрана"</string> <string name="grid_title" msgid="1688173478777254123">"Сетка праграм"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Ужыць"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Дакраніцеся, каб рэдагаваць"</string> @@ -55,7 +57,7 @@ <string name="option_previewed_description" msgid="3467217598865047661">"<xliff:g id="ID_1">%1$s</xliff:g>, цяпер папярэдне паказваецца"</string> <string name="option_change_applied_previewed_description" msgid="9197311327728570816">"<xliff:g id="ID_1">%1$s</xliff:g>, змяніце выбранае і папярэдне прагледжанае"</string> <string name="theme_description" msgid="3697012391785254635">"Шрыфт: <xliff:g id="ID_1">%1$s</xliff:g>, значкі: <xliff:g id="ID_2">%2$s</xliff:g>, фігура: <xliff:g id="ID_3">%3$s</xliff:g>, колер: <xliff:g id="ID_4">%4$s</xliff:g>"</string> - <string name="default_theme_title" msgid="2555741736622366797">"Стандартна"</string> + <string name="default_theme_title" msgid="2555741736622366797">"Стандарт"</string> <string name="preview_name_font" msgid="4465423899630037038">"Шрыфт"</string> <string name="preview_name_icon" msgid="6818927315316316440">"Значок"</string> <string name="preview_name_color" msgid="8776203144994416172">"Колер"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Дадавайце любімыя шрыфты на кожны экран"</string> <string name="grid_options_title" msgid="7071930966989877023">"Выберыце памер сеткі"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Пры змене памеру сеткі будзе абноўлена працоўная вобласць. Увесь працэс можа заняць некалькі секунд."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Ідзе абнаўленне працоўнай вобласці з сеткай %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Не ўдалося абнавіць працоўную вобласць з сеткай %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Стыль паспяхова зададзены"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Гадзіннік паспяхова зададзены"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Сетка паспяхова зададзена"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Карыстальніцкі колер"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Карыстальніцкая форма"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Назва карыстальніцкага стылю"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Інтэнсіўнасць колеру"</string> <string name="mode_title" msgid="2394873501427436055">"Цёмная тэма"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Часова выключана ў рэжыме эканоміі зараду"</string> <string name="mode_changed" msgid="2243581369395418584">"Тэма зменена"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Ярлык \"улева\""</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Ярлык \"управа\""</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Няма"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Каб выбраць праграму \"<xliff:g id="APPNAME">%1$s</xliff:g>\", зрабіце наступнае"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Не ўдалося дадаць ярлык."</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Адкрыць \"<xliff:g id="APPNAME">%1$s</xliff:g>\""</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Каб дадаць ярлык для праграмы \"<xliff:g id="APPNAME">%1$s</xliff:g>\", патрабуюцца наступныя ўмовы:"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Гатова"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Няма"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Паказваць апавяшчэнні на экране блакіроўкі"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Не паказваць апавяшчэнні на экране блакіроўкі"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Больш параметраў экрана блакіроўкі"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Прыватнасць, Зараз іграе і іншае"</string> <string name="more_colors" msgid="3191071655353004591">"Больш колераў"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Дынамічная асноўная тэма"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Нейтральная асноўная тэма"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Яскравая асноўная тэма"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Выразная асноўная тэма"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Стандартны варыянт колеру"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Варыянт колеру <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Каб выбраць іншы цыферблат, правядзіце пальцам улева"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Каб выбраць іншы цыферблат, правядзіце пальцам управа"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Карыстальніцкія цыферблаты"</string> </resources> diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index eb5386d7..0e1fbc74 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Персонал. циферблат"</string> <string name="clock_description" msgid="3563839327378948">"Персон. циферблат: Избор"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Промяна на персонализиран циферблат"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Часовник: Настройки"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Опция за циферблата: <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Часовн.: Цвят и размер"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Часовн.: Цвят и размер"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Цвят"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Размерът на часовника се променя според съдържанието на заключения екран"</string> <string name="clock_size_large" msgid="3143248715744138979">"Голям"</string> <string name="clock_size_small" msgid="2280449912094164133">"Малък"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"В ъгъла на екрана се показва малък часовник"</string> <string name="grid_title" msgid="1688173478777254123">"Решетка с прил."</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Прилагане"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Докоснете, за да редактирате"</string> @@ -55,7 +57,7 @@ <string name="option_previewed_description" msgid="3467217598865047661">"Понастоящем е визуализирана опцията „<xliff:g id="ID_1">%1$s</xliff:g>“"</string> <string name="option_change_applied_previewed_description" msgid="9197311327728570816">"Промяна на избраната и визуализирана опция „<xliff:g id="ID_1">%1$s</xliff:g>“"</string> <string name="theme_description" msgid="3697012391785254635">"Шрифт: <xliff:g id="ID_1">%1$s</xliff:g> – икони: <xliff:g id="ID_2">%2$s</xliff:g> – форма: <xliff:g id="ID_3">%3$s</xliff:g> – цвят: <xliff:g id="ID_4">%4$s</xliff:g>"</string> - <string name="default_theme_title" msgid="2555741736622366797">"Основно"</string> + <string name="default_theme_title" msgid="2555741736622366797">"Основен"</string> <string name="preview_name_font" msgid="4465423899630037038">"Шрифт"</string> <string name="preview_name_icon" msgid="6818927315316316440">"Икона"</string> <string name="preview_name_color" msgid="8776203144994416172">"Цвят"</string> @@ -64,7 +66,10 @@ <string name="font_card_title" msgid="2343292653502548685">"ABC • abc • 123"</string> <string name="font_card_body" msgid="6790525594503904468">"Добавете любимите си шрифтове на всеки екран"</string> <string name="grid_options_title" msgid="7071930966989877023">"Избиране на размер на решетката"</string> - <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> x <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Преоразм. на решетката презарежда раб. простр. и отнема няколко сек."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Работното пространство се презарежда с решетка с размер %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Презареждането на работното пространство с решетка с размер %1$s не бе успешно"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Стилът бе зададен успешно"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Часовникът бе зададен успешно"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Решетката бе зададена успешно"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Персонализиран цвят"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Персонализирана фигура"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Име на персонализирания стил"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Наситеност на цветовете"</string> <string name="mode_title" msgid="2394873501427436055">"Тъмна тема"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Временно деактивирано с цел режим за запазване на батерията"</string> <string name="mode_changed" msgid="2243581369395418584">"Темата бе променена"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Ляв пряк път"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Десен пряк път"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Без"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"За да изберете <xliff:g id="APPNAME">%1$s</xliff:g>, проверете следното:"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Прекият път не може да се добави"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Отваряне на <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"За да добавите пряк път към приложението <xliff:g id="APPNAME">%1$s</xliff:g>, трябва да се уверите в следното:"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Готово"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Няма"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Показване на известията на заключения екран"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Скриване на известията на заключения екран"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Още опции за заключения екран"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Поверителност, „Сега слушате“ и др."</string> <string name="more_colors" msgid="3191071655353004591">"Още цветове"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Динамичен цвят от основната тема"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Неутрален цвят от основната тема"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Ярък цвят от основната тема"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Експресивен цвят от основната тема"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Опция за цвета по подразбиране"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Опция за цвета: <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Плъзнете наляво, за да изберете друг циферблат"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Плъзнете надясно, за да изберете друг циферблат"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Персонализирани часовници"</string> </resources> diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml index b3a323a9..f4f4a92a 100644 --- a/res/values-bn/strings.xml +++ b/res/values-bn/strings.xml @@ -22,8 +22,9 @@ <string name="clock_title" msgid="1974314575211361352">"কাস্টম ঘড়ি"</string> <string name="clock_description" msgid="3563839327378948">"কাস্টম ঘড়ি বেছে নিন"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"কাস্টম ঘড়ি পরিবর্তন করুন"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"ঘড়ির \'সেটিংস\'"</string> - <string name="clock_color_and_size_title" msgid="7146791234905111351">"ঘড়ির রঙ & সাইজ"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"ঘড়ির ডায়ালের বিকল্প <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"ঘড়ির রঙ & সাইজ"</string> + <string name="clock_color_and_size_title" msgid="7146791234905111351">"ঘড়ির রঙ ও সাইজ"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"রঙ"</string> <string name="clock_color_red" msgid="3843504214807597810">"লাল"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"লক স্ক্রিনের কন্টেন্ট অনুযায়ী ঘড়ির সাইজ পরিবর্তন হয়"</string> <string name="clock_size_large" msgid="3143248715744138979">"বড়"</string> <string name="clock_size_small" msgid="2280449912094164133">"ছোট করুন"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"স্ক্রিনের কোনায় একটি ছোট ঘড়ি দেখানো হয়"</string> <string name="grid_title" msgid="1688173478777254123">"অ্যাপ গ্রিড"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"প্রয়োগ করুন"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"এডিট করতে ট্যাপ করুন"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"প্রতিটি স্ক্রিনে আপনার পছন্দের ফন্ট যোগ করুন"</string> <string name="grid_options_title" msgid="7071930966989877023">"গ্রিডের সাইজ বেছে নিন"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"গ্রিড সাইজ বদলালে ওয়ার্কস্পেস রিলোড করা হবে ও এতে কয়েক সেকেন্ড লাগতে পারে।"</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"%1$s গ্রিড সহ ওয়ার্কস্পেস রিলোড করা হচ্ছে"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"%1$s গ্রিড সহ ওয়ার্কস্পেস রিলোড করা যায়নি"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"স্টাইল সফলভাবে সেট করা হয়েছে"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"ঘড়ি সফলভাবে সেট করা হয়েছে"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"গ্রিড সফলভাবে সেট করা হয়েছে"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"কাস্টম রঙ"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"কাস্টম আকৃতি"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"কাস্টম স্টাইলের নাম"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"কালার ইন্টেনসিটি"</string> <string name="mode_title" msgid="2394873501427436055">"ডার্ক থিম"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"ব্যাটারি সেভারের কারণে সাময়িকভাবে বন্ধ করা আছে"</string> <string name="mode_changed" msgid="2243581369395418584">"থিম পরিবর্তন করা হয়েছে"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"বাঁদিকের শর্টকাট"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"ডানদিকের শর্টকাট"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"কোনওটিই নয়"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"`<xliff:g id="APPNAME">%1$s</xliff:g>` বেছে নিতে, এগুলি চেক করুন"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"শর্টকার্ট যোগ করা যাচ্ছে না"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> খুলুন"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"শর্টকাট হিসেবে <xliff:g id="APPNAME">%1$s</xliff:g> অ্যাপ যোগ করতে, এইসব বিষয় নিশ্চিত করতে হবে"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"হয়ে গেছে"</string> @@ -124,13 +130,17 @@ <string name="keyguard_quick_affordance_section_title" msgid="2806304242671717309">"শর্টকাট"</string> <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"কোনও শর্টকাট নেই"</string> - <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"লক স্ক্রিনে বিজ্ঞপ্তি দেখান"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"লক স্ক্রিনে বিজ্ঞপ্তি লুকান"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"লক স্ক্রিনে বিজ্ঞপ্তি দেখুন"</string> + <string name="more_settings_section_title" msgid="1331425454775815958">"লক স্ক্রিনের আরও বিকল্প"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"গোপনীয়তা, এখন চলছে এবং আরও অনেক কিছু"</string> <string name="more_colors" msgid="3191071655353004591">"আরও রঙ"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"প্রাইমারি ডায়নামিক থিম"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"প্রাইমারি নিউট্রাল থিম"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"প্রাইমারি ভাইব্রেন্ট থিম"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"প্রাইমারি এক্সপ্রেসিভ থিম"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"রঙের ডিফল্ট বিকল্প"</string> <string name="content_description_color_option" msgid="4169813692012119578">"রঙের বিকল্প <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"অন্য ধরনের ঘড়ির ডায়াল বেছে নিতে বাঁদিকে সোয়াইপ করুন"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"অন্য ধরনের ঘড়ির ডায়াল বেছে নিতে ডানদিকে সোয়াইপ করুন"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"কাস্টমাইজ করা ঘড়ি"</string> </resources> diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml index c2fd8a8f..fc1ff2f5 100644 --- a/res/values-bs/strings.xml +++ b/res/values-bs/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Prilagođeni sat"</string> <string name="clock_description" msgid="3563839327378948">"Odabir prilagođ. sata"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Promijenite prilagođeni sat"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Postavke Sata"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Opcija brojčanika <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Boja i veličina sata"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Boja i veličina sata"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Boja"</string> @@ -36,10 +37,11 @@ <string name="clock_color_gray" msgid="9221530636948859231">"Siva"</string> <string name="clock_color_teal" msgid="7499223425741344251">"Tirkizna"</string> <string name="clock_size" msgid="5028923902364418263">"Veličina"</string> - <string name="clock_size_dynamic" msgid="1023930312455061642">"Dinamički"</string> + <string name="clock_size_dynamic" msgid="1023930312455061642">"Dinamično"</string> <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Veličina sata se mijenja u skladu sa sadržajem na zaključanom ekranu"</string> <string name="clock_size_large" msgid="3143248715744138979">"Veliko"</string> <string name="clock_size_small" msgid="2280449912094164133">"Malo"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Mali sat se prikazuje u uglu vašeg ekrana"</string> <string name="grid_title" msgid="1688173478777254123">"Mreža aplikacija"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Primijeni"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Dodirnite da uredite"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Dodajte omiljene fontove na svaki ekran"</string> <string name="grid_options_title" msgid="7071930966989877023">"Odaberite veličinu mreže"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Mijenjanje vel. mreže može potrajati nekoliko s."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Ponovno učitavanje radnog prostora s mrežom %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Ponovno učitavanje radnog prostora s mrežom %1$s nije uspjelo"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Stil je uspješno postavljen"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Sat je uspješno postavljen"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Mreža je uspješno postavljena"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Prilagođena boja"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Prilagođeni oblik"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Naziv prilagođenog stila"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Intenzitet boja"</string> <string name="mode_title" msgid="2394873501427436055">"Tamna tema"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Privremeno onemogućeno zbog uštede baterije"</string> <string name="mode_changed" msgid="2243581369395418584">"Tema je promijenjena"</string> @@ -111,12 +117,12 @@ <string name="preset_color_tab_2" msgid="1444107326712562538">"Druge boje"</string> <string name="preset_color_subheader" msgid="8230588536141279371">"Odaberite bilo koju boju za ikone, sat i drugo"</string> <string name="color_changed" msgid="7029571720331641235">"Boja je promijenjena"</string> - <string name="adaptive_color_title" msgid="1336508599235896205">"Dinamički"</string> + <string name="adaptive_color_title" msgid="1336508599235896205">"Dinamično"</string> <string name="color_picker_title" msgid="6666830057938082864">"Boje sistema"</string> - <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Prečica lijevo"</string> - <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Prečica desno"</string> + <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Lijeva prečica"</string> + <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Desna prečica"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Ništa"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Da odaberete aplikaciju \"<xliff:g id="APPNAME">%1$s</xliff:g>\" provjerite sljedeće"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Nije moguće dodati prečicu"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Otvori aplikaciju <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Da dodate aplikaciju <xliff:g id="APPNAME">%1$s</xliff:g> kao prečicu, pobrinite se za sljedeće"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Gotovo"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Ništa"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Prikaz obavještenja na zaključanom ekranu"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Sakrivanje obavještenja na zaključanom ekranu"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"Više opcija zaključavanja ekrana"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"Privatnost, Trenutno se reproducira i drugo"</string> <string name="more_colors" msgid="3191071655353004591">"Više boja"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Primarna dinamična tema"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Primarna neutralna tema"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Primarna živahna tema"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Primarna ekspresivna tema"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Zadana opcija boje"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Opcija boje <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Odabir drugog brojčanika prevlačenjem ulijevo"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Odabir drugog brojčanika prevlačenjem udesno"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Prilagođeni satovi"</string> </resources> diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index fa98f975..99c84794 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -22,8 +22,9 @@ <string name="clock_title" msgid="1974314575211361352">"Rellotge pers."</string> <string name="clock_description" msgid="3563839327378948">"Tria rellotge pers."</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Canvia un rellotge personalitzat"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Config. rellotge"</string> - <string name="clock_color_and_size_title" msgid="7146791234905111351">"Color i mida rellotge"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Opció d\'esfera de rellotge <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Color i mida rellotge"</string> + <string name="clock_color_and_size_title" msgid="7146791234905111351">"Color i mida del rellotge"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Color"</string> <string name="clock_color_red" msgid="3843504214807597810">"Vermell"</string> @@ -36,10 +37,11 @@ <string name="clock_color_gray" msgid="9221530636948859231">"Gris"</string> <string name="clock_color_teal" msgid="7499223425741344251">"Verd blavós"</string> <string name="clock_size" msgid="5028923902364418263">"Mida"</string> - <string name="clock_size_dynamic" msgid="1023930312455061642">"Dinàmica"</string> + <string name="clock_size_dynamic" msgid="1023930312455061642">"Dinàmic"</string> <string name="clock_size_dynamic_description" msgid="2776620745774561662">"La mida del rellotge canvia d\'acord amb el contingut de la pantalla de bloqueig"</string> <string name="clock_size_large" msgid="3143248715744138979">"Gran"</string> <string name="clock_size_small" msgid="2280449912094164133">"Petit"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Es mostra un rellotge petit a l\'extrem de la pantalla"</string> <string name="grid_title" msgid="1688173478777254123">"Quadrícula d\'apps"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Aplica"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Toca per editar"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Afegeix els teus tipus de lletra preferits a cada pantalla"</string> <string name="grid_options_title" msgid="7071930966989877023">"Tria una mida de quadrícula"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> x <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Canviar la quadrícula recarrega l\'àrea de treball i tarda uns segons."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"S\'està tornant a carregar l\'àrea de treball amb la quadrícula %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"No s\'ha pogut tornar a carregar l\'àrea de treball amb la quadrícula %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"L\'estil s\'ha definit correctament"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"El rellotge s\'ha definit correctament"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"La quadrícula s\'ha definit correctament"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Color personalitzat"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Forma personalitzada"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Nom d\'estil personalitzat"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Intensitat de color"</string> <string name="mode_title" msgid="2394873501427436055">"Tema fosc"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Desactivat temporalment per Estalvi de bateria"</string> <string name="mode_changed" msgid="2243581369395418584">"S\'ha canviat el tema"</string> @@ -105,8 +111,8 @@ <string name="beta_title" msgid="8703819523760746458">"Beta"</string> <string name="gird_picker_entry_content_description" msgid="9087651470212293439">"Canvia la quadrícula d\'aplicacions"</string> <string name="wallpaper_color_tab" msgid="1447926591721403840">"Colors del fons"</string> - <string name="wallpaper_color_subheader" msgid="4044464573669965670">"Icones, text i més poden combinar amb els colors del fons"</string> - <string name="wallpaper_color_title" msgid="5687965239180986458">"Color del fons de pantalla"</string> + <string name="wallpaper_color_subheader" msgid="4044464573669965670">"Combina el color d\'icones, text i més amb el fons"</string> + <string name="wallpaper_color_title" msgid="5687965239180986458">"Color de fons de pantalla"</string> <string name="preset_color_tab" msgid="3133391839341329314">"Colors bàsics"</string> <string name="preset_color_tab_2" msgid="1444107326712562538">"Altres colors"</string> <string name="preset_color_subheader" msgid="8230588536141279371">"Tria qualsevol color per a les icones, el rellotge i més"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Drecera de l\'esquerra"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Drecera de la dreta"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Cap"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Per seleccionar <xliff:g id="APPNAME">%1$s</xliff:g>, comprova el següent"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"La drecera no es pot afegir"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Obre <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Per afegir l\'aplicació <xliff:g id="APPNAME">%1$s</xliff:g> com a drecera, assegura\'t que:"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Fet"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Cap"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Mostra les notificacions a la pantalla de bloqueig"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Amaga les notificacions a la pantalla de bloqueig"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Opcions de pantalla de bloqueig"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Privadesa, Està sonant i més"</string> <string name="more_colors" msgid="3191071655353004591">"Més colors"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Tema dinàmic principal"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Tema neutral principal"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Tema intens principal"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Tema expressiu principal"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Opció de color predeterminada"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Opció de color <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Llisca a l\'esquerra per triar una altra esfera de rellotge"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Llisca a la dreta per triar una altra esfera de rellotge"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Rellotges personalitzats"</string> </resources> diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index f8539017..4eb0eb46 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Vlastní hodiny"</string> <string name="clock_description" msgid="3563839327378948">"Výběr vlastních hodin"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Změna vlastních hodin"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Nastavení hodin"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Možnost ciferníku <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Barva a velikost"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Barva a velikost"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Barva"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Velikost hodin se mění podle obsahu obrazovky uzamčení"</string> <string name="clock_size_large" msgid="3143248715744138979">"Velká"</string> <string name="clock_size_small" msgid="2280449912094164133">"Malé"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"V rohu obrazovky se zobrazují malé hodiny"</string> <string name="grid_title" msgid="1688173478777254123">"Mřížka aplikací"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Použít"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Klepnutím upravte"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Přidejte si oblíbená písma na všechny obrazovky"</string> <string name="grid_options_title" msgid="7071930966989877023">"Vyberte velikost mřížky"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> × <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Změna velikosti mřížky povede k opětovnému načtení pracovního prostoru, což může trvat několik sekund."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Opětovné načítání pracovního prostoru s mřížkou %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Opětovné načtení pracovního prostoru s mřížkou %1$s se nezdařilo"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Styl byl úspěšně nastaven"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Hodiny byly úspěšně nastaveny"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Mřížka byla úspěšně nastavena"</string> @@ -98,10 +103,11 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Vlastní barva"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Vlastní tvar"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Název vlastního stylu"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Intenzita barvy"</string> <string name="mode_title" msgid="2394873501427436055">"Tmavý motiv"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Dočasně deaktivováno spořičem baterie"</string> <string name="mode_changed" msgid="2243581369395418584">"Motiv byl změněn"</string> - <string name="themed_icon_title" msgid="7312460430471956558">"Tematické ikony"</string> + <string name="themed_icon_title" msgid="7312460430471956558">"Přebarvené ikony"</string> <string name="beta_title" msgid="8703819523760746458">"Beta"</string> <string name="gird_picker_entry_content_description" msgid="9087651470212293439">"Změnit mřížku aplikací"</string> <string name="wallpaper_color_tab" msgid="1447926591721403840">"Barvy tapety"</string> @@ -112,25 +118,29 @@ <string name="preset_color_subheader" msgid="8230588536141279371">"Vyberte barvu pro ikony, hodiny atd."</string> <string name="color_changed" msgid="7029571720331641235">"Barva byla změněna"</string> <string name="adaptive_color_title" msgid="1336508599235896205">"Dynamické"</string> - <string name="color_picker_title" msgid="6666830057938082864">"Barvy systému"</string> + <string name="color_picker_title" msgid="6666830057938082864">"Systémové barvy"</string> <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Zkratka vlevo"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Zkratka vpravo"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Žádné"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Aby bylo možné vybrat aplikaci <xliff:g id="APPNAME">%1$s</xliff:g>, zkontrolujte následující"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Zástupce nelze přidat"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Otevřít aplikaci <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Podmínky pro to, aby aplikaci <xliff:g id="APPNAME">%1$s</xliff:g> bylo možné přidat jako zkratku:"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Hotovo"</string> - <string name="keyguard_quick_affordance_title" msgid="4242813186995735584">"Zástupci"</string> - <string name="keyguard_quick_affordance_section_title" msgid="2806304242671717309">"Zástupci"</string> + <string name="keyguard_quick_affordance_title" msgid="4242813186995735584">"Zkratky"</string> + <string name="keyguard_quick_affordance_section_title" msgid="2806304242671717309">"Zkratky"</string> <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Žádné"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Zobrazovat oznámení na obrazovce uzamčení"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Skrýt oznámení na obrazovce uzamčení"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Další možnosti obrazovky uzamčení"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Soukromí, Co to hraje a další"</string> <string name="more_colors" msgid="3191071655353004591">"Další barvy"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Primární dynamický motiv"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Primární neutrální motiv"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Primární živý motiv"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Primární expresivní motiv"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Výchozí barevná varianta"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Barevná varianta <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Přejetím doleva vyberete jiný ciferník"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Přejetím doprava vyberete jiný ciferník"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Vlastní hodiny"</string> </resources> diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 8dbb97c6..4319b93f 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Tilpasset ur"</string> <string name="clock_description" msgid="3563839327378948">"Vælg tilpasset ur"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Juster et tilpasset ur"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Indstillinger for Ur"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Valgmulighed for urskive <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Urets farve og str."</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Urets farve og størrelse"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Farve"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Størrelsen på uret ændrer sig baseret på indhold på låseskærmen"</string> <string name="clock_size_large" msgid="3143248715744138979">"Stor"</string> <string name="clock_size_small" msgid="2280449912094164133">"Lille"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Et lille ur vises i hjørnet af skærmen"</string> <string name="grid_title" msgid="1688173478777254123">"Appgitter"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Anvend"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Tryk for at redigere"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Føj dine foretrukne skrifttyper til alle skærmbilleder"</string> <string name="grid_options_title" msgid="7071930966989877023">"Vælg gitterstørrelse"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Når du ændrer gitterstørrelsen genindlæses arbejdsområdet, hvilket kan tage et par sekunder."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Genindlæser arbejdsområde med gitteret %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Arbejdsområdet med gitteret %1$s kunne ikke genindlæses"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Stilen er nu angivet"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Uret er nu indstillet"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Gitteret er nu oprettet"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Tilpasset farve"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Tilpasset form"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Navn på tilpasset stil"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Farveintensitet"</string> <string name="mode_title" msgid="2394873501427436055">"Mørkt tema"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Midlertidigt deaktiveret på grund af Batterisparefunktion"</string> <string name="mode_changed" msgid="2243581369395418584">"Temaet er ændret"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Venstre genvej"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Højre genvej"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Ingen"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Hvis du vil vælge \"<xliff:g id="APPNAME">%1$s</xliff:g>\", skal du tjekke følgende"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Genvejen kan ikke tilføjes"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Åbn <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Før du tilføjer <xliff:g id="APPNAME">%1$s</xliff:g>-appen som en genvej, skal du sørge for følgende:"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Udfør"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Ingen"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Vis notifikationer på låseskærmen"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Skjul notifikationer på låseskærmen"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Flere muligheder for låseskærm"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Privatliv, Find sangen m.m."</string> <string name="more_colors" msgid="3191071655353004591">"Flere farver"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Primært dynamisk tema"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Primært neutralt tema"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Primært farverigt tema"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Primært varieret tema"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Standardfarve"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Farvevalg <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Stryg til venstre for at vælge en anden urskive"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Stryg til højre for at vælge en anden urskive"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Tilpassede urskiver"</string> </resources> diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 26839472..09e70ec3 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -17,12 +17,13 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="1647136562008520313">"Hintergrund & Stil"</string> + <string name="app_name" msgid="1647136562008520313">"Hintergrund und Stil"</string> <string name="theme_title" msgid="2144932106319405101">"Design"</string> <string name="clock_title" msgid="1974314575211361352">"Benutzerdefinierte Uhr"</string> <string name="clock_description" msgid="3563839327378948">"Benutzerdefinierte Uhr wählen"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Benutzerdefinierte Uhr ändern"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Uhr-Einstellungen"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Zifferblatt-Option <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Uhr-Farbe & -Größe"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Uhr-Farbe & -Größe"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Farbe"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Die Größe der Uhr ändert sich je nach Inhalt auf dem Sperrbildschirm"</string> <string name="clock_size_large" msgid="3143248715744138979">"Groß"</string> <string name="clock_size_small" msgid="2280449912094164133">"Klein"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Eine kleine Uhr wird in der Ecke des Displays angezeigt"</string> <string name="grid_title" msgid="1688173478777254123">"App-Raster"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Anwenden"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Zum Bearbeiten tippen"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Füg jedem Bildschirm deine bevorzugten Schriftarten hinzu"</string> <string name="grid_options_title" msgid="7071930966989877023">"Rastergröße auswählen"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> x <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Durch Ändern der Rastergröße wird der Arbeitsbereich neu geladen. Dies kann ein paar Sekunden dauern."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Arbeitsbereich wird mit Rastergröße %1$s neu geladen"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Arbeitsbereich konnte mit Rastergröße %1$s nicht neu geladen werden"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Design festgelegt"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Uhr festgelegt"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Raster festgelegt"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Benutzerdefinierte Farbe"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Benutzerdefiniertes Format"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Name des benutzerdefinierten Stils"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Farbintensität"</string> <string name="mode_title" msgid="2394873501427436055">"Dunkles Design"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Wegen Energiesparmodus vorübergehend deaktiviert"</string> <string name="mode_changed" msgid="2243581369395418584">"Design geändert"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Linke Verknüpf."</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Rechte Verknüpf."</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Keine"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Prüfe Folgendes, um <xliff:g id="APPNAME">%1$s</xliff:g>` auszuwählen"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Verknüpfung kann nicht hinzugefügt werden"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> öffnen"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Wenn du die <xliff:g id="APPNAME">%1$s</xliff:g> App als eine Verknüpfung hinzufügen möchtest, müssen folgende Bedingungen erfüllt sein"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Fertig"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Keine"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Benachrichtigungen auf dem Sperrbildschirm einblenden"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Benachrichtigungen auf dem Sperrbildschirm ausblenden"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Weitere Sperrbildschirmoptionen"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Datenschutz, Now Playing und mehr"</string> <string name="more_colors" msgid="3191071655353004591">"Weitere Farben"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Primäres dynamisches Design"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Primäres neutrales Design"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Primäres lebhaftes Design"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Primäres ausdrucksstarkes Design"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Standardfarboption"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Farboption <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Nach links wischen, um ein anderes Zifferblatt auszuwählen"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Nach rechts wischen, um ein anderes Zifferblatt auszuwählen"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Individuelle Zifferblätter"</string> </resources> diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 38a4cf69..189068fa 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Προσαρ. ρολόι"</string> <string name="clock_description" msgid="3563839327378948">"Επιλογή προσαρ. ρολογιού"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Αλλαγή προσαρ. ρολογιού"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Ρυθμ. ρολογιού"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Επιλογή όψης ρολογιού <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Χρώμα/μέγεθ. ρολογ."</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Χρώμα και μέγεθος"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Χρώμα"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Το μέγεθος του ρολογιού αλλάζει ανάλογα με το περιεχόμενο της οθόνης κλειδώματος"</string> <string name="clock_size_large" msgid="3143248715744138979">"Μεγάλο"</string> <string name="clock_size_small" msgid="2280449912094164133">"Μικρό"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Ένα μικρό ρολόι εμφανίζεται στη γωνία της οθόνης"</string> <string name="grid_title" msgid="1688173478777254123">"Πλέγμα εφαρμ."</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Εφαρμογή"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Πατήστε για επεξεργασία"</string> @@ -55,7 +57,7 @@ <string name="option_previewed_description" msgid="3467217598865047661">"Αυτήν τη στιγμή εμφανίζεται σε προεπισκόπηση η επιλογή <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="option_change_applied_previewed_description" msgid="9197311327728570816">"<xliff:g id="ID_1">%1$s</xliff:g>, η αλλαγή επιλέχθηκε και προβλήθηκε σε προεπισκόπηση"</string> <string name="theme_description" msgid="3697012391785254635">"Γραμματοσειρά: <xliff:g id="ID_1">%1$s</xliff:g>, εικονίδια: <xliff:g id="ID_2">%2$s</xliff:g>, σχήμα: <xliff:g id="ID_3">%3$s</xliff:g>, χρώμα: <xliff:g id="ID_4">%4$s</xliff:g>"</string> - <string name="default_theme_title" msgid="2555741736622366797">"Προεπιλογή"</string> + <string name="default_theme_title" msgid="2555741736622366797">"Προεπιλ."</string> <string name="preview_name_font" msgid="4465423899630037038">"Γραμματοσειρά"</string> <string name="preview_name_icon" msgid="6818927315316316440">"Εικονίδιο"</string> <string name="preview_name_color" msgid="8776203144994416172">"Χρώμα"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Προσθέστε τις αγαπημένες σας γραμματοσειρές σε κάθε οθόνη"</string> <string name="grid_options_title" msgid="7071930966989877023">"Επιλέξτε μέγεθος πλέγματος"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Αλλάζ. μέγεθος πλέγμ. επαναλαμβ. η φόρτ. χώρου εργ. σε λίγα δευτ."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Επανάληψη φόρτωσης χώρου εργασίας με πλέγμα %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Απέτυχε η επανάληψη φόρτωσης του χώρου εργασίας με πλέγμα %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Επιτυχής ρύθμιση στιλ"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Επιτυχής ρύθμιση ρολογιού"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Επιτυχής ρύθμιση πλέγματος"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Προσαρμοσμένο χρώμα"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Προσαρμοσμένο σχήμα"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Προσαρμοσμένο όνομα στιλ"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Ένταση χρωμάτων"</string> <string name="mode_title" msgid="2394873501427436055">"Σκούρο θέμα"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Απενεργοποιήθηκε προσωρινά λόγω Εξοικονόμησης μπαταρίας"</string> <string name="mode_changed" msgid="2243581369395418584">"Το θέμα άλλαξε"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Αριστερή συντόμ."</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Δεξιά συντόμευση"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Καμία"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Για να επιλέξετε \"<xliff:g id="APPNAME">%1$s</xliff:g>\", ελέγξτε τα εξής"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Δεν είναι δυνατή η προσθήκη συντόμευσης"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Άνοιγμα <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Για να προσθέσετε την εφαρμογή <xliff:g id="APPNAME">%1$s</xliff:g> ως συντόμευση, βεβαιωθείτε ότι"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Τέλος"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Καμία"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Εμφάνιση ειδοποιήσεων στην οθόνη κλειδώματος"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Απόκρυψη ειδοποιήσεων στην οθόνη κλειδώματος"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"Περισσότ. επιλογές οθόνης κλειδ."</string> <string name="more_settings_section_description" msgid="1860115709122398325">"Απόρρητο, Ακούγεται τώρα κ.ά."</string> <string name="more_colors" msgid="3191071655353004591">"Περισσότερα χρώματα"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Κύριο δυναμικό θέμα"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Κύριο ουδέτερο θέμα"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Κύριο ζωηρό θέμα"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Κύριο εκφραστικό θέμα"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Επιλογή προεπιλεγμένου χρώματος"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Επιλογή χρώματος <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Σύρετε προς τα αριστερά για να επιλέξετε μια διαφορετική όψη ρολογιού"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Σύρετε προς τα δεξιά για να επιλέξετε μια διαφορετική όψη ρολογιού"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Προσαρμοσμένα ρολόγια"</string> </resources> diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml index 0a0d7fbb..c4521600 100644 --- a/res/values-en-rAU/strings.xml +++ b/res/values-en-rAU/strings.xml @@ -22,8 +22,9 @@ <string name="clock_title" msgid="1974314575211361352">"Custom clock"</string> <string name="clock_description" msgid="3563839327378948">"Pick a custom clock"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Change a custom clock"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Clock settings"</string> - <string name="clock_color_and_size_title" msgid="7146791234905111351">"Clock colour & size"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Clock face option <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Clock colour & size"</string> + <string name="clock_color_and_size_title" msgid="7146791234905111351">"Clock colour and size"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Colour"</string> <string name="clock_color_red" msgid="3843504214807597810">"Red"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Clock size changes according to lock screen content"</string> <string name="clock_size_large" msgid="3143248715744138979">"Large"</string> <string name="clock_size_small" msgid="2280449912094164133">"Small"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"A small clock shows in the corner of your screen"</string> <string name="grid_title" msgid="1688173478777254123">"App grid"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Apply"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Tap to edit"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Add your favourite fonts to every screen"</string> <string name="grid_options_title" msgid="7071930966989877023">"Choose a grid size"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Changing grid size will reload workspace and may take a few seconds."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Reloading workspace with %1$s grid"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Failed to reload workspace with %1$s grid"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Style set successfully"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Clock set successfully"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Grid set successfully"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Customised colour"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Custom shape"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Custom style name"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Colour intensity"</string> <string name="mode_title" msgid="2394873501427436055">"Dark theme"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Temporarily disabled due to Battery Saver"</string> <string name="mode_changed" msgid="2243581369395418584">"Theme changed"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Left shortcut"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Right shortcut"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"None"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"To select \'<xliff:g id="APPNAME">%1$s</xliff:g>\' check the following"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Can\'t add shortcut"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Open <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"To add the <xliff:g id="APPNAME">%1$s</xliff:g> app as a shortcut, make sure"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Done"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"None"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Show notifications on the lock screen"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Hide notifications on the lock screen"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"More lock screen options"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"Privacy, Now Playing and more"</string> <string name="more_colors" msgid="3191071655353004591">"More colours"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Primary dynamic theme"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Primary neutral theme"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Primary vibrant theme"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Primary expressive theme"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Default colour option"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Colour option <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Swipe left to choose a different clock face"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Swipe right to choose a different clock face"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Custom clocks"</string> </resources> diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml index d0ef6ac6..55e0760c 100644 --- a/res/values-en-rCA/strings.xml +++ b/res/values-en-rCA/strings.xml @@ -19,45 +19,29 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_name" msgid="1647136562008520313">"Wallpaper and style"</string> <string name="theme_title" msgid="2144932106319405101">"Style"</string> - <string name="clock_title" msgid="1974314575211361352">"Custom clock"</string> + <string name="clock_title" msgid="1974314575211361352">"Custom Clock"</string> <string name="clock_description" msgid="3563839327378948">"Pick a custom clock"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Change a custom clock"</string> - <!-- no translation found for clock_settings_title (2940654205471453913) --> - <skip /> - <!-- no translation found for clock_color_and_size_title (7146791234905111351) --> - <skip /> - <!-- no translation found for clock_color_and_size_description (6578061553012886817) --> - <skip /> - <!-- no translation found for clock_color (8081608867289156163) --> - <skip /> - <!-- no translation found for clock_color_red (3843504214807597810) --> - <skip /> - <!-- no translation found for clock_color_orange (4175805201144275804) --> - <skip /> - <!-- no translation found for clock_color_yellow (7391699163247349977) --> - <skip /> - <!-- no translation found for clock_color_green (1991157556500156596) --> - <skip /> - <!-- no translation found for clock_color_blue (4037792003465759149) --> - <skip /> - <!-- no translation found for clock_color_indigo (8910855386698452917) --> - <skip /> - <!-- no translation found for clock_color_violet (3454503847169375826) --> - <skip /> - <!-- no translation found for clock_color_gray (9221530636948859231) --> - <skip /> - <!-- no translation found for clock_color_teal (7499223425741344251) --> - <skip /> - <!-- no translation found for clock_size (5028923902364418263) --> - <skip /> - <!-- no translation found for clock_size_dynamic (1023930312455061642) --> - <skip /> - <!-- no translation found for clock_size_dynamic_description (2776620745774561662) --> - <skip /> - <!-- no translation found for clock_size_large (3143248715744138979) --> - <skip /> - <!-- no translation found for clock_size_small (2280449912094164133) --> - <skip /> + <string name="select_clock_action_description" msgid="5025888763471843648">"Clock face option <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Clock color & size"</string> + <string name="clock_color_and_size_title" msgid="7146791234905111351">"Clock color & size"</string> + <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> + <string name="clock_color" msgid="8081608867289156163">"Color"</string> + <string name="clock_color_red" msgid="3843504214807597810">"Red"</string> + <string name="clock_color_orange" msgid="4175805201144275804">"Orange"</string> + <string name="clock_color_yellow" msgid="7391699163247349977">"Yellow"</string> + <string name="clock_color_green" msgid="1991157556500156596">"Green"</string> + <string name="clock_color_blue" msgid="4037792003465759149">"Blue"</string> + <string name="clock_color_indigo" msgid="8910855386698452917">"Indigo"</string> + <string name="clock_color_violet" msgid="3454503847169375826">"Violet"</string> + <string name="clock_color_gray" msgid="9221530636948859231">"Grey"</string> + <string name="clock_color_teal" msgid="7499223425741344251">"Teal"</string> + <string name="clock_size" msgid="5028923902364418263">"Size"</string> + <string name="clock_size_dynamic" msgid="1023930312455061642">"Dynamic"</string> + <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Clock size changes according to lock screen content"</string> + <string name="clock_size_large" msgid="3143248715744138979">"Large"</string> + <string name="clock_size_small" msgid="2280449912094164133">"Small"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"A small clock shows in the corner of your screen"</string> <string name="grid_title" msgid="1688173478777254123">"App grid"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Apply"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Tap to edit"</string> @@ -66,23 +50,26 @@ <string name="grid_preview_card_content_description" msgid="8449383777584714842">"Grid preview"</string> <string name="font_preview_content_description" msgid="128230439293337891">"Font preview"</string> <string name="icon_preview_content_description" msgid="7761101284351952890">"Icon preview"</string> - <string name="color_preview_content_description" msgid="4879120462082058124">"Colour preview"</string> + <string name="color_preview_content_description" msgid="4879120462082058124">"Color preview"</string> <string name="shape_preview_content_description" msgid="6479487796176550432">"Shape preview"</string> <string name="option_applied_description" msgid="5022305212078053534">"<xliff:g id="ID_1">%1$s</xliff:g>, currently applied"</string> <string name="option_applied_previewed_description" msgid="5269654286638446858">"<xliff:g id="ID_1">%1$s</xliff:g>, currently applied and previewed"</string> <string name="option_previewed_description" msgid="3467217598865047661">"<xliff:g id="ID_1">%1$s</xliff:g>, currently previewed"</string> <string name="option_change_applied_previewed_description" msgid="9197311327728570816">"<xliff:g id="ID_1">%1$s</xliff:g>, change selected and previewed"</string> - <string name="theme_description" msgid="3697012391785254635">"Font: <xliff:g id="ID_1">%1$s</xliff:g>, icons: <xliff:g id="ID_2">%2$s</xliff:g>, shape: <xliff:g id="ID_3">%3$s</xliff:g>, colour: <xliff:g id="ID_4">%4$s</xliff:g>"</string> + <string name="theme_description" msgid="3697012391785254635">"Font: <xliff:g id="ID_1">%1$s</xliff:g>, icons: <xliff:g id="ID_2">%2$s</xliff:g>, shape: <xliff:g id="ID_3">%3$s</xliff:g>, color: <xliff:g id="ID_4">%4$s</xliff:g>"</string> <string name="default_theme_title" msgid="2555741736622366797">"Default"</string> <string name="preview_name_font" msgid="4465423899630037038">"Font"</string> <string name="preview_name_icon" msgid="6818927315316316440">"Icon"</string> - <string name="preview_name_color" msgid="8776203144994416172">"Colour"</string> + <string name="preview_name_color" msgid="8776203144994416172">"Color"</string> <string name="preview_name_shape" msgid="5676971146080968721">"Shape"</string> <string name="preview_name_wallpaper" msgid="1738652462949531828">"Wallpaper"</string> <string name="font_card_title" msgid="2343292653502548685">"ABC • abc • 123"</string> - <string name="font_card_body" msgid="6790525594503904468">"Add your favourite fonts to every screen"</string> + <string name="font_card_body" msgid="6790525594503904468">"Add your favorite fonts to every screen"</string> <string name="grid_options_title" msgid="7071930966989877023">"Choose a grid size"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Changing grid size will reload workspace and may take a few seconds."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Reloading workspace with %1$s grid"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Failed to reload workspace with %1$s grid"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Style set successfully"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Clock set successfully"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Grid set successfully"</string> @@ -95,7 +82,7 @@ <string name="custom_theme_delete" msgid="4744494663184126202">"Delete"</string> <string name="font_component_title" msgid="8800340833695292049">"Choose font"</string> <string name="icon_component_title" msgid="5779787138399083903">"Choose icons"</string> - <string name="color_component_title" msgid="1194089273921078816">"Choose colour"</string> + <string name="color_component_title" msgid="1194089273921078816">"Choose color"</string> <string name="shape_component_title" msgid="8366847436022025538">"Choose shape"</string> <string name="name_component_title" msgid="532425087968663437">"Name your style"</string> <string name="icon_component_label" msgid="2625784884001407944">"Icons <xliff:g id="ID_1">%1$d</xliff:g>"</string> @@ -109,66 +96,51 @@ <string name="no_thanks" msgid="7286616980115687627">"No, thanks"</string> <string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> clock preview"</string> <string name="something_went_wrong" msgid="529840112449799117">"Oops! Something went wrong."</string> - <string name="theme_preview_icons_section_title" msgid="7064768910744000643">"Colour/Icons"</string> - <string name="style_info_description" msgid="2612473574431003251">"Preview of font, icons, app shape and colour"</string> + <string name="theme_preview_icons_section_title" msgid="7064768910744000643">"Color / Icons"</string> + <string name="style_info_description" msgid="2612473574431003251">"Preview of font, icons, app shape, and color"</string> <string name="accessibility_custom_font_title" msgid="966867359157303705">"Custom font"</string> <string name="accessibility_custom_icon_title" msgid="5753297905849062296">"Custom icon"</string> - <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Customised colour"</string> + <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Custom color"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Custom shape"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Custom style name"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Color intensity"</string> <string name="mode_title" msgid="2394873501427436055">"Dark theme"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Temporarily disabled due to Battery Saver"</string> <string name="mode_changed" msgid="2243581369395418584">"Theme changed"</string> <string name="themed_icon_title" msgid="7312460430471956558">"Themed icons"</string> <string name="beta_title" msgid="8703819523760746458">"Beta"</string> <string name="gird_picker_entry_content_description" msgid="9087651470212293439">"Change app grid"</string> - <string name="wallpaper_color_tab" msgid="1447926591721403840">"Wallpaper colours"</string> - <!-- no translation found for wallpaper_color_subheader (4044464573669965670) --> - <skip /> - <string name="wallpaper_color_title" msgid="5687965239180986458">"Wallpaper colour"</string> - <string name="preset_color_tab" msgid="3133391839341329314">"Basic colours"</string> - <!-- no translation found for preset_color_tab_2 (1444107326712562538) --> - <skip /> - <!-- no translation found for preset_color_subheader (8230588536141279371) --> - <skip /> - <string name="color_changed" msgid="7029571720331641235">"Colour changed"</string> + <string name="wallpaper_color_tab" msgid="1447926591721403840">"Wallpaper colors"</string> + <string name="wallpaper_color_subheader" msgid="4044464573669965670">"Icons, text, and more match colors in your wallpaper"</string> + <string name="wallpaper_color_title" msgid="5687965239180986458">"Wallpaper color"</string> + <string name="preset_color_tab" msgid="3133391839341329314">"Basic colors"</string> + <string name="preset_color_tab_2" msgid="1444107326712562538">"Other colors"</string> + <string name="preset_color_subheader" msgid="8230588536141279371">"Choose any color for your icons, clock, and more"</string> + <string name="color_changed" msgid="7029571720331641235">"Color changed"</string> <string name="adaptive_color_title" msgid="1336508599235896205">"Dynamic"</string> - <!-- no translation found for color_picker_title (6666830057938082864) --> - <skip /> - <!-- no translation found for keyguard_slot_name_bottom_start (8747677880200629719) --> - <skip /> - <!-- no translation found for keyguard_slot_name_bottom_end (2525487375680217083) --> - <skip /> - <!-- no translation found for keyguard_affordance_none (1751643933430782312) --> - <skip /> - <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) --> - <skip /> - <!-- no translation found for keyguard_affordance_enablement_dialog_action_template (8117011931337357438) --> - <skip /> - <!-- no translation found for keyguard_affordance_enablement_dialog_message (6136286758939253570) --> - <skip /> - <!-- no translation found for keyguard_affordance_enablement_dialog_dismiss_button (629754625264422508) --> - <skip /> - <!-- no translation found for keyguard_quick_affordance_title (4242813186995735584) --> - <skip /> - <!-- no translation found for keyguard_quick_affordance_section_title (2806304242671717309) --> - <skip /> - <!-- no translation found for keyguard_quick_affordance_two_selected_template (1757099194522296363) --> - <skip /> - <!-- no translation found for keyguard_quick_affordance_none_selected (8494127020144112003) --> - <skip /> - <!-- no translation found for show_notifications_on_lock_screen (4157744243084646720) --> - <skip /> - <!-- no translation found for hide_notifications_on_lock_screen (7413548956484779174) --> - <skip /> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> - <!-- no translation found for more_colors (3191071655353004591) --> - <skip /> - <!-- no translation found for content_description_default_color_option (7011899327541080695) --> - <skip /> - <!-- no translation found for content_description_color_option (4169813692012119578) --> - <skip /> + <string name="color_picker_title" msgid="6666830057938082864">"System colors"</string> + <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Left shortcut"</string> + <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Right shortcut"</string> + <string name="keyguard_affordance_none" msgid="1751643933430782312">"None"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Can\'t add shortcut"</string> + <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Open <xliff:g id="APPNAME">%1$s</xliff:g>"</string> + <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"To add the <xliff:g id="APPNAME">%1$s</xliff:g> app as a shortcut, make sure"</string> + <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Done"</string> + <string name="keyguard_quick_affordance_title" msgid="4242813186995735584">"Shortcuts"</string> + <string name="keyguard_quick_affordance_section_title" msgid="2806304242671717309">"Shortcuts"</string> + <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> + <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"None"</string> + <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Show notifications on the lock screen"</string> + <string name="more_settings_section_title" msgid="1331425454775815958">"More lock screen options"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Privacy, Now Playing, and more"</string> + <string name="more_colors" msgid="3191071655353004591">"More Colors"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Primary dynamic theme"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Primary neutral theme"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Primary vibrant theme"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Primary expressive theme"</string> + <string name="content_description_default_color_option" msgid="7011899327541080695">"Default color option"</string> + <string name="content_description_color_option" msgid="4169813692012119578">"Color option <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Swipe left to choose a different clock face"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Swipe right to choose a different clock face"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Custom Clocks"</string> </resources> diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 0a0d7fbb..c4521600 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -22,8 +22,9 @@ <string name="clock_title" msgid="1974314575211361352">"Custom clock"</string> <string name="clock_description" msgid="3563839327378948">"Pick a custom clock"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Change a custom clock"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Clock settings"</string> - <string name="clock_color_and_size_title" msgid="7146791234905111351">"Clock colour & size"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Clock face option <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Clock colour & size"</string> + <string name="clock_color_and_size_title" msgid="7146791234905111351">"Clock colour and size"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Colour"</string> <string name="clock_color_red" msgid="3843504214807597810">"Red"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Clock size changes according to lock screen content"</string> <string name="clock_size_large" msgid="3143248715744138979">"Large"</string> <string name="clock_size_small" msgid="2280449912094164133">"Small"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"A small clock shows in the corner of your screen"</string> <string name="grid_title" msgid="1688173478777254123">"App grid"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Apply"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Tap to edit"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Add your favourite fonts to every screen"</string> <string name="grid_options_title" msgid="7071930966989877023">"Choose a grid size"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Changing grid size will reload workspace and may take a few seconds."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Reloading workspace with %1$s grid"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Failed to reload workspace with %1$s grid"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Style set successfully"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Clock set successfully"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Grid set successfully"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Customised colour"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Custom shape"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Custom style name"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Colour intensity"</string> <string name="mode_title" msgid="2394873501427436055">"Dark theme"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Temporarily disabled due to Battery Saver"</string> <string name="mode_changed" msgid="2243581369395418584">"Theme changed"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Left shortcut"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Right shortcut"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"None"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"To select \'<xliff:g id="APPNAME">%1$s</xliff:g>\' check the following"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Can\'t add shortcut"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Open <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"To add the <xliff:g id="APPNAME">%1$s</xliff:g> app as a shortcut, make sure"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Done"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"None"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Show notifications on the lock screen"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Hide notifications on the lock screen"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"More lock screen options"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"Privacy, Now Playing and more"</string> <string name="more_colors" msgid="3191071655353004591">"More colours"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Primary dynamic theme"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Primary neutral theme"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Primary vibrant theme"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Primary expressive theme"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Default colour option"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Colour option <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Swipe left to choose a different clock face"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Swipe right to choose a different clock face"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Custom clocks"</string> </resources> diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml index 0a0d7fbb..c4521600 100644 --- a/res/values-en-rIN/strings.xml +++ b/res/values-en-rIN/strings.xml @@ -22,8 +22,9 @@ <string name="clock_title" msgid="1974314575211361352">"Custom clock"</string> <string name="clock_description" msgid="3563839327378948">"Pick a custom clock"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Change a custom clock"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Clock settings"</string> - <string name="clock_color_and_size_title" msgid="7146791234905111351">"Clock colour & size"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Clock face option <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Clock colour & size"</string> + <string name="clock_color_and_size_title" msgid="7146791234905111351">"Clock colour and size"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Colour"</string> <string name="clock_color_red" msgid="3843504214807597810">"Red"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Clock size changes according to lock screen content"</string> <string name="clock_size_large" msgid="3143248715744138979">"Large"</string> <string name="clock_size_small" msgid="2280449912094164133">"Small"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"A small clock shows in the corner of your screen"</string> <string name="grid_title" msgid="1688173478777254123">"App grid"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Apply"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Tap to edit"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Add your favourite fonts to every screen"</string> <string name="grid_options_title" msgid="7071930966989877023">"Choose a grid size"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Changing grid size will reload workspace and may take a few seconds."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Reloading workspace with %1$s grid"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Failed to reload workspace with %1$s grid"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Style set successfully"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Clock set successfully"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Grid set successfully"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Customised colour"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Custom shape"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Custom style name"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Colour intensity"</string> <string name="mode_title" msgid="2394873501427436055">"Dark theme"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Temporarily disabled due to Battery Saver"</string> <string name="mode_changed" msgid="2243581369395418584">"Theme changed"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Left shortcut"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Right shortcut"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"None"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"To select \'<xliff:g id="APPNAME">%1$s</xliff:g>\' check the following"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Can\'t add shortcut"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Open <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"To add the <xliff:g id="APPNAME">%1$s</xliff:g> app as a shortcut, make sure"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Done"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"None"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Show notifications on the lock screen"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Hide notifications on the lock screen"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"More lock screen options"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"Privacy, Now Playing and more"</string> <string name="more_colors" msgid="3191071655353004591">"More colours"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Primary dynamic theme"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Primary neutral theme"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Primary vibrant theme"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Primary expressive theme"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Default colour option"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Colour option <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Swipe left to choose a different clock face"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Swipe right to choose a different clock face"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Custom clocks"</string> </resources> diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml index dc90fe48..b4707457 100644 --- a/res/values-en-rXC/strings.xml +++ b/res/values-en-rXC/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Custom Clock"</string> <string name="clock_description" msgid="3563839327378948">"Pick a custom clock"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Change a custom clock"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Clock Settings"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Clock face option <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Clock color & size"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Clock color & size"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Color"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Clock size changes according to lock screen content"</string> <string name="clock_size_large" msgid="3143248715744138979">"Large"</string> <string name="clock_size_small" msgid="2280449912094164133">"Small"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"A small clock shows in the corner of your screen"</string> <string name="grid_title" msgid="1688173478777254123">"App grid"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Apply"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Tap to edit"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Add your favorite fonts to every screen"</string> <string name="grid_options_title" msgid="7071930966989877023">"Choose a grid size"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Changing grid size will reload workspace and may take a few seconds."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Reloading workspace with %1$s grid"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Failed to reload workspace with %1$s grid"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Style set successfully"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Clock set successfully"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Grid set successfully"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Custom color"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Custom shape"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Custom style name"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Color intensity"</string> <string name="mode_title" msgid="2394873501427436055">"Dark theme"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Temporarily disabled due to Battery Saver"</string> <string name="mode_changed" msgid="2243581369395418584">"Theme changed"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Left shortcut"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Right shortcut"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"None"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"To select `<xliff:g id="APPNAME">%1$s</xliff:g>` check the following"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Can\'t add shortcut"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Open <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"To add the <xliff:g id="APPNAME">%1$s</xliff:g> app as a shortcut, make sure"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Done"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"None"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Show notifications on the lock screen"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Hide notifications on the lock screen"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"More lock screen options"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"Privacy, Now Playing, and more"</string> <string name="more_colors" msgid="3191071655353004591">"More Colors"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Primary dynamic theme"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Primary neutral theme"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Primary vibrant theme"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Primary expressive theme"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Default color option"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Color option <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Swipe left to choose a different clock face"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Swipe right to choose a different clock face"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Custom Clocks"</string> </resources> diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index 1d6b3b24..8e6ddfd4 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Reloj person."</string> <string name="clock_description" msgid="3563839327378948">"Elige un reloj"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Cambia el reloj personalizado"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Config Reloj"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Opción de cara de reloj <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Color, tamaño de reloj"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Reloj: color, tamaño"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Color"</string> @@ -37,9 +38,10 @@ <string name="clock_color_teal" msgid="7499223425741344251">"Verde azulado"</string> <string name="clock_size" msgid="5028923902364418263">"Tamaño"</string> <string name="clock_size_dynamic" msgid="1023930312455061642">"Dinámico"</string> - <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Cambios del tamaño del reloj según el contenido de la pantalla de bloqueo"</string> + <string name="clock_size_dynamic_description" msgid="2776620745774561662">"El tamaño del reloj cambia según el contenido de la pantalla de bloqueo"</string> <string name="clock_size_large" msgid="3143248715744138979">"Grande"</string> <string name="clock_size_small" msgid="2280449912094164133">"Pequeño"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Aparece un reloj pequeño en la esquina de tu pantalla"</string> <string name="grid_title" msgid="1688173478777254123">"Cuadr. de apps"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Aplicar"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Presiona para editar"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Agrega tus fuentes favoritas a cada pantalla"</string> <string name="grid_options_title" msgid="7071930966989877023">"Elige un tamaño de cuadrícula"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> x <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Cambiar la cuadrícula podrá tomar unos segundos."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Volviendo a cargar el espacio de trabajo con la cuadrícula %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"No se pudo volver a cargar el espacio de trabajo con la cuadrícula %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Se estableció correctamente el estilo"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Se estableció correctamente el reloj"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Se estableció correctamente la cuadrícula"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Color personalizado"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Forma personalizada"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Nombre de estilo personalizado"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Intensidad de color"</string> <string name="mode_title" msgid="2394873501427436055">"Tema oscuro"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Se inhabilitó temporalmente debido al Ahorro de batería"</string> <string name="mode_changed" msgid="2243581369395418584">"Se cambió el tema"</string> @@ -113,24 +119,28 @@ <string name="color_changed" msgid="7029571720331641235">"Se cambió el color"</string> <string name="adaptive_color_title" msgid="1336508599235896205">"Dinámico"</string> <string name="color_picker_title" msgid="6666830057938082864">"Colores del sistema"</string> - <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Atajo izquierdo"</string> - <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Atajo derecho"</string> + <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Acceso izquierdo"</string> + <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Acceso derecho"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Ninguno"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Para seleccionar \"<xliff:g id="APPNAME">%1$s</xliff:g>\", verifica lo siguiente"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"No se puede agregar el acceso directo"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Abrir <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Para agregar la app <xliff:g id="APPNAME">%1$s</xliff:g> como acceso directo, asegúrate que se cumplan los siguientes requisitos:"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Listo"</string> - <string name="keyguard_quick_affordance_title" msgid="4242813186995735584">"Comb. de teclas"</string> - <string name="keyguard_quick_affordance_section_title" msgid="2806304242671717309">"Comb. de teclas"</string> + <string name="keyguard_quick_affordance_title" msgid="4242813186995735584">"Accesos directos"</string> + <string name="keyguard_quick_affordance_section_title" msgid="2806304242671717309">"Accesos directos"</string> <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Ninguno"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Mostrar las notificaciones en la pantalla de bloqueo"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Esconder las notificaciones en la pantalla de bloqueo"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Opciones de pantalla de bloqueo"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Privacidad, Está sonando y más"</string> <string name="more_colors" msgid="3191071655353004591">"Más colores"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Tema dinámico principal"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Tema neutro principal"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Tema intenso principal"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Tema expresivo principal"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Opción de color predeterminada"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Opción en color <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Desliza el dedo hacia la izquierda para elegir otra cara de reloj"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Desliza el dedo hacia la derecha para elegir otra cara de reloj"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Relojes personalizados"</string> </resources> diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 0752e5c0..6e587098 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Reloj personalizado"</string> <string name="clock_description" msgid="3563839327378948">"Elige un reloj personalizado"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Cambiar reloj personalizado"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Ajustes del reloj"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Opción de formato del reloj <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Color/tamaño (reloj)"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Color y tamaño del reloj"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Color"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"El tamaño del reloj cambia en función del contenido de la pantalla de bloqueo"</string> <string name="clock_size_large" msgid="3143248715744138979">"Grande"</string> <string name="clock_size_small" msgid="2280449912094164133">"Pequeño"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Se muestra un pequeño reloj en la esquina de la pantalla"</string> <string name="grid_title" msgid="1688173478777254123">"Cuadrícula de apps"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Aplicar"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Toca para editar"</string> @@ -55,7 +57,7 @@ <string name="option_previewed_description" msgid="3467217598865047661">"<xliff:g id="ID_1">%1$s</xliff:g> (vista previa en curso)"</string> <string name="option_change_applied_previewed_description" msgid="9197311327728570816">"<xliff:g id="ID_1">%1$s</xliff:g>, cambio seleccionado y con vista previa"</string> <string name="theme_description" msgid="3697012391785254635">"Fuente: <xliff:g id="ID_1">%1$s</xliff:g>; iconos: <xliff:g id="ID_2">%2$s</xliff:g>; forma: <xliff:g id="ID_3">%3$s</xliff:g>; color: <xliff:g id="ID_4">%4$s</xliff:g>"</string> - <string name="default_theme_title" msgid="2555741736622366797">"Predeterminado"</string> + <string name="default_theme_title" msgid="2555741736622366797">"Predeterminado"</string> <string name="preview_name_font" msgid="4465423899630037038">"Fuente"</string> <string name="preview_name_icon" msgid="6818927315316316440">"Icono"</string> <string name="preview_name_color" msgid="8776203144994416172">"Color"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Añade tus fuentes favoritas a cada pantalla"</string> <string name="grid_options_title" msgid="7071930966989877023">"Elige un tamaño de cuadrícula"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> x <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Cambiar la cuadrícula volverá a cargar el espacio de trabajo"</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Volviendo a cargar el espacio de trabajo con una cuadrícula de %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"No se ha podido volver a cargar el espacio de trabajo con una cuadrícula de %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Estilo aplicado correctamente"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Reloj puesto correctamente"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Cuadrícula configurada correctamente"</string> @@ -98,10 +103,11 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Color personalizado"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Forma personalizada"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Nombre de estilo personalizado"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Intensidad del color"</string> <string name="mode_title" msgid="2394873501427436055">"Tema oscuro"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Inhabilitado temporalmente debido a Ahorro de batería"</string> <string name="mode_changed" msgid="2243581369395418584">"Tema cambiado"</string> - <string name="themed_icon_title" msgid="7312460430471956558">"Iconos con tema"</string> + <string name="themed_icon_title" msgid="7312460430471956558">"Iconos temáticos"</string> <string name="beta_title" msgid="8703819523760746458">"Beta"</string> <string name="gird_picker_entry_content_description" msgid="9087651470212293439">"Cambiar cuadrícula de aplicaciones"</string> <string name="wallpaper_color_tab" msgid="1447926591721403840">"Colores del fondo"</string> @@ -113,10 +119,10 @@ <string name="color_changed" msgid="7029571720331641235">"Color cambiado"</string> <string name="adaptive_color_title" msgid="1336508599235896205">"Dinámico"</string> <string name="color_picker_title" msgid="6666830057938082864">"Colores del sistema"</string> - <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Atajo izquierdo"</string> - <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Atajo derecho"</string> + <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Acceso izquierdo"</string> + <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Acceso derecho"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Ninguno"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Para seleccionar <xliff:g id="APPNAME">%1$s</xliff:g>, comprueba lo siguiente"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"No puede añadir el acceso directo"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Abrir <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Para añadir la aplicación <xliff:g id="APPNAME">%1$s</xliff:g> como acceso directo:"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Hecho"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Ninguno"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Mostrar notificaciones en la pantalla de bloqueo"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Ocultar notificaciones en la pantalla de bloqueo"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Más opciones de pantalla de bloqueo"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Privacidad, Está Sonando y más"</string> <string name="more_colors" msgid="3191071655353004591">"Más colores"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Tema dinámico principal"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Tema neutro principal"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Tema intenso principal"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Tema expresivo principal"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Opción de color predeterminada"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Opción de color <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Desliza hacia la izquierda para elegir otro formato de reloj"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Desliza hacia la derecha para elegir otro formato de reloj"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Relojes personalizados"</string> </resources> diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml index d7d452ee..98784ce5 100644 --- a/res/values-et/strings.xml +++ b/res/values-et/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Kohandatud kell"</string> <string name="clock_description" msgid="3563839327378948">"Kohandatud kell"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Kohandatud kella muutmine"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Kella seaded"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Kelladisaini valik <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Kella värv/suurus"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Kella värv ja suurus"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Värv"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Kella suurus muutub olenevalt lukustuskuva sisust"</string> <string name="clock_size_large" msgid="3143248715744138979">"Suur"</string> <string name="clock_size_small" msgid="2280449912094164133">"Väike"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Ekraaninurgas kuvatakse väike kell"</string> <string name="grid_title" msgid="1688173478777254123">"Rak. ruudustik"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Rakenda"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Puudutage muutmiseks"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Lisage lemmikfondid igale erkaanikuvale"</string> <string name="grid_options_title" msgid="7071930966989877023">"Valige ruudustiku suurus"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> × <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Ruudustiku suuruse muutmine laadib tööruumi uuesti ja see võib võtta mõne sekundi."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Tööruumi uuesti laadimine ruudustikuga %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Tööruumi uuesti laadimine ruudustikuga %1$s ebaõnnestus"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Stiili määramine õnnestus"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Kella määramine õnnestus"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Ruudustiku määramine õnnestus"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Kohandatud värv"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Kohandatud kuju"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Kohandatud stiili nimi"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Värvide intensiivsus"</string> <string name="mode_title" msgid="2394873501427436055">"Tume teema"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Akusäästja tõttu ajutiselt keelatud"</string> <string name="mode_changed" msgid="2243581369395418584">"Teema on muudetud"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Vasak otsetee"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Parem otsetee"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Puudub"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Rakenduse „<xliff:g id="APPNAME">%1$s</xliff:g>“ valimiseks veenduge järgmises"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Otseteed ei saa lisada"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Ava <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Rakenduse <xliff:g id="APPNAME">%1$s</xliff:g> otsetee lisamiseks veenduge järgmises."</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Valmis"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Pole"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Kuva märguanded lukustuskuval"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Peida märguanded lukustuskuval"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Rohkem lukustuskuva valikuid"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Privaatsus, Hetkel mängimas ja muu"</string> <string name="more_colors" msgid="3191071655353004591">"Rohkem värve"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Peamine dünaamiline teema"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Peamine neutraalne teema"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Peamine elav teema"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Peamine ekspressiivne teema"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Vaikevärvi valik"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Värvivalik <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Pühkige vasakule, et valida muu kelladisain"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Pühkige paremale, et valida muu kelladisain"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Kohandatud kellad"</string> </resources> diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index 001eebd5..6027af88 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Esfera pertsonalizatuak"</string> <string name="clock_description" msgid="3563839327378948">"Hautatu esfera pertsonalizatu bat"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Aldatu esfera pertsonalizatua"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Erlojuaren ezarpenak"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Erloju-esferaren <xliff:g id="ID_1">%1$s</xliff:g>. aukera"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Erlojuaren kolorea eta tamaina"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Erlojuaren kolorea eta tamaina"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Kolorea"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Erlojuaren tamaina pantaila blokeatuko edukiaren arabera aldatzen da"</string> <string name="clock_size_large" msgid="3143248715744138979">"Handia"</string> <string name="clock_size_small" msgid="2280449912094164133">"Txikia"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Erloju txiki bat agertzen da pantailaren izkinan"</string> <string name="grid_title" msgid="1688173478777254123">"Aplikazioen sareta"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Aplikatu"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Sakatu editatzeko"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Gehitu gogoko dituzun letrak pantaila guztietan"</string> <string name="grid_options_title" msgid="7071930966989877023">"Aukeratu saretaren tamaina"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> × <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Saretaren tamaina aldatuta, lan-eremua berriro kargatuko da. Baliteke segundo batzuk behar izatea."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Lan-eremua berriro kargatzen %1$s saretarekin"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Ezin izan da kargatu berriro lan-eremua %1$s saretarekin"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Ezarri da estiloa"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Ezarri da erlojua"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Ezarri da sareta"</string> @@ -98,14 +103,15 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Kolore pertsonalizatua"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Forma pertsonalizatua"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Estilo pertsonalizatuaren izena"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Kolorearen intentsitatea"</string> <string name="mode_title" msgid="2394873501427436055">"Gai iluna"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Aldi baterako desgaituta, bateria-aurreztailea dela eta"</string> <string name="mode_changed" msgid="2243581369395418584">"Aldatu da gaia"</string> <string name="themed_icon_title" msgid="7312460430471956558">"Ikono gaidunak"</string> <string name="beta_title" msgid="8703819523760746458">"Beta"</string> <string name="gird_picker_entry_content_description" msgid="9087651470212293439">"Aldatu aplikazioen sareta"</string> - <string name="wallpaper_color_tab" msgid="1447926591721403840">"Horma-papereko koloreak"</string> - <string name="wallpaper_color_subheader" msgid="4044464573669965670">"Ikonoak, testua eta abar horma-papereko koloreekin bat datoz"</string> + <string name="wallpaper_color_tab" msgid="1447926591721403840">"Horma-paperaren koloreak"</string> + <string name="wallpaper_color_subheader" msgid="4044464573669965670">"Ikonoak, testua, etab. horma-paperaren koloreekin bat datoz"</string> <string name="wallpaper_color_title" msgid="5687965239180986458">"Horma-paperaren kolorea"</string> <string name="preset_color_tab" msgid="3133391839341329314">"Oinarrizko koloreak"</string> <string name="preset_color_tab_2" msgid="1444107326712562538">"Beste kolore batzuk"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Ezkerreko lasterbidea"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Eskuineko lasterbidea"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Bat ere ez"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"<xliff:g id="APPNAME">%1$s</xliff:g> hautatzeko, egin hauek:"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Ezin da gehitu lasterbidea"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Ireki <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> aplikazioa lasterbide gisa gehitzeko, ziurtatu hauek betetzen direla:"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Eginda"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g> eta <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Bat ere ez"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Erakutsi jakinarazpenak pantaila blokeatuan"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Ezkutatu jakinarazpenak pantaila blokeatuan"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Pantaila blokeatzeko aukera gehiago"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Pribatutasuna, Orain erreproduzitzen eta abar"</string> <string name="more_colors" msgid="3191071655353004591">"Kolore gehiago"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Gai nagusi dinamikoa"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Gai nagusi neutroa"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Gai nagusi bizia"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Gai nagusi adierazgarria"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Kolore-aukera lehenetsia"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Kolore-aukera <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Pasatu hatza ezkerrera beste esfera bat aukeratzeko"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Pasatu hatza eskuinera beste esfera bat aukeratzeko"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Erloju pertsonalizatuak"</string> </resources> diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 9170f2f8..0dd9e4b5 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"ساعت سفارشی"</string> <string name="clock_description" msgid="3563839327378948">"انتخاب ساعت سفارشی"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"تغییر ساعت سفارشی"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"تنظیمات ساعت"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"گزینه صفحه ساعت <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"اندازه و رنگ ساعت"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"اندازه و رنگ ساعت"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>، <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"رنگ"</string> @@ -34,13 +35,14 @@ <string name="clock_color_indigo" msgid="8910855386698452917">"نیلی"</string> <string name="clock_color_violet" msgid="3454503847169375826">"یاسی"</string> <string name="clock_color_gray" msgid="9221530636948859231">"خاکستری"</string> - <string name="clock_color_teal" msgid="7499223425741344251">"سبز دودی"</string> + <string name="clock_color_teal" msgid="7499223425741344251">"سبزآبی"</string> <string name="clock_size" msgid="5028923902364418263">"اندازه"</string> <string name="clock_size_dynamic" msgid="1023930312455061642">"پویا"</string> <string name="clock_size_dynamic_description" msgid="2776620745774561662">"اندازه ساعت نسبت به محتوای صفحه قفل تغییر میکند"</string> <string name="clock_size_large" msgid="3143248715744138979">"بزرگ"</string> <string name="clock_size_small" msgid="2280449912094164133">"کوچک"</string> - <string name="grid_title" msgid="1688173478777254123">"جدول برنامه"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"ساعت کوچکی در گوشه صفحهنمایش شما نشان داده میشود"</string> + <string name="grid_title" msgid="1688173478777254123">"شبکه برنامهها"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"اعمال"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"برای ویرایش ضربه بزنید"</string> <string name="keep_my_wallpaper" msgid="8012385376769568517">"حفظ کاغذدیواری فعلی"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"قلمهای دلخواهتان را به همه صفحهنمایشها اضافه کنید"</string> <string name="grid_options_title" msgid="7071930966989877023">"انتخاب اندازه جدول"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"تغییر اندازه شبکه باعث بار کردن مجدد فضای کاری میشود و ممکن است چند ثانیه طول بکشد."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"درحال بار کردن مجدد فضای کاری با شبکه %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"فضای کاری با شبکه %1$s مجدداً بار نشد"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"سبک باموفقیت تنظیم شد"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"ساعت باموفقیت تنظیم شد"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"جدول باموفقیت تنظیم شد"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"رنگ سفارشی"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"شکل سفارشی"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"نام سبک سفارشی"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"شدت رنگ"</string> <string name="mode_title" msgid="2394873501427436055">"زمینه تیره"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"بهدلیل روشن بودن «بهینهسازی باتری» موقتاً غیرفعال شده است"</string> <string name="mode_changed" msgid="2243581369395418584">"زمینه تغییر کرد"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"میانبر چپ"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"میانبر راست"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"هیچکدام"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"برای انتخاب «<xliff:g id="APPNAME">%1$s</xliff:g>»، مورد زیر را بررسی کنید"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"میانبر اضافه نشد"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"باز کردن <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"برای افزودن برنامه <xliff:g id="APPNAME">%1$s</xliff:g> بهعنوان میانبر، مطمئن شوید"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"تمام"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>، <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"هیچکدام"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"نمایش اعلانها در صفحه قفل"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"پنهان کردن اعلانها در صفحه قفل"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"گزینههای بیشتر برای صفحه قفل"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"«حریم خصوصی»، «درحال پخش»، و موارد دیگر"</string> <string name="more_colors" msgid="3191071655353004591">"رنگهای بیشتر"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"زمینه پویای اصلی"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"زمینه خنثی اصلی"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"زمینه زنده اصلی"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"زمینه تأثیرگذار اصلی"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"گزینه رنگ پیشفرض"</string> <string name="content_description_color_option" msgid="4169813692012119578">"گزینه رنگ <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"برای انتخاب صفحه ساعت متفاوت، تند به چپ بکشید"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"برای انتخاب صفحه ساعت متفاوت، تند به راست بکشید"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"ساعتهای سفارشی"</string> </resources> diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index 55ebaff9..6fc993c9 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Oma kello"</string> <string name="clock_description" msgid="3563839327378948">"Valitse kello"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Muuta omaa kelloa"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Kelloasetukset"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Kellotauluvaihtoehto <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Kellon väri ja koko"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Kellon väri ja koko"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Väri"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Kellon koko riippuu lukitusnäytön sisällöstä"</string> <string name="clock_size_large" msgid="3143248715744138979">"Suuri"</string> <string name="clock_size_small" msgid="2280449912094164133">"Pieni"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Näytön reunassa näkyy pieni kello"</string> <string name="grid_title" msgid="1688173478777254123">"Ruudukko"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Käytä"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Muokkaa napauttamalla"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Lisää lempikirjasimesi joka näytölle"</string> <string name="grid_options_title" msgid="7071930966989877023">"Valitse ruudukon koko"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> x <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Jos muutat ruudukon kokoa, työtila päivittyy (parissa sekunnissa)."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Päivitetään työtilaa, jossa on ruudukko: %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Ei voitu päivittää työtilaa, jossa on ruudukko: %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Tyyli valittu"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Kello asetettu"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Ruudukko asetettu"</string> @@ -98,10 +103,11 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Oma väri"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Oma muoto"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Oman tyylin nimi"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Värin voimakkuus"</string> <string name="mode_title" msgid="2394873501427436055">"Tumma teema"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Tilapäisesti pois käytöstä virransäästön takia"</string> <string name="mode_changed" msgid="2243581369395418584">"Teema vaihdettu"</string> - <string name="themed_icon_title" msgid="7312460430471956558">"Kuvakkeiden teemat"</string> + <string name="themed_icon_title" msgid="7312460430471956558">"Teemaan sopivat kuvakkeet"</string> <string name="beta_title" msgid="8703819523760746458">"Beta"</string> <string name="gird_picker_entry_content_description" msgid="9087651470212293439">"Muuta sovellusruudukkoa"</string> <string name="wallpaper_color_tab" msgid="1447926591721403840">"Taustakuvan värit"</string> @@ -116,21 +122,25 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Vasen pikakuvake"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Oikea pikakuvake"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"–"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Tarkista seuraavat, jotta \"<xliff:g id="APPNAME">%1$s</xliff:g>\" on valittavissa"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Pikanäppäintä ei voi lisätä"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Avaa <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Jos haluat, että <xliff:g id="APPNAME">%1$s</xliff:g> lisätään pikakuvakkeeksi, varmista nämä:"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Valmis"</string> - <string name="keyguard_quick_affordance_title" msgid="4242813186995735584">"Pikakomennot"</string> - <string name="keyguard_quick_affordance_section_title" msgid="2806304242671717309">"Pikakomennot"</string> + <string name="keyguard_quick_affordance_title" msgid="4242813186995735584">"Pikakuvakkeet"</string> + <string name="keyguard_quick_affordance_section_title" msgid="2806304242671717309">"Pikakuvakkeet"</string> <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"–"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Näytä ilmoitukset lukitusnäytöllä"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Piilota lukitusnäytön ilmoitukset"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Lisää valintoja lukitusnäytölle"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Yksityisyys, Musiikintunnistus ja muita"</string> <string name="more_colors" msgid="3191071655353004591">"Lisää värejä"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Ensisijainen dynaaminen teema"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Ensisijainen neutraali teema"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Ensisijainen voimakas teema"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Ensisijainen ekspressiivinen teema"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Oletusväri"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Värivaihtoehto: <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Valitse toinen kellotaulu pyyhkäisemällä vasemmalle"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Valitse toinen kellotaulu pyyhkäisemällä oikealle"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Omat kellot"</string> </resources> diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index 4dd4be6c..26a1f4f1 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Horloge personnalisée"</string> <string name="clock_description" msgid="3563839327378948">"Choisissez une horloge personnalisée"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Modifiez une horloge personnalisée"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Param. horloge"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Option du cadran d\'horloge <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Couleur/taille"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Couleur/taille (horloge)"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Couleur"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"La taille de l\'horloge varie en fonction du contenu de l\'écran de verrouillage"</string> <string name="clock_size_large" msgid="3143248715744138979">"Grande"</string> <string name="clock_size_small" msgid="2280449912094164133">"Petite"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Une petite horloge s\'affiche dans le coin de votre écran"</string> <string name="grid_title" msgid="1688173478777254123">"Grille d\'applis"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Appliquer"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Toucher pour modifier"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Ajoutez vos polices préférées à chaque écran"</string> <string name="grid_options_title" msgid="7071930966989877023">"Choisir une taille de grille"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> x <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"La modification de la taille de la grille entraîne l\'actualisation de l\'espace de travail et peut prendre quelques secondes."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Actualisation de l\'espace de travail avec la grille %1$s en cours…"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Échec de l\'actualisation de l\'espace de travail avec la grille %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Le style a été appliqué"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"L\'horloge a été réglée"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"La grille a été définie"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Couleur personnalisée"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Forme personnalisée"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Nom du style personnalisé"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Intensité des couleurs"</string> <string name="mode_title" msgid="2394873501427436055">"Thème sombre"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Temporairement désactivé par l\'économiseur de pile"</string> <string name="mode_changed" msgid="2243581369395418584">"Thème modifié"</string> @@ -105,7 +111,7 @@ <string name="beta_title" msgid="8703819523760746458">"Bêta"</string> <string name="gird_picker_entry_content_description" msgid="9087651470212293439">"Modifiez la grille d\'applications"</string> <string name="wallpaper_color_tab" msgid="1447926591721403840">"Couleurs fond d\'écran"</string> - <string name="wallpaper_color_subheader" msgid="4044464573669965670">"Icônes, texte, etc. assortis aux couleurs du fond d\'écran"</string> + <string name="wallpaper_color_subheader" msgid="4044464573669965670">"Icônes, texte, etc., assortis aux couleurs du fond d\'écran"</string> <string name="wallpaper_color_title" msgid="5687965239180986458">"Couleur du fond d\'écran"</string> <string name="preset_color_tab" msgid="3133391839341329314">"Couleurs de base"</string> <string name="preset_color_tab_2" msgid="1444107326712562538">"Autres couleurs"</string> @@ -115,8 +121,8 @@ <string name="color_picker_title" msgid="6666830057938082864">"Couleurs système"</string> <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Raccourci gauche"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Raccourci droit"</string> - <string name="keyguard_affordance_none" msgid="1751643933430782312">"Aucune"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Pour sélectionner « <xliff:g id="APPNAME">%1$s</xliff:g> » vérifiez ce qui suit"</string> + <string name="keyguard_affordance_none" msgid="1751643933430782312">"Aucun"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Impossible d\'ajouter le raccourci"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Ouvrir <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Pour ajouter l\'application <xliff:g id="APPNAME">%1$s</xliff:g> en tant que raccourci, assurez-vous"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"OK"</string> @@ -124,13 +130,17 @@ <string name="keyguard_quick_affordance_section_title" msgid="2806304242671717309">"Raccourcis"</string> <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Aucun"</string> - <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Affichez les notifications sur l\'écran de verrouillage"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Masquez les notifications sur l\'écran de verrouillage"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Afficher les notifications sur l\'écran de verrouillage"</string> + <string name="more_settings_section_title" msgid="1331425454775815958">"Options : écran de verrouillage"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Confidentialité, En cours de lecture, etc."</string> <string name="more_colors" msgid="3191071655353004591">"Plus de couleurs"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Thème dynamique principal"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Thème neutre principal"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Thème vif principal"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Thème expressif principal"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Option de couleur par défaut"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Option de couleur <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Faites glisser vers la gauche pour un cadran d\'horloge différent"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Faites glisser vers la droite pour choisir un cadran d\'horloge différent"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Cadrans d\'horloge personnalisés"</string> </resources> diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 8738174c..1d58aa62 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -22,8 +22,9 @@ <string name="clock_title" msgid="1974314575211361352">"Cadran perso."</string> <string name="clock_description" msgid="3563839327378948">"Choisir cadran"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Modifier un cadran personnalisé"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Paramètres Horloge"</string> - <string name="clock_color_and_size_title" msgid="7146791234905111351">"Taille et couleur Horloge"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Option de cadran <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Taille et couleur de l\'Horloge"</string> + <string name="clock_color_and_size_title" msgid="7146791234905111351">"Taille et couleur de l\'horloge"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Couleur"</string> <string name="clock_color_red" msgid="3843504214807597810">"Rouge"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"La taille de l\'horloge change selon le contenu de l\'écran de verrouillage"</string> <string name="clock_size_large" msgid="3143248715744138979">"Grande"</string> <string name="clock_size_small" msgid="2280449912094164133">"Petite"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Une petite horloge s\'affiche dans le coin de votre écran."</string> <string name="grid_title" msgid="1688173478777254123">"Grille d\'applis"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Appliquer"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Appuyer pour modifier"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Ajoutez vos polices préférées sur chaque écran"</string> <string name="grid_options_title" msgid="7071930966989877023">"Choisir une taille de grille"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> x <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Changer la taille de la grille actualisera l\'espace de travail. Cela peut prendre quelques secondes."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Actualisation de l\'espace de travail avec une grille %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Échec de l\'actualisation de l\'espace de travail avec une grille %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Le style a bien été défini"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"L\'horloge a bien été réglée"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"La grille a bien été définie"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Couleur personnalisée"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Forme personnalisée"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Nom du style personnalisé"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Intensité des couleurs"</string> <string name="mode_title" msgid="2394873501427436055">"Thème sombre"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Temporairement désactivé par l\'économiseur de batterie"</string> <string name="mode_changed" msgid="2243581369395418584">"Thème modifié"</string> @@ -105,7 +111,7 @@ <string name="beta_title" msgid="8703819523760746458">"Bêta"</string> <string name="gird_picker_entry_content_description" msgid="9087651470212293439">"Modifier la grille d\'applis"</string> <string name="wallpaper_color_tab" msgid="1447926591721403840">"Couleurs fond d\'écran"</string> - <string name="wallpaper_color_subheader" msgid="4044464573669965670">"Icônes, texte et autres couleurs de votre fond d\'écran"</string> + <string name="wallpaper_color_subheader" msgid="4044464573669965670">"Couleur des icônes, du texte… assortie au fond d\'écran"</string> <string name="wallpaper_color_title" msgid="5687965239180986458">"Couleur du fond d\'écran"</string> <string name="preset_color_tab" msgid="3133391839341329314">"Couleurs de base"</string> <string name="preset_color_tab_2" msgid="1444107326712562538">"Autres couleurs"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Raccourci gauche"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Raccourci droit"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Aucun"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Pour sélectionner <xliff:g id="APPNAME">%1$s</xliff:g>, vérifiez ce qui suit"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Impossible d\'ajouter un raccourci"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Ouvrir <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Pour ajouter l\'appli <xliff:g id="APPNAME">%1$s</xliff:g> comme raccourci, procédez aux vérifications suivantes"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"OK"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Aucun"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Afficher les notifications sur l\'écran de verrouillage"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Masquer les notifications sur l\'écran de verrouillage"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Plus d\'options écran verrouillage"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Confidentialité, En écoute et plus"</string> <string name="more_colors" msgid="3191071655353004591">"Autres couleurs"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Thème dynamique primaire"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Thème neutre primaire"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Thème intense primaire"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Thème expressif direct"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Option de couleur par défaut"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Option de couleur <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Balayer à gauche pour changer de clock face"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Balayer à droite pour changer de clock face"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Personnaliser les Horloges"</string> </resources> diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml index 6d2401f3..6b262ffb 100644 --- a/res/values-gl/strings.xml +++ b/res/values-gl/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Reloxo person."</string> <string name="clock_description" msgid="3563839327378948">"Elixe reloxo pers."</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Cambiar reloxo personalizado"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Config. reloxo"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Opción de esfera de reloxo: <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Tamaño/cor (Reloxo)"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Tamaño/cor do reloxo"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Cor"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"O tamaño do reloxo cambia en función do contido da pantalla de bloqueo"</string> <string name="clock_size_large" msgid="3143248715744138979">"Grande"</string> <string name="clock_size_small" msgid="2280449912094164133">"Pequeno"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Un pequeno reloxo móstrase na esquina da pantalla"</string> <string name="grid_title" msgid="1688173478777254123">"Grade de apps"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Aplicar"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Toca para editar"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Engade as túas fontes favoritas a todas as pantallas"</string> <string name="grid_options_title" msgid="7071930966989877023">"Escoller un tamaño para a grade"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Cambio tamaño grade volve cargar esp. traballo; pode tardar uns seg."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Volvendo cargar o espazo de traballo coa grade %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Non se puido volver cargar o espazo de traballo coa grade %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"O estilo aplicouse correctamente"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"O reloxo aplicouse correctamente"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"A grade aplicouse correctamente"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Cor personalizada"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Forma personalizada"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Nome de estilo personalizado"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Intensidade de cor"</string> <string name="mode_title" msgid="2394873501427436055">"Tema escuro"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Desactivouse temporalmente debido ao Aforro de batería"</string> <string name="mode_changed" msgid="2243581369395418584">"Cambiouse o tema"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Atallo: Esquerda"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Atallo: Dereita"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Ningunha"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Para seleccionar <xliff:g id="APPNAME">%1$s</xliff:g>, comproba o seguinte"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Non se puido engadir o atallo"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Abrir <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Para engadir a aplicación <xliff:g id="APPNAME">%1$s</xliff:g> como atallo, asegúrate de que se cumpra o seguinte:"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Feito"</string> @@ -124,13 +130,17 @@ <string name="keyguard_quick_affordance_section_title" msgid="2806304242671717309">"Atallos"</string> <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Ningún"</string> - <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Mostra as notificacións na pantalla de bloqueo"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Oculta as notificacións na pantalla de bloqueo"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Mostrar notificacións na pantalla de bloqueo"</string> + <string name="more_settings_section_title" msgid="1331425454775815958">"Máis opcións da pantalla de bloqueo"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Privacidade, Está soando e moito máis"</string> <string name="more_colors" msgid="3191071655353004591">"Máis cores"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Tema dinámico con cores primarias"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Tema neutro con cores primarias"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Tema intenso con cores primarias"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Tema expresivo con cores primarias"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Opción de cor predeterminada"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Opción de cor: <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Pasar o dedo cara á esquerda para seleccionar outra esfera de reloxo"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Pasar o dedo cara á dereita para seleccionar outra esfera de reloxo"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Reloxos personalizados"</string> </resources> diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml index 5f8f4e63..e60acbfa 100644 --- a/res/values-gu/strings.xml +++ b/res/values-gu/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"કસ્ટમ ઘડિયાળ"</string> <string name="clock_description" msgid="3563839327378948">"કસ્ટમ ઘડિયાળ ચૂંટો"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"કસ્ટમ ઘડિયાળ બદલો"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"ઘડિયાળના સેટિંગ"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"ક્લૉક ફેસનો વિકલ્પ <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"ઘડિયાળનો રંગ અને કદ"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"ઘડિયાળનો રંગ અને કદ"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"રંગ"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"ઘડિયાળનું કદ લૉક સ્ક્રીન પરના કન્ટેન્ટ અનુસાર બદલાય છે"</string> <string name="clock_size_large" msgid="3143248715744138979">"મોટું"</string> <string name="clock_size_small" msgid="2280449912094164133">"નાનું"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"તમારી સ્ક્રીનના ખૂણામાં એક નાની ઘડિયાળ દેખાય છે"</string> <string name="grid_title" msgid="1688173478777254123">"ઍપ ગ્રિડ"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"લાગુ કરો"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"ફેરફાર કરવા માટે ટૅપ કરો"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"દરેક સ્ક્રીન પર તમારા મનપસંદ ફોન્ટ ઉમેરો"</string> <string name="grid_options_title" msgid="7071930966989877023">"ગ્રિડનું કદ પસંદ કરો"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"ગ્રિડનું કદ બદલવાથી કાર્યસ્થળ ફરીથી લોડ થશે અને તેમાં થોડો સમય લાગી શકે છે."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"%1$s ગ્રિડ વડે કાર્યસ્થળ ફરીથી લોડ કરી રહ્યું છે"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"%1$s ગ્રિડ વડે કાર્યસ્થળ ફરીથી લોડ કરવામાં નિષ્ફળ રહ્યાં"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"શૈલી સફળતાપૂર્વક સેટ કરી"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"ઘડિયાળ સફળતાપૂર્વક સેટ કરી"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"ગ્રિડ સફળતાપૂર્વક સેટ કરી"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"કસ્ટમ રંગ"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"કસ્ટમ આકાર"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"કસ્ટમ શૈલી નામ"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"રંગની તીવ્રતા"</string> <string name="mode_title" msgid="2394873501427436055">"ઘેરી થીમ"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"બૅટરી સેવરના લીધે હંગામીરૂપે બંધ કર્યું"</string> <string name="mode_changed" msgid="2243581369395418584">"થીમ બદલી છે"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"ડાબો શૉર્ટકટ"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"જમણો શૉર્ટકટ"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"એકપણ નહીં"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"`<xliff:g id="APPNAME">%1$s</xliff:g>`ને પસંદ કરવા માટે, નીચેની બાબત ચેક કરો"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"શૉર્ટકટ ઉમેરી શકતા નથી."</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> ખોલો"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> ઍપને શૉર્ટકટ તરીકે ઉમેરવા માટે, આ બાબતોની ખાતરી કરો"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"થઈ ગયું"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"એકપણ નહીં"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"લૉક સ્ક્રીન પર નોટિફિકેશન બતાવો"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"લૉક સ્ક્રીન પર નોટિફિકેશન છુપાવો"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"લૉક સ્ક્રીનના વધુ વિકલ્પો"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"પ્રાઇવસી, હમણાં વાગી રહ્યું છે અને બીજું ઘણું"</string> <string name="more_colors" msgid="3191071655353004591">"વધુ રંગો"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"પ્રાથિમક ડાયનૅમિક થીમ"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"પ્રાથમિક કુદરતી થીમ"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"પ્રાથિમક વાઇબ્રન્ટ થીમ"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"પ્રાથિમક અભિવ્યક્તપૂર્ણ થીમ"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"ડિફૉલ્ટ રંગનો વિકલ્પ"</string> <string name="content_description_color_option" msgid="4169813692012119578">"રંગનો વિકલ્પ <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"કોઈ બીજી ઘડિયાળ પસંદ કરવા માટે ડાબે સ્વાઇપ કરો"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"કોઈ બીજી ઘડિયાળ પસંદ કરવા માટે જમણે સ્વાઇપ કરો"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"કસ્ટમ ઘડિયાળો"</string> </resources> diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 3b9917b5..5a24c3d9 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"घड़ी का आइकॉन"</string> <string name="clock_description" msgid="3563839327378948">"घड़ी आइकॉन चुनें"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"पसंद के मुताबिक घड़ी का आइकॉन बदलें"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"घड़ी की सेटिंग"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"स्मार्टवॉच की स्क्रीन के डिज़ाइन के लिए विकल्प <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"घड़ी का रंग और साइज़"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"घड़ी का रंग और साइज़"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"रंग"</string> @@ -39,7 +40,8 @@ <string name="clock_size_dynamic" msgid="1023930312455061642">"डाइनैमिक"</string> <string name="clock_size_dynamic_description" msgid="2776620745774561662">"लॉक स्क्रीन के कॉन्टेंट के हिसाब से घड़ी का साइज़ बदलता है"</string> <string name="clock_size_large" msgid="3143248715744138979">"बड़ा"</string> - <string name="clock_size_small" msgid="2280449912094164133">"छोटा करें"</string> + <string name="clock_size_small" msgid="2280449912094164133">"छोटा"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"आपके डिवाइस की स्क्रीन के कोने में एक छोटी घड़ी दिखती है"</string> <string name="grid_title" msgid="1688173478777254123">"ऐप्लिकेशन ग्रिड"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"लागू करें"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"बदलाव करने के लिए टैप करें"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"हर स्क्रीन पर अपने पसंदीदा फ़ॉन्ट जोड़ें"</string> <string name="grid_options_title" msgid="7071930966989877023">"ग्रिड का साइज़ चुनें"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"ग्रिड साइज़ बदलने पर फ़ाइल फ़ोल्डर फिर से लोड होगा. इसमें शायद समय लगे."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"%1$s ग्रिड के साथ फ़ाइल फ़ोल्डर को फिर से लोड किया जा रहा है"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"%1$s ग्रिड के साथ फ़ाइल फ़ोल्डर को फिर से लोड नहीं किया जा सका"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"थीम सेट हो गई"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"घड़ी सेट हो गई"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"ग्रिड सेट हो गया"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"पसंद के मुताबिक रंग"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"पसंद के मुताबिक आकार"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"पसंद के मुताबिक बनाई गई स्टाइल का नाम"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"कलर इंटेंसिटी"</string> <string name="mode_title" msgid="2394873501427436055">"गहरे रंग वाली थीम"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"बैटरी सेवर मोड चालू होने की वजह से, इस सुविधा को कुछ समय के लिए बंद कर दिया गया है"</string> <string name="mode_changed" msgid="2243581369395418584">"थीम को बदला गया"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"बायां शॉर्टकट"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"दायां शॉर्टकट"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"कोई नहीं"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"`<xliff:g id="APPNAME">%1$s</xliff:g>` को चुनने के लिए, दिए गए निर्देशों का पालन करें"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"शॉर्टकट नहीं जोड़ा जा सकता"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> खोलें"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> ऐप्लिकेशन को शॉर्टकट के तौर पर जोड़ने के लिए, इन बातों का ध्यान रखें"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"हो गया"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"कोई नहीं"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"लॉक स्क्रीन पर सूचनाएं दिखाएं"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"लॉक स्क्रीन पर सूचनाएं छिपाएं"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> - <string name="more_colors" msgid="3191071655353004591">"ज़्यादा कलर"</string> + <string name="more_settings_section_title" msgid="1331425454775815958">"लॉक स्क्रीन के और विकल्प"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"निजता, \'अभी चल रहा है\' सुविधा, और अन्य सुविधा"</string> + <string name="more_colors" msgid="3191071655353004591">"कुछ और रंग"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"प्राइमरी डाइनैमिक थीम"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"प्राइमरी न्यूट्रल थीम"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"प्राइमरी वाइब्रेंट थीम"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"प्राइमरी एक्सप्रेसिव थीम"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"रंग का डिफ़ॉल्ट विकल्प"</string> <string name="content_description_color_option" msgid="4169813692012119578">"रंग का विकल्प <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"स्मार्टवॉच की स्क्रीन का डिज़ाइन चुनने के लिए बाईं ओर स्वाइप करें"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"स्मार्टवॉच की स्क्रीन का डिज़ाइन चुनने के लिए दाईं ओर स्वाइप करें"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"स्मार्टवॉच की स्क्रीन का डिज़ाइन पसंद के मुताबिक बनाएं"</string> </resources> diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 2eb78b78..65fcf7ef 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Prilagođeni sat"</string> <string name="clock_description" msgid="3563839327378948">"Odaberite prilagođeni sat"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Promijenite prilagođeni sat"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Postavke sata"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Opcija brojčanika <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Boja i veličina sata"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Boja i veličina sata"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Boja"</string> @@ -39,7 +40,8 @@ <string name="clock_size_dynamic" msgid="1023930312455061642">"Dinamičan"</string> <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Veličina sata mijenja se u skladu sa sadržajem zaključanog zaslona"</string> <string name="clock_size_large" msgid="3143248715744138979">"Velik"</string> - <string name="clock_size_small" msgid="2280449912094164133">"Malo"</string> + <string name="clock_size_small" msgid="2280449912094164133">"Mali"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"U kutu zaslona prikazuje se mali sat"</string> <string name="grid_title" msgid="1688173478777254123">"Rešetka aplik."</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Primijeni"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Dodirnite da biste uredili"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Dodajte svoje omiljene fontove na svaki zaslon"</string> <string name="grid_options_title" msgid="7071930966989877023">"Odaberite veličinu rešetke"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> x <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Promjena veličina rešetke ponovno će učitati radni prostor i može potrajati nekoliko sekundi."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Ponovno učitavanje radnog prostora s rešetkom %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Nije uspjelo ponovno učitavanje radnog prostora s rešetkom %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Stil je uspješno postavljen"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Sat je uspješno postavljen"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Rešetka je uspješno postavljena"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Prilagođena boja"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Prilagođeni oblik"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Naziv prilagođenog stila"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Intenzitet boja"</string> <string name="mode_title" msgid="2394873501427436055">"Tamna tema"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Privremeno onemogućeno zbog štednje baterije"</string> <string name="mode_changed" msgid="2243581369395418584">"Tema je promijenjena"</string> @@ -105,18 +111,18 @@ <string name="beta_title" msgid="8703819523760746458">"Beta"</string> <string name="gird_picker_entry_content_description" msgid="9087651470212293439">"Promjena rešetke aplikacije"</string> <string name="wallpaper_color_tab" msgid="1447926591721403840">"Boje pozadine"</string> - <string name="wallpaper_color_subheader" msgid="4044464573669965670">"Ikone, tekst i više toga odgovaraju bojama na pozadini"</string> + <string name="wallpaper_color_subheader" msgid="4044464573669965670">"Ikone, tekst i ostalo odgovara bojama na pozadini"</string> <string name="wallpaper_color_title" msgid="5687965239180986458">"Boja pozadine"</string> <string name="preset_color_tab" msgid="3133391839341329314">"Osnovne boje"</string> - <string name="preset_color_tab_2" msgid="1444107326712562538">"Ostale boje"</string> - <string name="preset_color_subheader" msgid="8230588536141279371">"Odaberite bilo koju boju za svoje ikone, sat i više"</string> + <string name="preset_color_tab_2" msgid="1444107326712562538">"Druge boje"</string> + <string name="preset_color_subheader" msgid="8230588536141279371">"Odaberite bilo koju boju za svoje ikone, sat i ostalo"</string> <string name="color_changed" msgid="7029571720331641235">"Promijenjena boja"</string> <string name="adaptive_color_title" msgid="1336508599235896205">"Dinamično"</string> <string name="color_picker_title" msgid="6666830057938082864">"Boje sustava"</string> <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Lijevi prečac"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Desni prečac"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Ništa"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Da biste odabrali <xliff:g id="APPNAME">%1$s</xliff:g>, označite sljedeće"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Nije moguće dodati prečac"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Otvori <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Da biste aplikaciju <xliff:g id="APPNAME">%1$s</xliff:g> dodali kao prečac, učinite sljedeće"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Gotovo"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Ništa"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Prikaz obavijesti na zaključanom zaslonu"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Skrivanje obavijesti na zaključanom zaslonu"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"Više opcija zaključanog zaslona"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"Privatnost, Upravo svira i drugo"</string> <string name="more_colors" msgid="3191071655353004591">"Više boja"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Primarna dinamična tema"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Primarna neutralna tema"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Primarna vibrantna tema"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Primarna ekspresivna tema"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Zadana opcija boje"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Opcija boje <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Prijeđite prstom ulijevo da biste odabrali drugi brojčanik"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Prijeđite prstom udesno da biste odabrali drugi brojčanik"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Prilagođeni satovi"</string> </resources> diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 0346ed0b..5256ee69 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Egyedi óra"</string> <string name="clock_description" msgid="3563839327378948">"Egyedi óra választása"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Egyedi óra módosítása"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Óra beállításai"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Kiválasztott óralap-beállítás: <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Óra színe és mérete"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Óra színe & mérete"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Szín"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Az óra mérete a lezárási képernyő tartalmától függően változik."</string> <string name="clock_size_large" msgid="3143248715744138979">"Nagy"</string> <string name="clock_size_small" msgid="2280449912094164133">"Kicsi"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Megjelenik egy kis óra a képernyő sarkában."</string> <string name="grid_title" msgid="1688173478777254123">"Alkalmazásrács"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Alkalmaz"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Koppintson a szerkesztéshez"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Adja hozzá kedvenc betűtípusát az összes képernyőhöz"</string> <string name="grid_options_title" msgid="7071930966989877023">"Rácsméret kiválasztása"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>×<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"A rácsméret módosítása újratölti a munkaterületet, ami eltarthat néhány másodpercig."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Munkaterület újratöltése %1$s ráccsal…"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Nem sikerült újratölteni a munkaterületet %1$s ráccsal"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Sikerült a stílus beállítása"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Sikerült az óra beállítása"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Sikerült a rács beállítása"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Egyéni szín"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Egyéni alak"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Egyéni stílusnév"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Színintenzitás"</string> <string name="mode_title" msgid="2394873501427436055">"Sötét téma"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Átmenetileg kikapcsolva az Akkumulátorkímélő mód miatt"</string> <string name="mode_changed" msgid="2243581369395418584">"Téma módosítva"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Bal parancsikon"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Jobb parancsikon"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Nincs"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"A(z) „<xliff:g id="APPNAME">%1$s</xliff:g>” kiválasztásához el kell végeznie a következőket"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Nem sikerült hozzáadni a gyorsparancsot."</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"A(z) <xliff:g id="APPNAME">%1$s</xliff:g> megnyitása"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Ha szeretné felvenni a(z) <xliff:g id="APPNAME">%1$s</xliff:g> alkalmazást parancsikonként, gondoskodjon a következőkről:"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Kész"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Nincs"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Értesítések megjelenítése a lezárási képernyőn"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Értesítések elrejtése a lezárási képernyőn"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Más lezárásiképernyő-beállítások"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Adatvédelem, Now Playing és egyebek"</string> <string name="more_colors" msgid="3191071655353004591">"További színek"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Elsődleges dinamikus téma"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Elsődleges semleges téma"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Elsődleges élénk téma"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Elsődleges kifejező téma"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Alapértelmezettként beállított szín"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Választható szín: <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Csúsztassa gyorsan balra az ujját másik óralap kiválasztásához"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Csúsztassa gyorsan jobbra az ujját másik óralap kiválasztásához"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Egyéni óralapok"</string> </resources> diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml index cad11208..de2f4881 100644 --- a/res/values-hy/strings.xml +++ b/res/values-hy/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Հատուկ թվատախտակ"</string> <string name="clock_description" msgid="3563839327378948">"Ընտրեք թվատախտակ"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Փոխեք հատուկ թվատախտակը"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Կարգավորումներ"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Թվատախտակի տարբերակ <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Գույնը և չափսը"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Գույնը և չափսը"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Գույն"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Ժամացույցի չափսը փոխվում է կողպէկրանի բովանդակությանը համապատասխան"</string> <string name="clock_size_large" msgid="3143248715744138979">"Մեծ"</string> <string name="clock_size_small" msgid="2280449912094164133">"Փոքր"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Էկրանի անկյունում ցուցադրվում է փոքրիկ ժամացույց"</string> <string name="grid_title" msgid="1688173478777254123">"Հավելվածների ցանց"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Կիրառել"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Հպեք՝ փոփոխելու համար"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Ավելացրեք ձեր նախընտրած տառատեսակները յուրաքանչյուր էկրանին"</string> <string name="grid_options_title" msgid="7071930966989877023">"Ընտրեք ցանցի չափը"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Ցանցի չափը փոխելու դեպքում աշխատանքային տարածքը մի քանի վայրկյանում կվերաբեռնվի։"</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Աշխատանքային տարածքի (%1$s ցանցով) վերաբեռնում"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Չհաջողվեց վերաբեռնել %1$s ցանցով աշխատանքային տարածքը"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Ոճը կարգավորվեց"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Ժամացույցը կարգավորվեց"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Ցանցը կարգավորվեց"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Հատուկ գույն"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Հատուկ ձևապատկեր"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Հատուկ ոճի անվանումը"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Գույնի ինտենսիվություն"</string> <string name="mode_title" msgid="2394873501427436055">"Մուգ թեմա"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Ժամանակավորապես անջատվել է մարտկոցի տնտեսման համար"</string> <string name="mode_changed" msgid="2243581369395418584">"Թեման փոխվեց"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Ձախ դյուրանցում"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Աջ դյուրանցում"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Ոչ մեկը"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"«<xliff:g id="APPNAME">%1$s</xliff:g>» հավելվածն ընտրելու համար կատարեք հետևյալը"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Չհաջողվեց ավելացնել դյուրանցում"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Բացել <xliff:g id="APPNAME">%1$s</xliff:g> հավելվածը"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> հավելվածի դյուրանցումն ավելացնելու համար համոզվեք, որ՝"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Պատրաստ է"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Ընտրված չէ"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Ցուցադրել ծանուցումները կողպէկրանին"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Թաքցնել ծանուցումները կողպէկրանին"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Կողպէկրանի այլ կարգավորումներ"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Գաղտնիություն, «Այժմ հնչում է» և ավելին"</string> <string name="more_colors" msgid="3191071655353004591">"Այլ գույներ"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Հիմնական դինամիկ թեմա"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Հիմնական չեզոք թեմա"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Հիմնական գունեղ թեմա"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Հիմնական արտահայտիչ թեմա"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Գույնի կանխադրված տարբերակ"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Գույնի տարբերակ <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Սահեցրեք ձախ՝ այլ թվատախտակ ընտրելու համար"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Սահեցրեք աջ՝ այլ թվատախտակ ընտրելու համար"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Հատուկ թվատախտակներ"</string> </resources> diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index 7e222746..c4ff381a 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Jam Kustom"</string> <string name="clock_description" msgid="3563839327378948">"Pilih jam kustom"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Ubah jam kustom"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Setelan Jam"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Opsi tampilan jam <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Warna & ukuran jam"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Warna & ukuran jam"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Warna"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Ukuran jam berubah sesuai dengan konten layar kunci"</string> <string name="clock_size_large" msgid="3143248715744138979">"Besar"</string> <string name="clock_size_small" msgid="2280449912094164133">"Kecil"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Jam kecil ditampilkan di sudut layar Anda"</string> <string name="grid_title" msgid="1688173478777254123">"Petak aplikasi"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Terapkan"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Ketuk untuk mengedit"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Tambahkan font favorit ke setiap layar"</string> <string name="grid_options_title" msgid="7071930966989877023">"Pilih ukuran petak"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Mengubah ukuran petak akan memuat ulang ruang kerja dan mungkin perlu waktu beberapa detik."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Memuat ulang ruang kerja dengan %1$s petak"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Gagal memuat ulang ruang kerja dengan %1$s petak"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Gaya berhasil disetel"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Jam berhasil disetel"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Petak berhasil disetel"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Warna khusus"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Bentuk khusus"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Nama gaya khusus"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Intensitas warna"</string> <string name="mode_title" msgid="2394873501427436055">"Tema gelap"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Dinonaktifkan sementara karena fitur Penghemat Baterai"</string> <string name="mode_changed" msgid="2243581369395418584">"Tema diubah"</string> @@ -105,18 +111,18 @@ <string name="beta_title" msgid="8703819523760746458">"Beta"</string> <string name="gird_picker_entry_content_description" msgid="9087651470212293439">"Ubah petak aplikasi"</string> <string name="wallpaper_color_tab" msgid="1447926591721403840">"Warna wallpaper"</string> - <string name="wallpaper_color_subheader" msgid="4044464573669965670">"Warna ikon, teks, dan yang cocok lainnya di wallpaper"</string> + <string name="wallpaper_color_subheader" msgid="4044464573669965670">"Ikon, teks, dan lain-lain serasi dengan warna wallpaper"</string> <string name="wallpaper_color_title" msgid="5687965239180986458">"Warna wallpaper"</string> <string name="preset_color_tab" msgid="3133391839341329314">"Warna dasar"</string> <string name="preset_color_tab_2" msgid="1444107326712562538">"Warna lainnya"</string> - <string name="preset_color_subheader" msgid="8230588536141279371">"Pilih warna apa pun untuk ikon, jam, dan lainnya"</string> + <string name="preset_color_subheader" msgid="8230588536141279371">"Pilih warna untuk ikon, jam, dan lain-lain"</string> <string name="color_changed" msgid="7029571720331641235">"Warna diubah"</string> <string name="adaptive_color_title" msgid="1336508599235896205">"Dinamis"</string> <string name="color_picker_title" msgid="6666830057938082864">"Warna sistem"</string> <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Pintasan kiri"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Pintasan kanan"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Tidak ada"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Untuk memilih `<xliff:g id="APPNAME">%1$s</xliff:g>`, periksa hal berikut"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Tidak dapat menambahkan pintasan"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Buka <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Untuk menambahkan aplikasi <xliff:g id="APPNAME">%1$s</xliff:g> sebagai pintasan, pastikan"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Selesai"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Tidak ada"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Tampilkan notifikasi di layar kunci"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Sembunyikan notifikasi di layar kunci"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Opsi layar kunci lainnya"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Privasi, Now Playing, dan lainnya"</string> <string name="more_colors" msgid="3191071655353004591">"Warna Lainnya"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Tema dinamis utama"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Tema netral utama"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Tema cerah utama"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Tema ekspresif utama"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Opsi warna default"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Opsi warna <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Geser ke kiri untuk memilih tampilan jam yang berbeda"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Geser ke kanan untuk memilih tampilan jam yang berbeda"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Tampilan Jam Kustom"</string> </resources> diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml index 4742dc43..d5c34369 100644 --- a/res/values-is/strings.xml +++ b/res/values-is/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Sérsniðin klukka"</string> <string name="clock_description" msgid="3563839327378948">"Veldu sérsniðna klukku"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Breyta sérsniðinni klukku"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Klukkustillingar"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Úrskífuvalkostur <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Klukkustærð og litur"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Klukkustærð og litur"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Litur"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Stærð klukku breytist í samræmi við efni á lásskjá"</string> <string name="clock_size_large" msgid="3143248715744138979">"Stór"</string> <string name="clock_size_small" msgid="2280449912094164133">"Lítil"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Lítil klukka birtist í horni skjásins"</string> <string name="grid_title" msgid="1688173478777254123">"Forritatafla"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Nota"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Ýttu til að breyta"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Fáðu uppáhaldsleturgerðirnar þínar á alla skjái"</string> <string name="grid_options_title" msgid="7071930966989877023">"Velja stærð hnitanets"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Breyting á töflustærð endurhleður vinnusvæði og getur tekið nokkrar sekúndur."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Endurhleður vinnusvæði með %1$s töflu"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Ekki tókst að endurhlaða vinnusvæði með %1$s töflu"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Stíll var stilltur"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Klukka var stillt"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Hnitanet var stillt"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Sérsniðinn litur"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Sérsniðið form"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Sérsniðið stílheiti"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Litstyrkur"</string> <string name="mode_title" msgid="2394873501427436055">"Dökkt þema"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Slökkt tímabundið vegna rafhlöðusparnaðar"</string> <string name="mode_changed" msgid="2243581369395418584">"Þema var breytt"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Vinstri flýtilykill"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Hægri flýtilykill"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Ekkert"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Til að velja „<xliff:g id="APPNAME">%1$s</xliff:g>“ skaltu athuga eftirfarandi"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Ekki tókst að bæta flýtileið við"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Opna <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Til að bæta forritinu <xliff:g id="APPNAME">%1$s</xliff:g> við sem flýtileið skaltu ganga úr skugga um að"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Lokið"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Ekkert"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Sýna tilkynningar á lásskjánum"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Fela tilkynningar á lásskjánum"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"Fleiri valkostir fyrir lásskjá"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"Persónuvernd, í spilun og fleira"</string> <string name="more_colors" msgid="3191071655353004591">"Fleiri litir"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Kvikt aðalþema"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Hlutlaust aðalþema"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Líflegt aðalþema"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Tjáningarríkt aðalþema"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Sjálfgefinn litavalkostur"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Litavalkostur <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Strjúktu til vinstri til að velja aðra klukku"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Strjúktu til hægri til að velja aðra klukku"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Sérsniðnar klukkur"</string> </resources> diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index d54138d7..3bc8cb71 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -22,8 +22,9 @@ <string name="clock_title" msgid="1974314575211361352">"Orologio personalizzato"</string> <string name="clock_description" msgid="3563839327378948">"Scegli un orologio personalizzato"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Modifica un orologio personalizzato"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Impos. Orologio"</string> - <string name="clock_color_and_size_title" msgid="7146791234905111351">"Colore/dim. orologio"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Opzione quadrante orologio <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Colore/dim. orologio"</string> + <string name="clock_color_and_size_title" msgid="7146791234905111351">"Colore e dimensioni orologio"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Colore"</string> <string name="clock_color_red" msgid="3843504214807597810">"Rosso"</string> @@ -39,7 +40,8 @@ <string name="clock_size_dynamic" msgid="1023930312455061642">"Dinamiche"</string> <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Le dimensioni dell\'orologio cambiano in base ai contenuti della schermata di blocco"</string> <string name="clock_size_large" msgid="3143248715744138979">"Grandi"</string> - <string name="clock_size_small" msgid="2280449912094164133">"Piccolo"</string> + <string name="clock_size_small" msgid="2280449912094164133">"Piccole"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Un piccolo orologio visualizzato nell\'angolo dello schermo"</string> <string name="grid_title" msgid="1688173478777254123">"Griglia di app"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Applica"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Tocca per modificare"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Aggiungi i tuoi caratteri preferiti a ogni schermata"</string> <string name="grid_options_title" msgid="7071930966989877023">"Scegli la dimensione della griglia"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> x <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Modificare la dimensione della griglia ricarica lo spazio di lavoro e richiede alcuni secondi."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Stai ricaricando lo spazio di lavoro con griglia %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Impossibile ricaricare lo spazio di lavoro con griglia %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Stile impostato"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Orologio impostato"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Griglia impostata"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Colore personalizzato"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Forma personalizzata"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Nome dello stile personalizzato"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Intensità cromatica"</string> <string name="mode_title" msgid="2394873501427436055">"Tema scuro"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Opzione disattivata temporaneamente per risparmio energetico"</string> <string name="mode_changed" msgid="2243581369395418584">"Tema modificato"</string> @@ -115,22 +121,26 @@ <string name="color_picker_title" msgid="6666830057938082864">"Colori di sistema"</string> <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Scorciatoia sinistra"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Scorciatoia destra"</string> - <string name="keyguard_affordance_none" msgid="1751643933430782312">"Nessuno"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Per poter selezionare \"<xliff:g id="APPNAME">%1$s</xliff:g>\", devi controllare quanto segue:"</string> + <string name="keyguard_affordance_none" msgid="1751643933430782312">"Nessuna"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Impossibile aggiungere la scorciatoia"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Apri <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Per aggiungere l\'app <xliff:g id="APPNAME">%1$s</xliff:g> come scorciatoia, assicurati che:"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Fine"</string> <string name="keyguard_quick_affordance_title" msgid="4242813186995735584">"Scorciatoie"</string> <string name="keyguard_quick_affordance_section_title" msgid="2806304242671717309">"Scorciatoie"</string> <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> - <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Nessun elemento"</string> + <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Nessuna"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Mostra le notifiche sulla schermata di blocco"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Nascondi le notifiche sulla schermata di blocco"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Altre opzioni per la schermata di blocco"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Privacy, Now Playing e altro"</string> <string name="more_colors" msgid="3191071655353004591">"Altri colori"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Tema dinamico primario"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Tema naturale primario"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Tema intenso primario"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Tema espressivo primario"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Opzione colore predefinita"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Opzione colore <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Scorri a sinistra per selezionare un altro quadrante"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Scorri a destra per selezionare un altro quadrante"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Quadranti personalizzati"</string> </resources> diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index 695536ec..58da8e02 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"שעון מותאם אישית"</string> <string name="clock_description" msgid="3563839327378948">"בחירת שעון מותאם אישית"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"שינוי שעון מותאם אישית"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"הגדרות השעון"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"האפשרות של תצוגת השעון <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"הצבע והגודל של השעון"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"הצבע והגודל של השעון"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"צבע"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"גודל השעון משתנה בהתאם לתוכן במסך הנעילה"</string> <string name="clock_size_large" msgid="3143248715744138979">"גדול"</string> <string name="clock_size_small" msgid="2280449912094164133">"קטן"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"שעון קטן מופיע בפינת המסך"</string> <string name="grid_title" msgid="1688173478777254123">"תצוגת האפליקציות"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"אישור"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"יש להקיש כדי לערוך"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"אפשר להוסיף את הגופנים המועדפים לכל מסך"</string> <string name="grid_options_title" msgid="7071930966989877023">"בחירת גודל הרשת"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"שינוי גודל הרשת יטען מחדש את סביבת העבודה וייקח כמה שניות."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"טעינה מחדש של סביבת העבודה עם רשת %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"לא הצלחנו לטעון מחדש את סביבת העבודה עם רשת %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"הסגנון הוגדר בהצלחה"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"השעון הוגדר בהצלחה"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"הרשת הוגדרה בהצלחה"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"צבע מותאם אישית"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"צורה מותאמת אישית"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"שם סגנון מותאם אישית"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"עוצמת הצבע"</string> <string name="mode_title" msgid="2394873501427436055">"עיצוב כהה"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"מושבת זמנית כי הופעל מצב \'חיסכון בסוללה\'"</string> <string name="mode_changed" msgid="2243581369395418584">"העיצוב השתנה"</string> @@ -113,24 +119,28 @@ <string name="color_changed" msgid="7029571720331641235">"הצבע השתנה"</string> <string name="adaptive_color_title" msgid="1336508599235896205">"דינמי"</string> <string name="color_picker_title" msgid="6666830057938082864">"צבעי המערכת"</string> - <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"קיצור דרך מימין"</string> - <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"קיצור דרך משמאל"</string> + <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"קיצור דרך שמאלי"</string> + <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"קיצור דרך ימני"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"ללא"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"כדי לבחור באפליקציה <xliff:g id="APPNAME">%1$s</xliff:g> צריך לסמן את האפשרויות הבאות"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"לא ניתן להוסיף את קיצור הדרך"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"פתיחת <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"כדי להוסיף את האפליקציה <xliff:g id="APPNAME">%1$s</xliff:g> כקיצור דרך, צריך לוודא"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"סיום"</string> <string name="keyguard_quick_affordance_title" msgid="4242813186995735584">"קיצורי דרך"</string> <string name="keyguard_quick_affordance_section_title" msgid="2806304242671717309">"קיצורי דרך"</string> <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> - <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"ללא"</string> + <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"אין"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"הצגת ההתראות במסך הנעילה"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"הסתרת ההתראות במסך הנעילה"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"עוד אפשרויות של מסך הנעילה"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"פרטיות, \'מה שומעים עכשיו?\' ועוד"</string> <string name="more_colors" msgid="3191071655353004591">"צבעים נוספים"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"עיצוב ראשי דינמי"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"עיצוב ראשי נייטרלי"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"עיצוב ראשי בצבעים עזים"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"עיצוב ראשי אקספרסיבי"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"אפשרות הצבע שמוגדרת כברירת מחדל"</string> <string name="content_description_color_option" msgid="4169813692012119578">"אפשרות צבע <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"כדי לבחור תצוגת שעון שונה, צריך להחליק ימינה"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"כדי לבחור תצוגת שעון שונה, צריך להחליק שמאלה"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"שעונים בהתאמה אישית"</string> </resources> diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 58bf2652..af565a4d 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"カスタム文字盤"</string> <string name="clock_description" msgid="3563839327378948">"文字盤の選択"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"文字盤の変更"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"時計の設定"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"文字盤オプション <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"時計の色とサイズ"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"時計の色とサイズ"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>、<xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"色"</string> @@ -37,9 +38,10 @@ <string name="clock_color_teal" msgid="7499223425741344251">"ティール"</string> <string name="clock_size" msgid="5028923902364418263">"サイズ"</string> <string name="clock_size_dynamic" msgid="1023930312455061642">"動的"</string> - <string name="clock_size_dynamic_description" msgid="2776620745774561662">"時計のサイズはロック画面の内容に応じて変わります"</string> + <string name="clock_size_dynamic_description" msgid="2776620745774561662">"時計のサイズがロック画面の状況に応じて変わります"</string> <string name="clock_size_large" msgid="3143248715744138979">"大"</string> <string name="clock_size_small" msgid="2280449912094164133">"小"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"画面の隅に小さい時計を表示する"</string> <string name="grid_title" msgid="1688173478777254123">"アプリグリッド"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"適用"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"タップして編集"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"お気に入りのフォントをすべての画面に追加できます"</string> <string name="grid_options_title" msgid="7071930966989877023">"グリッドサイズの選択"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"グリッドのサイズを変えるとワークスペースが再読み込みされます(数秒かかることがあります)。"</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"%1$s グリッドでワークスペースを再読み込みしています"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"%1$s グリッドでのワークスペースの再読み込みに失敗しました"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"スタイルの設定が完了しました"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"時計の設定が完了しました"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"グリッドの設定が完了しました"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"カスタム色"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"カスタムの形状"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"カスタム スタイル名"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"色の輝度"</string> <string name="mode_title" msgid="2394873501427436055">"ダークモード"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"バッテリー セーバーにより一時的に無効になりました"</string> <string name="mode_changed" msgid="2243581369395418584">"テーマを変更しました"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"左ショートカット"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"右ショートカット"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"なし"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"「<xliff:g id="APPNAME">%1$s</xliff:g>」を選択するには、以下を確認します"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"ショートカットを追加できません"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> を開きます。"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> アプリをショートカットとして追加するための手順"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"完了"</string> @@ -124,11 +130,17 @@ <string name="keyguard_quick_affordance_section_title" msgid="2806304242671717309">"ショートカット"</string> <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>、<xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"なし"</string> - <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"ロック画面に通知を表示します"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"ロック画面では通知を非表示にします"</string> + <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"ロック画面に通知を表示する"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"ロック画面の詳細オプション"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"プライバシー、この曲なに?、その他"</string> <string name="more_colors" msgid="3191071655353004591">"他の色"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"メインの動的なテーマ"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"メインの中間テーマ"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"メインの鮮やかなテーマ"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"メインの表現力豊かなテーマ"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"デフォルトのカラー オプション"</string> <string name="content_description_color_option" msgid="4169813692012119578">"カラー オプション <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"別の文字盤を選択するには、左にスワイプします"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"別の文字盤を選択するには、右にスワイプします"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"カスタム時計"</string> </resources> diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml index 44ca0c57..01997d18 100644 --- a/res/values-ka/strings.xml +++ b/res/values-ka/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"მორგებული საათი"</string> <string name="clock_description" msgid="3563839327378948">"აირჩიეთ მორგებული საათი"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"შეცვალეთ მორგებული საათი"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"საათის პარამეტრები"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"საათის წინა მხარის ვარიანტი <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"საათის ფერი და ზომა"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"საათის ფერი & amp; ზომა"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"ფერი"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"საათის ზომა იცვლება დაბლოკილი ეკრანის შინაარსის მიხედვით"</string> <string name="clock_size_large" msgid="3143248715744138979">"დიდი"</string> <string name="clock_size_small" msgid="2280449912094164133">"პატარა"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"პატარა საათი მოთავსებულია თქვენი ეკრანის კუთხეში"</string> <string name="grid_title" msgid="1688173478777254123">"აპების ბადე"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"მისადაგება"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"შეეხეთ რედაქტირებისთვის"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"დაამატეთ თქვენი საყვარელი შრიფტები ყოველ ეკრანზე"</string> <string name="grid_options_title" msgid="7071930966989877023">"აირჩიეთ ბადის ზომა"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"ბადის ზომის შეცვლით წამებში გადაიტვირთება სამუშაო სივრცე."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"მიმდინარეობს სამუშაო სივრცის გადატვირთვა %1$s ბადით"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"სამუშაო სივრცის გადატვირთვა %1$s ბადით ვერ მოხერხდა"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"სტილი წარმატებით დაყენდა"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"საათი წარმატებით დაყენდა"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"ბადე წარმატებით დაყენდა"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"მორგებული ფერი"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"მორგებული ფიგურა"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"მორგებული სტილის სახელი"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"ფერის ინტენსიუტობა"</string> <string name="mode_title" msgid="2394873501427436055">"მუქი თემა"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"ბატარეის დამზოგის გამო დროებით გათიშულია"</string> <string name="mode_changed" msgid="2243581369395418584">"თემა შეიცვალა"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"მარცხენა მალსახმობი"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"მარჯვენა მალსახმობი"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"არცერთი"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"„<xliff:g id="APPNAME">%1$s</xliff:g>“-ის ასარჩევად შეამოწმეთ შემდეგი"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"მალსახმობის დამატება შეუძლებელია"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g>-ის გახსნა"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> აპი რომ მალსახმობის სახით დაამატოთ, დარწმუნდით, რომ"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"მზადაა"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"არცერთი"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"შეტყობინებების ჩვენება ჩაკეტილ ეკრანზე"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"შეტყობინებების დამალვა ჩაკეტილ ეკრანზე"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"ჩაკეტილი ეკრანის სხვა პარამეტრები"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"კონფიდენციალურობა, რა უკრავს და სხვა"</string> <string name="more_colors" msgid="3191071655353004591">"მეტი ფერი"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"ძირითადი დინამიური თემა"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"ძირითადი ნეიტრალური თემა"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"ძირითადი ცოცხალი თემა"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"ძირითადი ექსპრესიული თემა"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"ფერის ნაგულისხმევი ვარიანტი"</string> <string name="content_description_color_option" msgid="4169813692012119578">"ფერის ვარიანტი <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"გადაფურცვლა მარცხნივ განსხვავებული ციფერბლატის ასარჩევად"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"გადაფურცვლა მარჯვნივ განსხვავებული ციფერბლატის ასარჩევად"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"მორგებული საათები"</string> </resources> diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml index 47bac27e..6e839d88 100644 --- a/res/values-kk/strings.xml +++ b/res/values-kk/strings.xml @@ -22,8 +22,9 @@ <string name="clock_title" msgid="1974314575211361352">"Арнаулы сағат"</string> <string name="clock_description" msgid="3563839327378948">"Арнаулы сағатты таңдау"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Арнаулы сағатты өзгерту"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Сағат параметрі"</string> - <string name="clock_color_and_size_title" msgid="7146791234905111351">"Сағат түсі, көлемі"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Циферблат опциясы: <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Сағат түсі, көлемі"</string> + <string name="clock_color_and_size_title" msgid="7146791234905111351">"Сағаттың түсі, өлшемі"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Түс"</string> <string name="clock_color_red" msgid="3843504214807597810">"Қызыл"</string> @@ -35,11 +36,12 @@ <string name="clock_color_violet" msgid="3454503847169375826">"Күлгін"</string> <string name="clock_color_gray" msgid="9221530636948859231">"Сұр"</string> <string name="clock_color_teal" msgid="7499223425741344251">"Көкшіл жасыл"</string> - <string name="clock_size" msgid="5028923902364418263">"Көлем"</string> + <string name="clock_size" msgid="5028923902364418263">"Өлшем"</string> <string name="clock_size_dynamic" msgid="1023930312455061642">"Динамикалық"</string> - <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Сағат көлемі құлып экранындағы контентке сай өзгереді."</string> + <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Сағаттың өлшемі құлып экранындағы контентке сай өзгереді."</string> <string name="clock_size_large" msgid="3143248715744138979">"Үлкен"</string> <string name="clock_size_small" msgid="2280449912094164133">"Кішi"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Экранның бұрышында шағын сағат көрсетіледі."</string> <string name="grid_title" msgid="1688173478777254123">"Қолданба торы"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Қолдану"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Өзгерту үшін түртіңіз"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Әр экранға ұнайтын қаріпті қоя аласыз."</string> <string name="grid_options_title" msgid="7071930966989877023">"Тор өлшемін таңдаңыз"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Тор өлшемі өзгертілсе, жұмыс орны бірнеше секунд қайта жүктеледі."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"%1$s торы бар жұмыс орны қайта жүктелуде"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"%1$s торы бар жұмыс орны жүктелмеді"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Стиль орнатылды."</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Сағат орнатылды."</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Тор орнатылды."</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Арнаулы түс"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Арнаулы пішін"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Арнаулы стиль атауы"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Түс қанықтығы"</string> <string name="mode_title" msgid="2394873501427436055">"Қараңғы режим"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Батареяны үнемдеу режиміне байланысты уақытша өшірілген."</string> <string name="mode_changed" msgid="2243581369395418584">"Тақырып өзгертілді."</string> @@ -109,14 +115,14 @@ <string name="wallpaper_color_title" msgid="5687965239180986458">"Тұсқағаз түсі"</string> <string name="preset_color_tab" msgid="3133391839341329314">"Негізгі түстер"</string> <string name="preset_color_tab_2" msgid="1444107326712562538">"Басқа түстер"</string> - <string name="preset_color_subheader" msgid="8230588536141279371">"Белгіше, сағат және т.б. үшін кез келген түс таңдаңыз."</string> + <string name="preset_color_subheader" msgid="8230588536141279371">"Белгішелер, сағат, т.б. үшін қалаған түсті таңдаңыз."</string> <string name="color_changed" msgid="7029571720331641235">"Түс өзгертілді."</string> <string name="adaptive_color_title" msgid="1336508599235896205">"Динамикалық"</string> <string name="color_picker_title" msgid="6666830057938082864">"Жүйе түстері"</string> - <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Сол жақ таңбаша"</string> - <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Оң жақ таңбаша"</string> + <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Сол жақ жылдам пәрмен"</string> + <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Оң жақ жылдам пәрмен"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Жоқ"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"\"<xliff:g id="APPNAME">%1$s</xliff:g>\" қолданбасын таңдау үшін мынаны орындаңыз:"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Таңбаша қосу мүмкін емес"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> қолданбасын ашу"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> қолданбасын таңбаша ретінде қосу үшін келесі әрекеттерді орындауды ұмытпаңыз:"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Дайын"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Ешқандай"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Құлып экранында хабарландыруларды көрсету"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Құлып экранында хабарландыруларды жасыру"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Құлып экранының басқа опциялары"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Құпиялық, Now Playing және басқа функциялар"</string> <string name="more_colors" msgid="3191071655353004591">"Қосымша түстер"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Негізгі динамикалық тақырып"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Негізгі бейтарап тақырып"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Негізгі қанық тақырып"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Негізгі бейнелі тақырып"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Әдепкі түс опциясы"</string> <string name="content_description_color_option" msgid="4169813692012119578">"<xliff:g id="ID_1">%1$d</xliff:g> түс опциясы"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Басқа циферблат таңдау үшін солға сырғытыңыз."</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Басқа циферблат таңдау үшін оңға сырғытыңыз."</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Арнаулы сағаттар"</string> </resources> diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml index a1fe61f1..07375af6 100644 --- a/res/values-km/strings.xml +++ b/res/values-km/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"នាឡិកាផ្ទាល់ខ្លួន"</string> <string name="clock_description" msgid="3563839327378948">"ជ្រើសរើសនាឡិកាផ្ទាល់ខ្លួន"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"ប្ដូរនាឡិកាផ្ទាល់ខ្លួន"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"ការកំណត់នាឡិកា"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"ជម្រើសមុខនាឡិកា <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"ពណ៌ និងទំហំនាឡិកា"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"ពណ៌ និងទំហំនាឡិកា"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"ពណ៌"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"ទំហំនាឡិកាផ្លាស់ប្ដូរទៅតាមខ្លឹមសារលើអេក្រង់ចាក់សោ"</string> <string name="clock_size_large" msgid="3143248715744138979">"ធំ"</string> <string name="clock_size_small" msgid="2280449912094164133">"តូច"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"នាឡិកាតូចមួយបង្ហាញនៅជ្រុងនៃអេក្រង់របស់អ្នក"</string> <string name="grid_title" msgid="1688173478777254123">"ក្រឡាកម្មវិធី"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"ប្រើ"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"ចុច ដើម្បីកែ"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"បញ្ចូលពុម្ពអក្សរដែលអ្នកចូលចិត្តទៅគ្រប់អេក្រង់"</string> <string name="grid_options_title" msgid="7071930966989877023">"ជ្រើសរើសទំហំក្រឡា"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"ការប្ដូរទំហំក្រឡានឹងផ្ទុកលំហការងារឡើងវិញ និងអាចចំណាយពេលបន្តិច។"</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"កំពុងផ្ទុកឡើងវិញនូវលំហការងារដែលមានក្រឡា %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"មិនអាចផ្ទុកឡើងវិញនូវលំហការងារដែលមានក្រឡា %1$s ទេ"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"បានកំណត់រចនាប័ទ្មដោយជោគជ័យ"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"បានកំណត់នាឡិកាដោយជោគជ័យ"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"បានកំណត់ក្រឡាដោយជោគជ័យ"</string> @@ -98,7 +103,8 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"ពណ៌ផ្ទាល់ខ្លួន"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"រូបរាងផ្ទាល់ខ្លួន"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"ឈ្មោះរចនាប័ទ្មផ្ទាល់ខ្លួន"</string> - <string name="mode_title" msgid="2394873501427436055">"រចនាប័ទ្មងងឹត"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"កម្រិតពណ៌"</string> + <string name="mode_title" msgid="2394873501427436055">"ទម្រង់រចនាងងឹត"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"បានបិទជាបណ្តោះអាសន្ន ដោយសារមុខងារសន្សំថ្ម"</string> <string name="mode_changed" msgid="2243581369395418584">"បានផ្លាស់ប្ដូររចនាប័ទ្ម"</string> <string name="themed_icon_title" msgid="7312460430471956558">"រូបតំណាងប្ដូរតាមទម្រង់រចនា"</string> @@ -109,14 +115,14 @@ <string name="wallpaper_color_title" msgid="5687965239180986458">"ពណ៌ផ្ទាំងរូបភាព"</string> <string name="preset_color_tab" msgid="3133391839341329314">"ពណ៌គោល"</string> <string name="preset_color_tab_2" msgid="1444107326712562538">"ពណ៌ផ្សេងទៀត"</string> - <string name="preset_color_subheader" msgid="8230588536141279371">"ជ្រើសរើសពណ៌ណាមួយសម្រាប់រូបតំណាង នាឡិកា និងអ្វីៗជាច្រើនទៀតរបស់អ្នក"</string> + <string name="preset_color_subheader" msgid="8230588536141279371">"ជ្រើសរើសពណ៌ណាមួយសម្រាប់នាឡិកា រូបតំណាងរបស់អ្នក និងច្រើនទៀត"</string> <string name="color_changed" msgid="7029571720331641235">"បានផ្លាស់ប្ដូរពណ៌"</string> <string name="adaptive_color_title" msgid="1336508599235896205">"ឌីណាមិក"</string> <string name="color_picker_title" msgid="6666830057938082864">"ពណ៌ប្រព័ន្ធ"</string> <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"ផ្លូវកាត់ខាងឆ្វេង"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"ផ្លូវកាត់ខាងស្តាំ"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"គ្មាន"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"ដើម្បីជ្រើសរើស `<xliff:g id="APPNAME">%1$s</xliff:g>` សូមពិនិត្យមើលខាងក្រោម"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"មិនអាចបញ្ចូលផ្លូវកាត់បានទេ"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"បើក <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"ដើម្បីបញ្ចូលកម្មវិធី <xliff:g id="APPNAME">%1$s</xliff:g> ជាផ្លូវកាត់ សូមប្រាកដថា"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"រួចរាល់"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"គ្មាន"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"បង្ហាញការជូនដំណឹងនៅលើអេក្រង់ចាក់សោ"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"លាក់ការជូនដំណឹងនៅលើអេក្រង់ចាក់សោ"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"ជម្រើសអេក្រង់ចាក់សោច្រើនទៀត"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"ឯកជនភាព, Now Playing និងអ្វីៗច្រើនទៀត"</string> <string name="more_colors" msgid="3191071655353004591">"ពណ៌ច្រើនទៀត"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"ទម្រង់រចនាបែបឌីណាមិកចម្បង"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"ទម្រង់រចនាបែបធម្មតាចម្បង"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"ទម្រង់រចនាបែបរស់រវើកចម្បង"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"ទម្រង់រចនាបែបបង្ហាញចម្បង"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"ជម្រើសពណ៌លំនាំដើម"</string> <string name="content_description_color_option" msgid="4169813692012119578">"ជម្រើសពណ៌ <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"អូសទៅឆ្វេង ដើម្បីជ្រើសរើសមុខនាឡិកាផ្សេង"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"អូសទៅស្ដាំ ដើម្បីជ្រើសរើសមុខនាឡិកាផ្សេង"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"នាឡិកាផ្ទាល់ខ្លួន"</string> </resources> diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml index 8b1c5ca9..fd940a6a 100644 --- a/res/values-kn/strings.xml +++ b/res/values-kn/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"ಕಸ್ಟಮ್ ಗಡಿಯಾರ"</string> <string name="clock_description" msgid="3563839327378948">"ಕಸ್ಟಮ್ ವಾಚ್ ಪಿಕ್"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"ಕಸ್ಟಮ್ ಗಡಿಯಾರ ಬದಲಿಸಿ"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"ಗಡಿಯಾರ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"ಕ್ಲಾಕ್ ಫೇಸ್ ಆಯ್ಕೆ <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"ಗಡಿಯಾರದ ಬಣ್ಣ, ಗಾತ್ರ"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"ಗಡಿಯಾರದ ಬಣ್ಣ, ಗಾತ್ರ"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"ಬಣ್ಣ"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"ಲಾಕ್ ಸ್ಕ್ರೀನ್ನಲ್ಲಿರುವ ವಿಷಯಕ್ಕೆ ಅನುಗುಣವಾಗಿ ಗಡಿಯಾರದ ಗಾತ್ರ ಬದಲಾಗುತ್ತದೆ"</string> <string name="clock_size_large" msgid="3143248715744138979">"ದೊಡ್ಡದು"</string> <string name="clock_size_small" msgid="2280449912094164133">"ಚಿಕ್ಕದು"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ನ ಮೂಲೆಯಲ್ಲಿ ಸಣ್ಣ ಗಡಿಯಾರವೊಂದು ಕಾಣಿಸುತ್ತದೆ"</string> <string name="grid_title" msgid="1688173478777254123">"ಆ್ಯಪ್ ಗ್ರಿಡ್"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"ಅನ್ವಯಿಸಿ"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"ಎಡಿಟ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"ಪ್ರತಿ ಸ್ಕ್ರೀನ್ಗೆ ನಿಮ್ಮ ಮೆಚ್ಚಿನ ಫಾಂಟ್ಗಳನ್ನು ಸೇರಿಸಿ"</string> <string name="grid_options_title" msgid="7071930966989877023">"ಗ್ರಿಡ್ ಗಾತ್ರವನ್ನು ಆರಿಸಿ"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"ಗ್ರಿಡ್ ಗಾತ್ರವನ್ನು ಬದಲಾಯಿಸುವುದರಿಂದ ಕಾರ್ಯಸ್ಥಳವನ್ನು ಮರುಲೋಡ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ಕೆಲವು ಸೆಕೆಂಡ್ಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಬಹುದು."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"%1$s ಗ್ರಿಡ್ ಮೂಲಕ ಕಾರ್ಯಸ್ಥಳವನ್ನು ಮರುಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"%1$s ಗ್ರಿಡ್ ಮೂಲಕ ಕಾರ್ಯಸ್ಥಳವನ್ನು ಮರುಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"ಶೈಲಿಯನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಹೊಂದಿಸಲಾಗಿದೆ"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"ಗಡಿಯಾರವನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಹೊಂದಿಸಲಾಗಿದೆ"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"ಗ್ರಿಡ್ ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಹೊಂದಿಸಲಾಗಿದೆ"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"ಕಸ್ಟಮ್ ಬಣ್ಣ"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"ಕಸ್ಟಮ್ ಆಕಾರ"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"ಕಸ್ಟಮ್ ಶೈಲಿ ಹೆಸರು"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"ಬಣ್ಣದ ತೀವ್ರತೆ"</string> <string name="mode_title" msgid="2394873501427436055">"ಡಾರ್ಕ್ ಥೀಮ್"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"ಬ್ಯಾಟರಿ ಸೇವರ್ ಕಾರಣದಿಂದ ತಾತ್ಕಾಲಿಕವಾಗಿ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string> <string name="mode_changed" msgid="2243581369395418584">"ಥೀಮ್ ಅನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ"</string> @@ -105,7 +111,7 @@ <string name="beta_title" msgid="8703819523760746458">"ಬೀಟಾ"</string> <string name="gird_picker_entry_content_description" msgid="9087651470212293439">"ಆ್ಯಪ್ ಗ್ರಿಡ್ ಬದಲಾಯಿಸಿ"</string> <string name="wallpaper_color_tab" msgid="1447926591721403840">"ವಾಲ್ಪೇಪರ್ ಬಣ್ಣಗಳು"</string> - <string name="wallpaper_color_subheader" msgid="4044464573669965670">"ನಿಮ್ಮ ವಾಲ್ಪೇಪರ್ನಲ್ಲಿ ಐಕಾನ್ಗಳು, ಪಠ್ಯ ಮತ್ತು ಇನ್ನಷ್ಟುಹೊಂದಾಣಿಕೆಯ ಬಣ್ಣಗಳು"</string> + <string name="wallpaper_color_subheader" msgid="4044464573669965670">"ಐಕಾನ್, ಪಠ್ಯ ಮತ್ತು ಇತ್ಯಾದಿಗಳು ವಾಲ್ಪೇಪರ್ನಲ್ಲಿನ ಬಣ್ಣಗಳನ್ನು ಹೋಲುತ್ತವೆ"</string> <string name="wallpaper_color_title" msgid="5687965239180986458">"ವಾಲ್ಪೇಪರ್ ಬಣ್ಣ"</string> <string name="preset_color_tab" msgid="3133391839341329314">"ಮೂಲ ಬಣ್ಣಗಳು"</string> <string name="preset_color_tab_2" msgid="1444107326712562538">"ಇತರ ಬಣ್ಣಗಳು"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"ಎಡ ಶಾರ್ಟ್ಕಟ್"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"ಬಲ ಶಾರ್ಟ್ಕಟ್"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"ಯಾವುದೂ ಅಲ್ಲ"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"`<xliff:g id="APPNAME">%1$s</xliff:g>` ಅನ್ನು ಆಯ್ಕೆಮಾಡಲು ಈ ಕೆಳಗಿನವುಗಳನ್ನು ಗುರುತು ಮಾಡಿ"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"ಶಾರ್ಟ್ಕಟ್ ಸೇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> ಅನ್ನು ತೆರೆಯಿರಿ"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> ಆ್ಯಪ್ ಅನ್ನು ಶಾರ್ಟ್ಕಟ್ ಆಗಿ ಸೇರಿಸಲು ಕೆಳಗಿನವುಗಳನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"ಮುಗಿದಿದೆ"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"ಯಾವುದೂ ಅಲ್ಲ"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"ಲಾಕ್ ಸ್ಕ್ರೀನ್ನಲ್ಲಿ ಅಧಿಸೂಚನೆಗಳನ್ನು ತೋರಿಸಿ"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"ಲಾಕ್ ಸ್ಕ್ರೀನ್ನಲ್ಲಿ ಅಧಿಸೂಚನೆಗಳನ್ನು ಮರೆಮಾಡಿ"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"ಇನ್ನಷ್ಟು ಲಾಕ್ ಸ್ಕ್ರೀನ್ ಆಯ್ಕೆಗಳು"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"ಗೌಪ್ಯತೆ, Now Playing ಮತ್ತು ಇನ್ನಷ್ಟು"</string> <string name="more_colors" msgid="3191071655353004591">"ಇನ್ನಷ್ಟು ಬಣ್ಣಗಳು"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"ಪ್ರಾಥಮಿಕ ಡೈನಾಮಿಕ್ ಥೀಮ್"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"ಪ್ರಾಥಮಿಕ ತಟಸ್ಥ ಥೀಮ್"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"ಪ್ರಾಥಮಿಕ ವೈಬ್ರೆಂಟ್ ಥೀಮ್"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"ಪ್ರಾಥಮಿಕ ಅಭಿವ್ಯಕ್ತಿಶೀಲ ಥೀಮ್"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"ಡೀಫಾಲ್ಟ್ ಬಣ್ಣದ ಆಯ್ಕೆ"</string> <string name="content_description_color_option" msgid="4169813692012119578">"ಬಣ್ಣದ ಆಯ್ಕೆ <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"ಬೇರೊಂದು ಕ್ಲಾಕ್ ಫೇಸ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಲು ಎಡಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"ಬೇರೊಂದು ಕ್ಲಾಕ್ ಫೇಸ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಲು ಬಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"ಕಸ್ಟಮ್ ಕ್ಲಾಕ್ಗಳು"</string> </resources> diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 88e8f4de..6a7643cf 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"맞춤 시계"</string> <string name="clock_description" msgid="3563839327378948">"맞춤 시계 선택"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"맞춤 시계 변경"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"시계 설정"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"시계 페이스 옵션 <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"시계 색상 및 크기"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"시계 색상 및 크기"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"색상"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"시계 크기가 잠금 화면 콘텐츠에 따라 변경됩니다."</string> <string name="clock_size_large" msgid="3143248715744138979">"크게"</string> <string name="clock_size_small" msgid="2280449912094164133">"작게"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"작은 시계가 화면 모서리에 표시됩니다."</string> <string name="grid_title" msgid="1688173478777254123">"앱 그리드"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"적용"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"탭하여 수정"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"모든 화면에 좋아하는 글꼴을 추가하세요."</string> <string name="grid_options_title" msgid="7071930966989877023">"그리드 크기 선택"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"그리드 크기를 변경하면 작업공간이 새로고침되며 몇 초 정도 걸릴 수 있습니다."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"%1$s 그리드로 작업공간을 새로고침하는 중"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"%1$s 그리드로 작업공간을 새로고침하지 못함"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"스타일 설정이 완료되었습니다."</string> <string name="applied_clock_msg" msgid="1303338016701443767">"시계 설정이 완료되었습니다."</string> <string name="applied_grid_msg" msgid="3250499654436933034">"그리드 설정이 완료되었습니다."</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"맞춤 색상"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"맞춤 모양"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"맞춤 스타일 이름"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"색상 강도"</string> <string name="mode_title" msgid="2394873501427436055">"어두운 테마"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"절전 모드로 인해 일시적으로 사용 중지됨"</string> <string name="mode_changed" msgid="2243581369395418584">"테마 변경됨"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"왼쪽 바로가기"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"오른쪽 바로가기"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"없음"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"`<xliff:g id="APPNAME">%1$s</xliff:g>` 앱을 선택하려면 다음을 선택하세요"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"단축키를 추가할 수 없음"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> 열기"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> 앱을 바로가기로 추가하려면 다음을 확인하세요."</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"완료"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"없음"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"잠금 화면에 알림 표시"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"잠금 화면에서 알림 숨기기"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"잠금 화면 옵션 더보기"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"개인 정보 보호, Now Playing 등"</string> <string name="more_colors" msgid="3191071655353004591">"색상 더보기"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"기본 동적 테마"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"기본 보통 테마"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"기본 활기 테마"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"기본 표현 테마"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"기본 색상 옵션"</string> <string name="content_description_color_option" msgid="4169813692012119578">"<xliff:g id="ID_1">%1$d</xliff:g> 색상 옵션"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"왼쪽으로 스와이프하여 다른 시계 페이스 선택"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"오른쪽으로 스와이프하여 다른 시계 페이스 선택"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"시계 페이스 맞춤설정"</string> </resources> diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml index 539a67ff..c3e5c999 100644 --- a/res/values-ky/strings.xml +++ b/res/values-ky/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Жеке саат"</string> <string name="clock_description" msgid="3563839327378948">"Жеке саатты тандоо"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Жеке саатты өзгөртүү"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Сааттын параметрлери"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Циферблаттын варианты: <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Сааттын түсү, өлчөмү"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Сааттын түсү, өлчөмү"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Түс"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Сааттын өлчөмү кулпуланган экрандагы нерселерге ылайык өзгөрөт"</string> <string name="clock_size_large" msgid="3143248715744138979">"Чоң"</string> <string name="clock_size_small" msgid="2280449912094164133">"Кичине"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Кичинекей саат экрандын бурчунда көрүнүп турат"</string> <string name="grid_title" msgid="1688173478777254123">"Колдонмонун торчосу"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Колдонуу"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Өзгөртүү үчүн таптап коюңуз"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Жактырган ариптериңизди каалаган экранга коюп алсаңыз болот"</string> <string name="grid_options_title" msgid="7071930966989877023">"Торчонун өлчөмүн тандоо"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Торчонун өлчөмү өзгөрсө, иштөө аймагы кайра жүктөлөт. Буга бир нече секунд керек."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Иштөө аймагы %1$s торчо менен кайра жүктөлүүдө"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Иштөө аймагы %1$s торчо менен кайра жүктөлбөй калды"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Стиль коюлду"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Саат ийгиликтүү жөндөлдү"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Торчо ийгиликтүү жөндөлдү"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Жеке түс"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Жеке форма"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Жеке стилдин аталышы"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Түстүн интенсивдүүлүгү"</string> <string name="mode_title" msgid="2394873501427436055">"Караңгы тема"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Батареяны үнөмдөөчү режимде убактылуу өчүрүлдү"</string> <string name="mode_changed" msgid="2243581369395418584">"Тема өзгөртүлдү"</string> @@ -105,18 +111,18 @@ <string name="beta_title" msgid="8703819523760746458">"Бета"</string> <string name="gird_picker_entry_content_description" msgid="9087651470212293439">"Колдонмонун торчосун өзгөртүү"</string> <string name="wallpaper_color_tab" msgid="1447926591721403840">"Тушкагаздын түстөрү"</string> - <string name="wallpaper_color_subheader" msgid="4044464573669965670">"Тушкагаз түсүнө жараша сүрөтчөлөр, текст же башкалар"</string> + <string name="wallpaper_color_subheader" msgid="4044464573669965670">"Сүрөтчөлөр, текст ж.б. тушкагаздын түсүнө айкалышат"</string> <string name="wallpaper_color_title" msgid="5687965239180986458">"Тушкагаздын түсү"</string> <string name="preset_color_tab" msgid="3133391839341329314">"Негизги түстөр"</string> <string name="preset_color_tab_2" msgid="1444107326712562538">"Башка түстөр"</string> <string name="preset_color_subheader" msgid="8230588536141279371">"Сүрөтчөлөрүңүз, саатыңыз же башка нерселер үчүн каалаган түстү тандаңыз"</string> <string name="color_changed" msgid="7029571720331641235">"Түс өзгөртүлдү"</string> <string name="adaptive_color_title" msgid="1336508599235896205">"Динамикалык"</string> - <string name="color_picker_title" msgid="6666830057938082864">"Тутумдун түстөрү"</string> + <string name="color_picker_title" msgid="6666830057938082864">"Системанын түстөрү"</string> <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Сол ыкчам баскыч"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Оң ыкчам баскыч"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Жок"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"\"<xliff:g id="APPNAME">%1$s</xliff:g>\" колдонмосун тандоо үчүн төмөнкүлөрдү аткарыңыз:"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Ыкчам баскыч кошулбай жатат"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> ачуу"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> колдонмосун ыкчам баскыч катары кошуу үчүн төмөнкүлөрдү аткарыңыз:"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Бүттү"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Жок"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Билдирмелерди кулпуланган экранда көрсөтүү"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Билдирмелерди кулпуланган экранда жашыруу"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Кулпуланган экран параметрлери"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Купуялык, Эмне ойноп жатат? жана башкалар"</string> <string name="more_colors" msgid="3191071655353004591">"Дагы түстөр"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Негизги динамикалык тема"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Негизги нейтралдуу тема"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Негизги каныккан тема"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Негизги ачык тема"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Демейки түс варианты"</string> <string name="content_description_color_option" msgid="4169813692012119578">"<xliff:g id="ID_1">%1$d</xliff:g> түс варианты"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Башка циферблатты тандоо үчүн экранды солго сүрүңүз"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Башка циферблатты тандоо үчүн экранды оңго сүрүңүз"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Жеке сааттар"</string> </resources> diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml index 9a41c5b1..00afb8e2 100644 --- a/res/values-lo/strings.xml +++ b/res/values-lo/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"ໂມງທີ່ກຳນົດເອງ"</string> <string name="clock_description" msgid="3563839327378948">"ເລືອກໂມງກຳນົດເອງ"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"ປ່ຽນໂມງກຳນົດເອງ"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"ການຕັ້ງຄ່າໂມງ"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"ຕົວເລືອກໜ້າປັດໂມງ <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"ສີ ແລະ ຂະໜາດໂມງ"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"ສີ ແລະ ຂະໜາດໂມງ"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"ສີ"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"ຂະໜາດຂອງໂມງປ່ຽນຕາມເນື້ອຫາໃນໜ້າຈໍລັອກ"</string> <string name="clock_size_large" msgid="3143248715744138979">"ໃຫຍ່"</string> <string name="clock_size_small" msgid="2280449912094164133">"ນ້ອຍ"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"ໂມງນ້ອຍທີ່ສະແດງຢູ່ໃນມຸມຂອງໜ້າຈໍທ່ານ"</string> <string name="grid_title" msgid="1688173478777254123">"ຕາຕະລາງແອັບ"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"ນຳໃຊ້"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"ແຕະເພື່ອແກ້ໄຂ"</string> @@ -65,11 +67,14 @@ <string name="font_card_body" msgid="6790525594503904468">"ເພີ່ມຟອນທີ່ທ່ານມັກໃສ່ທຸກໜ້າຈໍ"</string> <string name="grid_options_title" msgid="7071930966989877023">"ເລືອກຂະໜາດຊ່ອງ"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"ການປ່ຽນຂະໜາດໂຄງຮ່າງຕາຕະລາງຈະໂຫຼດບ່ອນເຮັດວຽກ ແລະ ອາດໃຊ້ເວລາສອງສາມວິນາທີ."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"ກຳລັງໂຫຼດບ່ອນເຮັດວຽກຄືນໃໝ່ດ້ວຍໂຄງຮ່າງຕາຕະລາງ %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"ໂຫຼດບ່ອນເຮັດວຽກຄືນໃໝ່ດ້ວຍໂຄງຮ່າງຕາຕະລາງ %1$s ບໍ່ສຳເລັດ"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"ຕັ້ງຮູບແບບສຳເລັດແລ້ວ"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"ຕັ້ງໂມງສຳເລັດແລ້ວ"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"ຕັ້ງຊ່ອງສຳເລັດແລ້ວ"</string> <string name="apply_theme_error_msg" msgid="791364062636538317">"ເກີດບັນຫາໃນການນຳໃຊ້ຮູບແບບ"</string> - <string name="custom_theme_next" msgid="6235420097213197301">"ຖັດໄປ"</string> + <string name="custom_theme_next" msgid="6235420097213197301">"ຕໍ່ໄປ"</string> <string name="custom_theme_previous" msgid="4941132112640503022">"ຜ່ານມາ"</string> <string name="custom_theme" msgid="1618351922263478163">"ກຳນົດເອງ"</string> <string name="custom_theme_title" msgid="2192300350332693631">"ແບບກຳນົດເອງ <xliff:g id="ID_1">%1$d</xliff:g>"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"ສີກຳນົດເອງ"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"ຮູບຮ່າງກຳນົດເອງ"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"ຊື່ຮູບແບບສີສັນກຳນົດເອງ"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"ຄວາມເຂັ້ມຂອງສີ"</string> <string name="mode_title" msgid="2394873501427436055">"ຮູບແບບສີສັນມືດ"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"ຖືກປິດການນຳໃຊ້ຊົ່ວຄາວເນື່ອງຈາກຕົວປະຢັດແບັດເຕີຣີ"</string> <string name="mode_changed" msgid="2243581369395418584">"ປ່ຽນຮູບແບບສີສັນແລ້ວ"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"ທາງລັດຊ້າຍ"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"ທາງລັດຂວາ"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"ບໍ່ມີ"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"ເພື່ອເລືອກ `<xliff:g id="APPNAME">%1$s</xliff:g>` ກະລຸນາກວດສອບສິ່ງຕໍ່ໄປນີ້"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"ບໍ່ສາມາດເພີ່ມທາງລັດໄດ້"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"ເປີດ <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"ເພື່ອເພີ່ມແອັບ <xliff:g id="APPNAME">%1$s</xliff:g> ເປັນທາງລັດ, ກະລຸນາກວດສອບໃຫ້ແນ່ໃຈວ່າ"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"ແລ້ວໆ"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"ບໍ່ມີ"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"ສະແດງການແຈ້ງເຕືອນຢູ່ໜ້າຈໍລັອກ"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"ເຊື່ອງການແຈ້ງເຕືອນຢູ່ໜ້າຈໍລັອກ"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"ຕົວເລືອກໜ້າຈໍລັອກເພີ່ມເຕີມ"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"ຄວາມເປັນສ່ວນຕົວ, Now Playing ແລະ ອື່ນໆ"</string> <string name="more_colors" msgid="3191071655353004591">"ສີເພີ່ມເຕີມ"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"ຮູບແບບສີສັນຫຼັກແບບໄດນາມິກ"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"ຮູບແບບສີສັນຫຼັກແບບໃຊ້ສີໂທນກາງ"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"ຮູບແບບສີສັນຫຼັກແບບສີສັນສົດໃສ"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"ຮູບແບບສີສັນຫຼັກແບບຊັດເຈນ"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"ຕົວເລືອກສີຄ່າເລີ່ມຕົ້ນ"</string> <string name="content_description_color_option" msgid="4169813692012119578">"ຕົວເລືອກສີ <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"ປັດຊ້າຍເພື່ອເລືອກໜ້າປັດໂມງແບບຕ່າງໆ"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"ປັດຂວາເພື່ອເລືອກໜ້າປັດໂມງແບບຕ່າງໆ"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"ໜ້າປັດໂມງແບບກຳນົດເອງ"</string> </resources> diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index 90b8bd7c..41ce8fd0 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Tink. laikrodis"</string> <string name="clock_description" msgid="3563839327378948">"Pasir. tink. laikr."</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Keiskite tinkintą laikrodį"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Laikr. nustat."</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Ciferblato parinktis: <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Laikr. spalva, dyd."</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Laikr. spalva ir dydis"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Spalva"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Laikrodžio dydis keičiamas pagal užrakinimo ekrano turinį"</string> <string name="clock_size_large" msgid="3143248715744138979">"Didelis"</string> <string name="clock_size_small" msgid="2280449912094164133">"Mažas"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Ekrano kampe rodomas nedidelis laikrodis"</string> <string name="grid_title" msgid="1688173478777254123">"Pr. tinklelis"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Taikyti"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Palieskite ir redaguokite"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Pridėkite mėgstamiausių šriftų prie kiekvieno ekrano"</string> <string name="grid_options_title" msgid="7071930966989877023">"Pasirinkti tinklelio dydį"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> x <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Keičiant tinklelio dydį iš naujo įkeliama darbo sritis ir tai gali užtrukti kelias sekundes."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Iš naujo įkeliama darbo sritis su %1$s tinkleliu"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Nepavyko iš naujo įkelti darbo srities su %1$s tinkleliu"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Stilius nustatytas sėkmingai"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Laikrodis nustatytas sėkmingai"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Tinklelis nustatytas sėkmingai"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Tinkinta spalva"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Tinkinta forma"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Tinkinto stiliaus pavadinimas"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Spalvos intensyvumas"</string> <string name="mode_title" msgid="2394873501427436055">"Tamsioji tema"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Laikinai išjungta dėl Akumuliatoriaus tausojimo priemonės"</string> <string name="mode_changed" msgid="2243581369395418584">"Tema pakeista"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Spart. kl. kair."</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Spart. kl. deš."</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Nėra"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Jei norite pasirinkti „<xliff:g id="APPNAME">%1$s</xliff:g>“, patikrinkite toliau nurodytus dalykus."</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Nepavyko pridėti sparčiojo klavišo"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Atidaryti „<xliff:g id="APPNAME">%1$s</xliff:g>“"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Jei norite pridėti programą „<xliff:g id="APPNAME">%1$s</xliff:g>“ kaip šaukinį, įsitikinkite, kad atitinkate reikalavimus."</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Atlikta"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Nėra"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Rodyti pranešimus užrakinimo ekrane"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Slėpti pranešimus užrakinimo ekrane"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"Daugiau užrakinimo ekrano parinkčių"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"Privatumas, „Dabar leidžiama“ ir kt."</string> <string name="more_colors" msgid="3191071655353004591">"Daugiau spalvų"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Pagrindinė dinaminė tema"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Pagrindinė neutrali tema"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Pagrindinė ryški tema"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Pagrindinė išraiškinga tema"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Numatytoji spalvos parinktis"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Spalvos parinktis: <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Perbraukite kairėn, kad pasirinktumėte kitą ciferblatą"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Perbraukite dešinėn, kad pasirinktumėte kitą ciferblatą"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Tinkinti ciferblatai"</string> </resources> diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index a28e6a51..53cbbf6f 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Pielāgots ekrāns"</string> <string name="clock_description" msgid="3563839327378948">"Pielāgota ekrāna izvēle"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Mainiet pielāgotu pulksteņa ekrānu."</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Pulksteņa iestatījumi"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Pulksteņa ekrāna opcija: <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Pulksteņa krāsa/lielums"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Pulksteņa krāsa/lielums"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Krāsa"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Pulksteņa lielums mainās atkarībā no bloķēšanas ekrāna satura."</string> <string name="clock_size_large" msgid="3143248715744138979">"Liels"</string> <string name="clock_size_small" msgid="2280449912094164133">"Mazs"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Jūsu ekrāna stūrī tiek rādīts neliels pulkstenis."</string> <string name="grid_title" msgid="1688173478777254123">"Lietotņu režģis"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Lietot"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Pieskarieties, lai rediģētu"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Pievienojiet savus iecienītos fontus visos ekrānos."</string> <string name="grid_options_title" msgid="7071930966989877023">"Režģa izmēra izvēle"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> x <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Mainot režģa lielumu, tiks atkārtoti ielādēta darbvieta, kas var ilgt dažas sekundes."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Tiek atkārtoti ielādēta darbvieta ar režģi %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Neizdevās atkārtoti ielādēt darbvietu ar režģi %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Stils ir sekmīgi iestatīts"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Pulkstenis ir sekmīgi iestatīts"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Režģis ir sekmīgi iestatīts"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Pielāgota krāsa"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Pielāgota forma"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Pielāgots stila nosaukums"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Krāsu intensitāte"</string> <string name="mode_title" msgid="2394873501427436055">"Tumšais motīvs"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Īslaicīgi atspējots akumulatora enerģijas taupīšanas dēļ"</string> <string name="mode_changed" msgid="2243581369395418584">"Motīvs ir nomainīts"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Saīsne pa kreisi"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Saīsne pa labi"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Nav"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Lai atlasītu lietotni <xliff:g id="APPNAME">%1$s</xliff:g>, pārbaudiet tālāk minēto"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Nevar pievienot saīsni"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Atvērt lietotni <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Lai pievienotu lietotni <xliff:g id="APPNAME">%1$s</xliff:g> kā saīsni, jābūt izpildītiem tālāk minētajiem nosacījumiem."</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Gatavs"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Nav"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Rādīt paziņojumus bloķēšanas ekrānā"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Paslēpt paziņojumus bloķēšanas ekrānā"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Citas bloķēšanas ekrāna opcijas"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Konfidencialitāte, funkcija “Tagad atskaņo” un citi iestatījumi"</string> <string name="more_colors" msgid="3191071655353004591">"Citas krāsas"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Primārais dinamiskais motīvs"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Primārais neitrālais motīvs"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Primārais spilgtais motīvs"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Primārais ekspresīvais motīvs"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Noklusējuma krāsas opcija"</string> <string name="content_description_color_option" msgid="4169813692012119578">"<xliff:g id="ID_1">%1$d</xliff:g>. krāsas opcija"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Velciet pa kreisi, lai izvēlētos citu pulksteņa ekrānu"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Velciet pa labi, lai izvēlētos citu pulksteņa ekrānu"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Pielāgoti pulksteņa ekrāni"</string> </resources> diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml index 9375f881..e3a97db9 100644 --- a/res/values-mk/strings.xml +++ b/res/values-mk/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Приспособен часовник"</string> <string name="clock_description" msgid="3563839327378948">"Изберете приспособен часовник"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Променете го приспособениот часовник"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Поставки"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Опција за екран на часовник <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Боја и големина"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Боја и големина"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Боја"</string> @@ -39,7 +40,8 @@ <string name="clock_size_dynamic" msgid="1023930312455061642">"Динамичнa"</string> <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Големината на часовникот се променува според содржините на заклучен екран"</string> <string name="clock_size_large" msgid="3143248715744138979">"Голема"</string> - <string name="clock_size_small" msgid="2280449912094164133">"Мал"</string> + <string name="clock_size_small" msgid="2280449912094164133">"Мала"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Во аголот на екранот се прикажува мал часовник"</string> <string name="grid_title" msgid="1688173478777254123">"Мрежа"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Примени"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Допрете за да измените"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Додајте ги омилените фонтови на секој екран"</string> <string name="grid_options_title" msgid="7071930966989877023">"Изберете големина на решетка"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Промената на големината на решетката пак ќе го вчита работниот простор и може да потрае неколку секунди."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Работниот простор се вчитува повторно со решетката %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Работниот простор не можеше да се вчита повторно со решетката %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Стилот е успешно поставен"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Часовникот е успешно поставен"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Мрежата е успешно поставена"</string> @@ -98,14 +103,15 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Приспособена боја"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Приспособена форма"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Приспособено име на стил"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Интензитет на бои"</string> <string name="mode_title" msgid="2394873501427436055">"Темна тема"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Привремено оневозможено поради „Штедачот на батерија“"</string> <string name="mode_changed" msgid="2243581369395418584">"Темата е променета"</string> - <string name="themed_icon_title" msgid="7312460430471956558">"Икони со тема"</string> + <string name="themed_icon_title" msgid="7312460430471956558">"Тематски икони"</string> <string name="beta_title" msgid="8703819523760746458">"Бета"</string> <string name="gird_picker_entry_content_description" msgid="9087651470212293439">"Променете ја мрежата на апликации"</string> <string name="wallpaper_color_tab" msgid="1447926591721403840">"Бои од тапетот"</string> - <string name="wallpaper_color_subheader" msgid="4044464573669965670">"Икони, текст и повеќе совпаѓачки бои на тапетот"</string> + <string name="wallpaper_color_subheader" msgid="4044464573669965670">"Иконите, текстот и др. се совпаѓаат по боја со тапетот"</string> <string name="wallpaper_color_title" msgid="5687965239180986458">"Боја на тапет"</string> <string name="preset_color_tab" msgid="3133391839341329314">"Основни бои"</string> <string name="preset_color_tab_2" msgid="1444107326712562538">"Други бои"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Лева кратенка"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Десна кратенка"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Нема"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"За да изберете „<xliff:g id="APPNAME">%1$s</xliff:g>“, проверете го следново"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Не може да се додаде кратенката"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Отворете ја <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"За да ја додадете апликацијата <xliff:g id="APPNAME">%1$s</xliff:g> како кратенка, треба да бидат исполнети следниве услови"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Готово"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Нема"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Прикажувај известувања на заклучен екран"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Сокривај известувања на заклучен екран"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Повеќе опции за заклучен екран"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Приватност, Now Playing и друго"</string> <string name="more_colors" msgid="3191071655353004591">"Повеќе бои"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Примарна динамична тема"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Примарна неутрална тема"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Примарна живописна тема"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Примарна експресивна тема"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Стандардна опција за боја"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Опција за <xliff:g id="ID_1">%1$d</xliff:g> боја"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Повлечете налево за да изберете друг екран на часовникот"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Повлечете надесно за да изберете друг екран на часовникот"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Приспособени часовници"</string> </resources> diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml index b5c97391..ffbd46e6 100644 --- a/res/values-ml/strings.xml +++ b/res/values-ml/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"കസ്റ്റം ക്ലോക്ക്"</string> <string name="clock_description" msgid="3563839327378948">"കസ്റ്റം ക്ലോക്ക് തിരഞ്ഞെടുക്കൂ"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"ഇഷ്ടാനുസൃത ക്ലോക്ക് മാറ്റൂ"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"ക്ലോക്ക് സെറ്റിംഗ്"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"ക്ലോക്ക് ഫെയ്സ് ഓപ്ഷൻ <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"ക്ലോക്കിന്റെ നിറം, വലുപ്പം"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"ക്ലോക്കിന്റെ നിറം, വലുപ്പം"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"നിറം"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"ലോക്ക് സ്ക്രീൻ ഉള്ളടക്കത്തിനനുസരിച്ച് ക്ലോക്കിന്റെ വലുപ്പം മാറുന്നു"</string> <string name="clock_size_large" msgid="3143248715744138979">"വലുത്"</string> <string name="clock_size_small" msgid="2280449912094164133">"ചെറുത്"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"സ്ക്രീനിന്റെ മൂലയിൽ ഒരു ചെറിയ ക്ലോക്ക് കാണിക്കുന്നു"</string> <string name="grid_title" msgid="1688173478777254123">"ആപ്പ് ഗ്രിഡ്"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"പ്രയോഗിക്കുക"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"എഡിറ്റ് ചെയ്യാൻ ടാപ്പ് ചെയ്യുക"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"എല്ലാ സ്ക്രീനിലേക്കും നിങ്ങളുടെ പ്രിയപ്പെട്ട ഫോണ്ടുകൾ ചേർക്കുക"</string> <string name="grid_options_title" msgid="7071930966989877023">"ഗ്രിഡ് വലുപ്പം തിരഞ്ഞെടുക്കുക"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"ഗ്രിഡ് വലുപ്പം മാറ്റുന്നത് വർക്ക്സ്പെയ്സിനെ റീലോഡ് ചെയ്തേക്കാം, ഏതാനും സെക്കൻഡുകൾ സമയമെടുക്കുകയും ചെയ്യും."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"%1$s ഗ്രിഡ് ഉപയോഗിച്ച് വർക്ക്സ്പെയ്സ് റീലോഡ് ചെയ്യുന്നു"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"%1$s ഗ്രിഡ് ഉപയോഗിച്ച് വർക്ക്സ്പെയ്സ് റീലോഡ് ചെയ്യാനായില്ല"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"സ്റ്റൈൽ സജ്ജീകരിച്ചു"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"ക്ലോക്ക് സജ്ജമാക്കി"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"ഗ്രിഡ് സജ്ജീകരിച്ചു"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"ഇഷ്ടാനുസൃത നിറം"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"ഇഷ്ടാനുസൃത രൂപം"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"ഇഷ്ടാനുസൃത സ്റ്റൈലിന്റെ പേര്"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"വർണ തീവ്രത"</string> <string name="mode_title" msgid="2394873501427436055">"ഡാർക്ക് തീം"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"ബാറ്ററി ലാഭിക്കൽ കാരണം തൽക്കാലം പ്രവർത്തനരഹിതമാണ്"</string> <string name="mode_changed" msgid="2243581369395418584">"തീം മാറ്റി"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"ഇടത് കുറുക്കുവഴി"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"വലത് കുറുക്കുവഴി"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"ഒന്നുമില്ല"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"`<xliff:g id="APPNAME">%1$s</xliff:g>` തിരഞ്ഞെടുക്കാൻ, ഇനിപ്പറയുന്നവ പരിശോധിക്കുക"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"കുറുക്കുവഴി ചേർക്കാനാകില്ല"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> തുറക്കുക"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"കുറുക്കുവഴിയായി <xliff:g id="APPNAME">%1$s</xliff:g> ആപ്പ് ചേർക്കാൻ, ഇനിപ്പറയുന്ന കാര്യങ്ങൾ ഉറപ്പാക്കുക"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"പൂർത്തിയായി"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"ഒന്നുമില്ല"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"ലോക്ക് സ്ക്രീനിൽ അറിയിപ്പുകൾ കാണിക്കുക"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"ലോക്ക് സ്ക്രീനിൽ അറിയിപ്പുകൾ മറയ്ക്കുക"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"കൂടുതൽ ലോക്ക് സ്ക്രീൻ ഓപ്ഷനുകൾ"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"സ്വകാര്യത, ഇപ്പോൾ കേൾക്കുന്നത്, എന്നിവയും മറ്റും"</string> <string name="more_colors" msgid="3191071655353004591">"കൂടുതൽ നിറങ്ങൾ"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"പ്രാഥമിക ഡൈനാമിക് തീം"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"പ്രാഥമിക ന്യൂട്രൽ തീം"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"പ്രാഥമിക വൈബ്രന്റ് തീം"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"പ്രാഥമിക എക്സ്പ്രസീവ് തീം"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"ഡിഫോൾട്ട് വർണ്ണ ഓപ്ഷൻ"</string> <string name="content_description_color_option" msgid="4169813692012119578">"വർണ്ണ ഓപ്ഷൻ <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"മറ്റൊരു ക്ലോക്ക് ഫേസ് തിരഞ്ഞെടുക്കാൻ ഇടതുഭാഗത്തേക്ക് സ്വൈപ്പ് ചെയ്യുക"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"മറ്റൊരു ക്ലോക്ക് ഫേസ് തിരഞ്ഞെടുക്കാൻ വലതുഭാഗത്തേക്ക് സ്വൈപ്പ് ചെയ്യുക"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"ഇഷ്ടാനുസൃത ക്ലോക്കുകൾ"</string> </resources> diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml index ddf19e25..45916341 100644 --- a/res/values-mn/strings.xml +++ b/res/values-mn/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Захиалгат цаг"</string> <string name="clock_description" msgid="3563839327378948">"Захиалгат цаг сонгох"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Захиалгат цагийг өөрчлөх"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Цагны тохиргоо"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Цагны нүүрний сонголт <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Цагны өнгө, хэмжээ"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Цагны өнгө, хэмжээ"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Өнгө"</string> @@ -37,9 +38,10 @@ <string name="clock_color_teal" msgid="7499223425741344251">"Усан цэнхэр"</string> <string name="clock_size" msgid="5028923902364418263">"Хэмжээ"</string> <string name="clock_size_dynamic" msgid="1023930312455061642">"Динамик"</string> - <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Цагны хэмжээ нь түгжигдсэн дэлгэцийн контентоос хамаарч өөрчлөгддөг"</string> + <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Цагны хэмжээ нь түгжээтэй дэлгэцийн контентоос хамаарч өөрчлөгддөг"</string> <string name="clock_size_large" msgid="3143248715744138979">"Том"</string> <string name="clock_size_small" msgid="2280449912094164133">"Жижиг"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Таны дэлгэцийн буланд жижиг цаг харуулдаг"</string> <string name="grid_title" msgid="1688173478777254123">"Аппын хүснэгт"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Ашиглах"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Засахын тулд товшино уу"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Дэлгэц бүрд дуртай фонтоо нэмэх"</string> <string name="grid_options_title" msgid="7071930966989877023">"Торын хэмжээг сонгох"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Хүснэгтийн хэмжээг өөрчлөх нь ажлын талбарыг дахин ачаалах ба хэдэн секунд зарцуулж магадгүй."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"%1$s-н хүснэгтээр ажлын талбарыг дахин ачаалж байна"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"%1$s-н хүснэгтээр ажлын талбарыг дахин ачаалж чадсангүй"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Загварыг амжилттай тохирууллаа"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Цагийг амжилттай тохирууллаа"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Торыг амжилттай тохирууллаа"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Захиалгат өнгө"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Захиалгат дүрс"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Захиалгат загварын нэр"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Өнгөний эрчим"</string> <string name="mode_title" msgid="2394873501427436055">"Бараан загвар"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Батарей хэмнэгчийн улмаас түр зуур идэвхгүй болгосон"</string> <string name="mode_changed" msgid="2243581369395418584">"Загварыг өөрчилсөн"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Зүүн товчлол"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Баруун товчлол"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Байхгүй"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"`<xliff:g id="APPNAME">%1$s</xliff:g>`-г сонгохын тулд дараахыг шалгана уу"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Товчлолыг нэмэх боломжгүй"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g>-г нээх"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> аппыг товчлолоор нэмэхийн тулд дараахыг баталгаажуулна уу"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Болсон"</string> @@ -124,13 +130,17 @@ <string name="keyguard_quick_affordance_section_title" msgid="2806304242671717309">"Товчлол"</string> <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Байхгүй"</string> - <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Түгжигдсэн дэлгэц дээр мэдэгдлийг харуулах"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Түгжигдсэн дэлгэц дээрх мэдэгдлүүдийг нуух"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Түгжээтэй дэлгэц дээр мэдэгдэл харуулах"</string> + <string name="more_settings_section_title" msgid="1331425454775815958">"Түгжээтэй дэлгэцийн өөр сонголт"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Нууцлал, Now Playing болон бусад"</string> <string name="more_colors" msgid="3191071655353004591">"Бусад өнгө"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Үндсэн динамик загвар"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Үндсэн завсрын загвар"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Үндсэн хурц тод загвар"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Үндсэн илэрхийлэлтэй загвар"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Өгөгдмөл өнгөний сонголт"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Өнгөний сонголт <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Өөр цагны нүүр сонгохын тулд зүүн тийш шударна уу"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Өөр цагны нүүр сонгохын тулд баруун тийш шударна уу"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Захиалгат цагнууд"</string> </resources> diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml index fa9267d9..02838e4a 100644 --- a/res/values-mr/strings.xml +++ b/res/values-mr/strings.xml @@ -22,8 +22,9 @@ <string name="clock_title" msgid="1974314575211361352">"कस्टम क्लॉक"</string> <string name="clock_description" msgid="3563839327378948">"कस्टम क्लॉक निवडा"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"कस्टम क्लॉक बदला"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"क्लॉक सेटिंग्ज"</string> - <string name="clock_color_and_size_title" msgid="7146791234905111351">"Clock चा रंग व आकार"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"क्लॉक फेस पर्याय <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Clock चा रंग व आकार"</string> + <string name="clock_color_and_size_title" msgid="7146791234905111351">"घड्याळाचा रंग व आकार"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"रंग"</string> <string name="clock_color_red" msgid="3843504214807597810">"लाल"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"लॉक स्क्रीनवरील आशयानुसार घड्याळाचा आकार बदलेल"</string> <string name="clock_size_large" msgid="3143248715744138979">"मोठा"</string> <string name="clock_size_small" msgid="2280449912094164133">"छोटे"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"तुमच्या स्क्रीनच्या कोपऱ्यामध्ये एक लहान घड्याळ दिसते"</string> <string name="grid_title" msgid="1688173478777254123">"ॲप ग्रिड"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"लागू करा"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"संपादित करण्यासाठी टॅप करा"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"प्रत्येक स्क्रीनवर तुमचे आवडते फॉंट जोडा"</string> <string name="grid_options_title" msgid="7071930966989877023">"ग्रिडचा आकार निवडा"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"ग्रिडचा आकार बदल्याने वर्कस्पेस रीलोड होईल, याला काही सेकंद लागू शकतात."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"%1$s ग्रिड वापरून वर्कस्पेस रीलोड करत आहे"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"%1$s ग्रिड वापरून वर्कस्पेस रीलोड करता आली नाही"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"शैली यशस्वीरीत्या सेट केली"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"क्लॉक यशस्वीरीत्या सेट केले"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"ग्रिड यशस्वीरीत्या सेट केले"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"कस्टम रंग"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"कस्टम आकार"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"कस्टम शैलीचे नाव"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"रंगाची तीव्रता"</string> <string name="mode_title" msgid="2394873501427436055">"गडद थीम"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"बॅटरी सेव्हर मुळे तात्पुरते बंद केले आहे"</string> <string name="mode_changed" msgid="2243581369395418584">"थीम बदलली आहे"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"डावा शॉर्टकट"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"उजवा शॉर्टकट"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"काहीही नाही"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"`<xliff:g id="APPNAME">%1$s</xliff:g>` निवडण्यासाठी पुढील गोष्टी तपासा"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"शॉर्टकट जोडू शकत नाही"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> उघडा"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> हे अॅप शॉर्टकट म्हणून जोडण्यासाठी, पुढील गोष्टींची खात्री करा"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"पूर्ण झाले"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"काहीही नाही"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"लॉक स्क्रीनवर सूचना दाखवा"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"लॉक स्क्रीनवर सूचना लपवा"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"आणखी लॉक स्क्रीन पर्याय"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"गोपनीयता, Now Playing आणि आणखी बरेच काही"</string> <string name="more_colors" msgid="3191071655353004591">"आणखी रंग"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"प्राथमिक डायनॅमिक थीम"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"प्राथमिक न्यूट्रल थीम"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"प्राथमिक आकर्षक थीम"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"प्राथमिक भावदर्शी थीम"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"रंगाचा डीफॉल्ट पर्याय"</string> <string name="content_description_color_option" msgid="4169813692012119578">"<xliff:g id="ID_1">%1$d</xliff:g> रंगाचा पर्याय"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"वेगळे क्लॉक फेस निवडण्यासाठी डावीकडे स्वाइप करा"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"वेगळे क्लॉक फेस निवडण्यासाठी उजवीकडे स्वाइप करा"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"कस्टम क्लॉक"</string> </resources> diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml index 14c85923..26ef5fe1 100644 --- a/res/values-ms/strings.xml +++ b/res/values-ms/strings.xml @@ -17,12 +17,13 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="1647136562008520313">"Kertas dinding & gaya"</string> + <string name="app_name" msgid="1647136562008520313">"Hiasan latar & gaya"</string> <string name="theme_title" msgid="2144932106319405101">"Gaya"</string> <string name="clock_title" msgid="1974314575211361352">"Jam Tersuai"</string> <string name="clock_description" msgid="3563839327378948">"Pilih jam tersuai"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Tukar jam tersuai"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Tetapan Jam"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Pilihan muka jam <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Warna & saiz jam"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Warna & saiz jam"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Warna"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Saiz jam berubah mengikut kandungan skrin kunci"</string> <string name="clock_size_large" msgid="3143248715744138979">"Besar"</string> <string name="clock_size_small" msgid="2280449912094164133">"Kecil"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Jam kecil yang dipaparkan pada penjuru skrin anda"</string> <string name="grid_title" msgid="1688173478777254123">"Grid apl"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Gunakan"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Ketik untuk edit"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Tambahkan fon kegemaran anda pada setiap skrin"</string> <string name="grid_options_title" msgid="7071930966989877023">"Pilih saiz grid"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Ruang kerja dimuatkan semula jika saiz grid diubah."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Memuatkan semula ruang kerja dengan grid %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Gagal memuatkan semula ruang kerja dengan grid %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Gaya berjaya ditetapkan"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Jam berjaya ditetapkan"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Grid berjaya ditetapkan"</string> @@ -98,13 +103,14 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Warna tersuai"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Bentuk tersuai"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Nama gaya tersuai"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Keamatan warna"</string> <string name="mode_title" msgid="2394873501427436055">"Tema gelap"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Dilumpuhkan sementara disebabkan Penjimat Bateri"</string> <string name="mode_changed" msgid="2243581369395418584">"Tema ditukar"</string> <string name="themed_icon_title" msgid="7312460430471956558">"Ikon bertema"</string> <string name="beta_title" msgid="8703819523760746458">"Beta"</string> <string name="gird_picker_entry_content_description" msgid="9087651470212293439">"Tukar grid apl"</string> - <string name="wallpaper_color_tab" msgid="1447926591721403840">"Warna kertas dinding"</string> + <string name="wallpaper_color_tab" msgid="1447926591721403840">"Warna hiasan latar"</string> <string name="wallpaper_color_subheader" msgid="4044464573669965670">"Ikon, teks dan pelbagai padanan warna pada hiasan latar"</string> <string name="wallpaper_color_title" msgid="5687965239180986458">"Warna kertas dinding"</string> <string name="preset_color_tab" msgid="3133391839341329314">"Warna asas"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Pintasan kiri"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Pintasan kanan"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Tiada"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Untuk memilih `<xliff:g id="APPNAME">%1$s</xliff:g>` semak perkara berikut"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Tidak dapat menambahkan pintasan"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Buka <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Untuk menambahkan apl <xliff:g id="APPNAME">%1$s</xliff:g> sebagai pintasan, pastikan"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Selesai"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Tiada"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Tunjukkan pemberitahuan pada skrin kunci"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Sembunyikan pemberitahuan pada skrin kunci"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"Lebih banyak pilihan skrin kunci"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"Privasi, Now Playing dan pelbagai lagi"</string> <string name="more_colors" msgid="3191071655353004591">"Lagi Warna"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Tema dinamik utama"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Tema neutral utama"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Tema ceria utama"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Tema ekspresif utama"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Pilihan warna lalai"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Pilihan warna <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Leret ke kiri untuk memilih muka jam yang lain"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Leret ke kanan untuk memilih muka jam yang lain"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Jam Tersuai"</string> </resources> diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml index a9695452..bdc67c53 100644 --- a/res/values-my/strings.xml +++ b/res/values-my/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"စိတ်ကြိုက်နာရီ"</string> <string name="clock_description" msgid="3563839327378948">"စိတ်ကြိုက်နာရီရွေးပါ"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"စိတ်ကြိုက်နာရီ ပြောင်းနိုင်သည်"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"နာရီဆက်တင်များ"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"နာရီဒိုင်ခွက် ရွေးစရာ <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"နာရီအရောင်၊ အရွယ်"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"နာရီအရောင်နှင့်အရွယ်"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>၊ <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"အရောင်"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"လော့ခ်မျက်နှာပြင် အကြောင်းအရာအလိုက် နာရီအရွယ်အစား ပြောင်းလဲသည်"</string> <string name="clock_size_large" msgid="3143248715744138979">"ကြီး"</string> <string name="clock_size_small" msgid="2280449912094164133">"သေး"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"သင့်ဖန်သားပြင်ထောင့်တွင် ပြသထားသော နာရီအသေးတစ်ခု"</string> <string name="grid_title" msgid="1688173478777254123">"အက်ပ်ဇယား"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"အသုံးပြုရန်"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"တည်းဖြတ်ရန် တို့ပါ"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"မျက်နှာပြင်တိုင်းတွင် သင့်အကြိုက်ဆုံး ဖောင့်များ ထည့်ရန်"</string> <string name="grid_options_title" msgid="7071930966989877023">"ဇယားကွက်အရွယ်အစားတစ်ခု ရွေးပါ"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"ဂရစ်အရွယ်အစားပြောင်းခြင်းသည် အလုပ်နေရာကို ပြန်စတင်စေပြီး စက္ကန့်အနည်းငယ် ကြာနိုင်သည်။"</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"%1$s ဂရစ်ဖြင့် အလုပ်နေရာ ပြန်လည်စတင်နေသည်"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"%1$s ဂရစ်ဖြင့် အလုပ်နေရာ ပြန်လည်စတင်၍ မရပါ"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"ပုံစံကို အောင်မြင်စွာ သတ်မှတ်ပြီးပါပြီ"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"နာရီကို အောင်မြင်စွာ သတ်မှတ်ပြီးပါပြီ"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"ဇယားကွက်ကို အောင်မြင်စွာ သတ်မှတ်ပြီးပါပြီ"</string> @@ -98,14 +103,15 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"စိတ်ကြိုက်အရောင်"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"စိတ်ကြိုက်ပုံသဏ္ဌာန်"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"စိတ်ကြိုက်ပုံစံအမည်"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"အရောင်တောက်ပမှု"</string> <string name="mode_title" msgid="2394873501427436055">"အမှောင်နောက်ခံ"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"‘ဘက်ထရီ အားထိန်း’ ကြောင့် ယာယီပိတ်ထားသည်"</string> <string name="mode_changed" msgid="2243581369395418584">"အပြင်အဆင် ပြောင်းလိုက်ပါပြီ"</string> - <string name="themed_icon_title" msgid="7312460430471956558">"အပြင်အဆင်သုံး သင်္ကေတများ"</string> + <string name="themed_icon_title" msgid="7312460430471956558">"အကြောင်းအရာ သင်္ကေတများ"</string> <string name="beta_title" msgid="8703819523760746458">"စမ်းသပ်"</string> <string name="gird_picker_entry_content_description" msgid="9087651470212293439">"အက်ပ်ဇယား ပြောင်းရန်"</string> <string name="wallpaper_color_tab" msgid="1447926591721403840">"နောက်ခံအရောင်များ"</string> - <string name="wallpaper_color_subheader" msgid="4044464573669965670">"သင့်နောက်ခံရှိ သင်္ကေတ၊ စာသား၊ နောက်ထပ်တူညီသည့်အရောင်"</string> + <string name="wallpaper_color_subheader" msgid="4044464573669965670">"သင်္ကေတ၊ စာသားစသည်တို့သည် သင့်နောက်ခံအရောင်များနှင့် ကိုက်ညီသည်"</string> <string name="wallpaper_color_title" msgid="5687965239180986458">"နောက်ခံအရောင်"</string> <string name="preset_color_tab" msgid="3133391839341329314">"အခြေခံအရောင်များ"</string> <string name="preset_color_tab_2" msgid="1444107326712562538">"အခြားအရောင်"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"ဘယ်ဖြတ်လမ်းလင့်ခ်"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"ညာဖြတ်လမ်းလင့်ခ်"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"မရှိ"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"`<xliff:g id="APPNAME">%1$s</xliff:g>` ရွေးချယ်ရန် အောက်ပါတို့ကို ကြည့်ပါ"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"ဖြတ်လမ်းလင့်ခ် ထည့်၍မရပါ"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> ဖွင့်ရန်"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> အက်ပ်ကို ဖြတ်လမ်းလင့်ခ်အဖြစ် ထည့်ရန် အောက်ပါတို့နှင့်ကိုက်ညီရမည်"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"ပြီးပြီ"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>၊ <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"မရှိ"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"အကြောင်းကြားချက်များကို လော့ခ်မျက်နှာပြင်တွင် ပြပါ"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"အကြောင်းကြားချက်များကို လော့ခ်မျက်နှာပြင်တွင် ဖျောက်ထားရန်"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"နောက်ထပ် လော့ခ်မျက်နှာပြင် နည်းလမ်းများ"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"ကိုယ်ရေးအချက်အလက်လုံခြုံမှု၊ Now Playing နှင့်အခြား"</string> <string name="more_colors" msgid="3191071655353004591">"နောက်ထပ်အရောင်များ"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"မူလ ပြောင်းလဲနိုင်သော အပြင်အဆင်"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"မူလ မနုမရင့် အပြင်အဆင်"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"မူလ စိုလွင်သော အပြင်အဆင်"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"မူလ ခံစားမှုပြ အပြင်အဆင်"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"မူလ အရောင်ရွေးစရာ"</string> <string name="content_description_color_option" msgid="4169813692012119578">"အရောင်ရွေးစရာ <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"အခြားနာရီဒိုင်ခွက်ရွေးရန် ဘယ်ဘက်သို့ ပွတ်ဆွဲပါ"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"အခြားနာရီဒိုင်ခွက်ရွေးရန် ညာဘက်သို့ ပွတ်ဆွဲပါ"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"စိတ်ကြိုက် နာရီဒိုင်ခွက်များ"</string> </resources> diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index cdf7f7cd..4062ab50 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Tilpasset klokke"</string> <string name="clock_description" msgid="3563839327378948">"Velg en tilpasset klokke"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Endre en tilpasset klokke"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Klokkevalg"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Urskivealternativ <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Farge og størrelse"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Farge og størrelse"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Farge"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Klokkens størrelse endres basert på innholdet på låseskjermen"</string> <string name="clock_size_large" msgid="3143248715744138979">"Stor"</string> <string name="clock_size_small" msgid="2280449912094164133">"Liten"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"En liten klokke vises i hjørnet av skjermen"</string> <string name="grid_title" msgid="1688173478777254123">"Apprutenett"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Bruk"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Trykk for å endre"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Legg til favorittskrifttypen din på alle skjermer"</string> <string name="grid_options_title" msgid="7071930966989877023">"Velg rutenettstørrelse"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Endring av rutenettstørrelse laster inn arbeidsområdet på nytt, noe som kan ta noen sekunder."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Laster inn arbeidsområdet med rutenett på %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Kunne ikke laste inn arbeidsområdet med rutenett på %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Stilen er angitt"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Klokken er angitt"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Rutenettet er angitt"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Egendefinert farge"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Egendefinert form"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Navn på egendefinert stil"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Fargeintensitet"</string> <string name="mode_title" msgid="2394873501427436055">"Mørkt tema"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Midlertidig slått av på grunn av Batterisparing"</string> <string name="mode_changed" msgid="2243581369395418584">"Temaet er endret"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Venstre snarvei"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Høyre snarvei"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Ingen"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"For å velge «<xliff:g id="APPNAME">%1$s</xliff:g>», sjekk det følgende"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Kan ikke legge til snarveien"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Åpne <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"For å legge til <xliff:g id="APPNAME">%1$s</xliff:g>-appen som en snarvei må du sørge for at"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Ferdig"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Ingen"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Vis varsler på låseskjermen"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Skjul varsler på låseskjermen"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Flere låseskjermalternativer"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Personvern, Spilles nå med mer"</string> <string name="more_colors" msgid="3191071655353004591">"Flere farger"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Dynamisk primærtema"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Nøytralt primærtema"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Intenst primærtema"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Uttrykksfullt primærtema"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Standard fargealternativ"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Fargealternativ <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Sveip til venstre for å velge en annen urskive"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Sveip til høyre for å velge en annen urskive"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Tilpassede klokker"</string> </resources> diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml index 99d8675a..e4204954 100644 --- a/res/values-ne/strings.xml +++ b/res/values-ne/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"कस्टम घडी"</string> <string name="clock_description" msgid="3563839327378948">"कस्टम घडी छान्नु…"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"कुनै कस्टम घडी परिवर्तन गर्नुहोस्"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"घडीका सेटिङ"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"घडीको स्क्रिनको डिजाइनको विकल्प <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"घडीको रङ र आकार"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"घडीको रङ र आकार"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"रङ"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"घडीको आकार लक स्क्रिनको सामग्रीका आधारमा परिवर्तन हुन्छ"</string> <string name="clock_size_large" msgid="3143248715744138979">"ठुलो"</string> <string name="clock_size_small" msgid="2280449912094164133">"सानो"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"तपाईंको स्क्रिनको कुनामा सानो घडी देखा पर्छ"</string> <string name="grid_title" msgid="1688173478777254123">"एप ग्रिड"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"लागू गर्नुहोस्"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"सम्पादन गर्न ट्याप गर्नुहोस्"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"प्रत्येक स्क्रिनमा आफूलाई मन पर्ने फन्टहरू थप्नुहोस्"</string> <string name="grid_options_title" msgid="7071930966989877023">"ग्रिडको आकार छनौट गर्नुहोस्"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"तपाईंले ग्रिडको आकार परिवर्तन गर्नुभयो भने वर्कस्पेस रिलोड हुन्छ र रिलोड हुन केही सेकेन्ड लाग्न सक्छ।"</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"%1$s ग्रिड सेट गरेर वर्कस्पेस पुनः लोड गरिँदै छ"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"%1$s ग्रिड सेट गरिएको वर्कस्पेस रिलोड गर्न सकिएन"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"शैली सफलतापूर्वक सेट गरियो"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"घडी सफलतापूर्वक सेट गरियो"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"ग्रिड सफलतापूर्वक सेट गरियो"</string> @@ -90,7 +95,7 @@ <string name="use_style_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%1$s</xliff:g> प्रयोग गर्नु…"</string> <string name="no_thanks" msgid="7286616980115687627">"पर्दैन, धन्यवाद"</string> <string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> घडीको पूर्वावलोकन"</string> - <string name="something_went_wrong" msgid="529840112449799117">"हत्तेरिका! केही चिज गडबड भयो।"</string> + <string name="something_went_wrong" msgid="529840112449799117">"हत्तेरिका! कुनै समस्या आयो।"</string> <string name="theme_preview_icons_section_title" msgid="7064768910744000643">"रङ / आइकनहरू"</string> <string name="style_info_description" msgid="2612473574431003251">"फन्ट, आइकन, एपको आकृति र रङको प्रिभ्यू"</string> <string name="accessibility_custom_font_title" msgid="966867359157303705">"आफूले रोजेको फन्ट"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"आफूले रोजेको रङ"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"आफूले रोजेको आकार"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"शैलीको आफूले रोजेको नाम"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"कलर इन्टेन्सिटी"</string> <string name="mode_title" msgid="2394873501427436055">"अँध्यारो थिम"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"ब्याट्री सेभर अन भएकाले केही समयका लागि अफ गरिएको छ"</string> <string name="mode_changed" msgid="2243581369395418584">"थिम परिवर्तन गरिएको छ"</string> @@ -113,10 +119,10 @@ <string name="color_changed" msgid="7029571720331641235">"रङ बदलियो"</string> <string name="adaptive_color_title" msgid="1336508599235896205">"गतिशील"</string> <string name="color_picker_title" msgid="6666830057938082864">"सिस्टमका रङहरू"</string> - <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"बायाँको सर्टकट"</string> - <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"दायाँको सर्टकट"</string> + <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"बायाँ सर्टकट"</string> + <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"दायाँ सर्टकट"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"कुनै पनि होइन"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"\"<xliff:g id="APPNAME">%1$s</xliff:g>\" चयन गर्न तल दिइएका निर्देशनहरू पालना गर्नुहोस्"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"सर्टकट सिर्जना गर्न सकिएन"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> खोल्नुहोस्"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> एपलाई सर्टकटका रूपमा हाल्न, निम्न कुरा सुनिश्चित गर्नुहोस्:"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"पूरा भयो"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"कुनै पनि होइन"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"लक स्क्रिनमा सूचनाहरू देखाइऊन्"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"लक स्क्रिनमा सूचनाहरू लुकाइऊन्"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"लक स्क्रिनसम्बन्धी थप विकल्पहरू"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"गोपनीयता, Now Playing र अन्य कुराहरू"</string> <string name="more_colors" msgid="3191071655353004591">"थप रङहरू"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"प्राइमरी डाइनामिक थिम"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"प्राइमरी न्युट्रल थिम"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"प्राइमरी भाइब्रेन्ट थिम"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"प्राइमरी एक्सप्रेसिभ थिम"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"रङसम्बन्धी डिफल्ट विकल्प"</string> <string name="content_description_color_option" msgid="4169813692012119578">"रङसम्बन्धी विकल्प <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"घडीको स्क्रिनको अर्कै डिजाइन छनौट गर्न बायाँतिर स्वाइप गर्नुहोस्"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"घडीको स्क्रिनको अर्कै डिजाइन छनौट गर्न दायाँतिर स्वाइप गर्नुहोस्"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"घडीको स्क्रिनका कस्टम डिजाइनहरू"</string> </resources> diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 26bd0723..04efb6f6 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -22,8 +22,9 @@ <string name="clock_title" msgid="1974314575211361352">"Aangepaste klok"</string> <string name="clock_description" msgid="3563839327378948">"Klok kiezen"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Aangepaste klok wijzigen"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Klokinstellingen"</string> - <string name="clock_color_and_size_title" msgid="7146791234905111351">"Kleur en grootte van klok"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Wijzerplaatoptie <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Kleur en grootte van klok"</string> + <string name="clock_color_and_size_title" msgid="7146791234905111351">"Kleur en formaat van klok"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Kleur"</string> <string name="clock_color_red" msgid="3843504214807597810">"Rood"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Het formaat van de klok past zich aan de content van het vergrendelscherm aan"</string> <string name="clock_size_large" msgid="3143248715744138979">"Groot"</string> <string name="clock_size_small" msgid="2280449912094164133">"Klein"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Er staat een kleine klok in de hoek van je scherm"</string> <string name="grid_title" msgid="1688173478777254123">"App-raster"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Toepassen"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Tik om te bewerken"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Voeg je favoriete lettertypen toe aan elk scherm"</string> <string name="grid_options_title" msgid="7071930966989877023">"Een rastergrootte kiezen"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> x <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Als je de rastergrootte wijzigt, wordt de werkruimte opnieuw geladen. Dit kan een paar seconden duren."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Werkruimte opnieuw laden met %1$s raster"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Kan werkruimte niet opnieuw laden met %1$s raster"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Stijl ingesteld"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Klok ingesteld"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Raster ingesteld"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Aangepaste kleur"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Aangepaste vorm"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Naam van aangepaste stijl"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Kleurintensiteit"</string> <string name="mode_title" msgid="2394873501427436055">"Donker thema"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Tijdelijk uit vanwege Batterijbesparing"</string> <string name="mode_changed" msgid="2243581369395418584">"Thema gewijzigd"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Snelkoppeling links"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Snelkoppeling rechts"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Geen"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Check het volgende als je <xliff:g id="APPNAME">%1$s</xliff:g> wilt selecteren"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Kan sneltoets niet toevoegen"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> openen"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Zorg voor het volgende om de <xliff:g id="APPNAME">%1$s</xliff:g>-app toe te voegen als snelkoppeling:"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Klaar"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Geen"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Meldingen tonen op het vergrendelscherm"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Meldingen verbergen op het vergrendelscherm"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"Meer schermvergrendelingsopties"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"Privacy, Now Playing en meer"</string> <string name="more_colors" msgid="3191071655353004591">"Meer kleuren"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Primair dynamisch thema"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Primair neutraal thema"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Primair levendig thema"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Primair expressief thema"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Standaard kleuroptie"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Kleuroptie <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Swipe naar links om een andere wijzerplaat te kiezen"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Swipe naar rechts om een andere wijzerplaat te kiezen"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Aangepaste wijzerplaten"</string> </resources> diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml index b18bcb3e..18350d8f 100644 --- a/res/values-or/strings.xml +++ b/res/values-or/strings.xml @@ -17,12 +17,13 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="1647136562008520313">"ୱାଲପେପର୍ ଏବଂ ଷ୍ଟାଇଲ୍"</string> + <string name="app_name" msgid="1647136562008520313">"ୱାଲପେପର ଏବଂ ଷ୍ଟାଇଲ"</string> <string name="theme_title" msgid="2144932106319405101">"ଷ୍ଟାଇଲ୍"</string> <string name="clock_title" msgid="1974314575211361352">"କଷ୍ଟମ ଘଣ୍ଟା"</string> <string name="clock_description" msgid="3563839327378948">"କଷ୍ଟମ ଘଣ୍ଟା ବାଛ"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"ଏକ କଷ୍ଟମ ଘଣ୍ଟାକୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"କ୍ଲକ ସେଟିଂସ"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"ଘଣ୍ଟା ଫେସ ବିକଳ୍ପ <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"ଘଣ୍ଟାର ରଙ୍ଗ ଓ ସାଇଜ"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"ଘଣ୍ଟାର ରଙ୍ଗ ଓ ଆକାର"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"ରଙ୍ଗ"</string> @@ -40,7 +41,8 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"ଘଣ୍ଟାର ଆକାର ଲକ ସ୍କ୍ରିନର ବିଷୟବସ୍ତୁ ଅନୁସାରେ ପରିବର୍ତ୍ତନ ହୋଇଥାଏ"</string> <string name="clock_size_large" msgid="3143248715744138979">"ବଡ଼"</string> <string name="clock_size_small" msgid="2280449912094164133">"ଛୋଟ"</string> - <string name="grid_title" msgid="1688173478777254123">"ଆପ୍ ଗ୍ରିଡ୍"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"ଆପଣଙ୍କ ସ୍କ୍ରିନର କୋଣରେ ଏକ ଛୋଟ କ୍ଲକ ଦେଖାଯାଉଛି"</string> + <string name="grid_title" msgid="1688173478777254123">"ଆପ ଗ୍ରିଡ"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"ପ୍ରୟୋଗ କରନ୍ତୁ"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"ଏଡିଟ କରିବା ପାଇଁ ଟାପ କରନ୍ତୁ"</string> <string name="keep_my_wallpaper" msgid="8012385376769568517">"ବର୍ତ୍ତମାନର ୱାଲ୍ପେପର୍କୁ ରଖନ୍ତୁ"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"ଆପଣଙ୍କ ପସନ୍ଦର ଫଣ୍ଟକୁ ପ୍ରତ୍ୟେକ ସ୍କ୍ରିନ୍ରେ ଯୋଗ କରନ୍ତୁ"</string> <string name="grid_options_title" msgid="7071930966989877023">"ଏକ ଗ୍ରିଡ୍ ଆକାର ବାଛନ୍ତୁ"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"ଗ୍ରିଡର ଆକାର ପରିବର୍ତ୍ତନ କରିବା ୱାର୍କସ୍ପେସକୁ ପୁଣି ଲୋଡ କରିବ ଏବଂ ଏଥିପାଇଁ କିଛି ସେକେଣ୍ଡ ଲାଗିପାରେ।"</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"%1$s ଗ୍ରିଡ ସହିତ ୱାର୍କସ୍ପେସକୁ ପୁଣି ଲୋଡ କରିବା"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"%1$s ଗ୍ରିଡ ସହିତ ୱାର୍କସ୍ପେସକୁ ପୁଣି ଲୋଡ କରିବାରେ ବିଫଳ ହୋଇଛି"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"ଷ୍ଟାଇଲ୍ ସଫଳତାର ସହ ସେଟ୍ ହୋଇଛି"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"ଘଣ୍ଟା ସଫଳତାର ସହ ସେଟ୍ ହୋଇଛି"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"ଗ୍ରିଡ୍ ସଫଳତାର ସହ ସେଟ୍ ହୋଇଛି"</string> @@ -98,10 +103,11 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"କଷ୍ଟମ୍ ରଙ୍ଗ"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"କଷ୍ଟମ୍ ଆକାର"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"କଷ୍ଟମ୍ ଷ୍ଟାଇଲ୍ ନାମ"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"ରଙ୍ଗ ଇଣ୍ଟେନସିଟି"</string> <string name="mode_title" msgid="2394873501427436055">"ଗାଢ଼ା ଥିମ୍"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"ବ୍ୟାଟେରୀ ସେଭର୍ ଯୋଗୁଁ ଅସ୍ଥାୟୀ ଭାବେ ଅକ୍ଷମ କରାଯାଇଛି"</string> <string name="mode_changed" msgid="2243581369395418584">"ଥିମ ପରିବର୍ତ୍ତନ କରାଯାଇଛି"</string> - <string name="themed_icon_title" msgid="7312460430471956558">"ଥିମ୍ ଯୁକ୍ତ ଆଇକନ୍"</string> + <string name="themed_icon_title" msgid="7312460430471956558">"ଥିମ ଯୁକ୍ତ ଆଇକନ"</string> <string name="beta_title" msgid="8703819523760746458">"ବିଟା"</string> <string name="gird_picker_entry_content_description" msgid="9087651470212293439">"ଆପ୍ ଗ୍ରିଡ୍ ପରିବର୍ତ୍ତନ କରନ୍ତୁ"</string> <string name="wallpaper_color_tab" msgid="1447926591721403840">"ୱାଲପେପର ରଙ୍ଗଗୁଡ଼ିକ"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"ବାମ ସର୍ଟକଟ"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"ଡାହାଣ ସର୍ଟକଟ"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"କିଛି ନାହିଁ"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"`<xliff:g id="APPNAME">%1$s</xliff:g>`କୁ ଚୟନ କରିବା ପାଇଁ ନିମ୍ନୋକ୍ତକୁ ଯାଞ୍ଚ କରନ୍ତୁ"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"ସର୍ଟକଟ ଯୋଗ କରାଯାଇପାରିବ ନାହିଁ"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> ଖୋଲନ୍ତୁ"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"ଏକ ସର୍ଟକଟ ଭାବେ <xliff:g id="APPNAME">%1$s</xliff:g> ଆପ ଯୋଗ କରିବାକୁ, ଏହା ସୁନିଶ୍ଚିତ କରନ୍ତୁ"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"ହୋଇଗଲା"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"କିଛି ନାହିଁ"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"ଲକ ସ୍କ୍ରିନରେ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଦେଖାନ୍ତୁ"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"ଲକ ସ୍କ୍ରିନରେ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଲୁଚାନ୍ତୁ"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"ଅଧିକ ଲକ ସ୍କ୍ରିନ ବିକଳ୍ପ"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"ଗୋପନୀୟତା, ବର୍ତ୍ତମାନ ପ୍ଲେ ହେଉଛି ଏବଂ ଆହୁରି ଅନେକ କିଛି"</string> <string name="more_colors" msgid="3191071655353004591">"ଅଧିକ ରଙ୍ଗ"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"ପ୍ରାଥମିକ ଡାଇନାମିକ ଥିମ"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"ପ୍ରାଥମିକ ନ୍ୟୁଟ୍ରାଲ ଥିମ"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"ପ୍ରାଥମିକ ଭାଇବ୍ରାଣ୍ଟ ଥିମ"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"ପ୍ରାଥମିକ ଏକ୍ସପ୍ରେସିଭ ଥିମ"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"ଡିଫଲ୍ଟ ରଙ୍ଗର ବିକଳ୍ପ"</string> <string name="content_description_color_option" msgid="4169813692012119578">"ରଙ୍ଗର ବିକଳ୍ପ <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"ଏକ ଭିନ୍ନ କ୍ଲକ ଫେସ ବାଛିବାକୁ ବାମକୁ ସ୍ୱାଇପ କରନ୍ତୁ"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"ଏକ ଭିନ୍ନ କ୍ଲକ ଫେସ ବାଛିବାକୁ ଡାହାଣକୁ ସ୍ୱାଇପ କରନ୍ତୁ"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"କ୍ଲକ ଫେସ କଷ୍ଟମ କରନ୍ତୁ"</string> </resources> diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml index ed0e4f86..4ec5c27d 100644 --- a/res/values-pa/strings.xml +++ b/res/values-pa/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"ਵਿਉਂਤੀ ਘੜੀ"</string> <string name="clock_description" msgid="3563839327378948">"ਵਿਉਂਤੀ ਘੜੀ ਚੁਣੋ"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"ਵਿਉਂਤੀ ਘੜੀ ਬਦਲੋ"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"ਘੜੀ ਦੀਆਂ ਸੈਟਿੰਗਾਂ"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"ਘੜੀ ਦੇ ਡਾਇਲ ਦਾ ਵਿਕਲਪ <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"ਘੜੀ ਦਾ ਰੰਗ ਅਤੇ ਆਕਾਰ"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"ਘੜੀ ਦਾ ਰੰਗ ਅਤੇ ਆਕਾਰ"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"ਰੰਗ"</string> @@ -39,7 +40,8 @@ <string name="clock_size_dynamic" msgid="1023930312455061642">"ਪਰਿਵਰਤਨਸ਼ੀਲ"</string> <string name="clock_size_dynamic_description" msgid="2776620745774561662">"ਘੜੀ ਦਾ ਆਕਾਰ ਲਾਕ ਸਕ੍ਰੀਨ ਦੀ ਸਮੱਗਰੀ ਮੁਤਾਬਕ ਬਦਲਦਾ ਹੈ"</string> <string name="clock_size_large" msgid="3143248715744138979">"ਵੱਡਾ"</string> - <string name="clock_size_small" msgid="2280449912094164133">"ਛੋਟਾ ਕਰੋ"</string> + <string name="clock_size_small" msgid="2280449912094164133">"ਛੋਟਾ"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ ਦੇ ਕੋਨੇ \'ਤੇ ਇੱਕ ਛੋਟੀ ਘੜੀ ਦਿਖਾਈ ਦਿੰਦੀ ਹੈ"</string> <string name="grid_title" msgid="1688173478777254123">"ਐਪ ਗ੍ਰਿਡ"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"ਲਾਗੂ ਕਰੋ"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"ਸੰਪਾਦਨ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string> @@ -55,7 +57,7 @@ <string name="option_previewed_description" msgid="3467217598865047661">"<xliff:g id="ID_1">%1$s</xliff:g>, ਫਿਲਹਾਲ ਪੂਰਵ-ਝਲਕ ਦੇਖੀ ਗਈ"</string> <string name="option_change_applied_previewed_description" msgid="9197311327728570816">"<xliff:g id="ID_1">%1$s</xliff:g>, ਉਸ ਵਿਕਲਪ ਨੂੰ ਬਦਲੋ ਜਿਸ ਨੂੰ ਚੁਣਿਆ ਗਿਆ ਅਤੇ ਜਿਸ ਦੀ ਪੂਰਵ-ਝਲਕ ਦੇਖੀ ਗਈ ਹੈ"</string> <string name="theme_description" msgid="3697012391785254635">"ਫੌਂਟ: <xliff:g id="ID_1">%1$s</xliff:g>, ਪ੍ਰਤੀਕ: <xliff:g id="ID_2">%2$s</xliff:g>, ਆਕ੍ਰਿਤੀ: <xliff:g id="ID_3">%3$s</xliff:g>, ਰੰਗ: <xliff:g id="ID_4">%4$s</xliff:g>"</string> - <string name="default_theme_title" msgid="2555741736622366797">"ਪੂਰਵ-ਨਿਰਧਾਰਤ"</string> + <string name="default_theme_title" msgid="2555741736622366797">"ਪੂਰਵ-ਨਿਰਧਾਰਿਤ"</string> <string name="preview_name_font" msgid="4465423899630037038">"ਫੌਂਟ"</string> <string name="preview_name_icon" msgid="6818927315316316440">"ਪ੍ਰਤੀਕ"</string> <string name="preview_name_color" msgid="8776203144994416172">"ਰੰਗ"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"ਹਰ ਸਕ੍ਰੀਨ \'ਤੇ ਆਪਣੇ ਮਨਪਸੰਦ ਫੌਂਟ ਸ਼ਾਮਲ ਕਰੋ"</string> <string name="grid_options_title" msgid="7071930966989877023">"ਗ੍ਰਿਡ ਦਾ ਆਕਾਰ ਚੁਣੋ"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"ਗਰਿੱਡ ਦਾ ਆਕਾਰ ਬਦਲਣ ਨਾਲ ਵਰਕਸਪੇਸ ਰੀਲੋਡ ਹੋਣ ਵਿੱਚ ਕੁਝ ਸਮਾਂ ਲੱਗ ਸਕਦਾ ਹੈ।"</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"%1$s ਗਰਿੱਡ ਨਾਲ ਵਰਕਸਪੇਸ ਨੂੰ ਰੀਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"%1$s ਗਰਿੱਡ ਨਾਲ ਵਰਕਸਪੇਸ ਨੂੰ ਰੀਲੋਡ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"ਸਟਾਈਲ ਸਫਲਤਾਪੂਰਵਕ ਸੈੱਟ ਕੀਤਾ ਗਿਆ"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"ਘੜੀ ਸਫਲਤਾਪੂਰਵਕ ਸੈੱਟ ਕੀਤੀ ਗਈ"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"ਗ੍ਰਿਡ ਸਫਲਤਾਪੂਰਵਕ ਸੈੱਟ ਕੀਤਾ ਗਿਆ"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"ਵਿਉਂਤਿਆ ਰੰਗ"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"ਵਿਉਂਤੀ ਆਕ੍ਰਿਤੀ"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"ਸ਼ੈਲੀ ਦਾ ਵਿਉਂਤਿਆ ਨਾਮ"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"ਰੰਗ ਦੀ ਤੀਬਰਤਾ"</string> <string name="mode_title" msgid="2394873501427436055">"ਗੂੜ੍ਹਾ ਥੀਮ"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"ਬੈਟਰੀ ਸੇਵਰ ਕਰਕੇ ਕੁਝ ਸਮੇਂ ਲਈ ਬੰਦ ਕੀਤਾ ਗਿਆ"</string> <string name="mode_changed" msgid="2243581369395418584">"ਥੀਮ ਬਦਲਿਆ ਗਿਆ"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"ਖੱਬਾ ਸ਼ਾਰਟਕੱਟ"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"ਸੱਜਾ ਸ਼ਾਰਟਕੱਟ"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"ਕੋਈ ਨਹੀਂ"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"`<xliff:g id="APPNAME">%1$s</xliff:g>` ਨੂੰ ਚੁਣਨ ਲਈ, ਹੇਠਾਂ ਦਿੱਤੀਆਂ ਹਿਦਾਇਤਾਂ ਦੀ ਪਾਲਣਾ ਕਰੋ"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"ਸ਼ਾਰਟਕੱਟ ਸ਼ਾਮਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> ਖੋਲ੍ਹੋ"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> ਐਪ ਨੂੰ ਸ਼ਾਰਟਕੱਟ ਵਜੋਂ ਸ਼ਾਮਲ ਕਰਨ ਲਈ, ਪੱਕਾ ਕਰੋ ਕਿ"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"ਹੋ ਗਿਆ"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"ਕੋਈ ਨਹੀਂ"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"ਲਾਕ ਸਕ੍ਰੀਨ \'ਤੇ ਸੂਚਨਾਵਾਂ ਦਿਖਾਓ"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"ਲਾਕ ਸਕ੍ਰੀਨ \'ਤੇ ਸੂਚਨਾਵਾਂ ਲੁਕਾਓ"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"ਹੋਰ ਲਾਕ ਸਕ੍ਰੀਨ ਵਿਕਲਪ"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"ਪਰਦੇਦਾਰੀ, Now Playing ਅਤੇ ਹੋਰ"</string> <string name="more_colors" msgid="3191071655353004591">"ਹੋਰ ਰੰਗ"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"ਪ੍ਰਾਇਮਰੀ ਪਰਿਵਰਤਨਸ਼ੀਲ ਥੀਮ"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"ਪ੍ਰਾਇਮਰੀ ਨਿਰਪੱਖ ਥੀਮ"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"ਪ੍ਰਾਇਮਰੀ ਵਾਈਬਰੈਂਟ ਥੀਮ"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"ਪ੍ਰਾਇਮਰੀ ਭਾਵਪੂਰਨ ਥੀਮ"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"ਰੰਗ ਦਾ ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਵਿਕਲਪ"</string> <string name="content_description_color_option" msgid="4169813692012119578">"ਰੰਗ ਦਾ ਵਿਕਲਪ <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"ਕੋਈ ਵੱਖਰਾ ਘੜੀ ਦਾ ਡਾਇਲ ਚੁਣਨ ਲਈ ਖੱਬੇ ਪਾਸੇ ਵੱਲ ਸਵਾਈਪ ਕਰੋ"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"ਕੋਈ ਵੱਖਰਾ ਘੜੀ ਦਾ ਡਾਇਲ ਚੁਣਨ ਲਈ ਸੱਜੇ ਪਾਸੇ ਵੱਲ ਸਵਾਈਪ ਕਰੋ"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"ਵਿਉਂਤਬੱਧ ਘੜੀਆਂ"</string> </resources> diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index f67f187f..9565886a 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Własny zegar"</string> <string name="clock_description" msgid="3563839327378948">"Wybierz własny zegar"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Zmień własny zegar"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Ustawienia zegara"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Opcja tarczy zegarka: <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Kolor i rozmiar zegara"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Kolor i rozmiar zegara"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Kolor"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Rozmiar zegara zmienia się w zależności od zawartości ekranu blokady"</string> <string name="clock_size_large" msgid="3143248715744138979">"Duży"</string> <string name="clock_size_small" msgid="2280449912094164133">"Mały"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Mały zegar wyświetlany w rogu ekranu"</string> <string name="grid_title" msgid="1688173478777254123">"Siatka aplikacji"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Zastosuj"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Kliknij, by edytować"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Dodaj swoje ulubione czcionki do każdego ekranu"</string> <string name="grid_options_title" msgid="7071930966989877023">"Wybierz rozmiar siatki"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> x <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Zmiana rozmiaru siatki spowoduje ponowne załadowanie obszaru roboczego. Może to zająć kilka sekund."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Ponowne ładowanie obszaru roboczego z siatką %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Nie udało się ponownie załadować obszaru roboczego z siatką %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Styl został ustawiony"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Zegar został ustawiony"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Siatka została ustawiona"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Kolor niestandardowy"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Kształt niestandardowy"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Nazwa stylu niestandardowego"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Intensywność kolorów"</string> <string name="mode_title" msgid="2394873501427436055">"Ciemny motyw"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Tymczasowo wyłączono z powodu oszczędzania baterii"</string> <string name="mode_changed" msgid="2243581369395418584">"Motyw został zmieniony"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Lewy skrót"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Prawy skrót"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Brak"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Aby wybrać opcję „<xliff:g id="APPNAME">%1$s</xliff:g>”, wykonaj te czynności"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Nie udało się dodać skrótu"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Otwórz: <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Aby dodać aplikację <xliff:g id="APPNAME">%1$s</xliff:g> jako skrót, upewnij się, że spełnione zostały te warunki:"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Gotowe"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Brak"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Pokazuj powiadomienia na ekranie blokady"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Ukrywaj powiadomienia na ekranie blokady"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"Więcej opcji ekranu blokady"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"Prywatność, Co jest grane i inne ustawienia"</string> <string name="more_colors" msgid="3191071655353004591">"Więcej kolorów"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Główny motyw dynamiczny"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Główny motyw neutralny"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Główny motyw barwny"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Główny motyw ekspresyjny"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Domyślna opcja koloru"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Opcja koloru <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Przesuń w lewo, aby wybrać inną tarczę zegara"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Przesuń w prawo, aby wybrać inną tarczę zegara"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Zegary niestandardowe"</string> </resources> diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 8de02c3f..6a3521dd 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Relógio person."</string> <string name="clock_description" msgid="3563839327378948">"Escolha rel. pers."</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Altere um relógio personalizado"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Def. do Relógio"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Opção de mostrador <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Cor/tamanho relógio"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Cor/tamanho relógio"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Cor"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"O tamanho do relógio muda de acordo com o conteúdo do ecrã de bloqueio"</string> <string name="clock_size_large" msgid="3143248715744138979">"Grande"</string> <string name="clock_size_small" msgid="2280449912094164133">"Pequeno"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Um pequeno relógio é apresentado no canto do ecrã"</string> <string name="grid_title" msgid="1688173478777254123">"Grelha de apps"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Aplicar"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Toque para editar"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Adicione os seus tipos de letra favoritos a todos os ecrãs."</string> <string name="grid_options_title" msgid="7071930966989877023">"Escolha um tamanho de grelha"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> x <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Mudar tam. grelha atualiza o esp. trab. e pode demorar algum tempo."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"A atualizar o espaço de trabalho com a grelha %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Não foi possível atualizar o espaço de trabalho com a grelha %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Estilo definido com êxito."</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Relógio definido com êxito."</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Grelha definida com êxito."</string> @@ -85,8 +90,8 @@ <string name="delete_custom_theme_button" msgid="5102462988130208824">"Eliminar"</string> <string name="cancel" msgid="4651030493668562067">"Cancelar"</string> <string name="set_theme_wallpaper_dialog_message" msgid="2179661027350908003">"Defina a imagem de fundo do estilo"</string> - <string name="use_style_instead_title" msgid="1578754995763917502">"Pretende utilizar <xliff:g id="ID_1">%1$s</xliff:g>?"</string> - <string name="use_style_instead_body" msgid="3051937045807471496">"Os componentes que escolheu correspondem ao estilo <xliff:g id="ID_1">%1$s</xliff:g>. Em vez disso, pretende utilizar <xliff:g id="ID_2">%1$s</xliff:g>?"</string> + <string name="use_style_instead_title" msgid="1578754995763917502">"Quer utilizar <xliff:g id="ID_1">%1$s</xliff:g>?"</string> + <string name="use_style_instead_body" msgid="3051937045807471496">"Os componentes que escolheu correspondem ao estilo <xliff:g id="ID_1">%1$s</xliff:g>. Em vez disso, quer utilizar <xliff:g id="ID_2">%1$s</xliff:g>?"</string> <string name="use_style_button" msgid="1754493078383627019">"Usar <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="no_thanks" msgid="7286616980115687627">"Não, obrigado"</string> <string name="clock_preview_content_description" msgid="5460561185905717460">"Pré-visualização do relógio <xliff:g id="ID_1">%1$s</xliff:g>"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Cor personalizada"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Forma personalizada"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Nome do estilo personalizado"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Intensidade da cor"</string> <string name="mode_title" msgid="2394873501427436055">"Tema escuro"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Temporariamente desativado devido à Poupança de bateria"</string> <string name="mode_changed" msgid="2243581369395418584">"Tema alterado"</string> @@ -105,7 +111,7 @@ <string name="beta_title" msgid="8703819523760746458">"Beta"</string> <string name="gird_picker_entry_content_description" msgid="9087651470212293439">"Altere a grelha de apps"</string> <string name="wallpaper_color_tab" msgid="1447926591721403840">"Cores imag. de fundo"</string> - <string name="wallpaper_color_subheader" msgid="4044464573669965670">"Ícones, texto, etc. condizem c/ cores da imag. de fundo"</string> + <string name="wallpaper_color_subheader" msgid="4044464573669965670">"Ícones, texto, etc. condizem com a imagem de fundo"</string> <string name="wallpaper_color_title" msgid="5687965239180986458">"Cor da imagem de fundo"</string> <string name="preset_color_tab" msgid="3133391839341329314">"Cores básicas"</string> <string name="preset_color_tab_2" msgid="1444107326712562538">"Outras cores"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Atalho esquerdo"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Atalho direito"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Nenhum"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Para selecionar \"<xliff:g id="APPNAME">%1$s</xliff:g>\", verifique o seguinte"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Não é possível adicionar o atalho"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Abrir <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Para adicionar a app <xliff:g id="APPNAME">%1$s</xliff:g> como um atalho, garanta"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Concluído"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Nenhum"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Mostre as notificações no ecrã de bloqueio"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Oculte as notificações no ecrã de bloqueio"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Mais opções do ecrã de bloqueio"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Privacidade, A reproduzir e muito mais"</string> <string name="more_colors" msgid="3191071655353004591">"Mais cores"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Tema dinâmico principal"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Tema neutro principal"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Tema vibrante principal"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Tema expressivo principal"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Opção de cor predefinida"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Opção de cor <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Deslizar rapidamente para a esquerda para escolher um mostrador diferente"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Deslizar rapidamente para a direita para escolher um mostrador diferente"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Relógios personalizados"</string> </resources> diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index a5a3ba87..af2b0a31 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Relógio personalizado"</string> <string name="clock_description" msgid="3563839327378948">"Escolha um relógio personalizado"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Edite um relógio personalizado"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Configurações do Relógio"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Opção de aparência do relógio: <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Cor/tam. do relógio"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Cor e tamanho do relógio"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Cor"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"O tamanho do relógio muda de acordo com o conteúdo na tela de bloqueio"</string> <string name="clock_size_large" msgid="3143248715744138979">"Grande"</string> <string name="clock_size_small" msgid="2280449912094164133">"Pequeno"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Um relógio pequeno aparece no canto da tela"</string> <string name="grid_title" msgid="1688173478777254123">"Grade de apps"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Aplicar"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Toque para editar"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Adicione suas fontes favoritas a cada tela"</string> <string name="grid_options_title" msgid="7071930966989877023">"Escolha o tamanho da grade"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"A mudança do tamanho da grade recarrega o espaço de trabalho e pode levar alguns segundos."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Recarregando o espaço de trabalho com uma grade %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Falha ao recarregar o espaço de trabalho com uma grade %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Estilo definido"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Relógio definido"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Grade definida"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Cor personalizada"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Formato personalizado"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Nome do estilo personalizado"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Intensidade da cor"</string> <string name="mode_title" msgid="2394873501427436055">"Tema escuro"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Desativado temporariamente pela Economia de bateria"</string> <string name="mode_changed" msgid="2243581369395418584">"Tema trocado"</string> @@ -105,7 +111,7 @@ <string name="beta_title" msgid="8703819523760746458">"Beta"</string> <string name="gird_picker_entry_content_description" msgid="9087651470212293439">"Mudar a grade de apps"</string> <string name="wallpaper_color_tab" msgid="1447926591721403840">"Cores do plano de fundo"</string> - <string name="wallpaper_color_subheader" msgid="4044464573669965670">"Ícones, texto e mais cores que combinam com o plano de fundo"</string> + <string name="wallpaper_color_subheader" msgid="4044464573669965670">"Ícones, texto e mais para combinar com o plano de fundo"</string> <string name="wallpaper_color_title" msgid="5687965239180986458">"Cor do plano de fundo"</string> <string name="preset_color_tab" msgid="3133391839341329314">"Cores básicas"</string> <string name="preset_color_tab_2" msgid="1444107326712562538">"Outras cores"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Atalho à esquerda"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Atalho à direita"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Nenhum"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Para selecionar o app <xliff:g id="APPNAME">%1$s</xliff:g>, marque a opção a seguir"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Não é possível adicionar o atalho"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Abrir <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Para adicionar o app <xliff:g id="APPNAME">%1$s</xliff:g> como um atalho, confira se"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Concluído"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Nenhum"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Mostrar notificações na tela de bloqueio"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Ocultar notificações na tela de bloqueio"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"Mais opções da tela de bloqueio"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"Privacidade, Tocando agora e muito mais"</string> <string name="more_colors" msgid="3191071655353004591">"Mais cores"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Tema dinâmico principal"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Tema neutro principal"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Tema vibrante principal"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Tema expressivo principal"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Opção de cor padrão"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Opção de cor <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Deslize para a esquerda para escolher outro mostrador do relógio"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Deslize para a direita para escolher outro mostrador do relógio"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Mostradores personalizados"</string> </resources> diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index c0cecf45..44d056fc 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Ecran personalizat"</string> <string name="clock_description" msgid="3563839327378948">"Alege un ecran personalizat"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Modifică un ecran personalizat"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Setări pentru ceas"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Opțiune privind aspectul ceasului <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Culoare / mărime"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Culoare / dimensiune"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Culoare"</string> @@ -39,7 +40,8 @@ <string name="clock_size_dynamic" msgid="1023930312455061642">"Dinamică"</string> <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Dimensiunea ceasului se schimbă în funcție de conținutul ecranului de blocare"</string> <string name="clock_size_large" msgid="3143248715744138979">"Mare"</string> - <string name="clock_size_small" msgid="2280449912094164133">"Mic"</string> + <string name="clock_size_small" msgid="2280449912094164133">"Mică"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Un ceas mic apare în colțul ecranului"</string> <string name="grid_title" msgid="1688173478777254123">"Grilă aplicații"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Aplică"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Atinge pentru a modifica"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Adaugă fonturile preferate pe fiecare ecran"</string> <string name="grid_options_title" msgid="7071930966989877023">"Alege o dimensiune de grilă"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> x <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Schimbarea dimensiunii grilei va reîncărca spațiul de lucru și poate dura câteva secunde."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Se reîncarcă spațiul de lucru cu grila %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Nu s-a reîncărcat spațiul de lucru cu grila %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Stilul a fost setat"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Ceasul a fost setat"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Grila a fost setată"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Culoare personalizată"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Formă personalizată"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Numele stilului personalizat"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Intensitatea culorilor"</string> <string name="mode_title" msgid="2394873501427436055">"Temă întunecată"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Dezactivat temporar de Economisirea bateriei"</string> <string name="mode_changed" msgid="2243581369395418584">"Tema a fost schimbată"</string> @@ -105,7 +111,7 @@ <string name="beta_title" msgid="8703819523760746458">"Beta"</string> <string name="gird_picker_entry_content_description" msgid="9087651470212293439">"Schimbă grila de aplicații"</string> <string name="wallpaper_color_tab" msgid="1447926591721403840">"Culori de fundal"</string> - <string name="wallpaper_color_subheader" msgid="4044464573669965670">"Culori pentru pictograme, text și altele din imaginea de fundal"</string> + <string name="wallpaper_color_subheader" msgid="4044464573669965670">"Culori pictograme, text etc. asortate cu imaginea de fundal"</string> <string name="wallpaper_color_title" msgid="5687965239180986458">"Culoarea imaginii de fundal"</string> <string name="preset_color_tab" msgid="3133391839341329314">"Culori de bază"</string> <string name="preset_color_tab_2" msgid="1444107326712562538">"Alte culori"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Comanda rapidă stânga"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Comanda rapidă dreapta"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Fără"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Ca să selectezi <xliff:g id="APPNAME">%1$s</xliff:g>, urmează aceste instrucțiuni"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Nu se poate adăuga comanda rapidă"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Deschide <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Pentru a adăuga aplicația <xliff:g id="APPNAME">%1$s</xliff:g> drept comandă rapidă, asigură-te"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Gata"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Niciunul"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Afișează notificările pe ecranul de blocare"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Ascunde notificările pe ecranul de blocare"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Alte opțiuni pentru ecranul de blocare"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Confidențialitate, Now Playing și altele"</string> <string name="more_colors" msgid="3191071655353004591">"Mai multe culori"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Temă dinamică principală"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Temă neutră principală"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Temă vibrantă principală"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Temă expresivă principală"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Opțiune de culoare prestabilită"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Opțiunea de culoare <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Glisează spre stânga ca să alegi alt aspect de ceas"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Glisează spre dreapta ca să alegi alt aspect de ceas"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Ceasuri personalizate"</string> </resources> diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index c20c1a2a..3a13423d 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Настр. цифербл."</string> <string name="clock_description" msgid="3563839327378948">"Выбер. цифербл."</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Выберите настраиваемый циферблат."</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Настройки часов"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Циферблат, вариант <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Цвет и размер часов"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Цвет и размер часов"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>."</string> <string name="clock_color" msgid="8081608867289156163">"Цвет"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Размер часов меняется в зависимости от контента на заблокированном экране"</string> <string name="clock_size_large" msgid="3143248715744138979">"Большой"</string> <string name="clock_size_small" msgid="2280449912094164133">"Маленький"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Небольшие часы в углу экрана"</string> <string name="grid_title" msgid="1688173478777254123">"Сетка приложений"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Применить"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Нажмите, чтобы изменить"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Добавьте любимые шрифты на каждый экран."</string> <string name="grid_options_title" msgid="7071930966989877023">"Выберите размер сетки"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> x <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"При изменении размера сетки рабочая область обновляется. Это может занять несколько секунд."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Обновление рабочей области с сеткой \"%1$s\"."</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Не удалось обновить рабочую область с сеткой \"%1$s\"."</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Стиль настроен."</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Часы настроены."</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Сетка настроена."</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Пользовательский цвет"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Пользовательская форма"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Название пользовательского стиля"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Интенсивность цвета"</string> <string name="mode_title" msgid="2394873501427436055">"Тёмная тема"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Временно отключено из-за режима энергосбережения"</string> <string name="mode_changed" msgid="2243581369395418584">"Тема изменена"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Ярлык слева"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Ярлык справа"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Нет"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Чтобы выбрать приложение \"<xliff:g id="APPNAME">%1$s</xliff:g>\", сделайте следующее:"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Не удалось добавить ярлык"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Открыть: <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Для добавления ярлыка приложения \"<xliff:g id="APPNAME">%1$s</xliff:g>\" должны выполняться следующие условия:"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"ОК"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Нет"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Показывать уведомления на заблокированном экране"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Скрывать уведомления на заблокированном экране"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Ещё настройки заблок. экрана"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Конфиденциальность, функция \"Что сейчас играет?\" и т. д."</string> <string name="more_colors" msgid="3191071655353004591">"Ещё цвета"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Основная динамическая тема"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Основная нейтральная тема"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Основная живая тема"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Основная выразительная тема"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Цвет по умолчанию"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Цвет: <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Проведите влево, чтобы выбрать другой циферблат"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Проведите вправо, чтобы выбрать другой циферблат"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Настраиваемые циферблаты"</string> </resources> diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml index d34dea49..6c1033aa 100644 --- a/res/values-si/strings.xml +++ b/res/values-si/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"අභිරුචි ඔරලෝසුව"</string> <string name="clock_description" msgid="3563839327378948">"අභිරුචි ඔරලෝසුවක් තෝරන්න"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"අභිරුචි ඔරලෝසුවක් වෙනස් කරන්න"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"ඔරලෝසු සැකසීම්"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"ඔරලෝසු මුහුණත් විකල්පය <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"ඔරලෝසු වර්ණය සහ තරම"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"ඔරලෝසු වර්ණය සහ තරම"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"වර්ණය"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"අගුළු තිරයේ අන්තර්ගතය අනුව ඔරලෝසුවේ තරම වෙනස් වේ"</string> <string name="clock_size_large" msgid="3143248715744138979">"විශාල"</string> <string name="clock_size_small" msgid="2280449912094164133">"කුඩා"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"ඔබේ තිරයේ කෙළවරේ කුඩා ඔරලෝසුවක් පෙන්වයි"</string> <string name="grid_title" msgid="1688173478777254123">"යෙදුම් ජාලකය"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"යොදන්න"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"සංස්කරණයට තට්ටු කරන්න"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"සෑම තිරයටම ඔබේ ප්රියතම අකුරු එක් කරන්න"</string> <string name="grid_options_title" msgid="7071930966989877023">"ජාලක තරමක් තෝරා ගන්න"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"ජාලක ප්රමාණය වෙනස් කිරීම කාර්ය ඉඩ නැවත පූරණය කරන අතර තත්පර කිහිපයක් ගත විය හැක."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"%1$s ජාලකය සමග කාර්ය ඉඩ නැවත පූරණය වේ"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"%1$s ජාලකය සමග කාර්ය ඉඩ නැවත පූරණය කිරීමට අසමත් විය"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"විලාස සාර්ථකව සැකසිණි"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"ඔරලෝසුව සාර්ථකව සැකසිණි"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"ජාලකය සාර්ථකව සැකසිණි"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"අභිරුචි වර්ණය"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"අභිරුචි හැඩය"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"අභිරුචි මෝස්තර නම"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"වර්ණ තීව්රතාවය"</string> <string name="mode_title" msgid="2394873501427436055">"අඳුරු තේමාව"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"බැටරි සුරැකුම හේතුවෙන් තාවකාලිකව අබල කරන ලදි"</string> <string name="mode_changed" msgid="2243581369395418584">"තේමාව වෙනස් විය"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"වම් කෙටිමඟ"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"දකුණු කෙටිමඟ"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"කිසිත් නැත"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"`<xliff:g id="APPNAME">%1$s</xliff:g>` තේරීම සඳහා පහත දේ පරීක්ෂා කරන්න"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"කෙටිමඟ එක් කළ නොහැක"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> විවෘත කරන්න"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"කෙටිමඟක් ලෙස <xliff:g id="APPNAME">%1$s</xliff:g> එක් කිරීමට, තහවුරු කර ගන්න"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"නිමයි"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"කිසිවක් නැත"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"අගුළු තිරය මත දැනුම්දීම් පෙන්වන්න"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"අගුළු තිරය මත දැනුම්දීම් සඟවන්න"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"තවත් අගුලු තිර විකල්ප"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"පෞද්ගලිකත්වය, Now Playing, සහ තවත් දේ"</string> <string name="more_colors" msgid="3191071655353004591">"තවත් වර්ණ"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"මූලික ගතික තේමාව"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"මූලික මධ්යස්ථ තේමාව"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"මූලික විචිත්රවත් තේමාව"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"මූලික ප්රකාශන තේමාව"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"පෙරනිමි වර්ණ විකල්පය"</string> <string name="content_description_color_option" msgid="4169813692012119578">"වර්ණ විකල්පය <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"වෙනස් ඔරලෝසු මුහුණතක් තෝරා ගැනීමට වමට ස්වයිප් කරන්න"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"වෙනස් ඔරලෝසු මුහුණතක් තෝරා ගැනීමට දකුණට ස්වයිප් කරන්න"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"අභිරුචි ඔරලෝසු"</string> </resources> diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 8bf29a6e..c418f843 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Vlastné hodiny"</string> <string name="clock_description" msgid="3563839327378948">"Vyberte vlastné hodiny"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Zmeňte vlastné hodiny"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Nastav. hodín"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Možnosť ciferníka <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Farba a veľkosť"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Farba a veľkosť"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Farba"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Veľkosť hodín sa mení podľa obsahu na uzamknutej obrazovke"</string> <string name="clock_size_large" msgid="3143248715744138979">"Veľké"</string> <string name="clock_size_small" msgid="2280449912094164133">"Malé"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"V rohu obrazovky sa zobrazujú malé hodiny"</string> <string name="grid_title" msgid="1688173478777254123">"Mriežka aplik."</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Použiť"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Klepnutím upravte"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Pridajte na každú obrazovku svoje obľúbené písma"</string> <string name="grid_options_title" msgid="7071930966989877023">"Vyberte veľkosť mriežky"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> × <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Zmena veľkosti mriežky znova načíta pracovný priestor a môže trvať niekoľko sekúnd."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Znova sa načítava pracovný priestor s mriežkou %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Nepodarilo sa znova načítať pracovný priestor s mriežkou %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Štýl bol úspešne nastavený"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Hodiny boli úspešne nastavené"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Mriežka bola úspešne nastavená"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Vlastná farba"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Vlastný tvar"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Názov vlastného štýlu"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Intenzita farieb"</string> <string name="mode_title" msgid="2394873501427436055">"Tmavý motív"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Dočasne vypnuté šetričom batérie"</string> <string name="mode_changed" msgid="2243581369395418584">"Motív bol zmenený"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Skratka vľavo"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Skratka vpravo"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Žiadne"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Ak chcete vybrať aplikáciu <xliff:g id="APPNAME">%1$s</xliff:g>, skontrolujte nasledovné"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Odkaz sa nedá pridať"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Otvoriť <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Ak chcete aplikáciu <xliff:g id="APPNAME">%1$s</xliff:g> pridať ako odkaz, uistite sa, že"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Hotovo"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Žiadne"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Zobrazovať upozornenia na uzamknutej obrazovke"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Skrývať upozornenia na uzamknutej obrazovke"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"Viac možností uzamkn. obrazovky"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"Ochrana súkromia, Čo to hrá a ďalšie funkcie"</string> <string name="more_colors" msgid="3191071655353004591">"Ďalšie farby"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Primárny dynamický motív"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Primárny neutrálny motív"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Primárny sýty motív"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Primárny expresívny motív"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Predvolená farba"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Farba: <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Potiahnutím doľava vyberiete iný ciferník"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Potiahnutím doprava vyberiete iný ciferník"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Vlastné hodiny"</string> </resources> diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 5097ac38..3899537b 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Ura po meri"</string> <string name="clock_description" msgid="3563839327378948">"Izberite uro po meri"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Spremenite uro po meri"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Nastavitve ure"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Možnost številčnice <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Barva, velikost ure"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Barva, velikost ure"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Barva"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Velikost ure se spremeni glede na vsebino zaklenjenega zaslona."</string> <string name="clock_size_large" msgid="3143248715744138979">"Velika"</string> <string name="clock_size_small" msgid="2280449912094164133">"Majhna"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"V kotu zaslona je prikazana majhna ura"</string> <string name="grid_title" msgid="1688173478777254123">"Mreža aplikacij"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Uporabi"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Dotaknite se za urejanje"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Dodajte priljubljeno pisavo na vsak zaslon"</string> <string name="grid_options_title" msgid="7071930966989877023">"Izbira velikosti mreže"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> x <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Če spremenite velikost mreže, se znova naloži delovni prostor, kar lahko traja nekaj sekund."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Vnovično nalaganje delovnega prostora z mrežo %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Delovnega prostora z mrežo %1$s ni bilo mogoče znova naložiti"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Slog je uspešno nastavljen"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Ura je uspešno nastavljena"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Mreža je uspešno nastavljena"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Barva po meri"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Oblika po meri"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Ime sloga po meri"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Jakost barv"</string> <string name="mode_title" msgid="2394873501427436055">"Temna tema"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Začasno onemogočeno zaradi varčevanja z energijo baterije."</string> <string name="mode_changed" msgid="2243581369395418584">"Tema je spremenjena."</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Leva bližnjica"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Desna bližnjica"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Brez"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Če želite izbrati aplikacijo »<xliff:g id="APPNAME">%1$s</xliff:g>«, potrdite naslednje:"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Bližnjice ni mogoče dodati"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Odpri <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Če želite aplikacijo <xliff:g id="APPNAME">%1$s</xliff:g> dodati kot bližnjico, zagotovite naslednje:"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Končano"</string> @@ -124,13 +130,17 @@ <string name="keyguard_quick_affordance_section_title" msgid="2806304242671717309">"Bližnjice"</string> <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Brez"</string> - <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Prikaz obvestil na zaklenjenem zaslonu"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Skrivanje obvestil na zaklenjenem zaslonu"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Prikaži obvestila na zaklenjenem zaslonu"</string> + <string name="more_settings_section_title" msgid="1331425454775815958">"Več glede zaklenjenega zaslona"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Zasebnost, Zdaj se predvaja in drugo"</string> <string name="more_colors" msgid="3191071655353004591">"Več barv"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Primarna dinamična tema"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Primarna nevtralna tema"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Primarna živahna tema"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Primarna izrazna tema"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Privzeta možnost barve"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Možnost barve <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Povlecite v levo, če želite izbrati drugačno številčnico"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Povlecite v desno, če želite izbrati drugačno številčnico"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Ure po meri"</string> </resources> diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml index 95a8fa66..23c96e3c 100644 --- a/res/values-sq/strings.xml +++ b/res/values-sq/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Orë e personalizuar"</string> <string name="clock_description" msgid="3563839327378948">"Orë e personalizuar"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Ndrysho orën e personalizuar"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Ora: Cilësimet"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Opsioni i fushës së orës: <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Ora: Ngjyrë/madhësi"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Ora: Ngjyra/madhësia"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Ngjyra"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Madhësia e orës ndryshon sipas përmbajtjes së ekranit të kyçjes"</string> <string name="clock_size_large" msgid="3143248715744138979">"E madhe"</string> <string name="clock_size_small" msgid="2280449912094164133">"E vogël"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Në këndin e ekranit shfaqet një orë e vogël"</string> <string name="grid_title" msgid="1688173478777254123">"Rrjeta e aplikacioneve"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Zbato"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Trokit për të modifikuar"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Shto fontet e tua të preferuara në çdo ekran"</string> <string name="grid_options_title" msgid="7071930966989877023">"Zgjidh një madhësi rrjete"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Ndryshimi i rrjetës ringarkon vendin e punës dhe zgjat disa sekonda."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Vendi i punës po ringarkohet me rrjetën %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Vendi i punës nuk mund të ringarkohej me rrjetën %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Stili u caktua me sukses"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Ora u caktua me sukses"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Rrjeta u caktua me sukses"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Ngjyra e personalizuar"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Forma e personalizuar"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Emri i stilit të personalizuar"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Intensiteti i ngjyrave"</string> <string name="mode_title" msgid="2394873501427436055">"Tema e errët"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Çaktivizuar për shkak të \"Kursyesit të baterisë\""</string> <string name="mode_changed" msgid="2243581369395418584">"Tema është ndryshuar"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Shkurtorja maj."</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Shkurtorja djath."</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Asnjë"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Për të zgjedhur \"<xliff:g id="APPNAME">%1$s</xliff:g>\", kontrollo si më poshtë"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Shkurtorja nuk mund të shtohet"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Hap \"<xliff:g id="APPNAME">%1$s</xliff:g>\""</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Për të shtuar aplikacionin \"<xliff:g id="APPNAME">%1$s</xliff:g>\" si një shkurtore, sigurohu që"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"U krye"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Asnjë"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Shfaq njoftimet në ekranin e kyçjes"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Fshih njoftimet në ekranin e kyçjes"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"Opsione të tjera të ekranit të kyçjes"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"Privatësia, \"Gjej këngën\" etj."</string> <string name="more_colors" msgid="3191071655353004591">"Më shumë ngjyra"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Tema kryesore dinamike"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Tema kryesore neutrale"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Tema kryesore vibrante"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Tema kryesore ekspresive"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Opsioni i parazgjedhur i ngjyrës"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Opsioni i ngjyrës: <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Rrëshqit shpejt majtas për të zgjedhur një tjetër fushë ore"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Rrëshqit shpejt djathtas për të zgjedhur një tjetër fushë ore"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Fusha ore të personalizuara"</string> </resources> diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index 00287324..8be5c15f 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Прилагођени сат"</string> <string name="clock_description" msgid="3563839327378948">"Прилагођени сат"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Промените прилагођени сат"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Подешавања сата"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Опција бројчаника <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Боја и величина сата"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Боја и величина сата"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Боја"</string> @@ -39,7 +40,8 @@ <string name="clock_size_dynamic" msgid="1023930312455061642">"Динамички"</string> <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Величина сата се мења у складу са садржајем закључаног екрана"</string> <string name="clock_size_large" msgid="3143248715744138979">"Велико"</string> - <string name="clock_size_small" msgid="2280449912094164133">"Мало"</string> + <string name="clock_size_small" msgid="2280449912094164133">"Мали"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Мали сат се приказује у углу екрана"</string> <string name="grid_title" msgid="1688173478777254123">"Мрежа апл."</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Примени"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Додирните да бисте изменили"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Додајте омиљене фонтове на сваки екран"</string> <string name="grid_options_title" msgid="7071930966989877023">"Одаберите величину мреже"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Нова величина мреже поново учитава радни простор за пар секунди."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Радни простор се поново учитава уз мрежу %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Поновно учитавање радног простора уз мрежу %1$s није успело"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Стил је подешен"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Подешавање сата је успело"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Мрежа је подешена"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Прилагођена боја"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Прилагођени облик"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Прилагођени назив стила"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Интензитет боја"</string> <string name="mode_title" msgid="2394873501427436055">"Тамна тема"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Привремено је онемогућено због уштеде батерије"</string> <string name="mode_changed" msgid="2243581369395418584">"Тема је промењена"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Лева пречица"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Десна пречица"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Ништа"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Да бисте изабрали „<xliff:g id="APPNAME">%1$s</xliff:g>“, проверите следеће"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Додавање пречице није успело"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Отворите: <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Да бисте додали апликацију <xliff:g id="APPNAME">%1$s</xliff:g> као пречицу, уверите се"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Готово"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Ништа"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Приказуј обавештења на закључаном екрану"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Сакриј обавештења на закључаном екрану"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"Још опција за закључани екран"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"Приватност, Тренутно свира и друго"</string> <string name="more_colors" msgid="3191071655353004591">"Још боја"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Примарна динамична тема"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Примарна неутрална тема"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Примарна интензивна тема"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Примарна експресивна тема"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Подразумевана опција боје"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Опција боје <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Превуците налево да бисте одабрали други бројчаник"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Превуците надесно да бисте одабрали други бројчаник"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Прилагођени сатови"</string> </resources> diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index b6009403..8cfa9c89 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Anpassad klocka"</string> <string name="clock_description" msgid="3563839327378948">"Välj anpassad klocka"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Ändra en anpassad klocka"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Klockalternativ"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Urtavlealternativ <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Klockstorlek/färg"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Klockstorlek/färg"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Färg"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Klockans storlek ändras utifrån innehållet på låsskärmen"</string> <string name="clock_size_large" msgid="3143248715744138979">"Stor"</string> <string name="clock_size_small" msgid="2280449912094164133">"Liten"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"En liten klockas visas i skärmens hörn"</string> <string name="grid_title" msgid="1688173478777254123">"Apprutnät"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Använd"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Tryck för att redigera"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Lägg till teckensnitt som du gillar på varje skärm"</string> <string name="grid_options_title" msgid="7071930966989877023">"Välj rutnätsstorlek"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> x <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"När du ändrar rutnätsstorlek läses arbetsytan in igen. Detta kan ta några sekunder."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Läser in arbetsytan igen med rutnätet %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Det gick inte att läsa in arbetsytan igen med rutnätet %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Stilen har angetts"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Klockan har angetts"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Rutnätet har angetts"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Anpassad färg"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Anpassat område"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Namn på anpassat format"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Färgintensitet"</string> <string name="mode_title" msgid="2394873501427436055">"Mörkt tema"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Tillfälligt inaktiverat i batterisparläge"</string> <string name="mode_changed" msgid="2243581369395418584">"Temat har ändrats"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Vänster genväg"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Höger genväg"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Inga"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Om du vill välja <xliff:g id="APPNAME">%1$s</xliff:g> markerar du följande"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Det går inte att lägga till genvägen"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Öppna <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Om du vill lägga till <xliff:g id="APPNAME">%1$s</xliff:g>-appen som en genväg ser du till att"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Klar"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Inga"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Visa aviseringar på låsskärmen"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Dölj aviseringar på låsskärmen"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Fler låsskärmsalternativ"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Integritet, Nu spelas med mera"</string> <string name="more_colors" msgid="3191071655353004591">"Fler färger"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Dynamiskt tema med primära färger"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Neutralt tema med primära färger"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Livfullt tema med primära färger"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Uttrycksfullt tema med primära färger"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Standardfärgen"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Färgalternativet <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Svep åt vänster för att välja en annan urtavla"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Svep åt höger för att välja en annan urtavla"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Anpassade urtavlor"</string> </resources> diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index f63c537e..9c1fb1f5 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Saa Maalum"</string> <string name="clock_description" msgid="3563839327378948">"Chagua saa maalum"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Badili saa maalum"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Mipangilio ya Saa"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Chaguo la sura ya saa <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Rangi na ukubwa wa saa"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Rangi na ukubwa wa saa"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Rangi"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Ukubwa wa saa hubadilika kulingana na maudhui yaliyo kwenye skrini iliyofungwa"</string> <string name="clock_size_large" msgid="3143248715744138979">"Kubwa"</string> <string name="clock_size_small" msgid="2280449912094164133">"Ndogo"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Saa ndogo inaonekana kwenye kona ya skrini yako"</string> <string name="grid_title" msgid="1688173478777254123">"Gridi ya programu"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Tumia"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Gusa ili ubadilishe"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Ongeza fonti unayopenda kwenye kila skrini"</string> <string name="grid_options_title" msgid="7071930966989877023">"Chagua ukubwa wa gridi"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Kubadilisha ukubwa wa gridi kutapakia upya nafasi ya kazi na kunaweza kuchukua sekunde kadhaa."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Inapakia upya nafasi ya kazi kwa kutumia gridi ya %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Imeshindwa kupakia upya nafasi ya kazi kwa kutumia gridi ya %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Mtindo umewekwa"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Imeweka saa"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Gridi imewekwa"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Rangi maalum"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Umbo maalum"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Jina la muundo maalum"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Ukolezaji wa rangi"</string> <string name="mode_title" msgid="2394873501427436055">"Mandhari meusi"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Imezimwa kwa muda kwa sababu ya Kiokoa Betri"</string> <string name="mode_changed" msgid="2243581369395418584">"Mandhari yamebadilishwa"</string> @@ -109,14 +115,14 @@ <string name="wallpaper_color_title" msgid="5687965239180986458">"Rangi ya mandhari"</string> <string name="preset_color_tab" msgid="3133391839341329314">"Rangi za msingi"</string> <string name="preset_color_tab_2" msgid="1444107326712562538">"Rangi nyinginezo"</string> - <string name="preset_color_subheader" msgid="8230588536141279371">"Chagua rangi yoyote ya aikoni zako, saa na zaidi"</string> + <string name="preset_color_subheader" msgid="8230588536141279371">"Chagua rangi yoyote uitumie kwenye aikoni, saa na zaidi"</string> <string name="color_changed" msgid="7029571720331641235">"Rangi imebadilishwa"</string> <string name="adaptive_color_title" msgid="1336508599235896205">"Inayobadilika"</string> <string name="color_picker_title" msgid="6666830057938082864">"Rangi za mfumo"</string> <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Njia ya mkato ya kushoto"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Njia ya mkato ya kulia"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Hamna"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Ili uchague `<xliff:g id="APPNAME">%1$s</xliff:g>` zingatia yafuatayo"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Imeshindwa kuweka njia ya mkato"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Fungua <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Ili kuweka programu ya <xliff:g id="APPNAME">%1$s</xliff:g> kuwa njia ya mkato, hakikisha"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Nimemaliza"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Hamna"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Onyesha arifa kwenye skrini iliyofungwa"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Ficha arifa kwenye skrini iliyofungwa"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> - <string name="more_colors" msgid="3191071655353004591">"Rangi Nyingi Zaidi"</string> + <string name="more_settings_section_title" msgid="1331425454775815958">"Chaguo zaidi za kufunga skrini"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Faragha, Kitambua Ngoma na zaidi"</string> + <string name="more_colors" msgid="3191071655353004591">"Rangi Zaidi"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Mandhari msingi nyumbufu"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Mandhari msingi yenye rangi zilizopoa"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Mandhari msingi yenye rangi inayong\'aa"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Mandhari msingi inayojidhihirisha"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Chaguo la rangi chaguomsingi"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Chaguo la rangi ya <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Telezesha kidole kushoto ili uchague uso tofauti wa saa"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Telezesha kidole kulia ili uchague uso tofauti wa saa"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Uso wa Saa"</string> </resources> diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml index ba70c1ba..eaf444f9 100644 --- a/res/values-ta/strings.xml +++ b/res/values-ta/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"பிரத்தியேகக் கடிகாரம்"</string> <string name="clock_description" msgid="3563839327378948">"பிரத்தியேகக் கடிகாரத்தைத் தேர்வுசெய்க"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"பிரத்தியேகக் கடிகாரத்தை மாற்றும்"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"கடிகார அமைப்புகள்"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"கடிகார முகப்புக்கான விருப்பம் <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"கடிகார நிறம் & அளவு"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"கடிகார நிறம் & அளவு"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"நிறம்"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"பூட்டுத் திரையில் உள்ள உள்ளடக்கத்தைப் பொறுத்து கடிகாரத்தின் அளவு மாறுபடும்"</string> <string name="clock_size_large" msgid="3143248715744138979">"பெரியது"</string> <string name="clock_size_small" msgid="2280449912094164133">"சிறியது"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"உங்கள் திரையின் மூலையில் ஒரு சிறிய கடிகாரம் காட்டப்படும்"</string> <string name="grid_title" msgid="1688173478777254123">"ஆப்ஸ் கட்டம்"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"பயன்படுத்து"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"\'தீமைத்\' திருத்த தட்டவும்"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"ஒவ்வொரு திரையிலும் உங்களுக்குப் பிடித்த எழுத்துருக்களைச் சேருங்கள்"</string> <string name="grid_options_title" msgid="7071930966989877023">"கட்ட அளவைத் தேர்வுசெய்தல்"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"கட்ட அளவை மாற்றினால் பணியிடம் ரெஃப்ரெஷ் செய்யப்படும், சில வினாடிகள் ஆகக்கூடும்."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"%1$s கட்டத்துடன் பணியிடத்தை ரெஃப்ரெஷ் செய்கிறது"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"%1$s கட்டத்துடன் பணியிடத்தை ரெஃப்ரெஷ் செய்ய முடியவில்லை"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"ஸ்டைல் அமைக்கப்பட்டது"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"கடிகாரம் அமைக்கப்பட்டது"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"கட்டம் அமைக்கப்பட்டது"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"பிரத்தியேக வண்ணம்"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"பிரத்தியேக வடிவம்"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"பிரத்தியேகத் தோற்றத்தின் பெயர்"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"வண்ணத்தின் அடர்த்தி"</string> <string name="mode_title" msgid="2394873501427436055">"டார்க் தீம்"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"பேட்டரிச் சேமிப்பான் காரணமாகத் தற்காலிகமாக முடக்கப்பட்டுள்ளது"</string> <string name="mode_changed" msgid="2243581369395418584">"தீம் மாற்றப்பட்டது"</string> @@ -105,7 +111,7 @@ <string name="beta_title" msgid="8703819523760746458">"பீட்டா"</string> <string name="gird_picker_entry_content_description" msgid="9087651470212293439">"ஆப்ஸ் கட்டக் காட்சியை மாற்றும்"</string> <string name="wallpaper_color_tab" msgid="1447926591721403840">"வால்பேப்பர் நிறங்கள்"</string> - <string name="wallpaper_color_subheader" msgid="4044464573669965670">"வால்பேப்பருடன் பொருந்தும் ஐகான், உரை & பலவற்றின் வண்ணம்"</string> + <string name="wallpaper_color_subheader" msgid="4044464573669965670">"ஐகான், உரை மற்றும் பலவற்றின் வண்ணம் வால்பேப்பருடன் பொருந்தும்"</string> <string name="wallpaper_color_title" msgid="5687965239180986458">"வால்பேப்பரின் நிறம்"</string> <string name="preset_color_tab" msgid="3133391839341329314">"அடிப்படை வண்ணங்கள்"</string> <string name="preset_color_tab_2" msgid="1444107326712562538">"பிற வண்ணங்கள்"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"இடது ஷார்ட்கட்"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"வலது ஷார்ட்கட்"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"ஏதுமில்லை"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"`<xliff:g id="APPNAME">%1$s</xliff:g>` ஆப்ஸைத் தேர்ந்தெடுக்க பின்வருபவற்றைச் சரிபார்க்கவும்"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"ஷார்ட்கட்டைச் சேர்க்க முடியவில்லை"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> ஐத் திறக்கும்"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> ஆப்ஸை ஷார்ட்கட்டாகச் சேர்க்க இவற்றைப் பின்பற்றுவதை உறுதிசெய்துகொள்ளவும்:"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"சரி"</string> @@ -124,13 +130,17 @@ <string name="keyguard_quick_affordance_section_title" msgid="2806304242671717309">"ஷார்ட்கட்கள்"</string> <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"ஏதுமில்லை"</string> - <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"பூட்டுத் திரையில் அறிவிப்புகளைக் காட்டும்"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"பூட்டுத் திரையில் அறிவிப்புகளைக் காட்டாது"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"பூட்டுத் திரையில் அறிவிப்புகளைக் காட்டு"</string> + <string name="more_settings_section_title" msgid="1331425454775815958">"கூடுதல் பூட்டுத் திரை விருப்பம்"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"தனியுரிமை, பாடல் விவரம் மற்றும் பல"</string> <string name="more_colors" msgid="3191071655353004591">"கூடுதல் வண்ணங்கள்"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"முதன்மையான டைனமிக் தீம்"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"முதன்மையான நியூட்ரல் தீம்"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"முதன்மையான வர்ணஜாலத் தீம்"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"முதன்மையான எக்ஸ்பிரஸிவ் தீம்"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"இயல்பு வண்ண விருப்பம்"</string> <string name="content_description_color_option" msgid="4169813692012119578">"வண்ண விருப்பம் <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"வேறு கடிகார முகப்பைத் தேர்வுசெய்ய இடதுபக்கம் ஸ்வைப் செய்யவும்"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"வேறு கடிகார முகப்பைத் தேர்வுசெய்ய வலதுபக்கம் ஸ்வைப் செய்யவும்"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"பிரத்தியேகக் கடிகார முகப்புகள்"</string> </resources> diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml index af8e688f..164dfc6a 100644 --- a/res/values-te/strings.xml +++ b/res/values-te/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"అనుకూల గడియారం"</string> <string name="clock_description" msgid="3563839327378948">"అనుకూల గడియారాన్ని ఎంచుకోండి"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"అనుకూల గడియారాన్ని మార్చండి"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"గడియారం సెట్టింగ్లు"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"గడియారం ఫేస్ ఆప్షన్ <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"గడియారం రంగు & సైజు"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"గడియారం రంగు & సైజు"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"రంగు"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"లాక్ స్క్రీన్ కంటెంట్ ప్రకారం గడియారం సైజ్ మారుతుంది"</string> <string name="clock_size_large" msgid="3143248715744138979">"పెద్దది"</string> <string name="clock_size_small" msgid="2280449912094164133">"చిన్నది"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"మీ స్క్రీన్ మూలన ఒక చిన్న గడియారం కనిపిస్తుంది"</string> <string name="grid_title" msgid="1688173478777254123">"యాప్ గ్రిడ్"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"వర్తింపజేయి"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"ఎడిట్ చేయడానికి నొక్కండి"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"ప్రతి స్క్రీన్కు మీకు ఇష్టమైన ఫాంట్లను జోడించండి"</string> <string name="grid_options_title" msgid="7071930966989877023">"ఒక గ్రిడ్ సైజ్ను ఎంచుకోండి"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"గ్రిడ్ సైజ్ను మార్చడం వలన వర్క్ స్పేస్ రీలోడ్ అవుతుంది, దానికి కొన్ని సెకన్లు పట్టవచ్చు."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"%1$s గ్రిడ్తో వర్క్ స్పేస్ను రీలోడ్ చేస్తోంది"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"%1$s గ్రిడ్తో వర్క్ స్పేస్ను రీలోడ్ చేయడం విఫలమైంది"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"స్టైల్ విజయవంతంగా సెట్ చేయబడింది"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"గడియారం విజయవంతంగా సెట్ చేయబడింది"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"గ్రిడ్ విజయవంతంగా సెట్ చేయబడింది"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"అనుకూల రంగు"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"అనుకూల ఆకారం"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"అనుకూల స్టయిల్ పేరు"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"రంగు తీవ్రత"</string> <string name="mode_title" msgid="2394873501427436055">"ముదురు రంగు రూపం"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"బ్యాటరీ సేవర్ కారణంగా తాత్కాలికంగా డిజేబుల్ చేయబడింది"</string> <string name="mode_changed" msgid="2243581369395418584">"థీమ్ మార్చబడింది"</string> @@ -109,14 +115,14 @@ <string name="wallpaper_color_title" msgid="5687965239180986458">"వాల్పేపర్ రంగు"</string> <string name="preset_color_tab" msgid="3133391839341329314">"ప్రాథమిక రంగులు"</string> <string name="preset_color_tab_2" msgid="1444107326712562538">"ఇతర రంగులు"</string> - <string name="preset_color_subheader" msgid="8230588536141279371">"మీ చిహ్నాలు, గడియారం, అలాగే మరిన్నింటి కోసం ఏదైనా రంగును ఎంచుకోండి"</string> + <string name="preset_color_subheader" msgid="8230588536141279371">"మీ చిహ్నాలు, గడియారం, మరిన్నింటి కోసం రంగును ఎంచుకోండి"</string> <string name="color_changed" msgid="7029571720331641235">"రంగు మార్చబడింది"</string> <string name="adaptive_color_title" msgid="1336508599235896205">"డైనమిక్"</string> <string name="color_picker_title" msgid="6666830057938082864">"సిస్టమ్ రంగులు"</string> <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"ఎడమ షార్ట్కట్"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"కుడి షార్ట్కట్"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"ఏదీ లేదు"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"`<xliff:g id="APPNAME">%1$s</xliff:g>` యాప్ను ఎంచుకోవడానికి దిగువ ఉన్న సూచనలను చూడండి."</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"షార్ట్కట్ను జోడించడం సాధ్యపడదు"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g>ను తెరవండి"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> యాప్ను షార్ట్కట్గా జోడించడానికి, వీటిని నిర్ధారించుకోండి"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"పూర్తయింది"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"ఏదీ ఎంచుకోలేదు"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"లాక్ స్క్రీన్లో నోటిఫికేషన్లను చూపండి"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"లాక్ స్క్రీన్లో నోటిఫికేషన్లను దాచండి"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"మరిన్ని లాక్ స్క్రీన్ ఆప్షన్లు"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"గోప్యత, Now Playing, ఇంకా మరిన్ని"</string> <string name="more_colors" msgid="3191071655353004591">"మరిన్ని రంగులు"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"ప్రాథమిక డైనమిక్ రూపం"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"ప్రాథమిక న్యూట్రల్ రూపం"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"ప్రాథమిక వైబ్రెంట్ రూపం"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"ప్రాథమిక ఎక్స్ప్రెషిప్ రూపం"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"ఆటోమేటిక్ సెట్టింగ్ రంగు ఆప్షన్"</string> <string name="content_description_color_option" msgid="4169813692012119578">"రంగు ఆప్షన్ <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"వేరొక గడియార ముఖాన్ని ఎంచుకోవడానికి ఎడమ వైపునకు స్వైప్ చేయండి"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"వేరొక గడియార ముఖాన్ని ఎంచుకోవడానికి కుడి వైపునకు స్వైప్ చేయండి"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"అనుకూల గడియారాలు"</string> </resources> diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index ff21f6d4..34565eee 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"นาฬิกาที่กำหนดเอง"</string> <string name="clock_description" msgid="3563839327378948">"เลือกนาฬิกาที่กำหนดเอง"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"เปลี่ยนนาฬิกาที่กำหนดเอง"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"ตั้งค่านาฬิกา"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"ตัวเลือกหน้าปัดนาฬิกา <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"สีและขนาดนาฬิกา"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"สีและขนาดนาฬิกา"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"สี"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"ขนาดของนาฬิกาจะเปลี่ยนตามเนื้อหาในหน้าจอล็อก"</string> <string name="clock_size_large" msgid="3143248715744138979">"ใหญ่"</string> <string name="clock_size_small" msgid="2280449912094164133">"เล็ก"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"นาฬิกาขนาดเล็กจะแสดงที่มุมของหน้าจอ"</string> <string name="grid_title" msgid="1688173478777254123">"ตารางกริดแอป"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"ใช้"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"แตะเพื่อแก้ไข"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"เพิ่มแบบอักษรที่ชอบในทุกหน้าจอ"</string> <string name="grid_options_title" msgid="7071930966989877023">"เลือกขนาดตารางกริด"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"การเปลี่ยนขนาดตารางกริดจะโหลดพื้นที่ทำงานซ้ำและอาจใช้เวลาสักครู่"</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"กำลังโหลดพื้นที่ทำงานซ้ำด้วยตารางกริด %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"โหลดพื้นที่ทำงานซ้ำด้วยตาราง %1$s ไม่สำเร็จ"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"ตั้งค่ารูปแบบเรียบร้อยแล้ว"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"ตั้งนาฬิกาเรียบร้อยแล้ว"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"ตั้งค่าตารางกริดเรียบร้อยแล้ว"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"สีที่กำหนดเอง"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"รูปร่างที่กำหนดเอง"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"ชื่อรูปแบบที่กำหนดเอง"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"ความเข้มของสี"</string> <string name="mode_title" msgid="2394873501427436055">"ธีมมืด"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"ปิดใช้ชั่วคราวเนื่องจากอยู่ในโหมดประหยัดแบตเตอรี่"</string> <string name="mode_changed" msgid="2243581369395418584">"เปลี่ยนธีมแล้ว"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"ทางลัดทางซ้าย"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"ทางลัดทางขวา"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"ไม่มี"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"หากต้องการเลือก \"<xliff:g id="APPNAME">%1$s</xliff:g>\" โปรดตรวจสอบรายการต่อไปนี้"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"เพิ่มทางลัดไม่ได้"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"เปิด <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"หากต้องการเพิ่มแอป <xliff:g id="APPNAME">%1$s</xliff:g> เป็นทางลัด โปรดตรวจสอบดังต่อไปนี้"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"เสร็จสิ้น"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"ไม่มี"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"แสดงการแจ้งเตือนบนหน้าจอล็อก"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"ซ่อนการแจ้งเตือนบนหน้าจอล็อก"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"ตัวเลือกหน้าจอล็อกเพิ่มเติม"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"ความเป็นส่วนตัว ฟีเจอร์ \"กำลังเล่น\" และอื่นๆ"</string> <string name="more_colors" msgid="3191071655353004591">"สีเพิ่มเติม"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"ธีมหลักแบบไดนามิก"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"ธีมหลักแบบใช้สีโทนกลาง"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"ธีมหลักแบบสีสันสดใส"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"ธีมหลักแบบชัดเจน"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"ตัวเลือกสีเริ่มต้น"</string> <string name="content_description_color_option" msgid="4169813692012119578">"ตัวเลือกสี <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"ปัดซ้ายเพื่อเลือกหน้าปัดแบบต่างๆ"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"ปัดขวาเพื่อเลือกหน้าปัดแบบต่างๆ"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"หน้าปัดแบบกำหนดเอง"</string> </resources> diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index a477a1f3..d945c1c0 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Custom na Orasan"</string> <string name="clock_description" msgid="3563839327378948">"Pumili ng custom na orasan"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Magbago ng custom na orasan"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Clock Settings"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Opsyon sa clock face <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Kulay, laki ng clock"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Kulay, laki ng clock"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Kulay"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Mga pagbabago sa laki ng orasan ayon sa content ng lock screen"</string> <string name="clock_size_large" msgid="3143248715744138979">"Malaki"</string> <string name="clock_size_small" msgid="2280449912094164133">"Maliit"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"May makikitang maliit na orasan sa sulok ng iyong screen"</string> <string name="grid_title" msgid="1688173478777254123">"Grid ng app"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Ilapat"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"I-tap para ma-edit"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Idagdag ang mga paborito mong font sa bawat screen"</string> <string name="grid_options_title" msgid="7071930966989877023">"Pumili ng laki ng grid"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Mare-reload ang workspace kapag binago ang grid size."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Nire-reload ang workspace na may %1$s grid"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Hindi na-reload ang workspace nang may %1$s grid"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Matagumpay na naitakda ang istilo"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Matagumpay na naitakda ang orasan"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Matagumpay na naitakda ang grid"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Custom na kulay"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Custom na hugis"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Custom na pangalan ng istilo"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Intensity ng kulay"</string> <string name="mode_title" msgid="2394873501427436055">"Madilim na tema"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Pansamantalang na-disable dahil sa Pantipid ng Baterya"</string> <string name="mode_changed" msgid="2243581369395418584">"Pinalitan ang tema"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Kaliwang shortcut"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Kanang shortcut"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Wala"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Para piliin ang `<xliff:g id="APPNAME">%1$s</xliff:g>,` tingnan ang sumusunod"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Hindi maidagdag ang shortcut"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Buksan ang <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Para idagdag ang <xliff:g id="APPNAME">%1$s</xliff:g> app bilang shortcut, tiyaking"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Tapos na"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Wala"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Ipakita ang mga notification sa lock screen"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Itago ang mga notification sa lock screen"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Higit pang opsyon sa lock screen"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Privacy, Nagpe-play Ngayon, at higit pa"</string> <string name="more_colors" msgid="3191071655353004591">"Higit Pang Kulay"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Pangunahing dynamic na tema"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Pangunahing neutral na tema"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Pangunahing matingkad na tema"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Pangunahing expressive na tema"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Default na opsyon sa kulay"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Opsyon sa kulay na <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Mag-swipe pakaliwa para pumili ng ibang clock face"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Mag-swipe pakanan para pumili ng ibang clock face"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Mga Custom na Orasan"</string> </resources> diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index d5607910..209cd68f 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Özel Saat"</string> <string name="clock_description" msgid="3563839327378948">"Özel saat seçin"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Özel saati değiştirin"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Saat Ayarları"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Kadran seçeneği <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Saat rengi ve boyutu"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Saat rengi ve boyutu"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Renk"</string> @@ -34,12 +35,13 @@ <string name="clock_color_indigo" msgid="8910855386698452917">"Çivit mavisi"</string> <string name="clock_color_violet" msgid="3454503847169375826">"Mor"</string> <string name="clock_color_gray" msgid="9221530636948859231">"Gri"</string> - <string name="clock_color_teal" msgid="7499223425741344251">"Turkuaz"</string> + <string name="clock_color_teal" msgid="7499223425741344251">"Deniz mavisi"</string> <string name="clock_size" msgid="5028923902364418263">"Boyut"</string> <string name="clock_size_dynamic" msgid="1023930312455061642">"Dinamik"</string> <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Saat boyutu, kilit ekranındaki içeriklere göre değişir"</string> <string name="clock_size_large" msgid="3143248715744138979">"Büyük"</string> <string name="clock_size_small" msgid="2280449912094164133">"Küçük"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Ekranınızın köşesinde küçük bir saat görünür"</string> <string name="grid_title" msgid="1688173478777254123">"Uygulama tablosu"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Uygula"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Düzenlemek için dokunun"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"En sevdiğiniz yazı tiplerini her ekrana ekleyin"</string> <string name="grid_options_title" msgid="7071930966989877023">"Izgara boyutu seçin"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Izgara boyutu değiştirilirse çalışma alanı yeniden yüklenir. Bu işlem birkaç saniye sürebilir."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Çalışma alanı, %1$s ızgarasıyla yeniden yükleniyor"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Çalışma alanı, %1$s ızgarasıyla yeniden yüklenemedi"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Stil başarıyla ayarlandı"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Saat başarıyla ayarlandı"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Izgara başarıyla ayarlandı"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Özel renk"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Özel şekil"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Özel stil adı"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Renk yoğunluğu"</string> <string name="mode_title" msgid="2394873501427436055">"Koyu tema"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Pil Tasarrufu nedeniyle geçici olarak devre dışı bırakıldı"</string> <string name="mode_changed" msgid="2243581369395418584">"Tema değişti"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Sol kısayol"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Sağ kısayol"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Yok"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"\"<xliff:g id="APPNAME">%1$s</xliff:g>\" uygulamasını seçmek için şunları kontrol edin"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Kısayol eklenemiyor"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> uygulamasını aç"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> uygulamasını kısayol olarak ekleyebilmeniz için gerekenler"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Bitti"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Yok"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Kilit ekranında bildirimleri göster"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Kilit ekranında bildirimleri gizle"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Diğer kilit ekranı seçenekleri"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Gizlilik, Ne Çalıyor? ve daha fazlası"</string> <string name="more_colors" msgid="3191071655353004591">"Diğer Renkler"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Birincil dinamik tema"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Birincil nötr tema"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Birincil canlı tema"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Birincil ifade teması"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Varsayılan renk seçeneği"</string> <string name="content_description_color_option" msgid="4169813692012119578">"<xliff:g id="ID_1">%1$d</xliff:g> renk seçeneği"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Farklı bir kadran seçmek için sola kaydırın"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Farklı bir kadran seçmek için sağa kaydırın"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Özel Saatler"</string> </resources> diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index b87d4f75..a1073125 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -17,12 +17,13 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="1647136562008520313">"Оформлення і стиль"</string> + <string name="app_name" msgid="1647136562008520313">"Оформлення й стиль"</string> <string name="theme_title" msgid="2144932106319405101">"Стиль"</string> <string name="clock_title" msgid="1974314575211361352">"Свій циферблат"</string> <string name="clock_description" msgid="3563839327378948">"Виберіть свій циферблат"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Змініть свій циферблат"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Налаштування"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Варіант циферблата: \"<xliff:g id="ID_1">%1$s</xliff:g>\""</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Колір і розмір год."</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Колір і розмір годинника"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Колір"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Розмір годинника змінюється відповідно до вмісту заблокованого екрана"</string> <string name="clock_size_large" msgid="3143248715744138979">"Великий"</string> <string name="clock_size_small" msgid="2280449912094164133">"Малий"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"У куті екрана відображається маленький годинник"</string> <string name="grid_title" msgid="1688173478777254123">"Сітка додатків"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Застосувати"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Торкніться, щоб змінити"</string> @@ -55,7 +57,7 @@ <string name="option_previewed_description" msgid="3467217598865047661">"<xliff:g id="ID_1">%1$s</xliff:g> (відображається зараз)"</string> <string name="option_change_applied_previewed_description" msgid="9197311327728570816">"<xliff:g id="ID_1">%1$s</xliff:g>, змінити елемент, який ви вибрали й переглядаєте"</string> <string name="theme_description" msgid="3697012391785254635">"Шрифт: <xliff:g id="ID_1">%1$s</xliff:g>; значки: <xliff:g id="ID_2">%2$s</xliff:g>; форма: <xliff:g id="ID_3">%3$s</xliff:g>; колір: <xliff:g id="ID_4">%4$s</xliff:g>"</string> - <string name="default_theme_title" msgid="2555741736622366797">"За умовчанням"</string> + <string name="default_theme_title" msgid="2555741736622366797">"Стандарт"</string> <string name="preview_name_font" msgid="4465423899630037038">"Шрифт"</string> <string name="preview_name_icon" msgid="6818927315316316440">"Значок"</string> <string name="preview_name_color" msgid="8776203144994416172">"Колір"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Додайте вибрані шрифти до кожного екрана"</string> <string name="grid_options_title" msgid="7071930966989877023">"Виберіть розмір сітки"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Якщо змінити розмір сітки, робоча область перезавантажиться. Це може зайняти кілька секунд."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Перезавантаження робочої області із сіткою %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Не вдалося перезавантажити робочу область із сіткою %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Тему налаштовано"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Годинник налаштовано"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Сітку налаштовано"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Спеціальний колір"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Спеціальна фігура"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Назва спеціального стилю"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Інтенсивність кольору"</string> <string name="mode_title" msgid="2394873501427436055">"Темна тема"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Тимчасово вимкнено, оскільки працює режим енергозбереження"</string> <string name="mode_changed" msgid="2243581369395418584">"Тему змінено"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Ярлик ліворуч"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Ярлик праворуч"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Немає"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Щоб вибрати додаток <xliff:g id="APPNAME">%1$s</xliff:g>, виконайте наведені нижче дії"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Не вдається додати ярлик"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Відкрити <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Щоб додати можливість швидкого ввімкнення додатка <xliff:g id="APPNAME">%1$s</xliff:g>, переконайтеся, що виконано вимоги нижче."</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Готово"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Немає"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Показувати сповіщення на заблокованому екрані"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Приховувати сповіщення на заблокованому екрані"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Інші параметри заблоков. екрана"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Конфіденційність, функція \"Зараз грає\" тощо"</string> <string name="more_colors" msgid="3191071655353004591">"Більше кольорів"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Динамічна основна тема"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Нейтральна основна тема"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Насичена основна тема"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Виразна основна тема"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Колір за умовчанням"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Колір \"<xliff:g id="ID_1">%1$d</xliff:g>\""</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Проведіть ліворуч, щоб вибрати інший циферблат"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Проведіть праворуч, щоб вибрати інший циферблат"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Власні циферблати"</string> </resources> diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml index c642bb95..a241ed0c 100644 --- a/res/values-ur/strings.xml +++ b/res/values-ur/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"حسب ضرورت گھڑی"</string> <string name="clock_description" msgid="3563839327378948">"حسب ضرورت گھڑی چنیں"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"حسب ضرورت گھڑی کو تبدیل کریں"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"گھڑی کی ترتیبات"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"گھڑی کے رخ کا اختیار <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"گھڑی کا رنگ و سائز"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"گھڑی کا رنگ اور سائز"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>، <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"رنگ"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"مقفل اسکرین کے مواد کے مطابق گھڑی کا سائز تبدیل ہوتا ہے"</string> <string name="clock_size_large" msgid="3143248715744138979">"بڑا"</string> <string name="clock_size_small" msgid="2280449912094164133">"چھوٹا"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"آپ کی اسکرین کے کونے میں ایک چھوٹی گھڑی دکھائی دیتی ہے"</string> <string name="grid_title" msgid="1688173478777254123">"ایپ گرڈ"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"لاگو کریں"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"ترمیم کرنے کے لیے تھپتھپائيں"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"ہر اسکرین میں اپنے پسندیدہ فونٹس شامل کریں"</string> <string name="grid_options_title" msgid="7071930966989877023">"گرڈ کا سائز منتخب کریں"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"GRid کا سائز تبدیل کرنے سے ورک اسپیس دوبارہ لوڈ ہو جائے گا اور اس میں چند سیکنڈ لگ سکتے ہیں۔"</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"%1$s GRid کے ساتھ ورک اسپیس کو دوبارہ لوڈ کرنا"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"%1$s GRid کے ساتھ ورک اسپیس کو دوبارہ لوڈ کرنے میں ناکام"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"طرز کامیابی کے ساتھ سیٹ ہو گیا"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"گھڑی کامیابی کے ساتھ سیٹ ہو گئی"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"گرڈ کامیابی کے ساتھ سیٹ ہو گیا"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"حسب ضرورت رنگ"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"حسب ضرورت شکل"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"حسب ضرورت طرز کا نام"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"رنگ کی شدت"</string> <string name="mode_title" msgid="2394873501427436055">"گہری تھیم"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"بیٹری سیور کی وجہ سے عارضی طور پر غیر فعال ہے"</string> <string name="mode_changed" msgid="2243581369395418584">"تھیم تبدیل کر دی گئی"</string> @@ -105,7 +111,7 @@ <string name="beta_title" msgid="8703819523760746458">"بی ٹا"</string> <string name="gird_picker_entry_content_description" msgid="9087651470212293439">"ایپ گرڈ تبدیل کریں"</string> <string name="wallpaper_color_tab" msgid="1447926591721403840">"وال پیپر کے رنگ"</string> - <string name="wallpaper_color_subheader" msgid="4044464573669965670">"آپ کے وال پیپر موجود آئیکنز، ٹیکسٹ اور مزید مماثل رنگ"</string> + <string name="wallpaper_color_subheader" msgid="4044464573669965670">"آئیکنز، ٹیکسٹ اور مزید آپ کے وال پیپر سے مماثل رنگ"</string> <string name="wallpaper_color_title" msgid="5687965239180986458">"وال پیپر کا رنگ"</string> <string name="preset_color_tab" msgid="3133391839341329314">"بنیادی رنگ"</string> <string name="preset_color_tab_2" msgid="1444107326712562538">"دیگر رنگ"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"دائیں جانب کا شارٹ کٹ"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"بائیں جانب کا شارٹ کٹ"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"کوئی نہیں"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"`<xliff:g id="APPNAME">%1$s</xliff:g>` کو منتخب کرنے کے لیے درج ذیل کو چیک کریں"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"شارٹ کٹ شامل نہیں کیا جا سکتا"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> کھولیں"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> ایپ کو شارٹ کٹ کے طور پر شامل کرنے کے لیے درج ذیل کو یقینی بنائیں"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"ہو گیا"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>، <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"کوئی نہیں"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"مقفل اسکرین پر اطلاعات دکھائیں"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"مقفل اسکرین پر اطلاعات چھپائیں"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"مقفل اسکرین کے مزید اختیارات"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"رازداری، Now Playing اور مزید"</string> <string name="more_colors" msgid="3191071655353004591">"مزید رنگ"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"بنیادی ڈائنیمک تھیم"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"بنیادی نیوٹرل تھیم"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"بنیادی وائبرنٹ تھیم"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"بنیادی معنی خیز تھیم"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"رنگ کا ڈیفالٹ اختیار"</string> <string name="content_description_color_option" msgid="4169813692012119578">"<xliff:g id="ID_1">%1$d</xliff:g> رنگ کا اختیار"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"گھڑی کا مختلف چہرہ منتخب کرنے کے لیے دائیں طرف سوائپ کریں"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"گھڑی کا مختلف چہرہ منتخب کرنے کے لیے بائیں طرف سوائپ کریں"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"حسب ضرورت گھڑی کے چہرے"</string> </resources> diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml index 4520ec3b..5bf7e44f 100644 --- a/res/values-uz/strings.xml +++ b/res/values-uz/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Maxsus soat"</string> <string name="clock_description" msgid="3563839327378948">"Maxsus soat tanlash"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Maxsus soatni almashtirish"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Soat sozlamalari"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Soat yuzi varianti: <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Soat rangi va hajmi"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Soat rangi va hajmi"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Rang"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Soat hajmi ekran qulfidagi kontent asosida oʻzgaradi"</string> <string name="clock_size_large" msgid="3143248715744138979">"Yirik"</string> <string name="clock_size_small" msgid="2280449912094164133">"Kichik"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Ekran chekkasida kichik soat chiqishi"</string> <string name="grid_title" msgid="1688173478777254123">"Ilovalar jadvali"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Tatbiq etish"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Tahrirlash uchun tegining"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Sevimli shriftlarni har bir ekranga kiriting"</string> <string name="grid_options_title" msgid="7071930966989877023">"Kataklar hajmini tanlang"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Kataklar hajmi tanlansa, ishchi maydon bir necha soniyada qayta yuklanadi."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Ishchi maydon %1$s hajmida qayta yuklanmoqda"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Ishchi maydon %1$s hajmida qayta yuklanmadi"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Dizayn sozlandi"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Soat sozlandi"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Kataklar sozlandi"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Maxsus rang"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Maxsus shakl"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Maxsus uslub nomi"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Rang zichligi"</string> <string name="mode_title" msgid="2394873501427436055">"Tungi mavzu"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Quvvat tejash maqsadida vaqtinchalik faolsizlantirilgan"</string> <string name="mode_changed" msgid="2243581369395418584">"Mavzu oʻzgartirildi"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Chap yorliq"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Oʻng yorliq"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Hech biri"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"“<xliff:g id="APPNAME">%1$s</xliff:g>” ilovasini tanlash uchun quyidagilarni bajaring:"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Yorliq kiritilmadi"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Ochish: <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> ilovasini yorliq sifatida qoʻshish uchun"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Tayyor"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Hech qanday"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Ekran qulfida bildirishnomalarni chiqarish"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Ekran qulfida bildirishnomalarni berkitish"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"Boshqa ekran qulfi sozlamalari"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"Maxfiylik, Bu qaysi musiqa va boshqalar"</string> <string name="more_colors" msgid="3191071655353004591">"Boshqa ranglar"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Asosiy dinamik mavzu"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Asosiy neytral mavzu"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Asosiy yorqin mavzu"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Asosiy ifodali mavzu"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Asosiy rang varianti"</string> <string name="content_description_color_option" msgid="4169813692012119578">"<xliff:g id="ID_1">%1$d</xliff:g> rangi varianti"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Boshqa soat yuzini tanlash uhcun chapga suring"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Boshqa soat yuzini tanlash uhcun oʻngga suring"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Maxsus soatlar"</string> </resources> diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 7ed6b593..36a82d7c 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Đồng hồ tuỳ chỉnh"</string> <string name="clock_description" msgid="3563839327378948">"Chọn đồng hồ tuỳ chỉnh"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Thay đổi đồng hồ tuỳ chỉnh"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Cài đặt đồng hồ"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Lựa chọn về mặt đồng hồ <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Màu và kích thước đồng hồ"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Màu và kích thước đồng hồ"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Màu"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Kích thước đồng hồ thay đổi theo nội dung trên màn hình khoá"</string> <string name="clock_size_large" msgid="3143248715744138979">"Lớn"</string> <string name="clock_size_small" msgid="2280449912094164133">"Nhỏ"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Một chiếc đồng hồ nhỏ hiển thị ở góc màn hình"</string> <string name="grid_title" msgid="1688173478777254123">"Lưới ứng dụng"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Áp dụng"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Nhấn để chỉnh sửa"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Thêm phông chữ bạn yêu thích vào mọi màn hình"</string> <string name="grid_options_title" msgid="7071930966989877023">"Chọn kích thước lưới"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Không gian làm việc sẽ tải lại nếu bạn thay đổi kích thước lưới (có thể mất vài giây)."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Đang tải lại không gian làm việc để áp dụng lưới %1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Không tải lại được không gian làm việc để áp dụng lưới %1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Đã đặt kiểu thành công"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Đã đặt đồng hồ thành công"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"Đã đặt lưới thành công"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Màu tùy chỉnh"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Hình dạng tùy chỉnh"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Tên kiểu tùy chỉnh"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Cường độ màu sắc"</string> <string name="mode_title" msgid="2394873501427436055">"Giao diện tối"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Tạm thời tắt do tính năng của Trình tiết kiệm pin"</string> <string name="mode_changed" msgid="2243581369395418584">"Đã thay đổi giao diện"</string> @@ -109,14 +115,14 @@ <string name="wallpaper_color_title" msgid="5687965239180986458">"Màu hình nền"</string> <string name="preset_color_tab" msgid="3133391839341329314">"Màu cơ bản"</string> <string name="preset_color_tab_2" msgid="1444107326712562538">"Màu khác"</string> - <string name="preset_color_subheader" msgid="8230588536141279371">"Chọn màu bất kỳ cho biểu tượng, đồng hồ của bạn, v.v."</string> + <string name="preset_color_subheader" msgid="8230588536141279371">"Chọn màu cho các biểu tượng, đồng hồ, v.v."</string> <string name="color_changed" msgid="7029571720331641235">"Đã thay đổi màu"</string> <string name="adaptive_color_title" msgid="1336508599235896205">"Động"</string> <string name="color_picker_title" msgid="6666830057938082864">"Màu hệ thống"</string> <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Lối tắt bên trái"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Lối tắt bên phải"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Không có"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Để chọn \"<xliff:g id="APPNAME">%1$s</xliff:g>\", hãy làm theo hướng dẫn sau đây"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Không thêm được lối tắt"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Mở <xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Để tạo lối tắt cho ứng dụng <xliff:g id="APPNAME">%1$s</xliff:g>, hãy đảm bảo"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Xong"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Không có"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Hiển thị thông báo trên màn hình khoá"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Ẩn thông báo trên màn hình khoá"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"Tuỳ chọn khác trên màn hình khoá"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"Quyền riêng tư, Phát hiện nhạc, v.v."</string> <string name="more_colors" msgid="3191071655353004591">"Màu khác"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Giao diện động chính"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Giao diện trung tính chính"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Giao diện rực rỡ chính"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Giao diện biểu đạt chính"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Tuỳ chọn màu mặc định"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Tuỳ chọn màu <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Vuốt sang trái để chọn mặt đồng hồ khác"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Vuốt sang phải để chọn mặt đồng hồ khác"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Đồng hồ tuỳ chỉnh"</string> </resources> diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index b194ca1d..1f1326d1 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -17,12 +17,13 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_name" msgid="1647136562008520313">"壁纸和样式"</string> + <string name="app_name" msgid="1647136562008520313">"壁纸与个性化"</string> <string name="theme_title" msgid="2144932106319405101">"样式"</string> <string name="clock_title" msgid="1974314575211361352">"自定义钟面"</string> <string name="clock_description" msgid="3563839327378948">"选择自定义钟面"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"更改自定义钟面"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"表盘设置"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"表盘选项 <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"时钟颜色和尺寸"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"时钟颜色和尺寸"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>、<xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"颜色"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"时钟大小会依据锁定屏幕上的内容而变化"</string> <string name="clock_size_large" msgid="3143248715744138979">"大"</string> <string name="clock_size_small" msgid="2280449912094164133">"小"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"一个小型时钟显示在界面一角"</string> <string name="grid_title" msgid="1688173478777254123">"应用网格"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"应用"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"点按即可修改"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"将您喜爱的字体应用于每个屏幕上的文字"</string> <string name="grid_options_title" msgid="7071930966989877023">"选择网格大小"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"更改网格大小将会重新加载工作区,这可能需要几秒钟的时间。"</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"正在重新加载网格大小为“%1$s”的工作区"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"未能重新加载网格大小为“%1$s”的工作区"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"已成功设置样式"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"已成功设置时钟"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"已成功设置网格"</string> @@ -98,10 +103,11 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"自定义颜色"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"自定义形状"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"自定义样式名称"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"色彩强度"</string> <string name="mode_title" msgid="2394873501427436055">"深色主题"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"因省电模式已开启,该功能被暂时停用了"</string> <string name="mode_changed" msgid="2243581369395418584">"主题已更改"</string> - <string name="themed_icon_title" msgid="7312460430471956558">"带主题的图标"</string> + <string name="themed_icon_title" msgid="7312460430471956558">"主题图标"</string> <string name="beta_title" msgid="8703819523760746458">"Beta 版"</string> <string name="gird_picker_entry_content_description" msgid="9087651470212293439">"更改应用网格"</string> <string name="wallpaper_color_tab" msgid="1447926591721403840">"壁纸颜色"</string> @@ -113,10 +119,10 @@ <string name="color_changed" msgid="7029571720331641235">"颜色已更改"</string> <string name="adaptive_color_title" msgid="1336508599235896205">"动态"</string> <string name="color_picker_title" msgid="6666830057938082864">"系统颜色"</string> - <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"向左快捷方式"</string> - <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"向右快捷方式"</string> + <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"左侧快捷方式"</string> + <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"右侧快捷方式"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"无"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"若要选择“<xliff:g id="APPNAME">%1$s</xliff:g>”,请确认满足已以下条件:"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"无法添加快捷方式"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"打开<xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"若要将<xliff:g id="APPNAME">%1$s</xliff:g>应用添加为快捷方式,请确保:"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"完成"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>、<xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"无"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"在锁定的屏幕上显示通知"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"在锁定的屏幕上不显示通知"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"更多锁屏选项"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"隐私设置、闻曲知音等"</string> <string name="more_colors" msgid="3191071655353004591">"更多颜色"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"主要动态主题"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"主要中性主题"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"主要鲜艳主题"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"主要炫彩主题"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"默认颜色选项"</string> <string name="content_description_color_option" msgid="4169813692012119578">"颜色选项 <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"向左滑动,选择另一个表盘"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"向右滑动,选择另一个表盘"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"自定义表盘"</string> </resources> diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index 3c0c8c68..bfe881ef 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"自訂時鐘"</string> <string name="clock_description" msgid="3563839327378948">"揀選自訂時鐘"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"變更自訂時鐘"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"時鐘設定"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"錶面選項 <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"時鐘顏色及大小"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"時鐘顏色及大小"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>,<xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"顏色"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"時鐘按上鎖畫面內容變更大小"</string> <string name="clock_size_large" msgid="3143248715744138979">"大"</string> <string name="clock_size_small" msgid="2280449912094164133">"小"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"在螢幕角落顯示小時鐘"</string> <string name="grid_title" msgid="1688173478777254123">"應用程式網格"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"套用"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"輕按即可編輯"</string> @@ -62,9 +64,12 @@ <string name="preview_name_shape" msgid="5676971146080968721">"形狀"</string> <string name="preview_name_wallpaper" msgid="1738652462949531828">"桌布"</string> <string name="font_card_title" msgid="2343292653502548685">"ABC • abc • 123"</string> - <string name="font_card_body" msgid="6790525594503904468">"讓每個畫面顯示您喜愛的字型"</string> + <string name="font_card_body" msgid="6790525594503904468">"讓每個畫面顯示你喜愛的字型"</string> <string name="grid_options_title" msgid="7071930966989877023">"請選擇網格大小"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> x <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"如果變更網格大小,系統會重新載入工作區,過程可能需時數秒。"</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"正在重新載入網格大小為「%1$s」的工作區"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"無法重新載入網格大小為「%1$s」的工作區"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"成功設定樣式"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"成功設定時鐘"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"成功設定網格"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"自訂顏色"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"自訂形狀"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"自訂樣式嘅名"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"顏色強度"</string> <string name="mode_title" msgid="2394873501427436055">"深色主題背景"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"因「慳電模式」而暫時停用"</string> <string name="mode_changed" msgid="2243581369395418584">"已經變咗主題"</string> @@ -109,14 +115,14 @@ <string name="wallpaper_color_title" msgid="5687965239180986458">"桌布顏色"</string> <string name="preset_color_tab" msgid="3133391839341329314">"基本顏色"</string> <string name="preset_color_tab_2" msgid="1444107326712562538">"其他顏色"</string> - <string name="preset_color_subheader" msgid="8230588536141279371">"為圖示、時鐘等選擇任何顏色"</string> + <string name="preset_color_subheader" msgid="8230588536141279371">"為圖示、時鐘等選擇顏色"</string> <string name="color_changed" msgid="7029571720331641235">"已經變咗顏色"</string> <string name="adaptive_color_title" msgid="1336508599235896205">"動態"</string> <string name="color_picker_title" msgid="6666830057938082864">"系統顏色"</string> <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"向左捷徑"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"向右捷徑"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"無"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"請勾選以下選項以選取「<xliff:g id="APPNAME">%1$s</xliff:g>」"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"無法新增捷徑"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"開啟「<xliff:g id="APPNAME">%1$s</xliff:g>」"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"如要新增「<xliff:g id="APPNAME">%1$s</xliff:g>」應用程式為快速鍵,請確保:"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"完成"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>,<xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"無"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"在上鎖畫面顯示通知"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"在上鎖畫面隱藏通知"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"更多上鎖畫面選項"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"私隱、歌曲識別和其他設定"</string> <string name="more_colors" msgid="3191071655353004591">"更多顏色"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"動態主要主題"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"中性主要主題"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"鮮艷主要主題"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"熱情主要主題"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"預設顏色選項"</string> <string name="content_description_color_option" msgid="4169813692012119578">"顏色選項:<xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"向左滑動即可選擇其他錶面"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"向右滑動即可選擇其他錶面"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"自訂時鐘"</string> </resources> diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 72a137bc..417856b2 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"自訂時鐘"</string> <string name="clock_description" msgid="3563839327378948">"選擇自訂時鐘"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"變更自訂時鐘"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"時鐘設定"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"錶面選項 <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"時鐘顏色與大小"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"時鐘顏色與大小"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_2">%2$s</xliff:g>,<xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"顏色"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"時鐘大小會依螢幕鎖定畫面上的內容調整"</string> <string name="clock_size_large" msgid="3143248715744138979">"大"</string> <string name="clock_size_small" msgid="2280449912094164133">"小"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"在畫面角落顯示小型時鐘"</string> <string name="grid_title" msgid="1688173478777254123">"應用程式格線"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"套用"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"輕觸這裡即可編輯"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"將你喜愛的字型套用到每個畫面"</string> <string name="grid_options_title" msgid="7071930966989877023">"選擇網格大小"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> x <xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"如果變更網格大小,系統會重新載入工作區,且需要幾秒鐘的時間才能完成。"</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"正在重新載入網格大小為「%1$s」的工作區"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"無法重新載入網格大小為「%1$s」的工作區"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"已成功設定樣式"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"已成功設定時鐘"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"已成功設定網格"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"自訂顏色"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"自訂形狀"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"自訂樣式名稱"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"色彩飽和度"</string> <string name="mode_title" msgid="2394873501427436055">"深色主題"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"因省電模式而暫時停用"</string> <string name="mode_changed" msgid="2243581369395418584">"主題已變更"</string> @@ -113,10 +119,10 @@ <string name="color_changed" msgid="7029571720331641235">"顏色已變更"</string> <string name="adaptive_color_title" msgid="1336508599235896205">"動態"</string> <string name="color_picker_title" msgid="6666830057938082864">"系統配色"</string> - <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"向左快速鍵"</string> - <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"向右快速鍵"</string> + <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"左側捷徑"</string> + <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"右側捷徑"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"無"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"必須完成以下事項才能選取「<xliff:g id="APPNAME">%1$s</xliff:g>」"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"無法新增捷徑"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"開啟「<xliff:g id="APPNAME">%1$s</xliff:g>」"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"如要將「<xliff:g id="APPNAME">%1$s</xliff:g>」應用程式新增為捷徑,必須滿足以下條件"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"完成"</string> @@ -125,12 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>、<xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"無"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"在螢幕鎖定畫面上顯示通知"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"在螢幕鎖定畫面上隱藏通知"</string> - <!-- no translation found for more_settings_section_title (1331425454775815958) --> - <skip /> - <!-- no translation found for more_settings_section_description (1860115709122398325) --> - <skip /> + <string name="more_settings_section_title" msgid="1331425454775815958">"更多螢幕鎖定選項"</string> + <string name="more_settings_section_description" msgid="1860115709122398325">"隱私權、聽聲辨曲和其他設定"</string> <string name="more_colors" msgid="3191071655353004591">"更多顏色"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"主要動態主題"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"主要自然主題"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"主要鮮豔主題"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"主要表現主題"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"預設顏色選項"</string> <string name="content_description_color_option" msgid="4169813692012119578">"顏色選項 <xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"向左滑動可選擇其他錶面"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"向右滑動可選擇其他錶面"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"自訂錶面"</string> </resources> diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index def5d0a1..0896e57e 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -22,7 +22,8 @@ <string name="clock_title" msgid="1974314575211361352">"Iwashi Elingokomuntu Ngamunye"</string> <string name="clock_description" msgid="3563839327378948">"Khetha iwashi elingokomuntu ngamunye"</string> <string name="clock_picker_entry_content_description" msgid="8377139273468595734">"Shintsha iwashi elingokomuntu ngamunye"</string> - <string name="clock_settings_title" msgid="2940654205471453913">"Amasethingi Ewashi"</string> + <string name="select_clock_action_description" msgid="5025888763471843648">"Okukhethwa kukho kobuso bewashi <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="clock_settings_title" msgid="2050906379377120431">"Umbala wewashi nosayizi"</string> <string name="clock_color_and_size_title" msgid="7146791234905111351">"Umbala wewashi nosayizi"</string> <string name="clock_color_and_size_description" msgid="6578061553012886817">"<xliff:g id="ID_1">%1$s</xliff:g>, <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="clock_color" msgid="8081608867289156163">"Umbala"</string> @@ -40,6 +41,7 @@ <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Usayizi wewashi uyashintsha ngokuya ngokuqukethwe kokukhiya isikrini"</string> <string name="clock_size_large" msgid="3143248715744138979">"Obukhulu"</string> <string name="clock_size_small" msgid="2280449912094164133">"Esincane"</string> + <string name="clock_size_small_description" msgid="4089511196955732480">"Iwashi elincane livela ekhoneni lesikrini sakho"</string> <string name="grid_title" msgid="1688173478777254123">"Igridi ye-app"</string> <string name="apply_theme_btn" msgid="6293081192321303991">"Faka"</string> <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Thepha ukuze uhlele"</string> @@ -65,6 +67,9 @@ <string name="font_card_body" msgid="6790525594503904468">"Engeza amafonti akho owathandayo kuso sonke isikrini"</string> <string name="grid_options_title" msgid="7071930966989877023">"Khetha usayizi we-grid"</string> <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string> + <string name="apply_grid_btn_note" msgid="2966021967355139181">"Ukushintsha usayizi wegridi kuzolayisha kabusha indawo yokusebenza futhi kungase kuthathe imizuzwana embalwa."</string> + <string name="toast_of_changing_grid" msgid="3515633981312731121">"Ilayisha kabusha indawo yokusebenza ngegridi engu-%1$s"</string> + <string name="toast_of_failure_to_change_grid" msgid="1349622908271736044">"Yehlulekile ukulayisha kabusha indawo yokusebenza ngegridi engu-%1$s"</string> <string name="applied_theme_msg" msgid="3749018706366796244">"Isitayela sisethwe ngokuphumelelayo"</string> <string name="applied_clock_msg" msgid="1303338016701443767">"Iwashi lisethwe ngokuphumelelayo"</string> <string name="applied_grid_msg" msgid="3250499654436933034">"I-Grid isethwe ngempumelelo"</string> @@ -98,6 +103,7 @@ <string name="accessibility_custom_color_title" msgid="4124246598886320663">"Umbala ongokwezifiso"</string> <string name="accessibility_custom_shape_title" msgid="7708408259374643129">"Umumo ongokwezifiso"</string> <string name="accessibility_custom_name_title" msgid="5494460518085463262">"Igama lesitayela esingokwezifiso"</string> + <string name="accessibility_clock_slider_description" msgid="8374135133110681332">"Ukuqina kombala"</string> <string name="mode_title" msgid="2394873501427436055">"Itimu emnyama"</string> <string name="mode_disabled_msg" msgid="9196245518435936512">"Kukhutshaziwe okwesikhashana ngenxa Yesilondolozi Sebhethri"</string> <string name="mode_changed" msgid="2243581369395418584">"Itimu ishintshiwe"</string> @@ -116,7 +122,7 @@ <string name="keyguard_slot_name_bottom_start" msgid="8747677880200629719">"Isinqamuleli sangakwesokunxele"</string> <string name="keyguard_slot_name_bottom_end" msgid="2525487375680217083">"Isinqamuleli sangakwesokudla"</string> <string name="keyguard_affordance_none" msgid="1751643933430782312">"Lutho"</string> - <string name="keyguard_affordance_enablement_dialog_title" msgid="3389730825561696493">"Ukukhetha i-`<xliff:g id="APPNAME">%1$s</xliff:g>` maka okulandelayo"</string> + <string name="keyguard_affordance_enablement_dialog_headline" msgid="365379085932610314">"Ayikwazi ukwengeza isinqamuleli"</string> <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Vula i-<xliff:g id="APPNAME">%1$s</xliff:g>"</string> <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Ukwengeza i-app ye-<xliff:g id="APPNAME">%1$s</xliff:g> njengesinqamuleli, qinisekisa"</string> <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Kwenziwe"</string> @@ -125,10 +131,16 @@ <string name="keyguard_quick_affordance_two_selected_template" msgid="1757099194522296363">"<xliff:g id="FIRST">%1$s</xliff:g>, <xliff:g id="SECOND">%2$s</xliff:g>"</string> <string name="keyguard_quick_affordance_none_selected" msgid="8494127020144112003">"Lutho"</string> <string name="show_notifications_on_lock_screen" msgid="4157744243084646720">"Bonisa izaziso esikrinini sokukhiya"</string> - <string name="hide_notifications_on_lock_screen" msgid="7413548956484779174">"Fihla izaziso esikrinini sokukhiya"</string> <string name="more_settings_section_title" msgid="1331425454775815958">"Okukhethwa kukho kokukhiya isikrini okuningi"</string> <string name="more_settings_section_description" msgid="1860115709122398325">"Ubumfihlo, Okudlala Manje, nokuningi"</string> <string name="more_colors" msgid="3191071655353004591">"Imibala Eyengeziwe"</string> + <string name="content_description_dynamic_color_option" msgid="2191721655642529886">"Itimu eshintshayo eyinhloko"</string> + <string name="content_description_neutral_color_option" msgid="3385443834001275301">"Itimu emaphakathi eyinhloko"</string> + <string name="content_description_vibrant_color_option" msgid="2230249305878632821">"Itimu edlidlizayo eyinhloko"</string> + <string name="content_description_expressive_color_option" msgid="6081295313456341282">"Itimu ebizayo eyinhloko"</string> <string name="content_description_default_color_option" msgid="7011899327541080695">"Okukhethwa kukho kombala okuzenzakalelayo"</string> <string name="content_description_color_option" msgid="4169813692012119578">"Okukhethwa kukho kombala kwe-<xliff:g id="ID_1">%1$d</xliff:g>"</string> + <string name="scroll_forward_and_select" msgid="6156132388656395769">"Swayiphela kwesokunxele ukuze ukhethe ubuso bewashi obuhlukile"</string> + <string name="scroll_backward_and_select" msgid="5472202348434803757">"Swayiphela kwesokudla ukuze ukhethe ubuso bewashi obuhlukile"</string> + <string name="custom_clocks_label" msgid="8168419717593569347">"Amawashi Angokwezifiso"</string> </resources> diff --git a/res/values/strings.xml b/res/values/strings.xml index 9b55965a..d1f60351 100755 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -303,6 +303,9 @@ <!-- Accessibility for custom style name page [CHAR_LIMIT=50] --> <string name="accessibility_custom_name_title">Custom style name</string> + <!-- Accessibility for clock color slider [CHAR_LIMIT=50] --> + <string name="accessibility_clock_slider_description">Color intensity</string> + <!--Name of metadata in the main launcher Activity which values contains the authority corresponding to a ContentProvider in launcher to query or change themed icon option --> <string name="themed_icon_metadata_key" translatable="false">com.android.launcher3.themedicon.option</string> @@ -436,15 +439,6 @@ <string name="show_notifications_on_lock_screen">Show notifications on the lock screen</string> <!-- - Summary for a setting that lets the user toggle between showing or hiding notifications on their - device's lock screen. This one is shown when the user is not allowing notifications to show on - their device's lock screen. - - [CHAR LIMIT=64]. - --> - <string name="hide_notifications_on_lock_screen">Hide notifications on the lock screen</string> - - <!-- Title for a section in a list of sections in the settings app that allows the user to access additional settings related to lock screen behaviour. diff --git a/res/values/styles.xml b/res/values/styles.xml index b2cd71d4..c2710f64 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -75,7 +75,9 @@ </style> <!-- Common components and widgets --> - <style name="TitleTextAppearance" parent="@android:style/TextAppearance.DeviceDefault.Widget.ActionBar.Title"/> + <style name="TitleTextAppearance" parent="@android:style/TextAppearance.DeviceDefault.Widget.ActionBar.Title"> + <item name="android:textSize">14sp</item> + </style> <style name="ActionPrimaryButton" parent="android:Widget.DeviceDefault.Button.Colored"/> diff --git a/src/com/android/customization/model/color/ColorBundle.java b/src/com/android/customization/model/color/ColorBundle.java deleted file mode 100644 index d34f3fc0..00000000 --- a/src/com/android/customization/model/color/ColorBundle.java +++ /dev/null @@ -1,306 +0,0 @@ -/* - * Copyright (C) 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.model.color; - -import android.content.Context; -import android.content.res.Configuration; -import android.content.res.Resources; -import android.graphics.Color; -import android.graphics.PorterDuff; -import android.view.View; -import android.widget.ImageView; - -import androidx.annotation.ColorInt; -import androidx.annotation.Dimension; -import androidx.annotation.NonNull; -import androidx.annotation.VisibleForTesting; - -import com.android.customization.model.ResourceConstants; -import com.android.systemui.monet.Style; -import com.android.wallpaper.R; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -/** - * Represents a preset color available for the user to chose as their theming option. - */ -public class ColorBundle extends ColorOption { - - private final PreviewInfo mPreviewInfo; - - @VisibleForTesting ColorBundle(String title, - Map<String, String> overlayPackages, boolean isDefault, Style style, int index, - PreviewInfo previewInfo) { - super(title, overlayPackages, isDefault, style, index); - mPreviewInfo = previewInfo; - } - - @Override - public void bindThumbnailTile(View view) { - Resources res = view.getContext().getResources(); - int primaryColor = mPreviewInfo.resolvePrimaryColor(res); - int secondaryColor = mPreviewInfo.resolveSecondaryColor(res); - - for (int i = 0; i < mPreviewColorIds.length; i++) { - ImageView colorPreviewImageView = view.findViewById(mPreviewColorIds[i]); - int color = i % 2 == 0 ? primaryColor : secondaryColor; - colorPreviewImageView.getDrawable().setColorFilter(color, PorterDuff.Mode.SRC); - } - view.setContentDescription(getContentDescription(view.getContext())); - } - - @Override - public PreviewInfo getPreviewInfo() { - return mPreviewInfo; - } - - @Override - public int getLayoutResId() { - return R.layout.color_option; - } - - @Override - public String getSource() { - return ColorOptionsProvider.COLOR_SOURCE_PRESET; - } - - /** - * The preview information of {@link ColorBundle} - */ - public static class PreviewInfo implements ColorOption.PreviewInfo { - @ColorInt - public final int secondaryColorLight; - @ColorInt public final int secondaryColorDark; - // Monet system palette and accent colors - @ColorInt public final int primaryColorLight; - @ColorInt public final int primaryColorDark; - @Dimension - public final int bottomSheetCornerRadius; - - @ColorInt private int mOverrideSecondaryColorLight = Color.TRANSPARENT; - @ColorInt private int mOverrideSecondaryColorDark = Color.TRANSPARENT; - @ColorInt private int mOverridePrimaryColorLight = Color.TRANSPARENT; - @ColorInt private int mOverridePrimaryColorDark = Color.TRANSPARENT; - - private PreviewInfo( - int secondaryColorLight, int secondaryColorDark, int colorSystemPaletteLight, - int primaryColorDark, @Dimension int cornerRadius) { - this.secondaryColorLight = secondaryColorLight; - this.secondaryColorDark = secondaryColorDark; - this.primaryColorLight = colorSystemPaletteLight; - this.primaryColorDark = primaryColorDark; - this.bottomSheetCornerRadius = cornerRadius; - } - - /** - * Returns the accent color to be applied corresponding with the current configuration's - * UI mode. - * @return one of {@link #secondaryColorDark} or {@link #secondaryColorLight} - */ - @ColorInt - public int resolveSecondaryColor(Resources res) { - boolean night = (res.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) - == Configuration.UI_MODE_NIGHT_YES; - if (mOverrideSecondaryColorDark != Color.TRANSPARENT - || mOverrideSecondaryColorLight != Color.TRANSPARENT) { - return night ? mOverrideSecondaryColorDark : mOverrideSecondaryColorLight; - } - return night ? secondaryColorDark : secondaryColorLight; - } - - /** - * Returns the palette (main) color to be applied corresponding with the current - * configuration's UI mode. - * @return one of {@link #secondaryColorDark} or {@link #secondaryColorLight} - */ - @ColorInt - public int resolvePrimaryColor(Resources res) { - boolean night = (res.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) - == Configuration.UI_MODE_NIGHT_YES; - if (mOverridePrimaryColorDark != Color.TRANSPARENT - || mOverridePrimaryColorLight != Color.TRANSPARENT) { - return night ? mOverridePrimaryColorDark : mOverridePrimaryColorLight; - } - return night ? primaryColorDark - : primaryColorLight; - } - - /** - * Sets accent colors to override the ones in this bundle - */ - public void setOverrideAccentColors(int overrideColorAccentLight, - int overrideColorAccentDark) { - mOverrideSecondaryColorLight = overrideColorAccentLight; - mOverrideSecondaryColorDark = overrideColorAccentDark; - } - - /** - * Sets palette colors to override the ones in this bundle - */ - public void setOverridePaletteColors(int overrideColorPaletteLight, - int overrideColorPaletteDark) { - mOverridePrimaryColorLight = overrideColorPaletteLight; - mOverridePrimaryColorDark = overrideColorPaletteDark; - } - } - - /** - * The builder of ColorBundle - */ - public static class Builder { - protected String mTitle; - @ColorInt private int mSecondaryColorLight = Color.TRANSPARENT; - @ColorInt private int mSecondaryColorDark = Color.TRANSPARENT; - // System and Monet colors - @ColorInt private int mPrimaryColorLight = Color.TRANSPARENT; - @ColorInt private int mPrimaryColorDark = Color.TRANSPARENT; - private boolean mIsDefault; - private Style mStyle = Style.TONAL_SPOT; - private int mIndex; - protected Map<String, String> mPackages = new HashMap<>(); - - /** - * Builds the ColorBundle - * @param context {@link Context} - * @return new {@link ColorBundle} object - */ - public ColorBundle build(Context context) { - if (mTitle == null) { - mTitle = context.getString(R.string.adaptive_color_title); - } - return new ColorBundle(mTitle, mPackages, mIsDefault, mStyle, mIndex, - createPreviewInfo(context)); - } - - /** - * Creates preview information - * @param context the {@link Context} - * @return the {@link PreviewInfo} object - */ - public PreviewInfo createPreviewInfo(@NonNull Context context) { - Resources system = context.getResources().getSystem(); - return new PreviewInfo(mSecondaryColorLight, - mSecondaryColorDark, mPrimaryColorLight, mPrimaryColorDark, - system.getDimensionPixelOffset( - system.getIdentifier(ResourceConstants.CONFIG_CORNERRADIUS, "dimen", - ResourceConstants.ANDROID_PACKAGE))); - } - - public Map<String, String> getPackages() { - return Collections.unmodifiableMap(mPackages); - } - - /** - * Gets title of this {@link ColorBundle} object - * @return title string - */ - public String getTitle() { - return mTitle; - } - - /** - * Sets title of bundle - * @param title specified title - * @return this of {@link Builder} - */ - public Builder setTitle(String title) { - mTitle = title; - return this; - } - - /** - * Sets color accent (light) - * @param colorSecondaryLight color accent light in {@link ColorInt} - * @return this of {@link Builder} - */ - public Builder setColorSecondaryLight(@ColorInt int colorSecondaryLight) { - mSecondaryColorLight = colorSecondaryLight; - return this; - } - - /** - * Sets color accent (dark) - * @param colorSecondaryDark color accent dark in {@link ColorInt} - * @return this of {@link Builder} - */ - public Builder setColorSecondaryDark(@ColorInt int colorSecondaryDark) { - mSecondaryColorDark = colorSecondaryDark; - return this; - } - - /** - * Sets color system palette (light) - * @param colorPrimaryLight color system palette in {@link ColorInt} - * @return this of {@link Builder} - */ - public Builder setColorPrimaryLight(@ColorInt int colorPrimaryLight) { - mPrimaryColorLight = colorPrimaryLight; - return this; - } - - /** - * Sets color system palette (dark) - * @param colorPrimaryDark color system palette in {@link ColorInt} - * @return this of {@link Builder} - */ - public Builder setColorPrimaryDark(@ColorInt int colorPrimaryDark) { - mPrimaryColorDark = colorPrimaryDark; - return this; - } - - /** - * Sets overlay package for bundle - * @param category the category of bundle - * @param packageName tha name of package in the category - * @return this of {@link Builder} - */ - public Builder addOverlayPackage(String category, String packageName) { - mPackages.put(category, packageName); - return this; - } - - /** - * Sets the style of this color seed - * @param style color style of {@link Style} - * @return this of {@link Builder} - */ - public Builder setStyle(Style style) { - mStyle = style; - return this; - } - - /** - * Sets color option index of bundle - * @param index color option index - * @return this of {@link Builder} - */ - public Builder setIndex(int index) { - mIndex = index; - return this; - } - - /** - * Sets as default bundle - * @return this of {@link Builder} - */ - public Builder asDefault() { - mIsDefault = true; - return this; - } - } -} diff --git a/src/com/android/customization/model/color/ColorBundlePreviewExtractor.java b/src/com/android/customization/model/color/ColorBundlePreviewExtractor.java deleted file mode 100644 index 55b637f6..00000000 --- a/src/com/android/customization/model/color/ColorBundlePreviewExtractor.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * Copyright (C) 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.model.color; - -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_COLOR; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_SYSTEM_PALETTE; -import static com.android.customization.model.color.ColorUtils.toColorString; - -import android.content.Context; -import android.content.pm.PackageManager; -import android.text.TextUtils; -import android.util.Log; - -import androidx.annotation.ColorInt; - -import com.android.systemui.monet.ColorScheme; -import com.android.systemui.monet.Style; - -/** - * Utility class to read all the details of a color bundle for previewing it - * (eg, actual color values) - */ -class ColorBundlePreviewExtractor { - - private static final String TAG = "ColorBundlePreviewExtractor"; - - private final PackageManager mPackageManager; - - ColorBundlePreviewExtractor(Context context) { - mPackageManager = context.getPackageManager(); - } - - void addSecondaryColor(ColorBundle.Builder builder, @ColorInt int color) { - ColorScheme darkColorScheme = new ColorScheme(color, true); - ColorScheme lightColorScheme = new ColorScheme(color, false); - int lightSecondary = lightColorScheme.getAccentColor(); - int darkSecondary = darkColorScheme.getAccentColor(); - builder.addOverlayPackage(OVERLAY_CATEGORY_COLOR, toColorString(color)) - .setColorSecondaryLight(lightSecondary) - .setColorSecondaryDark(darkSecondary); - } - - void addPrimaryColor(ColorBundle.Builder builder, @ColorInt int color) { - ColorScheme darkColorScheme = new ColorScheme(color, true); - ColorScheme lightColorScheme = new ColorScheme(color, false); - int lightPrimary = lightColorScheme.getAccentColor(); - int darkPrimary = darkColorScheme.getAccentColor(); - builder.addOverlayPackage(OVERLAY_CATEGORY_SYSTEM_PALETTE, toColorString(color)) - .setColorPrimaryLight(lightPrimary) - .setColorPrimaryDark(darkPrimary); - } - - void addColorStyle(ColorBundle.Builder builder, String styleName) { - Style s = Style.TONAL_SPOT; - if (!TextUtils.isEmpty(styleName)) { - try { - s = Style.valueOf(styleName); - } catch (IllegalArgumentException e) { - Log.i(TAG, "Unknown style : " + styleName + ". Will default to TONAL_SPOT."); - } - } - builder.setStyle(s); - } -} diff --git a/src/com/android/customization/model/color/ColorCustomizationManager.java b/src/com/android/customization/model/color/ColorCustomizationManager.java index 790c86f2..a09efd26 100644 --- a/src/com/android/customization/model/color/ColorCustomizationManager.java +++ b/src/com/android/customization/model/color/ColorCustomizationManager.java @@ -15,6 +15,11 @@ */ package com.android.customization.model.color; +import static android.stats.style.StyleEnums.COLOR_SOURCE_HOME_SCREEN_WALLPAPER; +import static android.stats.style.StyleEnums.COLOR_SOURCE_LOCK_SCREEN_WALLPAPER; +import static android.stats.style.StyleEnums.COLOR_SOURCE_PRESET_COLOR; +import static android.stats.style.StyleEnums.COLOR_SOURCE_UNSPECIFIED; + import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_COLOR; import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_SYSTEM_PALETTE; import static com.android.customization.model.color.ColorOptionsProvider.COLOR_SOURCE_PRESET; @@ -27,6 +32,7 @@ import android.app.WallpaperColors; import android.content.ContentResolver; import android.content.Context; import android.database.ContentObserver; +import android.graphics.Color; import android.net.Uri; import android.os.Handler; import android.os.Looper; @@ -41,6 +47,7 @@ import com.android.customization.model.CustomizationManager; import com.android.customization.model.ResourceConstants; import com.android.customization.model.color.ColorOptionsProvider.ColorSource; import com.android.customization.model.theme.OverlayManagerCompat; +import com.android.customization.module.logging.ThemesUserEventLogger; import com.android.wallpaper.R; import org.json.JSONArray; @@ -182,22 +189,7 @@ public class ColorCustomizationManager implements CustomizationManager<ColorOpti lockWallpaperColors = null; } mProvider.fetch(callback, reload, mHomeWallpaperColors, - lockWallpaperColors, /* shouldUseRevampedUi= */ false); - } - - /** - * Fetch options function for the customization hub revamped UI - * - * TODO (b/276417460): refactor to reduce code repetition with the other fetch options function - */ - public void fetchRevampedUIOptions(OptionsFetchedListener<ColorOption> callback, - boolean reload) { - WallpaperColors lockWallpaperColors = mLockWallpaperColors; - if (lockWallpaperColors != null && mLockWallpaperColors.equals(mHomeWallpaperColors)) { - lockWallpaperColors = null; - } - mProvider.fetch(callback, reload, mHomeWallpaperColors, - lockWallpaperColors, /* shouldUseRevampedUi= */ true); + lockWallpaperColors); } /** @@ -220,6 +212,38 @@ public class ColorCustomizationManager implements CustomizationManager<ColorOpti return mCurrentOverlays; } + /** */ + public int getCurrentColorSourceForLogging() { + String colorSource = getCurrentColorSource(); + if (colorSource == null) { + return COLOR_SOURCE_UNSPECIFIED; + } + return switch (colorSource) { + case ColorOptionsProvider.COLOR_SOURCE_PRESET -> COLOR_SOURCE_PRESET_COLOR; + case ColorOptionsProvider.COLOR_SOURCE_HOME -> COLOR_SOURCE_HOME_SCREEN_WALLPAPER; + case ColorOptionsProvider.COLOR_SOURCE_LOCK -> COLOR_SOURCE_LOCK_SCREEN_WALLPAPER; + default -> COLOR_SOURCE_UNSPECIFIED; + }; + } + + /** */ + public int getCurrentStyleForLogging() { + String style = getCurrentStyle(); + return style != null ? style.hashCode() : 0; + } + + /** */ + public int getCurrentSeedColorForLogging() { + String seedColor = getCurrentOverlays().get(OVERLAY_CATEGORY_SYSTEM_PALETTE); + if (seedColor == null || seedColor.isEmpty()) { + return ThemesUserEventLogger.NULL_SEED_COLOR; + } + if (!seedColor.startsWith("#")) { + seedColor = "#" + seedColor; + } + return Color.parseColor(seedColor); + } + /** * @return The source of the currently applied color. One of * {@link ColorOptionsProvider#COLOR_SOURCE_HOME},{@link ColorOptionsProvider#COLOR_SOURCE_LOCK} diff --git a/src/com/android/customization/model/color/ColorOption.java b/src/com/android/customization/model/color/ColorOption.java index 216bb9ba..f57aa860 100644 --- a/src/com/android/customization/model/color/ColorOption.java +++ b/src/com/android/customization/model/color/ColorOption.java @@ -19,6 +19,7 @@ import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_SYSTEM_PALETTE; import android.content.Context; +import android.graphics.Color; import android.text.TextUtils; import android.util.Log; @@ -27,6 +28,7 @@ import androidx.annotation.VisibleForTesting; import com.android.customization.model.CustomizationManager; import com.android.customization.model.CustomizationOption; import com.android.customization.model.color.ColorOptionsProvider.ColorSource; +import com.android.customization.module.logging.ThemesUserEventLogger; import com.android.systemui.monet.Style; import com.android.wallpaper.R; @@ -52,8 +54,6 @@ public abstract class ColorOption implements CustomizationOption<ColorOption> { static final String TIMESTAMP_FIELD = "_applied_timestamp"; protected final Map<String, String> mPackagesByCategory; - protected final int[] mPreviewColorIds = {R.id.color_preview_0, R.id.color_preview_1, - R.id.color_preview_2, R.id.color_preview_3}; private final String mTitle; private final boolean mIsDefault; private final Style mStyle; @@ -86,6 +86,9 @@ public abstract class ColorOption implements CustomizationOption<ColorOption> { if (mIsDefault) { String serializedOverlays = colorManager.getStoredOverlays(); + // a default color option is active if the manager has no stored overlays or current + // overlays, or the stored overlay does not contain either category system palette or + // category color return (TextUtils.isEmpty(serializedOverlays) || EMPTY_JSON.equals(serializedOverlays) || colorManager.getCurrentOverlays().isEmpty() || !(serializedOverlays.contains( OVERLAY_CATEGORY_SYSTEM_PALETTE) || serializedOverlays.contains( @@ -100,6 +103,22 @@ public abstract class ColorOption implements CustomizationOption<ColorOption> { } /** + * Gets the seed color from the overlay packages for logging. + * + * @return an int representing the seed color, or NULL_SEED_COLOR + */ + public int getSeedColorForLogging() { + String seedColor = mPackagesByCategory.get(OVERLAY_CATEGORY_SYSTEM_PALETTE); + if (seedColor == null || seedColor.isEmpty()) { + return ThemesUserEventLogger.NULL_SEED_COLOR; + } + if (!seedColor.startsWith("#")) { + seedColor = "#" + seedColor; + } + return Color.parseColor(seedColor); + } + + /** * This is similar to #equals() but it only compares this theme's packages with the other, that * is, it will return true if applying this theme has the same effect of applying the given one. */ @@ -208,6 +227,12 @@ public abstract class ColorOption implements CustomizationOption<ColorOption> { public abstract String getSource(); /** + * @return the source of this color option for logging + */ + @ThemesUserEventLogger.ColorSource + public abstract int getSourceForLogging(); + + /** * @return the style of this color option */ public Style getStyle() { @@ -215,6 +240,11 @@ public abstract class ColorOption implements CustomizationOption<ColorOption> { } /** + * @return the style of this color option for logging + */ + public abstract int getStyleForLogging(); + + /** * @return the index of this color option */ public int getIndex() { diff --git a/src/com/android/customization/model/color/ColorOptionImpl.kt b/src/com/android/customization/model/color/ColorOptionImpl.kt index 3273ce26..f0905283 100644 --- a/src/com/android/customization/model/color/ColorOptionImpl.kt +++ b/src/com/android/customization/model/color/ColorOptionImpl.kt @@ -17,6 +17,7 @@ package com.android.customization.model.color import android.content.Context +import android.stats.style.StyleEnums import android.view.View import androidx.annotation.ColorInt import com.android.customization.model.color.ColorOptionsProvider.ColorSource @@ -68,6 +69,17 @@ class ColorOptionImpl( return source } + override fun getSourceForLogging(): Int { + return when (getSource()) { + ColorOptionsProvider.COLOR_SOURCE_PRESET -> StyleEnums.COLOR_SOURCE_PRESET_COLOR + ColorOptionsProvider.COLOR_SOURCE_HOME -> StyleEnums.COLOR_SOURCE_HOME_SCREEN_WALLPAPER + ColorOptionsProvider.COLOR_SOURCE_LOCK -> StyleEnums.COLOR_SOURCE_LOCK_SCREEN_WALLPAPER + else -> StyleEnums.COLOR_SOURCE_UNSPECIFIED + } + } + + override fun getStyleForLogging(): Int = style.toString().hashCode() + class Builder { var title: String? = null diff --git a/src/com/android/customization/model/color/ColorOptionsProvider.java b/src/com/android/customization/model/color/ColorOptionsProvider.java index 166b4da7..9703907d 100644 --- a/src/com/android/customization/model/color/ColorOptionsProvider.java +++ b/src/com/android/customization/model/color/ColorOptionsProvider.java @@ -70,12 +70,9 @@ public interface ColorOptionsProvider { * @param homeWallpaperColors to get seed colors from * @param lockWallpaperColors WallpaperColors from the lockscreen wallpaper to get seeds from, * if different than homeWallpaperColors - * @param shouldUseRevampedUi fetches color options with new preview mappings for the revamped - * UI if set to true */ void fetch(OptionsFetchedListener<ColorOption> callback, boolean reload, @Nullable WallpaperColors homeWallpaperColors, - @Nullable WallpaperColors lockWallpaperColors, - boolean shouldUseRevampedUi + @Nullable WallpaperColors lockWallpaperColors ); } diff --git a/src/com/android/customization/model/color/ColorProvider.kt b/src/com/android/customization/model/color/ColorProvider.kt index 74a4051b..6fdfd2ca 100644 --- a/src/com/android/customization/model/color/ColorProvider.kt +++ b/src/com/android/customization/model/color/ColorProvider.kt @@ -48,6 +48,7 @@ import kotlinx.coroutines.withContext /** * Default implementation of {@link ColorOptionsProvider} that reads preset colors from a stub APK. + * TODO (b/311212666): Make [ColorProvider] and [ColorCustomizationManager] injectable */ class ColorProvider(private val context: Context, stubPackageName: String) : ResourcesApkProvider(context, stubPackageName), ColorOptionsProvider { @@ -68,8 +69,6 @@ class ColorProvider(private val context: Context, stubPackageName: String) : arrayOf(Style.TONAL_SPOT, Style.SPRITZ, Style.VIBRANT, Style.EXPRESSIVE) else arrayOf(Style.TONAL_SPOT) - private val monochromeEnabled = - InjectorProvider.getInjector().getFlags().isMonochromaticThemeEnabled(mContext) private var monochromeBundleName: String? = null private val scope = @@ -93,7 +92,6 @@ class ColorProvider(private val context: Context, stubPackageName: String) : reload: Boolean, homeWallpaperColors: WallpaperColors?, lockWallpaperColors: WallpaperColors?, - shouldUseRevampedUi: Boolean ) { val wallpaperColorsChanged = this.homeWallpaperColors != homeWallpaperColors || @@ -106,13 +104,12 @@ class ColorProvider(private val context: Context, stubPackageName: String) : scope.launch { try { if (colorBundles == null || reload) { - loadPreset(shouldUseRevampedUi) + loadPreset() } if (wallpaperColorsChanged || reload) { loadSeedColors( homeWallpaperColors, lockWallpaperColors, - shouldUseRevampedUi ) } } catch (e: Throwable) { @@ -138,7 +135,6 @@ class ColorProvider(private val context: Context, stubPackageName: String) : private fun loadSeedColors( homeWallpaperColors: WallpaperColors?, lockWallpaperColors: WallpaperColors?, - shouldUseRevampedUi: Boolean, ) { if (homeWallpaperColors == null) return @@ -159,7 +155,6 @@ class ColorProvider(private val context: Context, stubPackageName: String) : if (shouldLockColorsGoFirst) COLOR_SOURCE_LOCK else COLOR_SOURCE_HOME, true, bundles, - shouldUseRevampedUi ) // Second half of the colors buildColorSeeds( @@ -168,7 +163,6 @@ class ColorProvider(private val context: Context, stubPackageName: String) : if (shouldLockColorsGoFirst) COLOR_SOURCE_HOME else COLOR_SOURCE_LOCK, false, bundles, - shouldUseRevampedUi ) } else { buildColorSeeds( @@ -177,35 +171,20 @@ class ColorProvider(private val context: Context, stubPackageName: String) : COLOR_SOURCE_HOME, true, bundles, - shouldUseRevampedUi ) } - if (shouldUseRevampedUi) { - // Insert monochrome in the second position if it is enabled and included in preset - // colors - if (monochromeEnabled) { - monochromeBundleName?.let { - bundles.add( - 1, - buildRevampedUIPreset( - it, - -1, - Style.MONOCHROMATIC, - ColorType.WALLPAPER_COLOR - ) - ) - } + // Insert monochrome in the second position if it is enabled and included in preset + // colors + if (InjectorProvider.getInjector().getFlags().isMonochromaticThemeEnabled(mContext)) { + monochromeBundleName?.let { + bundles.add(1, buildPreset(it, -1, Style.MONOCHROMATIC, ColorType.WALLPAPER_COLOR)) } - bundles.addAll( - colorBundles?.filterNot { - (it as ColorOptionImpl).type == ColorType.WALLPAPER_COLOR - } - ?: emptyList() - ) - } else { - bundles.addAll(colorBundles?.filterNot { it is ColorSeedOption } ?: emptyList()) } + bundles.addAll( + colorBundles?.filterNot { (it as ColorOptionImpl).type == ColorType.WALLPAPER_COLOR } + ?: emptyList() + ) colorBundles = bundles } @@ -215,13 +194,12 @@ class ColorProvider(private val context: Context, stubPackageName: String) : source: String, containsDefault: Boolean, bundles: MutableList<ColorOption>, - shouldUseRevampedUi: Boolean, ) { val seedColors = ColorScheme.getSeedColors(wallpaperColors) val defaultSeed = seedColors.first() - buildBundle(defaultSeed, 0, containsDefault, source, bundles, shouldUseRevampedUi) + buildBundle(defaultSeed, 0, containsDefault, source, bundles) for ((i, colorInt) in seedColors.drop(1).take(maxColors - 1).withIndex()) { - buildBundle(colorInt, i + 1, false, source, bundles, shouldUseRevampedUi) + buildBundle(colorInt, i + 1, false, source, bundles) } } @@ -231,102 +209,41 @@ class ColorProvider(private val context: Context, stubPackageName: String) : isDefault: Boolean, source: String, bundles: MutableList<ColorOption>, - shouldUseRevampedUi: Boolean, ) { // TODO(b/202145216): Measure time cost in the loop. - if (shouldUseRevampedUi) { - for (style in styleList) { - val lightColorScheme = ColorScheme(colorInt, /* darkTheme= */ false, style) - val darkColorScheme = ColorScheme(colorInt, /* darkTheme= */ true, style) - val builder = ColorOptionImpl.Builder() - builder.lightColors = getRevampedUILightColorPreview(lightColorScheme) - builder.darkColors = getRevampedUIDarkColorPreview(darkColorScheme) - builder.addOverlayPackage( - OVERLAY_CATEGORY_SYSTEM_PALETTE, - if (isDefault) "" else toColorString(colorInt) - ) - builder.title = - when (style) { - Style.TONAL_SPOT -> - context.getString(R.string.content_description_dynamic_color_option) - Style.SPRITZ -> - context.getString(R.string.content_description_neutral_color_option) - Style.VIBRANT -> - context.getString(R.string.content_description_vibrant_color_option) - Style.EXPRESSIVE -> - context.getString(R.string.content_description_expressive_color_option) - else -> context.getString(R.string.content_description_dynamic_color_option) - } - builder.source = source - builder.style = style - // Color option index value starts from 1. - builder.index = i + 1 - builder.isDefault = isDefault - builder.type = ColorType.WALLPAPER_COLOR - bundles.add(builder.build()) - } - } else { - for (style in styleList) { - val lightColorScheme = ColorScheme(colorInt, /* darkTheme= */ false, style) - val darkColorScheme = ColorScheme(colorInt, /* darkTheme= */ true, style) - val builder = ColorSeedOption.Builder() - builder - .setLightColors(lightColorScheme.getLightColorPreview()) - .setDarkColors(darkColorScheme.getDarkColorPreview()) - .addOverlayPackage( - OVERLAY_CATEGORY_SYSTEM_PALETTE, - if (isDefault) "" else toColorString(colorInt) - ) - .addOverlayPackage( - OVERLAY_CATEGORY_COLOR, - if (isDefault) "" else toColorString(colorInt) - ) - .setSource(source) - .setStyle(style) - // Color option index value starts from 1. - .setIndex(i + 1) - - if (isDefault) builder.asDefault() - - bundles.add(builder.build()) - } - } - } - - /** - * Returns the colors for the light theme version of the preview of a ColorScheme based on this - * order: top left, top right, bottom left, bottom right - */ - @ColorInt - private fun ColorScheme.getLightColorPreview(): IntArray { - return when (this.style) { - Style.EXPRESSIVE -> - intArrayOf( - setAlphaComponent(this.accent1.s100, ALPHA_MASK), - setAlphaComponent(this.accent1.s100, ALPHA_MASK), - ColorStateList.valueOf(this.neutral2.s500).withLStar(80f).colors[0], - setAlphaComponent(this.accent2.s500, ALPHA_MASK) - ) - else -> - intArrayOf( - setAlphaComponent(this.accent1.s100, ALPHA_MASK), - setAlphaComponent(this.accent1.s100, ALPHA_MASK), - ColorStateList.valueOf(this.accent3.s500).withLStar(85f).colors[0], - setAlphaComponent(this.accent1.s500, ALPHA_MASK) - ) + for (style in styleList) { + val lightColorScheme = ColorScheme(colorInt, /* darkTheme= */ false, style) + val darkColorScheme = ColorScheme(colorInt, /* darkTheme= */ true, style) + val builder = ColorOptionImpl.Builder() + builder.lightColors = getLightColorPreview(lightColorScheme) + builder.darkColors = getDarkColorPreview(darkColorScheme) + builder.addOverlayPackage( + OVERLAY_CATEGORY_SYSTEM_PALETTE, + if (isDefault) "" else toColorString(colorInt) + ) + builder.title = + when (style) { + Style.TONAL_SPOT -> + context.getString(R.string.content_description_dynamic_color_option) + Style.SPRITZ -> + context.getString(R.string.content_description_neutral_color_option) + Style.VIBRANT -> + context.getString(R.string.content_description_vibrant_color_option) + Style.EXPRESSIVE -> + context.getString(R.string.content_description_expressive_color_option) + else -> context.getString(R.string.content_description_dynamic_color_option) + } + builder.source = source + builder.style = style + // Color option index value starts from 1. + builder.index = i + 1 + builder.isDefault = isDefault + builder.type = ColorType.WALLPAPER_COLOR + bundles.add(builder.build()) } } /** - * Returns the color for the dark theme version of the preview of a ColorScheme based on this - * order: top left, top right, bottom left, bottom right - */ - @ColorInt - private fun ColorScheme.getDarkColorPreview(): IntArray { - return getLightColorPreview() - } - - /** * Returns the light theme version of the Revamped UI preview of a ColorScheme based on this * order: top left, top right, bottom left, bottom right * @@ -334,7 +251,7 @@ class ColorProvider(private val context: Context, stubPackageName: String) : * LStar 85, and Tertiary LStar 70 */ @ColorInt - private fun getRevampedUILightColorPreview(colorScheme: ColorScheme): IntArray { + private fun getLightColorPreview(colorScheme: ColorScheme): IntArray { return intArrayOf( setAlphaComponent(colorScheme.accent1.s600, ALPHA_MASK), setAlphaComponent(colorScheme.accent1.s600, ALPHA_MASK), @@ -351,7 +268,7 @@ class ColorProvider(private val context: Context, stubPackageName: String) : * 35, and Tertiary LStar 70 */ @ColorInt - private fun getRevampedUIDarkColorPreview(colorScheme: ColorScheme): IntArray { + private fun getDarkColorPreview(colorScheme: ColorScheme): IntArray { return intArrayOf( setAlphaComponent(colorScheme.accent1.s200, ALPHA_MASK), setAlphaComponent(colorScheme.accent1.s200, ALPHA_MASK), @@ -368,7 +285,7 @@ class ColorProvider(private val context: Context, stubPackageName: String) : * LStar 85, and Tertiary LStar 70 */ @ColorInt - private fun getRevampedUILightMonochromePreview(colorScheme: ColorScheme): IntArray { + private fun getLightMonochromePreview(colorScheme: ColorScheme): IntArray { return intArrayOf( setAlphaComponent(colorScheme.accent1.s1000, ALPHA_MASK), setAlphaComponent(colorScheme.accent1.s1000, ALPHA_MASK), @@ -385,7 +302,7 @@ class ColorProvider(private val context: Context, stubPackageName: String) : * LStar 35, and Tertiary LStar 70 */ @ColorInt - private fun getRevampedUIDarkMonochromePreview(colorScheme: ColorScheme): IntArray { + private fun getDarkMonochromePreview(colorScheme: ColorScheme): IntArray { return intArrayOf( setAlphaComponent(colorScheme.accent1.s10, ALPHA_MASK), setAlphaComponent(colorScheme.accent1.s10, ALPHA_MASK), @@ -398,7 +315,7 @@ class ColorProvider(private val context: Context, stubPackageName: String) : * Returns the Revamped UI preview of a preset ColorScheme based on this order: top left, top * right, bottom left, bottom right */ - private fun getRevampedUIPresetColorPreview(colorScheme: ColorScheme, seed: Int): IntArray { + private fun getPresetColorPreview(colorScheme: ColorScheme, seed: Int): IntArray { val colors = when (colorScheme.style) { Style.FRUIT_SALAD -> intArrayOf(seed, colorScheme.accent1.s200) @@ -414,22 +331,8 @@ class ColorProvider(private val context: Context, stubPackageName: String) : ) } - private fun ColorScheme.getPresetColorPreview(seed: Int): IntArray { - return when (this.style) { - Style.FRUIT_SALAD -> intArrayOf(seed, this.accent1.s100) - Style.TONAL_SPOT -> intArrayOf(this.accentColor, this.accentColor) - Style.MONOCHROMATIC -> - intArrayOf( - setAlphaComponent(0x000000, 255), - setAlphaComponent(0xFFFFFF, 255), - ) - else -> intArrayOf(this.accent1.s100, this.accent1.s100) - } - } - - private suspend fun loadPreset(shouldUseRevampedUi: Boolean) = + private suspend fun loadPreset() = withContext(Dispatchers.IO) { - val extractor = ColorBundlePreviewExtractor(mContext) val bundles: MutableList<ColorOption> = ArrayList() val bundleNames = @@ -438,95 +341,50 @@ class ColorProvider(private val context: Context, stubPackageName: String) : var index = 1 val maxPresetColors = if (themeStyleEnabled) bundleNames.size else MAX_PRESET_COLORS - if (shouldUseRevampedUi) { - // keep track of whether monochrome is included in preset colors to determine - // inclusion in wallpaper colors - var hasMonochrome = false - for (bundleName in bundleNames.take(maxPresetColors)) { - if (themeStyleEnabled) { - val styleName = - try { - getItemStringFromStub(COLOR_BUNDLE_STYLE_PREFIX, bundleName) - } catch (e: Resources.NotFoundException) { - null - } - val style = - try { - if (styleName != null) Style.valueOf(styleName) - else Style.TONAL_SPOT - } catch (e: IllegalArgumentException) { - Style.TONAL_SPOT - } - - if (style == Style.MONOCHROMATIC) { - if (!monochromeEnabled) { - continue - } - hasMonochrome = true - monochromeBundleName = bundleName + // keep track of whether monochrome is included in preset colors to determine + // inclusion in wallpaper colors + var hasMonochrome = false + for (bundleName in bundleNames.take(maxPresetColors)) { + if (themeStyleEnabled) { + val styleName = + try { + getItemStringFromStub(COLOR_BUNDLE_STYLE_PREFIX, bundleName) + } catch (e: Resources.NotFoundException) { + null + } + val style = + try { + if (styleName != null) Style.valueOf(styleName) else Style.TONAL_SPOT + } catch (e: IllegalArgumentException) { + Style.TONAL_SPOT } - bundles.add(buildRevampedUIPreset(bundleName, index, style)) - } else { - bundles.add(buildRevampedUIPreset(bundleName, index, null)) - } - - index++ - } - if (!hasMonochrome) { - monochromeBundleName = null - } - } else { - for (bundleName in bundleNames.take(maxPresetColors)) { - val builder = ColorBundle.Builder() - builder.title = getItemStringFromStub(COLOR_BUNDLE_NAME_PREFIX, bundleName) - builder.setIndex(index) - val colorFromStub = - getItemColorFromStub(COLOR_BUNDLE_MAIN_COLOR_PREFIX, bundleName) - extractor.addPrimaryColor(builder, colorFromStub) - extractor.addSecondaryColor(builder, colorFromStub) - if (themeStyleEnabled) { - val styleName = - try { - getItemStringFromStub(COLOR_BUNDLE_STYLE_PREFIX, bundleName) - } catch (e: Resources.NotFoundException) { - null - } - extractor.addColorStyle(builder, styleName) - val style = - try { - if (styleName != null) Style.valueOf(styleName) - else Style.TONAL_SPOT - } catch (e: IllegalArgumentException) { - Style.TONAL_SPOT - } - if (style == Style.MONOCHROMATIC && !monochromeEnabled) { + if (style == Style.MONOCHROMATIC) { + if ( + !InjectorProvider.getInjector() + .getFlags() + .isMonochromaticThemeEnabled(mContext) + ) { continue } - - val darkColors = - ColorScheme(colorFromStub, /* darkTheme= */ true, style) - .getPresetColorPreview(colorFromStub) - val lightColors = - ColorScheme(colorFromStub, /* darkTheme= */ false, style) - .getPresetColorPreview(colorFromStub) - builder - .setColorPrimaryDark(darkColors[0]) - .setColorSecondaryDark(darkColors[1]) - builder - .setColorPrimaryLight(lightColors[0]) - .setColorSecondaryLight(lightColors[1]) + hasMonochrome = true + monochromeBundleName = bundleName } - - bundles.add(builder.build(mContext)) - index++ + bundles.add(buildPreset(bundleName, index, style)) + } else { + bundles.add(buildPreset(bundleName, index, null)) } + + index++ + } + if (!hasMonochrome) { + monochromeBundleName = null } colorBundles = bundles } - private fun buildRevampedUIPreset( + private fun buildPreset( bundleName: String, index: Int, style: Style? = null, @@ -554,12 +412,12 @@ class ColorProvider(private val context: Context, stubPackageName: String) : when (style) { Style.MONOCHROMATIC -> { - darkColors = getRevampedUIDarkMonochromePreview(darkColorScheme) - lightColors = getRevampedUILightMonochromePreview(lightColorScheme) + darkColors = getDarkMonochromePreview(darkColorScheme) + lightColors = getLightMonochromePreview(lightColorScheme) } else -> { - darkColors = getRevampedUIPresetColorPreview(darkColorScheme, colorFromStub) - lightColors = getRevampedUIPresetColorPreview(lightColorScheme, colorFromStub) + darkColors = getPresetColorPreview(darkColorScheme, colorFromStub) + lightColors = getPresetColorPreview(lightColorScheme, colorFromStub) } } } diff --git a/src/com/android/customization/model/color/ColorSeedOption.java b/src/com/android/customization/model/color/ColorSeedOption.java deleted file mode 100644 index ed38049e..00000000 --- a/src/com/android/customization/model/color/ColorSeedOption.java +++ /dev/null @@ -1,252 +0,0 @@ -/* - * Copyright (C) 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.model.color; - -import android.content.Context; -import android.content.res.Configuration; -import android.content.res.Resources; -import android.graphics.PorterDuff.Mode; -import android.view.View; -import android.widget.ImageView; - -import androidx.annotation.ColorInt; -import androidx.annotation.VisibleForTesting; - -import com.android.customization.model.color.ColorOptionsProvider.ColorSource; -import com.android.systemui.monet.Style; -import com.android.wallpaper.R; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -/** - * Represents a seed color obtained from WallpaperColors, for the user to chose as their theming - * option. - */ -public class ColorSeedOption extends ColorOption { - - private final PreviewInfo mPreviewInfo; - @ColorSource - private final String mSource; - - @VisibleForTesting - ColorSeedOption(String title, Map<String, String> overlayPackages, boolean isDefault, - @ColorSource String source, Style style, int index, PreviewInfo previewInfo) { - super(title, overlayPackages, isDefault, style, index); - mSource = source; - mPreviewInfo = previewInfo; - } - - @Override - public PreviewInfo getPreviewInfo() { - return mPreviewInfo; - } - - @Override - public String getSource() { - return mSource; - } - - @Override - public int getLayoutResId() { - return R.layout.color_option; - } - - @Override - public void bindThumbnailTile(View view) { - Resources res = view.getContext().getResources(); - @ColorInt int[] colors = mPreviewInfo.resolveColors(res); - - for (int i = 0; i < mPreviewColorIds.length; i++) { - ImageView colorPreviewImageView = view.findViewById(mPreviewColorIds[i]); - colorPreviewImageView.getDrawable().setColorFilter(colors[i], Mode.SRC); - } - - view.setContentDescription(getContentDescription(view.getContext())); - } - - @Override - public CharSequence getContentDescription(Context context) { - // Override because we want all options with the same description. - return context.getString(R.string.wallpaper_color_title); - } - - /** - * The preview information of {@link ColorOption} - */ - public static class PreviewInfo implements ColorOption.PreviewInfo { - @ColorInt public int[] lightColors; - @ColorInt public int[] darkColors; - - private PreviewInfo(@ColorInt int[] lightColors, @ColorInt int[] darkColors) { - this.lightColors = lightColors; - this.darkColors = darkColors; - } - - /** - * Returns the colors to be applied corresponding with the current - * configuration's UI mode. - * @param res resources to read to the UI mode configuration from - * @return one of {@link #lightColors} or {@link #darkColors} - */ - @ColorInt - public int[] resolveColors(Resources res) { - boolean night = (res.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) - == Configuration.UI_MODE_NIGHT_YES; - return night ? darkColors : lightColors; - } - - /** - * Returns the preview colors based on whether dark theme or light theme colors are - * requested. - * @param darkTheme if true, returns dark theme colors, otherwise returns light theme colors - * @return one of {@link #lightColors} or {@link #darkColors} - */ - @ColorInt - public int[] resolveColors(boolean darkTheme) { - return darkTheme ? darkColors : lightColors; - } - } - - /** - * The builder of ColorSeedOption - */ - public static class Builder { - protected String mTitle; - @ColorInt - private int[] mLightColors; - @ColorInt - private int[] mDarkColors; - @ColorSource - private String mSource; - private boolean mIsDefault; - private Style mStyle = Style.TONAL_SPOT; - private int mIndex; - protected Map<String, String> mPackages = new HashMap<>(); - - /** - * Builds the ColorSeedOption - * @return new {@link ColorOption} object - */ - public ColorSeedOption build() { - return new ColorSeedOption(mTitle, mPackages, mIsDefault, mSource, mStyle, mIndex, - createPreviewInfo()); - } - - /** - * Creates preview information - * @return the {@link PreviewInfo} object - */ - public PreviewInfo createPreviewInfo() { - return new PreviewInfo(mLightColors, mDarkColors); - } - - public Map<String, String> getPackages() { - return Collections.unmodifiableMap(mPackages); - } - - /** - * Gets title of {@link ColorOption} object - * @return title string - */ - public String getTitle() { - return mTitle; - } - - /** - * Sets title of bundle - * @param title specified title - * @return this of {@link ColorBundle.Builder} - */ - public Builder setTitle(String title) { - mTitle = title; - return this; - } - - /** - * Sets the colors for preview in light mode - * @param lightColors {@link ColorInt} colors for light mode - * @return this of {@link Builder} - */ - public Builder setLightColors(@ColorInt int[] lightColors) { - mLightColors = lightColors; - return this; - } - - /** - * Sets the colors for preview in light mode - * @param darkColors {@link ColorInt} colors for light mode - * @return this of {@link Builder} - */ - public Builder setDarkColors(@ColorInt int[] darkColors) { - mDarkColors = darkColors; - return this; - } - - - /** - * Sets overlay package for bundle - * @param category the category of bundle - * @param packageName tha name of package in the category - * @return this of {@link Builder} - */ - public Builder addOverlayPackage(String category, String packageName) { - mPackages.put(category, packageName); - return this; - } - - /** - * Sets the source of this color seed - * @param source typically either {@link ColorOptionsProvider#COLOR_SOURCE_HOME} or - * {@link ColorOptionsProvider#COLOR_SOURCE_LOCK} - * @return this of {@link Builder} - */ - public Builder setSource(@ColorSource String source) { - mSource = source; - return this; - } - - /** - * Sets the source of this color seed - * @param style color style of {@link Style} - * @return this of {@link Builder} - */ - public Builder setStyle(Style style) { - mStyle = style; - return this; - } - - /** - * Sets color option index of seed - * @param index color option index - * @return this of {@link ColorBundle.Builder} - */ - public Builder setIndex(int index) { - mIndex = index; - return this; - } - - /** - * Sets as default bundle - * @return this of {@link Builder} - */ - public Builder asDefault() { - mIsDefault = true; - return this; - } - } -} diff --git a/src/com/android/customization/model/color/ThemedWallpaperColorResources.kt b/src/com/android/customization/model/color/ThemedWallpaperColorResources.kt new file mode 100644 index 00000000..906d9020 --- /dev/null +++ b/src/com/android/customization/model/color/ThemedWallpaperColorResources.kt @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.customization.model.color + +import android.R +import android.app.WallpaperColors +import android.content.Context +import android.provider.Settings +import android.util.Log +import com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_THEME_STYLE +import com.android.systemui.monet.ColorScheme +import com.android.systemui.monet.Style +import org.json.JSONException +import org.json.JSONObject + +class ThemedWallpaperColorResources(wallpaperColors: WallpaperColors, context: Context) : + WallpaperColorResources(wallpaperColors) { + + init { + val wallpaperColorScheme = + ColorScheme( + wallpaperColors = wallpaperColors, + darkTheme = false, + style = fetchThemeStyleFromSetting(context) + ) + addOverlayColor(wallpaperColorScheme.neutral1, R.color.system_neutral1_10) + addOverlayColor(wallpaperColorScheme.neutral2, R.color.system_neutral2_10) + addOverlayColor(wallpaperColorScheme.accent1, R.color.system_accent1_10) + addOverlayColor(wallpaperColorScheme.accent2, R.color.system_accent2_10) + addOverlayColor(wallpaperColorScheme.accent3, R.color.system_accent3_10) + } + + private fun fetchThemeStyleFromSetting(context: Context): Style { + val overlayPackageJson = + Settings.Secure.getString( + context.contentResolver, + Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES, + ) + return if (!overlayPackageJson.isNullOrEmpty()) { + try { + val jsonObject = JSONObject(overlayPackageJson) + Style.valueOf(jsonObject.getString(OVERLAY_CATEGORY_THEME_STYLE)) + } catch (e: (JSONException)) { + Log.i(TAG, "Failed to parse THEME_CUSTOMIZATION_OVERLAY_PACKAGES.", e) + Style.TONAL_SPOT + } catch (e: IllegalArgumentException) { + Log.i(TAG, "Failed to parse THEME_CUSTOMIZATION_OVERLAY_PACKAGES.", e) + Style.TONAL_SPOT + } + } else { + Style.TONAL_SPOT + } + } + + companion object { + private const val TAG = "ThemedWallpaperColorResources" + } +} diff --git a/src/com/android/customization/model/grid/GridOption.java b/src/com/android/customization/model/grid/GridOption.java index a5307c9e..347929c4 100644 --- a/src/com/android/customization/model/grid/GridOption.java +++ b/src/com/android/customization/model/grid/GridOption.java @@ -15,14 +15,11 @@ */ package com.android.customization.model.grid; -import android.content.Context; -import android.graphics.PorterDuff.Mode; import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; import android.view.View; -import android.widget.ImageView; import androidx.annotation.Nullable; @@ -30,7 +27,6 @@ import com.android.customization.model.CustomizationManager; import com.android.customization.model.CustomizationOption; import com.android.customization.widget.GridTileDrawable; import com.android.wallpaper.R; -import com.android.wallpaper.util.ResourceUtils; /** * Represents a grid layout option available in the current launcher. @@ -94,21 +90,7 @@ public class GridOption implements CustomizationOption<GridOption>, Parcelable { @Override public void bindThumbnailTile(View view) { - Context context = view.getContext(); - - int colorFilter = ResourceUtils.getColorAttr(context, - view.isActivated() - ? (mIsCurrent - ? android.R.attr.textColorPrimary - : android.R.attr.textColorPrimaryInverse) - : android.R.attr.textColorTertiary); - mTileDrawable.setColorFilter(colorFilter, Mode.SRC_ATOP); - ((ImageView) view.findViewById(R.id.grid_option_thumbnail)) - .setImageDrawable(mTileDrawable); - - int backgroundResource = view.isActivated() && !mIsCurrent - ? R.drawable.option_border_new_selection : R.drawable.option_border; - view.findViewById(R.id.option_tile).setBackgroundResource(backgroundResource); + // Do nothing. This function will no longer be used in the Revamped UI } @Override diff --git a/src/com/android/customization/model/grid/GridOptionViewModel.java b/src/com/android/customization/model/grid/GridOptionViewModel.java deleted file mode 100644 index 33fa8e179..00000000 --- a/src/com/android/customization/model/grid/GridOptionViewModel.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2021 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.model.grid; - -import androidx.lifecycle.SavedStateHandle; -import androidx.lifecycle.ViewModel; - -/** The class to store status of the grid fragment view. */ -public class GridOptionViewModel extends ViewModel { - private static final String SELECTED_OPTION_KEY = "selected_option"; - private static final String BOTTOM_ACTION_BAR_VISIBLE_KEY = "bottom_action_bar_visible"; - - private SavedStateHandle mState; - - public GridOptionViewModel(SavedStateHandle savedStateHandle) { - mState = savedStateHandle; - } - - /** Gets selected {@link GridOption} from {@link SavedStateHandle} */ - public GridOption getSelectedOption() { - return mState.get(SELECTED_OPTION_KEY); - } - - /** Sets selected {@link GridOption} to {@link SavedStateHandle} */ - public void setSelectedOption(GridOption selectedOption) { - mState.set(SELECTED_OPTION_KEY, selectedOption); - } - - /** Gets bottom action bar visible from {@link SavedStateHandle} */ - public boolean getBottomActionBarVisible() { - return mState.contains(BOTTOM_ACTION_BAR_VISIBLE_KEY) - ? mState.get(BOTTOM_ACTION_BAR_VISIBLE_KEY) - : false; - } - - /** Sets bottom action bar visible to {@link SavedStateHandle} */ - public void setBottomActionBarVisible(boolean bottomActionBarVisible) { - mState.set(BOTTOM_ACTION_BAR_VISIBLE_KEY, bottomActionBarVisible); - } -} diff --git a/src/com/android/customization/model/grid/GridOptionsManager.java b/src/com/android/customization/model/grid/GridOptionsManager.java index 78dbb5b2..bd24cf5f 100644 --- a/src/com/android/customization/model/grid/GridOptionsManager.java +++ b/src/com/android/customization/model/grid/GridOptionsManager.java @@ -27,7 +27,7 @@ import androidx.lifecycle.LiveData; import com.android.customization.model.CustomizationManager; import com.android.customization.module.CustomizationInjector; -import com.android.customization.module.ThemesUserEventLogger; +import com.android.customization.module.logging.ThemesUserEventLogger; import com.android.wallpaper.R; import com.android.wallpaper.module.InjectorProvider; import com.android.wallpaper.util.PreviewUtils; diff --git a/src/com/android/customization/model/mode/DarkModeSectionController.java b/src/com/android/customization/model/mode/DarkModeSectionController.java index ebeaa567..71398297 100644 --- a/src/com/android/customization/model/mode/DarkModeSectionController.java +++ b/src/com/android/customization/model/mode/DarkModeSectionController.java @@ -39,6 +39,7 @@ import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LifecycleObserver; import androidx.lifecycle.OnLifecycleEvent; +import com.android.customization.module.logging.ThemesUserEventLogger; import com.android.customization.picker.mode.DarkModeSectionView; import com.android.wallpaper.R; import com.android.wallpaper.model.CustomizationSectionController; @@ -60,16 +61,19 @@ public class DarkModeSectionController implements private Context mContext; private DarkModeSectionView mDarkModeSectionView; private final DarkModeSnapshotRestorer mSnapshotRestorer; + private final ThemesUserEventLogger mThemesUserEventLogger; public DarkModeSectionController( Context context, Lifecycle lifecycle, - DarkModeSnapshotRestorer snapshotRestorer) { + DarkModeSnapshotRestorer snapshotRestorer, + ThemesUserEventLogger themesUserEventLogger) { mContext = context; mLifecycle = lifecycle; mPowerManager = context.getSystemService(PowerManager.class); mLifecycle.addObserver(this); mSnapshotRestorer = snapshotRestorer; + mThemesUserEventLogger = themesUserEventLogger; } @OnLifecycleEvent(Lifecycle.Event.ON_START) @@ -137,6 +141,7 @@ public class DarkModeSectionController implements mDarkModeSectionView.announceForAccessibility( context.getString(R.string.mode_changed)); uiModeManager.setNightModeActivated(viewActivated); + mThemesUserEventLogger.logDarkThemeApplied(viewActivated); mSnapshotRestorer.store(viewActivated); }, /* delayMillis= */ shortDelay); diff --git a/src/com/android/customization/model/theme/DefaultThemeProvider.java b/src/com/android/customization/model/theme/DefaultThemeProvider.java deleted file mode 100644 index 89067c65..00000000 --- a/src/com/android/customization/model/theme/DefaultThemeProvider.java +++ /dev/null @@ -1,424 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.model.theme; - -import static com.android.customization.model.ResourceConstants.ANDROID_PACKAGE; -import static com.android.customization.model.ResourceConstants.ICONS_FOR_PREVIEW; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_COLOR; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_FONT; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_ANDROID; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_LAUNCHER; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_SETTINGS; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_SYSUI; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_THEMEPICKER; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_SHAPE; -import static com.android.customization.model.ResourceConstants.SYSUI_PACKAGE; - -import android.content.Context; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager.NameNotFoundException; -import android.content.res.Resources.NotFoundException; -import android.graphics.drawable.Drawable; -import android.text.TextUtils; -import android.util.Log; - -import androidx.annotation.Nullable; - -import com.android.customization.model.CustomizationManager.OptionsFetchedListener; -import com.android.customization.model.ResourcesApkProvider; -import com.android.customization.model.theme.ThemeBundle.Builder; -import com.android.customization.model.theme.ThemeBundle.PreviewInfo.ShapeAppIcon; -import com.android.customization.model.theme.custom.CustomTheme; -import com.android.customization.module.CustomizationPreferences; -import com.android.wallpaper.R; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -/** - * Default implementation of {@link ThemeBundleProvider} that reads Themes' overlays from a stub APK. - */ -public class DefaultThemeProvider extends ResourcesApkProvider implements ThemeBundleProvider { - - private static final String TAG = "DefaultThemeProvider"; - - private static final String THEMES_ARRAY = "themes"; - private static final String TITLE_PREFIX = "theme_title_"; - private static final String FONT_PREFIX = "theme_overlay_font_"; - private static final String COLOR_PREFIX = "theme_overlay_color_"; - private static final String SHAPE_PREFIX = "theme_overlay_shape_"; - private static final String ICON_ANDROID_PREFIX = "theme_overlay_icon_android_"; - private static final String ICON_LAUNCHER_PREFIX = "theme_overlay_icon_launcher_"; - private static final String ICON_THEMEPICKER_PREFIX = "theme_overlay_icon_themepicker_"; - private static final String ICON_SETTINGS_PREFIX = "theme_overlay_icon_settings_"; - private static final String ICON_SYSUI_PREFIX = "theme_overlay_icon_sysui_"; - - private static final String DEFAULT_THEME_NAME= "default"; - private static final String THEME_TITLE_FIELD = "_theme_title"; - private static final String THEME_ID_FIELD = "_theme_id"; - - private final OverlayThemeExtractor mOverlayProvider; - private List<ThemeBundle> mThemes; - private final CustomizationPreferences mCustomizationPreferences; - - public DefaultThemeProvider(Context context, CustomizationPreferences customizationPrefs) { - super(context, context.getString(R.string.themes_stub_package)); - mOverlayProvider = new OverlayThemeExtractor(context); - mCustomizationPreferences = customizationPrefs; - } - - @Override - public void fetch(OptionsFetchedListener<ThemeBundle> callback, boolean reload) { - if (mThemes == null || reload) { - mThemes = new ArrayList<>(); - loadAll(); - } - - if(callback != null) { - callback.onOptionsLoaded(mThemes); - } - } - - @Override - public boolean isAvailable() { - return mOverlayProvider.isAvailable() && super.isAvailable(); - } - - private void loadAll() { - // Add "Custom" option at the beginning. - mThemes.add(new CustomTheme.Builder() - .setId(CustomTheme.newId()) - .setTitle(mContext.getString(R.string.custom_theme)) - .build(mContext)); - - addDefaultTheme(); - - String[] themeNames = getItemsFromStub(THEMES_ARRAY); - - for (String themeName : themeNames) { - // Default theme needs special treatment (see #addDefaultTheme()) - if (DEFAULT_THEME_NAME.equals(themeName)) { - continue; - } - ThemeBundle.Builder builder = new Builder(); - try { - builder.setTitle(mStubApkResources.getString( - mStubApkResources.getIdentifier(TITLE_PREFIX + themeName, - "string", mStubPackageName))); - - String shapeOverlayPackage = getOverlayPackage(SHAPE_PREFIX, themeName); - mOverlayProvider.addShapeOverlay(builder, shapeOverlayPackage); - - String fontOverlayPackage = getOverlayPackage(FONT_PREFIX, themeName); - mOverlayProvider.addFontOverlay(builder, fontOverlayPackage); - - String colorOverlayPackage = getOverlayPackage(COLOR_PREFIX, themeName); - mOverlayProvider.addColorOverlay(builder, colorOverlayPackage); - - String iconAndroidOverlayPackage = getOverlayPackage(ICON_ANDROID_PREFIX, - themeName); - - mOverlayProvider.addAndroidIconOverlay(builder, iconAndroidOverlayPackage); - - String iconSysUiOverlayPackage = getOverlayPackage(ICON_SYSUI_PREFIX, themeName); - - mOverlayProvider.addSysUiIconOverlay(builder, iconSysUiOverlayPackage); - - String iconLauncherOverlayPackage = getOverlayPackage(ICON_LAUNCHER_PREFIX, - themeName); - mOverlayProvider.addNoPreviewIconOverlay(builder, iconLauncherOverlayPackage); - - String iconThemePickerOverlayPackage = getOverlayPackage(ICON_THEMEPICKER_PREFIX, - themeName); - mOverlayProvider.addNoPreviewIconOverlay(builder, - iconThemePickerOverlayPackage); - - String iconSettingsOverlayPackage = getOverlayPackage(ICON_SETTINGS_PREFIX, - themeName); - - mOverlayProvider.addNoPreviewIconOverlay(builder, iconSettingsOverlayPackage); - - mThemes.add(builder.build(mContext)); - } catch (NameNotFoundException | NotFoundException e) { - Log.w(TAG, String.format("Couldn't load part of theme %s, will skip it", themeName), - e); - } - } - - addCustomThemes(); - } - - /** - * Default theme requires different treatment: if there are overlay packages specified in the - * stub apk, we'll use those, otherwise we'll get the System default values. But we cannot skip - * the default theme. - */ - private void addDefaultTheme() { - ThemeBundle.Builder builder = new Builder().asDefault(); - - int titleId = mStubApkResources.getIdentifier(TITLE_PREFIX + DEFAULT_THEME_NAME, - "string", mStubPackageName); - if (titleId > 0) { - builder.setTitle(mStubApkResources.getString(titleId)); - } else { - builder.setTitle(mContext.getString(R.string.default_theme_title)); - } - - try { - String colorOverlayPackage = getOverlayPackage(COLOR_PREFIX, DEFAULT_THEME_NAME); - mOverlayProvider.addColorOverlay(builder, colorOverlayPackage); - } catch (NameNotFoundException | NotFoundException e) { - Log.d(TAG, "Didn't find color overlay for default theme, will use system default"); - mOverlayProvider.addSystemDefaultColor(builder); - } - - try { - String fontOverlayPackage = getOverlayPackage(FONT_PREFIX, DEFAULT_THEME_NAME); - mOverlayProvider.addFontOverlay(builder, fontOverlayPackage); - } catch (NameNotFoundException | NotFoundException e) { - Log.d(TAG, "Didn't find font overlay for default theme, will use system default"); - mOverlayProvider.addSystemDefaultFont(builder); - } - - try { - String shapeOverlayPackage = getOverlayPackage(SHAPE_PREFIX, DEFAULT_THEME_NAME); - mOverlayProvider.addShapeOverlay(builder ,shapeOverlayPackage, false); - } catch (NameNotFoundException | NotFoundException e) { - Log.d(TAG, "Didn't find shape overlay for default theme, will use system default"); - mOverlayProvider.addSystemDefaultShape(builder); - } - - List<ShapeAppIcon> icons = new ArrayList<>(); - for (String packageName : mOverlayProvider.getShapePreviewIconPackages()) { - Drawable icon = null; - CharSequence name = null; - try { - icon = mContext.getPackageManager().getApplicationIcon(packageName); - ApplicationInfo appInfo = mContext.getPackageManager() - .getApplicationInfo(packageName, /* flag= */ 0); - name = mContext.getPackageManager().getApplicationLabel(appInfo); - } catch (NameNotFoundException e) { - Log.d(TAG, "Couldn't find app " + packageName + ", won't use it for icon shape" - + "preview"); - } finally { - if (icon != null && !TextUtils.isEmpty(name)) { - icons.add(new ShapeAppIcon(icon, name)); - } - } - } - builder.setShapePreviewIcons(icons); - - try { - String iconAndroidOverlayPackage = getOverlayPackage(ICON_ANDROID_PREFIX, - DEFAULT_THEME_NAME); - mOverlayProvider.addAndroidIconOverlay(builder, iconAndroidOverlayPackage); - } catch (NameNotFoundException | NotFoundException e) { - Log.d(TAG, "Didn't find Android icons overlay for default theme, using system default"); - mOverlayProvider.addSystemDefaultIcons(builder, ANDROID_PACKAGE, ICONS_FOR_PREVIEW); - } - - try { - String iconSysUiOverlayPackage = getOverlayPackage(ICON_SYSUI_PREFIX, - DEFAULT_THEME_NAME); - mOverlayProvider.addSysUiIconOverlay(builder, iconSysUiOverlayPackage); - } catch (NameNotFoundException | NotFoundException e) { - Log.d(TAG, - "Didn't find SystemUi icons overlay for default theme, using system default"); - mOverlayProvider.addSystemDefaultIcons(builder, SYSUI_PACKAGE, ICONS_FOR_PREVIEW); - } - - mThemes.add(builder.build(mContext)); - } - - @Override - public void storeCustomTheme(CustomTheme theme) { - if (mThemes == null) { - fetch(options -> { - addCustomThemeAndStore(theme); - }, false); - } else { - addCustomThemeAndStore(theme); - } - } - - private void addCustomThemeAndStore(CustomTheme theme) { - if (!mThemes.contains(theme)) { - mThemes.add(theme); - } else { - mThemes.replaceAll(t -> theme.equals(t) ? theme : t); - } - JSONArray themesArray = new JSONArray(); - mThemes.stream() - .filter(themeBundle -> themeBundle instanceof CustomTheme - && !themeBundle.getPackagesByCategory().isEmpty()) - .forEachOrdered(themeBundle -> addThemeBundleToArray(themesArray, themeBundle)); - mCustomizationPreferences.storeCustomThemes(themesArray.toString()); - } - - private void addThemeBundleToArray(JSONArray themesArray, ThemeBundle themeBundle) { - JSONObject jsonPackages = themeBundle.getJsonPackages(false); - try { - jsonPackages.put(THEME_TITLE_FIELD, themeBundle.getTitle()); - if (themeBundle instanceof CustomTheme) { - jsonPackages.put(THEME_ID_FIELD, ((CustomTheme)themeBundle).getId()); - } - } catch (JSONException e) { - Log.w("Exception saving theme's title", e); - } - themesArray.put(jsonPackages); - } - - @Override - public void removeCustomTheme(CustomTheme theme) { - JSONArray themesArray = new JSONArray(); - mThemes.stream() - .filter(themeBundle -> themeBundle instanceof CustomTheme - && ((CustomTheme) themeBundle).isDefined()) - .forEachOrdered(customTheme -> { - if (!customTheme.equals(theme)) { - addThemeBundleToArray(themesArray, customTheme); - } - }); - mCustomizationPreferences.storeCustomThemes(themesArray.toString()); - } - - private void addCustomThemes() { - String serializedThemes = mCustomizationPreferences.getSerializedCustomThemes(); - int customThemesCount = 0; - if (!TextUtils.isEmpty(serializedThemes)) { - try { - JSONArray customThemes = new JSONArray(serializedThemes); - for (int i = 0; i < customThemes.length(); i++) { - JSONObject jsonTheme = customThemes.getJSONObject(i); - CustomTheme.Builder builder = new CustomTheme.Builder(); - try { - convertJsonToBuilder(jsonTheme, builder); - } catch (NameNotFoundException | NotFoundException e) { - Log.i(TAG, "Couldn't parse serialized custom theme", e); - builder = null; - } - if (builder != null) { - if (TextUtils.isEmpty(builder.getTitle())) { - builder.setTitle(mContext.getString(R.string.custom_theme_title, - customThemesCount + 1)); - } - mThemes.add(builder.build(mContext)); - } else { - Log.w(TAG, "Couldn't read stored custom theme, resetting"); - mThemes.add(new CustomTheme.Builder() - .setId(CustomTheme.newId()) - .setTitle(mContext.getString( - R.string.custom_theme_title, customThemesCount + 1)) - .build(mContext)); - } - customThemesCount++; - } - } catch (JSONException e) { - Log.w(TAG, "Couldn't read stored custom theme, resetting", e); - mThemes.add(new CustomTheme.Builder() - .setId(CustomTheme.newId()) - .setTitle(mContext.getString( - R.string.custom_theme_title, customThemesCount + 1)) - .build(mContext)); - } - } - } - - @Nullable - @Override - public ThemeBundle.Builder parseThemeBundle(String serializedTheme) throws JSONException { - JSONObject theme = new JSONObject(serializedTheme); - try { - ThemeBundle.Builder builder = new ThemeBundle.Builder(); - convertJsonToBuilder(theme, builder); - return builder; - } catch (NameNotFoundException | NotFoundException e) { - Log.i(TAG, "Couldn't parse serialized custom theme", e); - return null; - } - } - - @Nullable - @Override - public CustomTheme.Builder parseCustomTheme(String serializedTheme) throws JSONException { - JSONObject theme = new JSONObject(serializedTheme); - try { - CustomTheme.Builder builder = new CustomTheme.Builder(); - convertJsonToBuilder(theme, builder); - return builder; - } catch (NameNotFoundException | NotFoundException e) { - Log.i(TAG, "Couldn't parse serialized custom theme", e); - return null; - } - } - - private void convertJsonToBuilder(JSONObject theme, ThemeBundle.Builder builder) - throws JSONException, NameNotFoundException, NotFoundException { - Map<String, String> customPackages = new HashMap<>(); - Iterator<String> keysIterator = theme.keys(); - - while (keysIterator.hasNext()) { - String category = keysIterator.next(); - customPackages.put(category, theme.getString(category)); - } - mOverlayProvider.addShapeOverlay(builder, - customPackages.get(OVERLAY_CATEGORY_SHAPE)); - mOverlayProvider.addFontOverlay(builder, - customPackages.get(OVERLAY_CATEGORY_FONT)); - mOverlayProvider.addColorOverlay(builder, - customPackages.get(OVERLAY_CATEGORY_COLOR)); - mOverlayProvider.addAndroidIconOverlay(builder, - customPackages.get(OVERLAY_CATEGORY_ICON_ANDROID)); - mOverlayProvider.addSysUiIconOverlay(builder, - customPackages.get(OVERLAY_CATEGORY_ICON_SYSUI)); - mOverlayProvider.addNoPreviewIconOverlay(builder, - customPackages.get(OVERLAY_CATEGORY_ICON_SETTINGS)); - mOverlayProvider.addNoPreviewIconOverlay(builder, - customPackages.get(OVERLAY_CATEGORY_ICON_LAUNCHER)); - mOverlayProvider.addNoPreviewIconOverlay(builder, - customPackages.get(OVERLAY_CATEGORY_ICON_THEMEPICKER)); - if (theme.has(THEME_TITLE_FIELD)) { - builder.setTitle(theme.getString(THEME_TITLE_FIELD)); - } - if (builder instanceof CustomTheme.Builder && theme.has(THEME_ID_FIELD)) { - ((CustomTheme.Builder) builder).setId(theme.getString(THEME_ID_FIELD)); - } - } - - @Override - public ThemeBundle findEquivalent(ThemeBundle other) { - if (mThemes == null) { - return null; - } - for (ThemeBundle theme : mThemes) { - if (theme.isEquivalent(other)) { - return theme; - } - } - return null; - } - - private String getOverlayPackage(String prefix, String themeName) { - return getItemStringFromStub(prefix, themeName); - } -} diff --git a/src/com/android/customization/model/theme/OverlayThemeExtractor.java b/src/com/android/customization/model/theme/OverlayThemeExtractor.java deleted file mode 100644 index 816176e7..00000000 --- a/src/com/android/customization/model/theme/OverlayThemeExtractor.java +++ /dev/null @@ -1,293 +0,0 @@ -package com.android.customization.model.theme; - -import static com.android.customization.model.ResourceConstants.ANDROID_PACKAGE; -import static com.android.customization.model.ResourceConstants.ICONS_FOR_PREVIEW; -import static com.android.customization.model.ResourceConstants.SETTINGS_PACKAGE; -import static com.android.customization.model.ResourceConstants.SYSUI_PACKAGE; - -import android.content.Context; -import android.content.om.OverlayInfo; -import android.content.om.OverlayManager; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager.NameNotFoundException; -import android.content.res.Resources; -import android.content.res.Resources.NotFoundException; -import android.graphics.Typeface; -import android.graphics.drawable.Drawable; -import android.os.UserHandle; -import android.text.TextUtils; -import android.util.Log; - -import androidx.annotation.Dimension; -import androidx.annotation.Nullable; - -import com.android.customization.model.ResourceConstants; -import com.android.customization.model.theme.ThemeBundle.Builder; -import com.android.customization.model.theme.ThemeBundle.PreviewInfo.ShapeAppIcon; -import com.android.wallpaper.R; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.function.Consumer; - -class OverlayThemeExtractor { - - private static final String TAG = "OverlayThemeExtractor"; - - private final Context mContext; - private final Map<String, OverlayInfo> mOverlayInfos = new HashMap<>(); - // List of packages - private final String[] mShapePreviewIconPackages; - - OverlayThemeExtractor(Context context) { - mContext = context; - OverlayManager om = context.getSystemService(OverlayManager.class); - if (om != null) { - Consumer<OverlayInfo> addToMap = overlayInfo -> mOverlayInfos.put( - overlayInfo.getPackageName(), overlayInfo); - - UserHandle user = UserHandle.of(UserHandle.myUserId()); - om.getOverlayInfosForTarget(ANDROID_PACKAGE, user).forEach(addToMap); - om.getOverlayInfosForTarget(SYSUI_PACKAGE, user).forEach(addToMap); - om.getOverlayInfosForTarget(SETTINGS_PACKAGE, user).forEach(addToMap); - om.getOverlayInfosForTarget(ResourceConstants.getLauncherPackage(context), user) - .forEach(addToMap); - om.getOverlayInfosForTarget(context.getPackageName(), user).forEach(addToMap); - } - mShapePreviewIconPackages = context.getResources().getStringArray( - R.array.icon_shape_preview_packages); - } - - boolean isAvailable() { - return !mOverlayInfos.isEmpty(); - } - - void addColorOverlay(Builder builder, String colorOverlayPackage) - throws NameNotFoundException { - if (!TextUtils.isEmpty(colorOverlayPackage)) { - builder.addOverlayPackage(getOverlayCategory(colorOverlayPackage), - colorOverlayPackage) - .setColorAccentLight(loadColor(ResourceConstants.ACCENT_COLOR_LIGHT_NAME, - colorOverlayPackage)) - .setColorAccentDark(loadColor(ResourceConstants.ACCENT_COLOR_DARK_NAME, - colorOverlayPackage)); - } else { - addSystemDefaultColor(builder); - } - } - - void addShapeOverlay(Builder builder, String shapeOverlayPackage) - throws NameNotFoundException { - addShapeOverlay(builder, shapeOverlayPackage, true); - } - - void addShapeOverlay(Builder builder, String shapeOverlayPackage, boolean addPreview) - throws NameNotFoundException { - if (!TextUtils.isEmpty(shapeOverlayPackage)) { - builder.addOverlayPackage(getOverlayCategory(shapeOverlayPackage), - shapeOverlayPackage) - .setShapePath( - loadString(ResourceConstants.CONFIG_ICON_MASK, shapeOverlayPackage)) - .setBottomSheetCornerRadius( - loadDimen(ResourceConstants.CONFIG_CORNERRADIUS, shapeOverlayPackage)); - } else { - addSystemDefaultShape(builder); - } - if (addPreview) { - addShapePreviewIcons(builder); - } - } - - private void addShapePreviewIcons(Builder builder) { - List<ShapeAppIcon> icons = new ArrayList<>(); - for (String packageName : mShapePreviewIconPackages) { - Drawable icon = null; - CharSequence name = null; - try { - icon = mContext.getPackageManager().getApplicationIcon(packageName); - // Add the shape icon app name. - ApplicationInfo appInfo = mContext.getPackageManager() - .getApplicationInfo(packageName, /* flag= */ 0); - name = mContext.getPackageManager().getApplicationLabel(appInfo); - } catch (NameNotFoundException e) { - Log.d(TAG, "Couldn't find app " + packageName - + ", won't use it for icon shape preview"); - } finally { - if (icon != null && !TextUtils.isEmpty(name)) { - icons.add(new ShapeAppIcon(icon, name)); - } - } - } - builder.setShapePreviewIcons(icons); - } - - void addNoPreviewIconOverlay(Builder builder, String overlayPackage) { - if (!TextUtils.isEmpty(overlayPackage)) { - builder.addOverlayPackage(getOverlayCategory(overlayPackage), - overlayPackage); - } - } - - void addSysUiIconOverlay(Builder builder, String iconSysUiOverlayPackage) - throws NameNotFoundException { - if (!TextUtils.isEmpty(iconSysUiOverlayPackage)) { - addIconOverlay(builder, iconSysUiOverlayPackage); - } - } - - void addAndroidIconOverlay(Builder builder, String iconAndroidOverlayPackage) - throws NameNotFoundException { - if (!TextUtils.isEmpty(iconAndroidOverlayPackage)) { - addIconOverlay(builder, iconAndroidOverlayPackage, ICONS_FOR_PREVIEW); - } else { - addSystemDefaultIcons(builder, ANDROID_PACKAGE, ICONS_FOR_PREVIEW); - } - } - - void addIconOverlay(Builder builder, String packageName, String... previewIcons) - throws NameNotFoundException { - builder.addOverlayPackage(getOverlayCategory(packageName), packageName); - for (String iconName : previewIcons) { - builder.addIcon(loadIconPreviewDrawable(iconName, packageName, false)); - } - } - - void addFontOverlay(Builder builder, String fontOverlayPackage) - throws NameNotFoundException { - if (!TextUtils.isEmpty(fontOverlayPackage)) { - builder.addOverlayPackage(getOverlayCategory(fontOverlayPackage), - fontOverlayPackage) - .setBodyFontFamily(loadTypeface( - ResourceConstants.CONFIG_BODY_FONT_FAMILY, - fontOverlayPackage)) - .setHeadlineFontFamily(loadTypeface( - ResourceConstants.CONFIG_HEADLINE_FONT_FAMILY, - fontOverlayPackage)); - } else { - addSystemDefaultFont(builder); - } - } - - void addSystemDefaultIcons(Builder builder, String packageName, - String... previewIcons) { - try { - for (String iconName : previewIcons) { - builder.addIcon(loadIconPreviewDrawable(iconName, packageName, true)); - } - } catch (NameNotFoundException | NotFoundException e) { - Log.w(TAG, "Didn't find android package icons, will skip preview", e); - } - } - - void addSystemDefaultShape(Builder builder) { - Resources system = Resources.getSystem(); - String iconMaskPath = system.getString( - system.getIdentifier(ResourceConstants.CONFIG_ICON_MASK, - "string", ResourceConstants.ANDROID_PACKAGE)); - builder.setShapePath(iconMaskPath) - .setBottomSheetCornerRadius( - system.getDimensionPixelOffset( - system.getIdentifier(ResourceConstants.CONFIG_CORNERRADIUS, - "dimen", ResourceConstants.ANDROID_PACKAGE))); - } - - void addSystemDefaultColor(Builder builder) { - Resources system = Resources.getSystem(); - int colorAccentLight = system.getColor( - system.getIdentifier(ResourceConstants.ACCENT_COLOR_LIGHT_NAME, "color", - ResourceConstants.ANDROID_PACKAGE), null); - builder.setColorAccentLight(colorAccentLight); - - int colorAccentDark = system.getColor( - system.getIdentifier(ResourceConstants.ACCENT_COLOR_DARK_NAME, "color", - ResourceConstants.ANDROID_PACKAGE), null); - builder.setColorAccentDark(colorAccentDark); - } - - void addSystemDefaultFont(Builder builder) { - Resources system = Resources.getSystem(); - String headlineFontFamily = system.getString(system.getIdentifier( - ResourceConstants.CONFIG_HEADLINE_FONT_FAMILY, "string", - ResourceConstants.ANDROID_PACKAGE)); - String bodyFontFamily = system.getString(system.getIdentifier( - ResourceConstants.CONFIG_BODY_FONT_FAMILY, - "string", ResourceConstants.ANDROID_PACKAGE)); - builder.setHeadlineFontFamily(Typeface.create(headlineFontFamily, Typeface.NORMAL)) - .setBodyFontFamily(Typeface.create(bodyFontFamily, Typeface.NORMAL)); - } - - Typeface loadTypeface(String configName, String fontOverlayPackage) - throws NameNotFoundException, NotFoundException { - - // TODO(santie): check for font being present in system - - Resources overlayRes = mContext.getPackageManager() - .getResourcesForApplication(fontOverlayPackage); - - String fontFamily = overlayRes.getString(overlayRes.getIdentifier(configName, - "string", fontOverlayPackage)); - return Typeface.create(fontFamily, Typeface.NORMAL); - } - - int loadColor(String colorName, String colorPackage) - throws NameNotFoundException, NotFoundException { - - Resources overlayRes = mContext.getPackageManager() - .getResourcesForApplication(colorPackage); - return overlayRes.getColor(overlayRes.getIdentifier(colorName, "color", colorPackage), - null); - } - - String loadString(String stringName, String packageName) - throws NameNotFoundException, NotFoundException { - - Resources overlayRes = - mContext.getPackageManager().getResourcesForApplication( - packageName); - return overlayRes.getString(overlayRes.getIdentifier(stringName, "string", packageName)); - } - - @Dimension - int loadDimen(String dimenName, String packageName) - throws NameNotFoundException, NotFoundException { - - Resources overlayRes = - mContext.getPackageManager().getResourcesForApplication( - packageName); - return overlayRes.getDimensionPixelOffset(overlayRes.getIdentifier( - dimenName, "dimen", packageName)); - } - - boolean loadBoolean(String booleanName, String packageName) - throws NameNotFoundException, NotFoundException { - - Resources overlayRes = - mContext.getPackageManager().getResourcesForApplication( - packageName); - return overlayRes.getBoolean(overlayRes.getIdentifier( - booleanName, "boolean", packageName)); - } - - Drawable loadIconPreviewDrawable(String drawableName, String packageName, - boolean fromSystem) throws NameNotFoundException, NotFoundException { - - Resources packageRes = - mContext.getPackageManager().getResourcesForApplication( - packageName); - Resources res = fromSystem ? Resources.getSystem() : packageRes; - return res.getDrawable( - packageRes.getIdentifier(drawableName, "drawable", packageName), null); - } - - @Nullable - String getOverlayCategory(String packageName) { - OverlayInfo info = mOverlayInfos.get(packageName); - return info != null ? info.getCategory() : null; - } - - String[] getShapePreviewIconPackages() { - return mShapePreviewIconPackages; - } -}
\ No newline at end of file diff --git a/src/com/android/customization/model/theme/ThemeBundle.java b/src/com/android/customization/model/theme/ThemeBundle.java deleted file mode 100644 index 3a32f257..00000000 --- a/src/com/android/customization/model/theme/ThemeBundle.java +++ /dev/null @@ -1,432 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.model.theme; - -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_COLOR; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_FONT; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_ANDROID; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_SHAPE; -import static com.android.customization.model.ResourceConstants.PATH_SIZE; - -import android.content.Context; -import android.content.pm.PackageManager; -import android.content.res.Configuration; -import android.content.res.Resources; -import android.graphics.Path; -import android.graphics.Typeface; -import android.graphics.drawable.AdaptiveIconDrawable; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.ShapeDrawable; -import android.graphics.drawable.shapes.PathShape; -import android.text.TextUtils; -import android.util.Log; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.annotation.ColorInt; -import androidx.annotation.Dimension; -import androidx.annotation.Nullable; -import androidx.core.graphics.PathParser; - -import com.android.customization.model.CustomizationManager; -import com.android.customization.model.CustomizationOption; -import com.android.customization.model.theme.ThemeBundle.PreviewInfo.ShapeAppIcon; -import com.android.customization.widget.DynamicAdaptiveIconDrawable; -import com.android.wallpaper.R; -import com.android.wallpaper.asset.Asset; -import com.android.wallpaper.asset.BitmapCachingAsset; -import com.android.wallpaper.model.WallpaperInfo; -import com.android.wallpaper.util.ResourceUtils; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -/** - * Represents a Theme component available in the system as a "persona" bundle. - * Note that in this context a Theme is not related to Android's Styles, but it's rather an - * abstraction representing a series of overlays to be applied to the system. - */ -public class ThemeBundle implements CustomizationOption<ThemeBundle> { - - private static final String TAG = "ThemeBundle"; - private final static String EMPTY_JSON = "{}"; - private final static String TIMESTAMP_FIELD = "_applied_timestamp"; - - private final String mTitle; - private final PreviewInfo mPreviewInfo; - private final boolean mIsDefault; - protected final Map<String, String> mPackagesByCategory; - private WallpaperInfo mOverrideWallpaper; - private Asset mOverrideWallpaperAsset; - private CharSequence mContentDescription; - - protected ThemeBundle(String title, Map<String, String> overlayPackages, - boolean isDefault, PreviewInfo previewInfo) { - mTitle = title; - mIsDefault = isDefault; - mPreviewInfo = previewInfo; - mPackagesByCategory = Collections.unmodifiableMap(removeNullValues(overlayPackages)); - } - - @Override - public String getTitle() { - return mTitle; - } - - @Override - public void bindThumbnailTile(View view) { - Resources res = view.getContext().getResources(); - - ((TextView) view.findViewById(R.id.theme_option_font)).setTypeface( - mPreviewInfo.headlineFontFamily); - if (mPreviewInfo.shapeDrawable != null) { - ((ShapeDrawable) mPreviewInfo.shapeDrawable).getPaint().setColor( - mPreviewInfo.resolveAccentColor(res)); - ((ImageView) view.findViewById(R.id.theme_option_shape)).setImageDrawable( - mPreviewInfo.shapeDrawable); - } - if (!mPreviewInfo.icons.isEmpty()) { - Drawable icon = mPreviewInfo.icons.get(0).getConstantState().newDrawable().mutate(); - icon.setTint(ResourceUtils.getColorAttr( - view.getContext(), android.R.attr.textColorSecondary)); - ((ImageView) view.findViewById(R.id.theme_option_icon)).setImageDrawable( - icon); - } - view.setContentDescription(getContentDescription(view.getContext())); - } - - @Override - public boolean isActive(CustomizationManager<ThemeBundle> manager) { - ThemeManager themeManager = (ThemeManager) manager; - - if (mIsDefault) { - String serializedOverlays = themeManager.getStoredOverlays(); - return TextUtils.isEmpty(serializedOverlays) || EMPTY_JSON.equals(serializedOverlays); - } else { - Map<String, String> currentOverlays = themeManager.getCurrentOverlays(); - return mPackagesByCategory.equals(currentOverlays); - } - } - - @Override - public int getLayoutResId() { - return R.layout.theme_option; - } - - /** - * This is similar to #equals() but it only compares this theme's packages with the other, that - * is, it will return true if applying this theme has the same effect of applying the given one. - */ - public boolean isEquivalent(ThemeBundle other) { - if (other == null) { - return false; - } - if (mIsDefault) { - return other.isDefault() || TextUtils.isEmpty(other.getSerializedPackages()) - || EMPTY_JSON.equals(other.getSerializedPackages()); - } - // Map#equals ensures keys and values are compared. - return mPackagesByCategory.equals(other.mPackagesByCategory); - } - - public PreviewInfo getPreviewInfo() { - return mPreviewInfo; - } - - public void setOverrideThemeWallpaper(WallpaperInfo homeWallpaper) { - mOverrideWallpaper = homeWallpaper; - mOverrideWallpaperAsset = null; - } - - private Asset getOverrideWallpaperAsset(Context context) { - if (mOverrideWallpaperAsset == null) { - mOverrideWallpaperAsset = new BitmapCachingAsset(context, - mOverrideWallpaper.getThumbAsset(context)); - } - return mOverrideWallpaperAsset; - } - - boolean isDefault() { - return mIsDefault; - } - - public Map<String, String> getPackagesByCategory() { - return mPackagesByCategory; - } - - public String getSerializedPackages() { - return getJsonPackages(false).toString(); - } - - public String getSerializedPackagesWithTimestamp() { - return getJsonPackages(true).toString(); - } - - JSONObject getJsonPackages(boolean insertTimestamp) { - if (isDefault()) { - return new JSONObject(); - } - JSONObject json = new JSONObject(mPackagesByCategory); - // Remove items with null values to avoid deserialization issues. - removeNullValues(json); - if (insertTimestamp) { - try { - json.put(TIMESTAMP_FIELD, System.currentTimeMillis()); - } catch (JSONException e) { - Log.e(TAG, "Couldn't add timestamp to serialized themebundle"); - } - } - return json; - } - - private void removeNullValues(JSONObject json) { - Iterator<String> keys = json.keys(); - Set<String> keysToRemove = new HashSet<>(); - while(keys.hasNext()) { - String key = keys.next(); - if (json.isNull(key)) { - keysToRemove.add(key); - } - } - for (String key : keysToRemove) { - json.remove(key); - } - } - - private Map<String, String> removeNullValues(Map<String, String> map) { - return map.entrySet() - .stream() - .filter(entry -> entry.getValue() != null) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); - } - - protected CharSequence getContentDescription(Context context) { - if (mContentDescription == null) { - CharSequence defaultName = context.getString(R.string.default_theme_title); - if (isDefault()) { - mContentDescription = defaultName; - } else { - PackageManager pm = context.getPackageManager(); - CharSequence fontName = getOverlayName(pm, OVERLAY_CATEGORY_FONT); - CharSequence iconName = getOverlayName(pm, OVERLAY_CATEGORY_ICON_ANDROID); - CharSequence shapeName = getOverlayName(pm, OVERLAY_CATEGORY_SHAPE); - CharSequence colorName = getOverlayName(pm, OVERLAY_CATEGORY_COLOR); - mContentDescription = context.getString(R.string.theme_description, - TextUtils.isEmpty(fontName) ? defaultName : fontName, - TextUtils.isEmpty(iconName) ? defaultName : iconName, - TextUtils.isEmpty(shapeName) ? defaultName : shapeName, - TextUtils.isEmpty(colorName) ? defaultName : colorName); - } - } - return mContentDescription; - } - - private CharSequence getOverlayName(PackageManager pm, String overlayCategoryFont) { - try { - return pm.getApplicationInfo( - mPackagesByCategory.get(overlayCategoryFont), 0).loadLabel(pm); - } catch (PackageManager.NameNotFoundException e) { - return ""; - } - } - - public static class PreviewInfo { - public final Typeface bodyFontFamily; - public final Typeface headlineFontFamily; - @ColorInt public final int colorAccentLight; - @ColorInt public final int colorAccentDark; - public final List<Drawable> icons; - public final Drawable shapeDrawable; - public final List<ShapeAppIcon> shapeAppIcons; - @Dimension public final int bottomSheeetCornerRadius; - - /** A class to represent an App icon and its name. */ - public static class ShapeAppIcon { - private Drawable mIconDrawable; - private CharSequence mAppName; - - public ShapeAppIcon(Drawable icon, CharSequence appName) { - mIconDrawable = icon; - mAppName = appName; - } - - /** Returns a copy of app icon drawable. */ - public Drawable getDrawableCopy() { - return mIconDrawable.getConstantState().newDrawable().mutate(); - } - - /** Returns the app name. */ - public CharSequence getAppName() { - return mAppName; - } - } - - private PreviewInfo(Context context, Typeface bodyFontFamily, Typeface headlineFontFamily, - int colorAccentLight, int colorAccentDark, List<Drawable> icons, - Drawable shapeDrawable, @Dimension int cornerRadius, - List<ShapeAppIcon> shapeAppIcons) { - this.bodyFontFamily = bodyFontFamily; - this.headlineFontFamily = headlineFontFamily; - this.colorAccentLight = colorAccentLight; - this.colorAccentDark = colorAccentDark; - this.icons = icons; - this.shapeDrawable = shapeDrawable; - this.bottomSheeetCornerRadius = cornerRadius; - this.shapeAppIcons = shapeAppIcons; - } - - /** - * Returns the accent color to be applied corresponding with the current configuration's - * UI mode. - * @return one of {@link #colorAccentDark} or {@link #colorAccentLight} - */ - @ColorInt - public int resolveAccentColor(Resources res) { - return (res.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) - == Configuration.UI_MODE_NIGHT_YES ? colorAccentDark : colorAccentLight; - } - } - - public static class Builder { - protected String mTitle; - private Typeface mBodyFontFamily; - private Typeface mHeadlineFontFamily; - @ColorInt private int mColorAccentLight = -1; - @ColorInt private int mColorAccentDark = -1; - private List<Drawable> mIcons = new ArrayList<>(); - private String mPathString; - private Path mShapePath; - private boolean mIsDefault; - @Dimension private int mCornerRadius; - protected Map<String, String> mPackages = new HashMap<>(); - private List<ShapeAppIcon> mAppIcons = new ArrayList<>(); - - public ThemeBundle build(Context context) { - return new ThemeBundle(mTitle, mPackages, mIsDefault, createPreviewInfo(context)); - } - - public PreviewInfo createPreviewInfo(Context context) { - ShapeDrawable shapeDrawable = null; - List<ShapeAppIcon> shapeIcons = new ArrayList<>(); - Path path = mShapePath; - if (!TextUtils.isEmpty(mPathString)) { - path = PathParser.createPathFromPathData(mPathString); - } - if (path != null) { - PathShape shape = new PathShape(path, PATH_SIZE, PATH_SIZE); - shapeDrawable = new ShapeDrawable(shape); - shapeDrawable.setIntrinsicHeight((int) PATH_SIZE); - shapeDrawable.setIntrinsicWidth((int) PATH_SIZE); - for (ShapeAppIcon icon : mAppIcons) { - Drawable drawable = icon.mIconDrawable; - if (drawable instanceof AdaptiveIconDrawable) { - AdaptiveIconDrawable adaptiveIcon = (AdaptiveIconDrawable) drawable; - shapeIcons.add(new ShapeAppIcon( - new DynamicAdaptiveIconDrawable(adaptiveIcon.getBackground(), - adaptiveIcon.getForeground(), path), - icon.getAppName())); - } else if (drawable instanceof DynamicAdaptiveIconDrawable) { - shapeIcons.add(icon); - } - // TODO: add iconloader library's legacy treatment helper methods for - // non-adaptive icons - } - } - return new PreviewInfo(context, mBodyFontFamily, mHeadlineFontFamily, mColorAccentLight, - mColorAccentDark, mIcons, shapeDrawable, mCornerRadius, shapeIcons); - } - - public Map<String, String> getPackages() { - return Collections.unmodifiableMap(mPackages); - } - - public String getTitle() { - return mTitle; - } - - public Builder setTitle(String title) { - mTitle = title; - return this; - } - - public Builder setBodyFontFamily(@Nullable Typeface bodyFontFamily) { - mBodyFontFamily = bodyFontFamily; - return this; - } - - public Builder setHeadlineFontFamily(@Nullable Typeface headlineFontFamily) { - mHeadlineFontFamily = headlineFontFamily; - return this; - } - - public Builder setColorAccentLight(@ColorInt int colorAccentLight) { - mColorAccentLight = colorAccentLight; - return this; - } - - public Builder setColorAccentDark(@ColorInt int colorAccentDark) { - mColorAccentDark = colorAccentDark; - return this; - } - - public Builder addIcon(Drawable icon) { - mIcons.add(icon); - return this; - } - - public Builder addOverlayPackage(String category, String packageName) { - mPackages.put(category, packageName); - return this; - } - - public Builder setShapePath(String path) { - mPathString = path; - return this; - } - - public Builder setShapePath(Path path) { - mShapePath = path; - return this; - } - - public Builder asDefault() { - mIsDefault = true; - return this; - } - - public Builder setShapePreviewIcons(List<ShapeAppIcon> appIcons) { - mAppIcons.clear(); - mAppIcons.addAll(appIcons); - return this; - } - - public Builder setBottomSheetCornerRadius(@Dimension int radius) { - mCornerRadius = radius; - return this; - } - } -} diff --git a/src/com/android/customization/model/theme/ThemeBundleProvider.java b/src/com/android/customization/model/theme/ThemeBundleProvider.java deleted file mode 100644 index 34342b31..00000000 --- a/src/com/android/customization/model/theme/ThemeBundleProvider.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.model.theme; - -import androidx.annotation.Nullable; - -import com.android.customization.model.CustomizationManager.OptionsFetchedListener; -import com.android.customization.model.theme.custom.CustomTheme; - -import org.json.JSONException; - -/** - * Interface for a class that can retrieve Themes from the system. - */ -public interface ThemeBundleProvider { - - /** - * Returns whether themes are available in the current setup. - */ - boolean isAvailable(); - - /** - * Retrieve the available themes. - * @param callback called when the themes have been retrieved (or immediately if cached) - * @param reload whether to reload themes if they're cached. - */ - void fetch(OptionsFetchedListener<ThemeBundle> callback, boolean reload); - - void storeCustomTheme(CustomTheme theme); - - void removeCustomTheme(CustomTheme theme); - - @Nullable ThemeBundle.Builder parseThemeBundle(String serializedTheme) throws JSONException; - - @Nullable CustomTheme.Builder parseCustomTheme(String serializedTheme) throws JSONException; - - ThemeBundle findEquivalent(ThemeBundle other); -} diff --git a/src/com/android/customization/model/theme/ThemeBundledWallpaperInfo.java b/src/com/android/customization/model/theme/ThemeBundledWallpaperInfo.java deleted file mode 100644 index 4f0cd6c7..00000000 --- a/src/com/android/customization/model/theme/ThemeBundledWallpaperInfo.java +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.model.theme; - -import android.app.Activity; -import android.content.ActivityNotFoundException; -import android.content.Context; -import android.content.pm.PackageManager; -import android.content.res.Resources; -import android.os.Parcel; -import android.util.Log; - -import androidx.annotation.DrawableRes; -import androidx.annotation.StringRes; - -import com.android.wallpaper.asset.Asset; -import com.android.wallpaper.asset.ResourceAsset; -import com.android.wallpaper.model.InlinePreviewIntentFactory; -import com.android.wallpaper.model.WallpaperInfo; - -import java.util.ArrayList; -import java.util.List; - -/** - * Represents a wallpaper coming from the resources of the theme bundle container APK. - */ -public class ThemeBundledWallpaperInfo extends WallpaperInfo { - public static final Creator<ThemeBundledWallpaperInfo> CREATOR = - new Creator<ThemeBundledWallpaperInfo>() { - @Override - public ThemeBundledWallpaperInfo createFromParcel(Parcel in) { - return new ThemeBundledWallpaperInfo(in); - } - - @Override - public ThemeBundledWallpaperInfo[] newArray(int size) { - return new ThemeBundledWallpaperInfo[size]; - } - }; - - private static final String TAG = "ThemeBundledWallpaperInfo"; - - private final String mPackageName; - private final String mResName; - private final String mCollectionId; - @DrawableRes private final int mDrawableResId; - @StringRes private final int mTitleResId; - @StringRes private final int mAttributionResId; - @StringRes private final int mActionUrlResId; - private List<String> mAttributions; - private String mActionUrl; - private Resources mResources; - private Asset mAsset; - - /** - * Constructs a new theme-bundled static wallpaper model object. - * - * @param drawableResId Resource ID of the raw wallpaper image. - * @param resName The unique name of the wallpaper resource, e.g. "z_wp001". - * @param themeName Unique name of the collection this wallpaper belongs in; used for logging. - * @param titleResId Resource ID of the string for the title attribution. - * @param attributionResId Resource ID of the string for the first subtitle attribution. - */ - public ThemeBundledWallpaperInfo(String packageName, String resName, String themeName, - int drawableResId, int titleResId, int attributionResId, int actionUrlResId) { - mPackageName = packageName; - mResName = resName; - mCollectionId = themeName; - mDrawableResId = drawableResId; - mTitleResId = titleResId; - mAttributionResId = attributionResId; - mActionUrlResId = actionUrlResId; - } - - private ThemeBundledWallpaperInfo(Parcel in) { - super(in); - mPackageName = in.readString(); - mResName = in.readString(); - mCollectionId = in.readString(); - mDrawableResId = in.readInt(); - mTitleResId = in.readInt(); - mAttributionResId = in.readInt(); - mActionUrlResId = in.readInt(); - } - - @Override - public List<String> getAttributions(Context context) { - if (mAttributions == null) { - Resources res = getPackageResources(context); - mAttributions = new ArrayList<>(); - if (mTitleResId != 0) { - mAttributions.add(res.getString(mTitleResId)); - } - if (mAttributionResId != 0) { - mAttributions.add(res.getString(mAttributionResId)); - } - } - - return mAttributions; - } - - @Override - public String getActionUrl(Context context) { - if (mActionUrl == null && mActionUrlResId != 0) { - mActionUrl = getPackageResources(context).getString(mActionUrlResId); - } - return mActionUrl; - } - - @Override - public Asset getAsset(Context context) { - if (mAsset == null) { - Resources res = getPackageResources(context); - mAsset = new ResourceAsset(res, mDrawableResId); - } - - return mAsset; - } - - @Override - public Asset getThumbAsset(Context context) { - return getAsset(context); - } - - @Override - public void showPreview(Activity srcActivity, InlinePreviewIntentFactory factory, - int requestCode, boolean isAssetIdPresent) { - try { - srcActivity.startActivityForResult(factory.newIntent(srcActivity, this, - isAssetIdPresent), requestCode); - } catch (ActivityNotFoundException |SecurityException e) { - Log.e(TAG, "App isn't installed or ThemePicker doesn't have permission to launch", e); - } - } - - @Override - public String getCollectionId(Context unused) { - return mCollectionId; - } - - @Override - public String getWallpaperId() { - return mResName; - } - - public String getResName() { - return mResName; - } - - /** - * Returns the {@link Resources} instance for the theme bundles stub APK. - */ - private Resources getPackageResources(Context context) { - if (mResources != null) { - return mResources; - } - - try { - mResources = context.getPackageManager().getResourcesForApplication(mPackageName); - } catch (PackageManager.NameNotFoundException e) { - Log.e(TAG, "Could not get app resources for " + mPackageName); - } - return mResources; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - super.writeToParcel(dest, flags); - dest.writeString(mPackageName); - dest.writeString(mResName); - dest.writeString(mCollectionId); - dest.writeInt(mDrawableResId); - dest.writeInt(mTitleResId); - dest.writeInt(mAttributionResId); - dest.writeInt(mActionUrlResId); - } -} diff --git a/src/com/android/customization/model/theme/ThemeManager.java b/src/com/android/customization/model/theme/ThemeManager.java deleted file mode 100644 index 85241c13..00000000 --- a/src/com/android/customization/model/theme/ThemeManager.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.model.theme; - -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_COLOR; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_FONT; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_ANDROID; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_LAUNCHER; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_SETTINGS; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_SYSUI; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_THEMEPICKER; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_SHAPE; - -import android.provider.Settings; -import android.text.TextUtils; - -import androidx.annotation.Nullable; -import androidx.fragment.app.FragmentActivity; - -import com.android.customization.model.CustomizationManager; -import com.android.customization.model.ResourceConstants; -import com.android.customization.model.theme.custom.CustomTheme; -import com.android.customization.module.ThemesUserEventLogger; - -import org.json.JSONObject; - -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -public class ThemeManager implements CustomizationManager<ThemeBundle> { - - public static final Set<String> THEME_CATEGORIES = new HashSet<>(); - static { - THEME_CATEGORIES.add(OVERLAY_CATEGORY_COLOR); - THEME_CATEGORIES.add(OVERLAY_CATEGORY_FONT); - THEME_CATEGORIES.add(OVERLAY_CATEGORY_SHAPE); - THEME_CATEGORIES.add(OVERLAY_CATEGORY_ICON_ANDROID); - THEME_CATEGORIES.add(OVERLAY_CATEGORY_ICON_SETTINGS); - THEME_CATEGORIES.add(OVERLAY_CATEGORY_ICON_SYSUI); - THEME_CATEGORIES.add(OVERLAY_CATEGORY_ICON_LAUNCHER); - THEME_CATEGORIES.add(OVERLAY_CATEGORY_ICON_THEMEPICKER); - } - - private final ThemeBundleProvider mProvider; - private final OverlayManagerCompat mOverlayManagerCompat; - - protected final FragmentActivity mActivity; - private final ThemesUserEventLogger mEventLogger; - - private Map<String, String> mCurrentOverlays; - - public ThemeManager(ThemeBundleProvider provider, FragmentActivity activity, - OverlayManagerCompat overlayManagerCompat, - ThemesUserEventLogger logger) { - mProvider = provider; - mActivity = activity; - mOverlayManagerCompat = overlayManagerCompat; - mEventLogger = logger; - } - - @Override - public boolean isAvailable() { - return mOverlayManagerCompat.isAvailable() && mProvider.isAvailable(); - } - - @Override - public void apply(ThemeBundle theme, Callback callback) { - applyOverlays(theme, callback); - } - - private void applyOverlays(ThemeBundle theme, Callback callback) { - boolean allApplied = Settings.Secure.putString(mActivity.getContentResolver(), - ResourceConstants.THEME_SETTING, theme.getSerializedPackagesWithTimestamp()); - if (theme instanceof CustomTheme) { - storeCustomTheme((CustomTheme) theme); - } - mCurrentOverlays = null; - if (allApplied) { - mEventLogger.logThemeApplied(theme, theme instanceof CustomTheme); - callback.onSuccess(); - } else { - callback.onError(null); - } - } - - private void storeCustomTheme(CustomTheme theme) { - mProvider.storeCustomTheme(theme); - } - - @Override - public void fetchOptions(OptionsFetchedListener<ThemeBundle> callback, boolean reload) { - mProvider.fetch(callback, reload); - } - - public Map<String, String> getCurrentOverlays() { - if (mCurrentOverlays == null) { - mCurrentOverlays = mOverlayManagerCompat.getEnabledOverlaysForTargets( - ResourceConstants.getPackagesToOverlay(mActivity)); - mCurrentOverlays.entrySet().removeIf( - categoryAndPackage -> !THEME_CATEGORIES.contains(categoryAndPackage.getKey())); - } - return mCurrentOverlays; - } - - public String getStoredOverlays() { - return Settings.Secure.getString(mActivity.getContentResolver(), - ResourceConstants.THEME_SETTING); - } - - public void removeCustomTheme(CustomTheme theme) { - mProvider.removeCustomTheme(theme); - } - - /** - * @return an existing ThemeBundle that matches the same packages as the given one, if one - * exists, or {@code null} otherwise. - */ - @Nullable - public ThemeBundle findThemeByPackages(ThemeBundle other) { - return mProvider.findEquivalent(other); - } - - /** - * Store empty theme if no theme has been set yet. This will prevent Settings from showing the - * suggestion to select a theme - */ - public void storeEmptyTheme() { - String themeSetting = Settings.Secure.getString(mActivity.getContentResolver(), - ResourceConstants.THEME_SETTING); - if (TextUtils.isEmpty(themeSetting)) { - Settings.Secure.putString(mActivity.getContentResolver(), - ResourceConstants.THEME_SETTING, new JSONObject().toString()); - } - } -} diff --git a/src/com/android/customization/model/theme/custom/ColorOptionsProvider.java b/src/com/android/customization/model/theme/custom/ColorOptionsProvider.java deleted file mode 100644 index f3b950b5..00000000 --- a/src/com/android/customization/model/theme/custom/ColorOptionsProvider.java +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.model.theme.custom; - -import static com.android.customization.model.ResourceConstants.ACCENT_COLOR_DARK_NAME; -import static com.android.customization.model.ResourceConstants.ACCENT_COLOR_LIGHT_NAME; -import static com.android.customization.model.ResourceConstants.ANDROID_PACKAGE; -import static com.android.customization.model.ResourceConstants.ICONS_FOR_PREVIEW; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ANDROID_THEME; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_COLOR; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_ANDROID; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_SHAPE; -import static com.android.customization.model.ResourceConstants.PATH_SIZE; - -import android.content.Context; -import android.content.pm.PackageManager; -import android.content.pm.PackageManager.NameNotFoundException; -import android.content.res.Resources; -import android.content.res.Resources.NotFoundException; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.ShapeDrawable; -import android.graphics.drawable.shapes.PathShape; -import android.os.UserHandle; -import android.text.TextUtils; -import android.util.Log; - -import androidx.core.graphics.PathParser; - -import com.android.customization.model.ResourceConstants; -import com.android.customization.model.theme.OverlayManagerCompat; -import com.android.customization.model.theme.custom.ThemeComponentOption.ColorOption; -import com.android.wallpaper.R; - -import java.util.ArrayList; -import java.util.List; - -/** - * Implementation of {@link ThemeComponentOptionProvider} that reads {@link ColorOption}s from - * icon overlays. - */ -public class ColorOptionsProvider extends ThemeComponentOptionProvider<ColorOption> { - - private static final String TAG = "ColorOptionsProvider"; - private final CustomThemeManager mCustomThemeManager; - private final String mDefaultThemePackage; - - public ColorOptionsProvider(Context context, OverlayManagerCompat manager, - CustomThemeManager customThemeManager) { - super(context, manager, OVERLAY_CATEGORY_COLOR); - mCustomThemeManager = customThemeManager; - // System color is set with a static overlay for android.theme category, so let's try to - // find that first, and if that's not present, we'll default to System resources. - // (see #addDefault()) - List<String> themePackages = manager.getOverlayPackagesForCategory( - OVERLAY_CATEGORY_ANDROID_THEME, UserHandle.myUserId(), ANDROID_PACKAGE); - mDefaultThemePackage = themePackages.isEmpty() ? null : themePackages.get(0); - } - - @Override - protected void loadOptions() { - List<Drawable> previewIcons = new ArrayList<>(); - String iconPackage = - mCustomThemeManager.getOverlayPackages().get(OVERLAY_CATEGORY_ICON_ANDROID); - if (TextUtils.isEmpty(iconPackage)) { - iconPackage = ANDROID_PACKAGE; - } - for (String iconName : ICONS_FOR_PREVIEW) { - try { - previewIcons.add(loadIconPreviewDrawable(iconName, iconPackage)); - } catch (NameNotFoundException | NotFoundException e) { - Log.w(TAG, String.format("Couldn't load icon in %s for color preview, will skip it", - iconPackage), e); - } - } - String shapePackage = mCustomThemeManager.getOverlayPackages().get(OVERLAY_CATEGORY_SHAPE); - if (TextUtils.isEmpty(shapePackage)) { - shapePackage = ANDROID_PACKAGE; - } - Drawable shape = loadShape(shapePackage); - addDefault(previewIcons, shape); - for (String overlayPackage : mOverlayPackages) { - try { - Resources overlayRes = getOverlayResources(overlayPackage); - int lightColor = overlayRes.getColor( - overlayRes.getIdentifier(ACCENT_COLOR_LIGHT_NAME, "color", overlayPackage), - null); - int darkColor = overlayRes.getColor( - overlayRes.getIdentifier(ACCENT_COLOR_DARK_NAME, "color", overlayPackage), - null); - PackageManager pm = mContext.getPackageManager(); - String label = pm.getApplicationInfo(overlayPackage, 0).loadLabel(pm).toString(); - ColorOption option = new ColorOption(overlayPackage, label, lightColor, darkColor); - option.setPreviewIcons(previewIcons); - option.setShapeDrawable(shape); - mOptions.add(option); - } catch (NameNotFoundException | NotFoundException e) { - Log.w(TAG, String.format("Couldn't load color overlay %s, will skip it", - overlayPackage), e); - } - } - } - - private void addDefault(List<Drawable> previewIcons, Drawable shape) { - int lightColor, darkColor; - Resources system = Resources.getSystem(); - try { - Resources r = getOverlayResources(mDefaultThemePackage); - lightColor = r.getColor( - r.getIdentifier(ACCENT_COLOR_LIGHT_NAME, "color", mDefaultThemePackage), - null); - darkColor = r.getColor( - r.getIdentifier(ACCENT_COLOR_DARK_NAME, "color", mDefaultThemePackage), - null); - } catch (NotFoundException | NameNotFoundException e) { - Log.d(TAG, "Didn't find default color, will use system option", e); - - lightColor = system.getColor( - system.getIdentifier(ACCENT_COLOR_LIGHT_NAME, "color", ANDROID_PACKAGE), null); - - darkColor = system.getColor( - system.getIdentifier(ACCENT_COLOR_DARK_NAME, "color", ANDROID_PACKAGE), null); - } - ColorOption option = new ColorOption(null, - mContext.getString(R.string.default_theme_title), lightColor, darkColor); - option.setPreviewIcons(previewIcons); - option.setShapeDrawable(shape); - mOptions.add(option); - } - - private Drawable loadIconPreviewDrawable(String drawableName, String packageName) - throws NameNotFoundException, NotFoundException { - - Resources overlayRes = getOverlayResources(packageName); - return overlayRes.getDrawable( - overlayRes.getIdentifier(drawableName, "drawable", packageName), null); - } - - private Drawable loadShape(String packageName) { - String path = null; - try { - Resources r = getOverlayResources(packageName); - - path = ResourceConstants.getIconMask(r, packageName); - } catch (NameNotFoundException e) { - Log.d(TAG, String.format("Couldn't load shape icon for %s, skipping.", packageName), e); - } - ShapeDrawable shapeDrawable = null; - if (!TextUtils.isEmpty(path)) { - PathShape shape = new PathShape(PathParser.createPathFromPathData(path), - PATH_SIZE, PATH_SIZE); - shapeDrawable = new ShapeDrawable(shape); - shapeDrawable.setIntrinsicHeight((int) PATH_SIZE); - shapeDrawable.setIntrinsicWidth((int) PATH_SIZE); - } - return shapeDrawable; - } - -} diff --git a/src/com/android/customization/model/theme/custom/CustomTheme.java b/src/com/android/customization/model/theme/custom/CustomTheme.java deleted file mode 100644 index a1ee1066..00000000 --- a/src/com/android/customization/model/theme/custom/CustomTheme.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.model.theme.custom; - -import android.content.Context; -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.android.customization.model.CustomizationManager; -import com.android.customization.model.theme.ThemeBundle; -import com.android.wallpaper.R; - -import java.util.Map; -import java.util.UUID; - -public class CustomTheme extends ThemeBundle { - - public static String newId() { - return UUID.randomUUID().toString(); - } - - /** - * Used to uniquely identify a custom theme since names can change. - */ - private final String mId; - - private CustomTheme(@NonNull String id, String title, Map<String, String> overlayPackages, - @Nullable PreviewInfo previewInfo) { - super(title, overlayPackages, false, previewInfo); - mId = id; - } - - public String getId() { - return mId; - } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof CustomTheme)) { - return false; - } - CustomTheme other = (CustomTheme) obj; - return mId.equals(other.mId); - } - - @Override - public int hashCode() { - return mId.hashCode(); - } - - @Override - public void bindThumbnailTile(View view) { - if (isDefined()) { - super.bindThumbnailTile(view); - } - } - - @Override - public int getLayoutResId() { - return isDefined() ? R.layout.theme_option : R.layout.custom_theme_option; - } - - @Override - public boolean isActive(CustomizationManager<ThemeBundle> manager) { - return isDefined() && super.isActive(manager); - } - - @Override - public boolean isEquivalent(ThemeBundle other) { - return isDefined() && super.isEquivalent(other); - } - - public boolean isDefined() { - return getPreviewInfo() != null; - } - - public static class Builder extends ThemeBundle.Builder { - private String mId; - - @Override - public CustomTheme build(Context context) { - return new CustomTheme(mId, mTitle, mPackages, - mPackages.isEmpty() ? null : createPreviewInfo(context)); - } - - public Builder setId(String id) { - mId = id; - return this; - } - } -} diff --git a/src/com/android/customization/model/theme/custom/CustomThemeManager.java b/src/com/android/customization/model/theme/custom/CustomThemeManager.java deleted file mode 100644 index 42d73e60..00000000 --- a/src/com/android/customization/model/theme/custom/CustomThemeManager.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.model.theme.custom; - -import android.content.Context; -import android.os.Bundle; -import android.text.TextUtils; -import android.util.Log; - -import androidx.annotation.Nullable; - -import com.android.customization.model.CustomizationManager; -import com.android.customization.model.theme.ThemeBundle.PreviewInfo; -import com.android.customization.model.theme.ThemeBundleProvider; -import com.android.customization.model.theme.ThemeManager; -import com.android.customization.model.theme.custom.CustomTheme.Builder; - -import org.json.JSONException; - -import java.util.Map; - -public class CustomThemeManager implements CustomizationManager<ThemeComponentOption> { - - private static final String TAG = "CustomThemeManager"; - private static final String KEY_STATE_CURRENT_SELECTION = "CustomThemeManager.currentSelection"; - - private final CustomTheme mOriginalTheme; - private CustomTheme.Builder mBuilder; - - private CustomThemeManager(Map<String, String> overlayPackages, - @Nullable CustomTheme originalTheme) { - mBuilder = new Builder(); - overlayPackages.forEach(mBuilder::addOverlayPackage); - mOriginalTheme = originalTheme; - } - - @Override - public boolean isAvailable() { - return true; - } - - @Override - public void apply(ThemeComponentOption option, @Nullable Callback callback) { - option.buildStep(mBuilder); - if (callback != null) { - callback.onSuccess(); - } - } - - public Map<String, String> getOverlayPackages() { - return mBuilder.getPackages(); - } - - public CustomTheme buildPartialCustomTheme(Context context, String id, String title) { - return ((CustomTheme.Builder)mBuilder.setId(id).setTitle(title)).build(context); - } - - @Override - public void fetchOptions(OptionsFetchedListener<ThemeComponentOption> callback, boolean reload) { - //Unused - } - - public CustomTheme getOriginalTheme() { - return mOriginalTheme; - } - - public PreviewInfo buildCustomThemePreviewInfo(Context context) { - return mBuilder.createPreviewInfo(context); - } - - /** Saves the custom theme selections while system config changes. */ - public void saveCustomTheme(Context context, Bundle savedInstanceState) { - CustomTheme customTheme = - buildPartialCustomTheme(context, /* id= */ null, /* title= */ null); - savedInstanceState.putString(KEY_STATE_CURRENT_SELECTION, - customTheme.getSerializedPackages()); - } - - /** Reads the saved custom theme after system config changed. */ - public void readCustomTheme(ThemeBundleProvider themeBundleProvider, - Bundle savedInstanceState) { - String packages = savedInstanceState.getString(KEY_STATE_CURRENT_SELECTION); - if (!TextUtils.isEmpty(packages)) { - try { - mBuilder = themeBundleProvider.parseCustomTheme(packages); - } catch (JSONException e) { - Log.w(TAG, "Couldn't parse provided custom theme."); - } - } else { - Log.w(TAG, "No custom theme being restored."); - } - } - - public static CustomThemeManager create( - @Nullable CustomTheme customTheme, ThemeManager themeManager) { - if (customTheme != null && customTheme.isDefined()) { - return new CustomThemeManager(customTheme.getPackagesByCategory(), customTheme); - } - // Seed the first custom theme with the currently applied theme. - return new CustomThemeManager(themeManager.getCurrentOverlays(), customTheme); - } - -} diff --git a/src/com/android/customization/model/theme/custom/FontOptionsProvider.java b/src/com/android/customization/model/theme/custom/FontOptionsProvider.java deleted file mode 100644 index 53568c9f..00000000 --- a/src/com/android/customization/model/theme/custom/FontOptionsProvider.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.model.theme.custom; - -import static com.android.customization.model.ResourceConstants.ANDROID_PACKAGE; -import static com.android.customization.model.ResourceConstants.CONFIG_BODY_FONT_FAMILY; -import static com.android.customization.model.ResourceConstants.CONFIG_HEADLINE_FONT_FAMILY; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_FONT; - -import android.content.Context; -import android.content.pm.PackageManager; -import android.content.pm.PackageManager.NameNotFoundException; -import android.content.res.Resources; -import android.content.res.Resources.NotFoundException; -import android.graphics.Typeface; -import android.util.Log; - -import com.android.customization.model.ResourceConstants; -import com.android.customization.model.theme.OverlayManagerCompat; -import com.android.customization.model.theme.custom.ThemeComponentOption.FontOption; -import com.android.wallpaper.R; - -/** - * Implementation of {@link ThemeComponentOptionProvider} that reads {@link FontOption}s from - * font overlays. - */ -public class FontOptionsProvider extends ThemeComponentOptionProvider<FontOption> { - - private static final String TAG = "FontOptionsProvider"; - - public FontOptionsProvider(Context context, OverlayManagerCompat manager) { - super(context, manager, OVERLAY_CATEGORY_FONT); - } - - @Override - protected void loadOptions() { - addDefault(); - for (String overlayPackage : mOverlayPackages) { - try { - Resources overlayRes = getOverlayResources(overlayPackage); - Typeface headlineFont = Typeface.create( - getFontFamily(overlayPackage, overlayRes, CONFIG_HEADLINE_FONT_FAMILY), - Typeface.NORMAL); - Typeface bodyFont = Typeface.create( - getFontFamily(overlayPackage, overlayRes, CONFIG_BODY_FONT_FAMILY), - Typeface.NORMAL); - PackageManager pm = mContext.getPackageManager(); - String label = pm.getApplicationInfo(overlayPackage, 0).loadLabel(pm).toString(); - mOptions.add(new FontOption(overlayPackage, label, headlineFont, bodyFont)); - } catch (NameNotFoundException | NotFoundException e) { - Log.w(TAG, String.format("Couldn't load font overlay %s, will skip it", - overlayPackage), e); - } - } - } - - private void addDefault() { - Resources system = Resources.getSystem(); - Typeface headlineFont = Typeface.create(system.getString(system.getIdentifier( - ResourceConstants.CONFIG_HEADLINE_FONT_FAMILY,"string", ANDROID_PACKAGE)), - Typeface.NORMAL); - Typeface bodyFont = Typeface.create(system.getString(system.getIdentifier( - ResourceConstants.CONFIG_BODY_FONT_FAMILY, - "string", ANDROID_PACKAGE)), - Typeface.NORMAL); - mOptions.add(new FontOption(null, mContext.getString(R.string.default_theme_title), - headlineFont, bodyFont)); - } - - private String getFontFamily(String overlayPackage, Resources overlayRes, String configName) { - return overlayRes.getString(overlayRes.getIdentifier(configName, "string", overlayPackage)); - } -} diff --git a/src/com/android/customization/model/theme/custom/IconOptionsProvider.java b/src/com/android/customization/model/theme/custom/IconOptionsProvider.java deleted file mode 100644 index f7b669b1..00000000 --- a/src/com/android/customization/model/theme/custom/IconOptionsProvider.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.model.theme.custom; - -import static com.android.customization.model.ResourceConstants.ANDROID_PACKAGE; -import static com.android.customization.model.ResourceConstants.ICONS_FOR_PREVIEW; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_ANDROID; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_LAUNCHER; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_SETTINGS; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_SYSUI; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_THEMEPICKER; - -import android.content.Context; -import android.content.pm.PackageManager.NameNotFoundException; -import android.content.res.Resources; -import android.content.res.Resources.NotFoundException; -import android.graphics.drawable.Drawable; -import android.os.UserHandle; -import android.util.Log; - -import com.android.customization.model.ResourceConstants; -import com.android.customization.model.theme.OverlayManagerCompat; -import com.android.customization.model.theme.custom.ThemeComponentOption.IconOption; -import com.android.wallpaper.R; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * Implementation of {@link ThemeComponentOptionProvider} that reads {@link IconOption}s from - * icon overlays. - */ -public class IconOptionsProvider extends ThemeComponentOptionProvider<IconOption> { - - private static final String TAG = "IconOptionsProvider"; - - private final List<String> mSysUiIconsOverlayPackages = new ArrayList<>(); - private final List<String> mSettingsIconsOverlayPackages = new ArrayList<>(); - private final List<String> mLauncherIconsOverlayPackages = new ArrayList<>(); - private final List<String> mThemePickerIconsOverlayPackages = new ArrayList<>(); - - public IconOptionsProvider(Context context, OverlayManagerCompat manager) { - super(context, manager, OVERLAY_CATEGORY_ICON_ANDROID); - String[] targetPackages = ResourceConstants.getPackagesToOverlay(context); - mSysUiIconsOverlayPackages.addAll(manager.getOverlayPackagesForCategory( - OVERLAY_CATEGORY_ICON_SYSUI, UserHandle.myUserId(), targetPackages)); - mSettingsIconsOverlayPackages.addAll(manager.getOverlayPackagesForCategory( - OVERLAY_CATEGORY_ICON_SETTINGS, UserHandle.myUserId(), targetPackages)); - mLauncherIconsOverlayPackages.addAll(manager.getOverlayPackagesForCategory( - OVERLAY_CATEGORY_ICON_LAUNCHER, UserHandle.myUserId(), targetPackages)); - mThemePickerIconsOverlayPackages.addAll(manager.getOverlayPackagesForCategory( - OVERLAY_CATEGORY_ICON_THEMEPICKER, UserHandle.myUserId(), targetPackages)); - } - - @Override - protected void loadOptions() { - addDefault(); - - Map<String, IconOption> optionsByPrefix = new HashMap<>(); - for (String overlayPackage : mOverlayPackages) { - IconOption option = addOrUpdateOption(optionsByPrefix, overlayPackage, - OVERLAY_CATEGORY_ICON_ANDROID); - try{ - for (String iconName : ICONS_FOR_PREVIEW) { - option.addIcon(loadIconPreviewDrawable(iconName, overlayPackage)); - } - } catch (NotFoundException | NameNotFoundException e) { - Log.w(TAG, String.format("Couldn't load icon overlay details for %s, will skip it", - overlayPackage), e); - } - } - - for (String overlayPackage : mSysUiIconsOverlayPackages) { - addOrUpdateOption(optionsByPrefix, overlayPackage, OVERLAY_CATEGORY_ICON_SYSUI); - } - - for (String overlayPackage : mSettingsIconsOverlayPackages) { - addOrUpdateOption(optionsByPrefix, overlayPackage, OVERLAY_CATEGORY_ICON_SETTINGS); - } - - for (String overlayPackage : mLauncherIconsOverlayPackages) { - addOrUpdateOption(optionsByPrefix, overlayPackage, OVERLAY_CATEGORY_ICON_LAUNCHER); - } - - for (String overlayPackage : mThemePickerIconsOverlayPackages) { - addOrUpdateOption(optionsByPrefix, overlayPackage, OVERLAY_CATEGORY_ICON_THEMEPICKER); - } - - for (IconOption option : optionsByPrefix.values()) { - if (option.isValid(mContext)) { - mOptions.add(option); - option.setLabel(mContext.getString(R.string.icon_component_label, mOptions.size())); - } - } - } - - private IconOption addOrUpdateOption(Map<String, IconOption> optionsByPrefix, - String overlayPackage, String category) { - String prefix = overlayPackage.substring(0, overlayPackage.lastIndexOf(".")); - IconOption option; - if (!optionsByPrefix.containsKey(prefix)) { - option = new IconOption(); - optionsByPrefix.put(prefix, option); - } else { - option = optionsByPrefix.get(prefix); - } - option.addOverlayPackage(category, overlayPackage); - return option; - } - - private Drawable loadIconPreviewDrawable(String drawableName, String packageName) - throws NameNotFoundException, NotFoundException { - final Resources resources = ANDROID_PACKAGE.equals(packageName) - ? Resources.getSystem() - : mContext.getPackageManager().getResourcesForApplication(packageName); - return resources.getDrawable( - resources.getIdentifier(drawableName, "drawable", packageName), null); - } - - private void addDefault() { - IconOption option = new IconOption(); - option.setLabel(mContext.getString(R.string.default_theme_title)); - try { - for (String iconName : ICONS_FOR_PREVIEW) { - option.addIcon(loadIconPreviewDrawable(iconName, ANDROID_PACKAGE)); - } - } catch (NameNotFoundException | NotFoundException e) { - Log.w(TAG, "Didn't find SystemUi package icons, will skip option", e); - } - option.addOverlayPackage(OVERLAY_CATEGORY_ICON_ANDROID, null); - option.addOverlayPackage(OVERLAY_CATEGORY_ICON_SYSUI, null); - option.addOverlayPackage(OVERLAY_CATEGORY_ICON_SETTINGS, null); - option.addOverlayPackage(OVERLAY_CATEGORY_ICON_LAUNCHER, null); - option.addOverlayPackage(OVERLAY_CATEGORY_ICON_THEMEPICKER, null); - mOptions.add(option); - } - -} diff --git a/src/com/android/customization/model/theme/custom/ShapeOptionsProvider.java b/src/com/android/customization/model/theme/custom/ShapeOptionsProvider.java deleted file mode 100644 index f93b8920..00000000 --- a/src/com/android/customization/model/theme/custom/ShapeOptionsProvider.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.model.theme.custom; - -import static com.android.customization.model.ResourceConstants.ANDROID_PACKAGE; -import static com.android.customization.model.ResourceConstants.CONFIG_CORNERRADIUS; -import static com.android.customization.model.ResourceConstants.CONFIG_ICON_MASK; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_SHAPE; -import static com.android.customization.model.ResourceConstants.PATH_SIZE; - -import android.content.Context; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.content.pm.PackageManager.NameNotFoundException; -import android.content.res.Resources; -import android.content.res.Resources.NotFoundException; -import android.graphics.Path; -import android.graphics.drawable.AdaptiveIconDrawable; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.ShapeDrawable; -import android.graphics.drawable.shapes.PathShape; -import android.text.TextUtils; -import android.util.Log; - -import androidx.annotation.Dimension; -import androidx.core.graphics.PathParser; - -import com.android.customization.model.ResourceConstants; -import com.android.customization.model.theme.OverlayManagerCompat; -import com.android.customization.model.theme.ThemeBundle.PreviewInfo.ShapeAppIcon; -import com.android.customization.model.theme.custom.ThemeComponentOption.ShapeOption; -import com.android.customization.widget.DynamicAdaptiveIconDrawable; -import com.android.wallpaper.R; - -import java.util.ArrayList; -import java.util.List; - -/** - * Implementation of {@link ThemeComponentOptionProvider} that reads {@link ShapeOption}s from - * icon overlays. - */ -public class ShapeOptionsProvider extends ThemeComponentOptionProvider<ShapeOption> { - - private static final String TAG = "ShapeOptionsProvider"; - private final String[] mShapePreviewIconPackages; - private int mThumbSize; - - public ShapeOptionsProvider(Context context, OverlayManagerCompat manager) { - super(context, manager, OVERLAY_CATEGORY_SHAPE); - mShapePreviewIconPackages = context.getResources().getStringArray( - R.array.icon_shape_preview_packages); - mThumbSize = mContext.getResources().getDimensionPixelSize( - R.dimen.component_shape_thumb_size); - } - - @Override - protected void loadOptions() { - addDefault(); - for (String overlayPackage : mOverlayPackages) { - try { - Path path = loadPath(mContext.getPackageManager() - .getResourcesForApplication(overlayPackage), overlayPackage); - PackageManager pm = mContext.getPackageManager(); - String label = pm.getApplicationInfo(overlayPackage, 0).loadLabel(pm).toString(); - mOptions.add(new ShapeOption(overlayPackage, label, path, - loadCornerRadius(overlayPackage), createShapeDrawable(path), - getShapedAppIcons(path))); - } catch (NameNotFoundException | NotFoundException e) { - Log.w(TAG, String.format("Couldn't load shape overlay %s, will skip it", - overlayPackage), e); - } - } - } - - private void addDefault() { - Resources system = Resources.getSystem(); - Path path = loadPath(system, ANDROID_PACKAGE); - mOptions.add(new ShapeOption(null, mContext.getString(R.string.default_theme_title), path, - system.getDimensionPixelOffset( - system.getIdentifier(ResourceConstants.CONFIG_CORNERRADIUS, - "dimen", ResourceConstants.ANDROID_PACKAGE)), - createShapeDrawable(path), getShapedAppIcons(path))); - } - - private ShapeDrawable createShapeDrawable(Path path) { - PathShape shape = new PathShape(path, PATH_SIZE, PATH_SIZE); - ShapeDrawable shapeDrawable = new ShapeDrawable(shape); - shapeDrawable.setIntrinsicHeight(mThumbSize); - shapeDrawable.setIntrinsicWidth(mThumbSize); - return shapeDrawable; - } - - private List<ShapeAppIcon> getShapedAppIcons(Path path) { - List<ShapeAppIcon> shapedAppIcons = new ArrayList<>(); - for (String packageName : mShapePreviewIconPackages) { - Drawable icon = null; - CharSequence name = null; - try { - Drawable appIcon = mContext.getPackageManager().getApplicationIcon(packageName); - if (appIcon instanceof AdaptiveIconDrawable) { - AdaptiveIconDrawable adaptiveIcon = (AdaptiveIconDrawable) appIcon; - icon = new DynamicAdaptiveIconDrawable(adaptiveIcon.getBackground(), - adaptiveIcon.getForeground(), path); - - ApplicationInfo appInfo = mContext.getPackageManager() - .getApplicationInfo(packageName, /* flag= */ 0); - name = mContext.getPackageManager().getApplicationLabel(appInfo); - } - } catch (NameNotFoundException e) { - Log.d(TAG, "Couldn't find app " + packageName - + ", won't use it for icon shape preview"); - } finally { - if (icon != null && !TextUtils.isEmpty(name)) { - shapedAppIcons.add(new ShapeAppIcon(icon, name)); - } - } - } - return shapedAppIcons; - } - - private Path loadPath(Resources overlayRes, String packageName) { - String shape = overlayRes.getString(overlayRes.getIdentifier(CONFIG_ICON_MASK, "string", - packageName)); - - if (!TextUtils.isEmpty(shape)) { - return PathParser.createPathFromPathData(shape); - } - return null; - } - - @Dimension - private int loadCornerRadius(String packageName) - throws NameNotFoundException, NotFoundException { - - Resources overlayRes = - mContext.getPackageManager().getResourcesForApplication( - packageName); - return overlayRes.getDimensionPixelOffset(overlayRes.getIdentifier( - CONFIG_CORNERRADIUS, "dimen", packageName)); - } -} diff --git a/src/com/android/customization/model/theme/custom/ThemeComponentOption.java b/src/com/android/customization/model/theme/custom/ThemeComponentOption.java deleted file mode 100644 index 78be0fc0..00000000 --- a/src/com/android/customization/model/theme/custom/ThemeComponentOption.java +++ /dev/null @@ -1,556 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.model.theme.custom; - -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_COLOR; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_FONT; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_ANDROID; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_LAUNCHER; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_SETTINGS; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_SYSUI; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_THEMEPICKER; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_SHAPE; -import static com.android.customization.model.ResourceConstants.getLauncherPackage; - -import android.content.Context; -import android.content.pm.PackageManager.NameNotFoundException; -import android.content.res.ColorStateList; -import android.content.res.Configuration; -import android.content.res.Resources; -import android.content.res.Resources.NotFoundException; -import android.content.res.Resources.Theme; -import android.content.res.TypedArray; -import android.graphics.Path; -import android.graphics.Typeface; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.LayerDrawable; -import android.graphics.drawable.ShapeDrawable; -import android.graphics.drawable.StateListDrawable; -import android.text.TextUtils; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.CompoundButton; -import android.widget.ImageView; -import android.widget.SeekBar; -import android.widget.Switch; -import android.widget.TextView; - -import androidx.annotation.ColorInt; -import androidx.annotation.Dimension; -import androidx.annotation.DrawableRes; -import androidx.annotation.Nullable; -import androidx.annotation.StringRes; -import androidx.core.graphics.ColorUtils; - -import com.android.customization.model.CustomizationManager; -import com.android.customization.model.CustomizationOption; -import com.android.customization.model.ResourceConstants; -import com.android.customization.model.theme.ThemeBundle.PreviewInfo.ShapeAppIcon; -import com.android.customization.model.theme.custom.CustomTheme.Builder; -import com.android.wallpaper.R; -import com.android.wallpaper.util.ResourceUtils; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; - -/** - * Represents an option of a component of a custom Theme (for example, a possible color, or font, - * shape, etc). - * Extending classes correspond to each component's options and provide the structure to bind - * preview and thumbnails. - * // TODO (santie): refactor the logic to bind preview cards to reuse between ThemeFragment and - * // here - */ -public abstract class ThemeComponentOption implements CustomizationOption<ThemeComponentOption> { - - protected final Map<String, String> mOverlayPackageNames = new HashMap<>(); - - protected void addOverlayPackage(String category, String packageName) { - mOverlayPackageNames.put(category, packageName); - } - - public Map<String, String> getOverlayPackages() { - return mOverlayPackageNames; - } - - @Override - public String getTitle() { - return null; - } - - public abstract void bindPreview(ViewGroup container); - - public Builder buildStep(Builder builder) { - getOverlayPackages().forEach(builder::addOverlayPackage); - return builder; - } - - public static class FontOption extends ThemeComponentOption { - - private final String mLabel; - private final Typeface mHeadlineFont; - private final Typeface mBodyFont; - - public FontOption(String packageName, String label, Typeface headlineFont, - Typeface bodyFont) { - addOverlayPackage(OVERLAY_CATEGORY_FONT, packageName); - mLabel = label; - mHeadlineFont = headlineFont; - mBodyFont = bodyFont; - } - - @Override - public String getTitle() { - return null; - } - - @Override - public void bindThumbnailTile(View view) { - ((TextView) view.findViewById(R.id.thumbnail_text)).setTypeface( - mHeadlineFont); - view.setContentDescription(mLabel); - } - - @Override - public boolean isActive(CustomizationManager<ThemeComponentOption> manager) { - CustomThemeManager customThemeManager = (CustomThemeManager) manager; - return Objects.equals(getOverlayPackages().get(OVERLAY_CATEGORY_FONT), - customThemeManager.getOverlayPackages().get(OVERLAY_CATEGORY_FONT)); - } - - @Override - public int getLayoutResId() { - return R.layout.theme_font_option; - } - - @Override - public void bindPreview(ViewGroup container) { - container.setContentDescription( - container.getContext().getString(R.string.font_preview_content_description)); - - bindPreviewHeader(container, R.string.preview_name_font, R.drawable.ic_font, null); - - ViewGroup cardBody = container.findViewById(R.id.theme_preview_card_body_container); - if (cardBody.getChildCount() == 0) { - LayoutInflater.from(container.getContext()).inflate( - R.layout.preview_card_font_content, - cardBody, true); - } - TextView title = container.findViewById(R.id.font_card_title); - title.setTypeface(mHeadlineFont); - TextView bodyText = container.findViewById(R.id.font_card_body); - bodyText.setTypeface(mBodyFont); - container.findViewById(R.id.font_card_divider).setBackgroundColor( - title.getCurrentTextColor()); - } - - @Override - public Builder buildStep(Builder builder) { - builder.setHeadlineFontFamily(mHeadlineFont).setBodyFontFamily(mBodyFont); - return super.buildStep(builder); - } - } - - void bindPreviewHeader(ViewGroup container, @StringRes int headerTextResId, - @DrawableRes int headerIcon, String drawableName) { - TextView header = container.findViewById(R.id.theme_preview_card_header); - header.setText(headerTextResId); - - Context context = container.getContext(); - Drawable icon; - if (!TextUtils.isEmpty(drawableName)) { - try { - Resources resources = context.getPackageManager() - .getResourcesForApplication(getLauncherPackage(context)); - icon = resources.getDrawable(resources.getIdentifier( - drawableName, "drawable", getLauncherPackage(context)), null); - } catch (NameNotFoundException | NotFoundException e) { - icon = context.getResources().getDrawable(headerIcon, context.getTheme()); - } - } else { - icon = context.getResources().getDrawable(headerIcon, context.getTheme()); - } - int size = context.getResources().getDimensionPixelSize(R.dimen.card_header_icon_size); - icon.setBounds(0, 0, size, size); - - header.setCompoundDrawables(null, icon, null, null); - header.setCompoundDrawableTintList(ColorStateList.valueOf( - header.getCurrentTextColor())); - } - - public static class IconOption extends ThemeComponentOption { - - public static final int THUMBNAIL_ICON_POSITION = 0; - private static int[] mIconIds = { - R.id.preview_icon_0, R.id.preview_icon_1, R.id.preview_icon_2, R.id.preview_icon_3, - R.id.preview_icon_4, R.id.preview_icon_5 - }; - - private List<Drawable> mIcons = new ArrayList<>(); - private String mLabel; - - @Override - public void bindThumbnailTile(View view) { - Resources res = view.getContext().getResources(); - Drawable icon = mIcons.get(THUMBNAIL_ICON_POSITION) - .getConstantState().newDrawable().mutate(); - icon.setTint(ResourceUtils.getColorAttr( - view.getContext(), android.R.attr.textColorSecondary)); - ((ImageView) view.findViewById(R.id.option_icon)).setImageDrawable( - icon); - view.setContentDescription(mLabel); - } - - @Override - public boolean isActive(CustomizationManager<ThemeComponentOption> manager) { - CustomThemeManager customThemeManager = (CustomThemeManager) manager; - Map<String, String> themePackages = customThemeManager.getOverlayPackages(); - if (getOverlayPackages().isEmpty()) { - return themePackages.get(OVERLAY_CATEGORY_ICON_SYSUI) == null && - themePackages.get(OVERLAY_CATEGORY_ICON_SETTINGS) == null && - themePackages.get(OVERLAY_CATEGORY_ICON_ANDROID) == null && - themePackages.get(OVERLAY_CATEGORY_ICON_LAUNCHER) == null && - themePackages.get(OVERLAY_CATEGORY_ICON_THEMEPICKER) == null; - } - for (Map.Entry<String, String> overlayEntry : getOverlayPackages().entrySet()) { - if(!Objects.equals(overlayEntry.getValue(), - themePackages.get(overlayEntry.getKey()))) { - return false; - } - } - return true; - } - - @Override - public int getLayoutResId() { - return R.layout.theme_icon_option; - } - - @Override - public void bindPreview(ViewGroup container) { - container.setContentDescription( - container.getContext().getString(R.string.icon_preview_content_description)); - - bindPreviewHeader(container, R.string.preview_name_icon, R.drawable.ic_widget, - "ic_widget"); - - ViewGroup cardBody = container.findViewById(R.id.theme_preview_card_body_container); - if (cardBody.getChildCount() == 0) { - LayoutInflater.from(container.getContext()).inflate( - R.layout.preview_card_icon_content, cardBody, true); - } - for (int i = 0; i < mIconIds.length && i < mIcons.size(); i++) { - ((ImageView) container.findViewById(mIconIds[i])).setImageDrawable( - mIcons.get(i)); - } - } - - public void addIcon(Drawable previewIcon) { - mIcons.add(previewIcon); - } - - /** - * @return whether this icon option has overlays and previews for all the required packages - */ - public boolean isValid(Context context) { - return getOverlayPackages().keySet().size() == - ResourceConstants.getPackagesToOverlay(context).length; - } - - public void setLabel(String label) { - mLabel = label; - } - - @Override - public Builder buildStep(Builder builder) { - for (Drawable icon : mIcons) { - builder.addIcon(icon); - } - return super.buildStep(builder); - } - } - - public static class ColorOption extends ThemeComponentOption { - - /** - * Ids of views used to represent quick setting tiles in the color preview screen - */ - private static int[] COLOR_TILE_IDS = { - R.id.preview_color_qs_0_bg, R.id.preview_color_qs_1_bg, R.id.preview_color_qs_2_bg - }; - - /** - * Ids of the views for the foreground of the icon, mapping to the corresponding index of - * the actual icon drawable. - */ - static int[][] COLOR_TILES_ICON_IDS = { - new int[]{ R.id.preview_color_qs_0_icon, 0}, - new int[]{ R.id.preview_color_qs_1_icon, 1}, - new int[] { R.id.preview_color_qs_2_icon, 3} - }; - - /** - * Ids of views used to represent control buttons in the color preview screen - */ - private static int[] COLOR_BUTTON_IDS = { - R.id.preview_check_selected, R.id.preview_radio_selected, - R.id.preview_toggle_selected - }; - - @ColorInt private int mColorAccentLight; - @ColorInt private int mColorAccentDark; - /** - * Icons shown as example of QuickSettings tiles in the color preview screen. - */ - private List<Drawable> mIcons = new ArrayList<>(); - - /** - * Drawable with the currently selected shape to be used as background of the sample - * QuickSetting icons in the color preview screen. - */ - private Drawable mShapeDrawable; - - private String mLabel; - - ColorOption(String packageName, String label, @ColorInt int lightColor, - @ColorInt int darkColor) { - addOverlayPackage(OVERLAY_CATEGORY_COLOR, packageName); - mLabel = label; - mColorAccentLight = lightColor; - mColorAccentDark = darkColor; - } - - @Override - public void bindThumbnailTile(View view) { - @ColorInt int color = resolveColor(view.getResources()); - LayerDrawable selectedOption = (LayerDrawable) view.getResources().getDrawable( - R.drawable.color_chip_hollow, view.getContext().getTheme()); - Drawable unselectedOption = view.getResources().getDrawable( - R.drawable.color_chip_filled, view.getContext().getTheme()); - - selectedOption.findDrawableByLayerId(R.id.center_fill).setTintList( - ColorStateList.valueOf(color)); - unselectedOption.setTintList(ColorStateList.valueOf(color)); - - StateListDrawable stateListDrawable = new StateListDrawable(); - stateListDrawable.addState(new int[] {android.R.attr.state_activated}, selectedOption); - stateListDrawable.addState( - new int[] {-android.R.attr.state_activated}, unselectedOption); - - ((ImageView) view.findViewById(R.id.option_tile)).setImageDrawable(stateListDrawable); - view.setContentDescription(mLabel); - } - - @ColorInt - private int resolveColor(Resources res) { - Configuration configuration = res.getConfiguration(); - return (configuration.uiMode & Configuration.UI_MODE_NIGHT_MASK) - == Configuration.UI_MODE_NIGHT_YES ? mColorAccentDark : mColorAccentLight; - } - - @Override - public boolean isActive(CustomizationManager<ThemeComponentOption> manager) { - CustomThemeManager customThemeManager = (CustomThemeManager) manager; - return Objects.equals(getOverlayPackages().get(OVERLAY_CATEGORY_COLOR), - customThemeManager.getOverlayPackages().get(OVERLAY_CATEGORY_COLOR)); - } - - @Override - public int getLayoutResId() { - return R.layout.theme_color_option; - } - - @Override - public void bindPreview(ViewGroup container) { - container.setContentDescription( - container.getContext().getString(R.string.color_preview_content_description)); - - bindPreviewHeader(container, R.string.preview_name_color, R.drawable.ic_colorize_24px, - null); - - ViewGroup cardBody = container.findViewById(R.id.theme_preview_card_body_container); - if (cardBody.getChildCount() == 0) { - LayoutInflater.from(container.getContext()).inflate( - R.layout.preview_card_color_content, cardBody, true); - } - Resources res = container.getResources(); - @ColorInt int accentColor = resolveColor(res); - @ColorInt int controlGreyColor = ResourceUtils.getColorAttr( - container.getContext(), - android.R.attr.textColorTertiary); - ColorStateList tintList = new ColorStateList( - new int[][]{ - new int[]{android.R.attr.state_selected}, - new int[]{android.R.attr.state_checked}, - new int[]{-android.R.attr.state_enabled} - }, - new int[] { - accentColor, - accentColor, - controlGreyColor - } - ); - - for (int i = 0; i < COLOR_BUTTON_IDS.length; i++) { - CompoundButton button = container.findViewById(COLOR_BUTTON_IDS[i]); - button.setButtonTintList(tintList); - } - - Switch enabledSwitch = container.findViewById(R.id.preview_toggle_selected); - enabledSwitch.setThumbTintList(tintList); - enabledSwitch.setTrackTintList(tintList); - - ColorStateList seekbarTintList = ColorStateList.valueOf(accentColor); - SeekBar seekbar = container.findViewById(R.id.preview_seekbar); - seekbar.setThumbTintList(seekbarTintList); - seekbar.setProgressTintList(seekbarTintList); - seekbar.setProgressBackgroundTintList(seekbarTintList); - // Disable seekbar - seekbar.setOnTouchListener((view, motionEvent) -> true); - - int iconFgColor = ResourceUtils.getColorAttr(container.getContext(), - android.R.attr.colorBackground); - if (!mIcons.isEmpty() && mShapeDrawable != null) { - for (int i = 0; i < COLOR_TILE_IDS.length; i++) { - Drawable icon = mIcons.get(COLOR_TILES_ICON_IDS[i][1]).getConstantState() - .newDrawable(); - icon.setTint(iconFgColor); - //TODO: load and set the shape. - Drawable bgShape = mShapeDrawable.getConstantState().newDrawable(); - bgShape.setTint(accentColor); - - ImageView bg = container.findViewById(COLOR_TILE_IDS[i]); - bg.setImageDrawable(bgShape); - ImageView fg = container.findViewById(COLOR_TILES_ICON_IDS[i][0]); - fg.setImageDrawable(icon); - } - } - } - - public void setPreviewIcons(List<Drawable> icons) { - mIcons.addAll(icons); - } - - public void setShapeDrawable(@Nullable Drawable shapeDrawable) { - mShapeDrawable = shapeDrawable; - } - - @Override - public Builder buildStep(Builder builder) { - builder.setColorAccentDark(mColorAccentDark).setColorAccentLight(mColorAccentLight); - return super.buildStep(builder); - } - } - - public static class ShapeOption extends ThemeComponentOption { - - private final LayerDrawable mShape; - private final List<ShapeAppIcon> mAppIcons; - private final String mLabel; - private final Path mPath; - private final int mCornerRadius; - private int[] mShapeIconIds = { - R.id.shape_preview_icon_0, R.id.shape_preview_icon_1, R.id.shape_preview_icon_2, - R.id.shape_preview_icon_3, R.id.shape_preview_icon_4, R.id.shape_preview_icon_5 - }; - - ShapeOption(String packageName, String label, Path path, - @Dimension int cornerRadius, Drawable shapeDrawable, - List<ShapeAppIcon> appIcons) { - addOverlayPackage(OVERLAY_CATEGORY_SHAPE, packageName); - mLabel = label; - mAppIcons = appIcons; - mPath = path; - mCornerRadius = cornerRadius; - Drawable background = shapeDrawable.getConstantState().newDrawable(); - Drawable foreground = shapeDrawable.getConstantState().newDrawable(); - mShape = new LayerDrawable(new Drawable[]{background, foreground}); - mShape.setLayerGravity(0, Gravity.CENTER); - mShape.setLayerGravity(1, Gravity.CENTER); - } - - @Override - public void bindThumbnailTile(View view) { - ImageView thumb = view.findViewById(R.id.shape_thumbnail); - Resources res = view.getResources(); - Theme theme = view.getContext().getTheme(); - int borderWidth = 2 * res.getDimensionPixelSize(R.dimen.option_border_width); - - Drawable background = mShape.getDrawable(0); - background.setTintList(res.getColorStateList(R.color.option_border_color, theme)); - - ShapeDrawable foreground = (ShapeDrawable) mShape.getDrawable(1); - - foreground.setIntrinsicHeight(background.getIntrinsicHeight() - borderWidth); - foreground.setIntrinsicWidth(background.getIntrinsicWidth() - borderWidth); - TypedArray ta = view.getContext().obtainStyledAttributes( - new int[]{android.R.attr.colorPrimary}); - int primaryColor = ta.getColor(0, 0); - ta.recycle(); - int foregroundColor = - ResourceUtils.getColorAttr(view.getContext(), android.R.attr.textColorPrimary); - - foreground.setTint(ColorUtils.blendARGB(primaryColor, foregroundColor, .05f)); - - thumb.setImageDrawable(mShape); - view.setContentDescription(mLabel); - } - - @Override - public boolean isActive(CustomizationManager<ThemeComponentOption> manager) { - CustomThemeManager customThemeManager = (CustomThemeManager) manager; - return Objects.equals(getOverlayPackages().get(OVERLAY_CATEGORY_SHAPE), - customThemeManager.getOverlayPackages().get(OVERLAY_CATEGORY_SHAPE)); - } - - @Override - public int getLayoutResId() { - return R.layout.theme_shape_option; - } - - @Override - public void bindPreview(ViewGroup container) { - container.setContentDescription( - container.getContext().getString(R.string.shape_preview_content_description)); - - bindPreviewHeader(container, R.string.preview_name_shape, R.drawable.ic_shapes_24px, - null); - - ViewGroup cardBody = container.findViewById(R.id.theme_preview_card_body_container); - if (cardBody.getChildCount() == 0) { - LayoutInflater.from(container.getContext()).inflate( - R.layout.preview_card_shape_content, cardBody, true); - } - for (int i = 0; i < mShapeIconIds.length && i < mAppIcons.size(); i++) { - ImageView iconView = cardBody.findViewById(mShapeIconIds[i]); - iconView.setBackground(mAppIcons.get(i).getDrawableCopy()); - } - } - - @Override - public Builder buildStep(Builder builder) { - builder.setShapePath(mPath) - .setBottomSheetCornerRadius(mCornerRadius) - .setShapePreviewIcons(mAppIcons); - return super.buildStep(builder); - } - } -} diff --git a/src/com/android/customization/model/theme/custom/ThemeComponentOptionProvider.java b/src/com/android/customization/model/theme/custom/ThemeComponentOptionProvider.java deleted file mode 100644 index 992c47cc..00000000 --- a/src/com/android/customization/model/theme/custom/ThemeComponentOptionProvider.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.model.theme.custom; - -import android.content.Context; -import android.content.pm.PackageManager.NameNotFoundException; -import android.content.res.Resources; -import android.os.UserHandle; - -import com.android.customization.model.CustomizationManager.OptionsFetchedListener; -import com.android.customization.model.ResourceConstants; -import com.android.customization.model.theme.OverlayManagerCompat; - -import java.util.ArrayList; -import java.util.List; - -/** - * Base class used to retrieve Custom Theme Component options (eg, different fonts) - * from the system. - */ -public abstract class ThemeComponentOptionProvider<T extends ThemeComponentOption> { - - protected final Context mContext; - protected final List<String> mOverlayPackages; - protected List<T> mOptions; - - public ThemeComponentOptionProvider(Context context, OverlayManagerCompat manager, - String... categories) { - mContext = context; - mOverlayPackages = new ArrayList<>(); - for (String category : categories) { - mOverlayPackages.addAll(manager.getOverlayPackagesForCategory(category, - UserHandle.myUserId(), ResourceConstants.getPackagesToOverlay(mContext))); - } - } - - /** - * Returns whether there are options for this component available in the current setup. - */ - public boolean isAvailable() { - return !mOverlayPackages.isEmpty(); - } - - /** - * Retrieve the available options for this component. - * @param callback called when the themes have been retrieved (or immediately if cached) - * @param reload whether to reload themes if they're cached. - */ - public void fetch(OptionsFetchedListener<T> callback, boolean reload) { - if (mOptions == null || reload) { - mOptions = new ArrayList<>(); - loadOptions(); - } - - if(callback != null) { - callback.onOptionsLoaded(mOptions); - } - } - - protected abstract void loadOptions(); - - protected Resources getOverlayResources(String overlayPackage) throws NameNotFoundException { - return mContext.getPackageManager().getResourcesForApplication(overlayPackage); - } -} diff --git a/src/com/android/customization/model/themedicon/ThemedIconSectionController.java b/src/com/android/customization/model/themedicon/ThemedIconSectionController.java index 5d551a6a..1cc6d0a5 100644 --- a/src/com/android/customization/model/themedicon/ThemedIconSectionController.java +++ b/src/com/android/customization/model/themedicon/ThemedIconSectionController.java @@ -24,10 +24,12 @@ import androidx.lifecycle.Observer; import com.android.customization.model.themedicon.domain.interactor.ThemedIconInteractor; import com.android.customization.model.themedicon.domain.interactor.ThemedIconSnapshotRestorer; +import com.android.customization.module.logging.ThemesUserEventLogger; import com.android.customization.picker.themedicon.ThemedIconSectionView; import com.android.wallpaper.R; import com.android.wallpaper.model.CustomizationSectionController; +// TODO (b/311712452): Refactor CustomizationSectionController to use recommended arch UI components /** The {@link CustomizationSectionController} for themed icon section. */ public class ThemedIconSectionController implements CustomizationSectionController<ThemedIconSectionView> { @@ -38,6 +40,7 @@ public class ThemedIconSectionController implements private final ThemedIconInteractor mInteractor; private final ThemedIconSnapshotRestorer mSnapshotRestorer; private final Observer<Boolean> mIsActivatedChangeObserver; + private final ThemesUserEventLogger mThemesUserEventLogger; private ThemedIconSectionView mThemedIconSectionView; private boolean mSavedThemedIconEnabled = false; @@ -46,7 +49,8 @@ public class ThemedIconSectionController implements ThemedIconSwitchProvider themedIconOptionsProvider, ThemedIconInteractor interactor, @Nullable Bundle savedInstanceState, - ThemedIconSnapshotRestorer snapshotRestorer) { + ThemedIconSnapshotRestorer snapshotRestorer, + ThemesUserEventLogger themesUserEventLogger) { mThemedIconOptionsProvider = themedIconOptionsProvider; mInteractor = interactor; mSnapshotRestorer = snapshotRestorer; @@ -55,6 +59,7 @@ public class ThemedIconSectionController implements mThemedIconSectionView.getSwitch().setChecked(isActivated); } }; + mThemesUserEventLogger = themesUserEventLogger; if (savedInstanceState != null) { mSavedThemedIconEnabled = savedInstanceState.getBoolean( @@ -75,7 +80,10 @@ public class ThemedIconSectionController implements mThemedIconSectionView.setViewListener(this::onViewActivated); mThemedIconSectionView.getSwitch().setChecked(mSavedThemedIconEnabled); mThemedIconOptionsProvider.fetchThemedIconEnabled( - enabled -> mThemedIconSectionView.getSwitch().setChecked(enabled)); + enabled -> { + mInteractor.setActivated(enabled); + mThemedIconSectionView.getSwitch().setChecked(enabled); + }); mInteractor.isActivatedAsLiveData().observeForever(mIsActivatedChangeObserver); return mThemedIconSectionView; } @@ -91,6 +99,7 @@ public class ThemedIconSectionController implements } mThemedIconOptionsProvider.setThemedIconEnabled(viewActivated); mInteractor.setActivated(viewActivated); + mThemesUserEventLogger.logThemedIconApplied(viewActivated); mSnapshotRestorer.store(viewActivated); } diff --git a/src/com/android/customization/module/CustomizationInjector.kt b/src/com/android/customization/module/CustomizationInjector.kt index 8fd3768d..82203d9b 100644 --- a/src/com/android/customization/module/CustomizationInjector.kt +++ b/src/com/android/customization/module/CustomizationInjector.kt @@ -18,33 +18,21 @@ package com.android.customization.module import android.content.Context import android.content.res.Resources import androidx.activity.ComponentActivity -import androidx.fragment.app.FragmentActivity -import com.android.customization.model.theme.OverlayManagerCompat -import com.android.customization.model.theme.ThemeBundleProvider -import com.android.customization.model.theme.ThemeManager +import com.android.customization.module.logging.ThemesUserEventLogger import com.android.customization.picker.clock.domain.interactor.ClockPickerInteractor import com.android.customization.picker.clock.ui.view.ClockViewFactory import com.android.customization.picker.clock.ui.viewmodel.ClockCarouselViewModel -import com.android.customization.picker.clock.ui.viewmodel.ClockSectionViewModel import com.android.customization.picker.clock.ui.viewmodel.ClockSettingsViewModel -import com.android.customization.picker.clock.utils.ClockDescriptionUtils import com.android.customization.picker.color.domain.interactor.ColorPickerInteractor import com.android.customization.picker.color.ui.viewmodel.ColorPickerViewModel import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordancePickerInteractor import com.android.systemui.shared.clocks.ClockRegistry -import com.android.wallpaper.model.WallpaperColorsViewModel import com.android.wallpaper.module.Injector +import com.android.wallpaper.picker.customization.data.repository.WallpaperColorsRepository interface CustomizationInjector : Injector { fun getCustomizationPreferences(context: Context): CustomizationPreferences - fun getThemeManager( - provider: ThemeBundleProvider, - activity: FragmentActivity, - overlayManagerCompat: OverlayManagerCompat, - logger: ThemesUserEventLogger, - ): ThemeManager - fun getKeyguardQuickAffordancePickerInteractor( context: Context, ): KeyguardQuickAffordancePickerInteractor @@ -53,31 +41,28 @@ interface CustomizationInjector : Injector { fun getClockPickerInteractor(context: Context): ClockPickerInteractor - fun getClockSectionViewModel( - context: Context, - ): ClockSectionViewModel - fun getColorPickerInteractor( context: Context, - wallpaperColorsViewModel: WallpaperColorsViewModel, + wallpaperColorsRepository: WallpaperColorsRepository, ): ColorPickerInteractor fun getColorPickerViewModelFactory( context: Context, - wallpaperColorsViewModel: WallpaperColorsViewModel, + wallpaperColorsRepository: WallpaperColorsRepository, ): ColorPickerViewModel.Factory fun getClockCarouselViewModelFactory( interactor: ClockPickerInteractor, + clockViewFactory: ClockViewFactory, + resources: Resources, + logger: ThemesUserEventLogger, ): ClockCarouselViewModel.Factory fun getClockViewFactory(activity: ComponentActivity): ClockViewFactory fun getClockSettingsViewModelFactory( context: Context, - wallpaperColorsViewModel: WallpaperColorsViewModel, + wallpaperColorsRepository: WallpaperColorsRepository, clockViewFactory: ClockViewFactory, ): ClockSettingsViewModel.Factory - - fun getClockDescriptionUtils(resources: Resources): ClockDescriptionUtils } diff --git a/src/com/android/customization/module/CustomizationPreferences.java b/src/com/android/customization/module/CustomizationPreferences.java deleted file mode 100644 index 0df3ff99..00000000 --- a/src/com/android/customization/module/CustomizationPreferences.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.module; - -import com.android.wallpaper.module.WallpaperPreferences; - -public interface CustomizationPreferences extends WallpaperPreferences { - - String KEY_CUSTOM_THEME= "themepicker_custom_theme"; - String KEY_VISITED_PREFIX = "themepicker_visited_"; - String KEY_THEMED_ICON_ENABLED = "themepicker_themed_icon_enabled"; - - String getSerializedCustomThemes(); - - void storeCustomThemes(String serializedCustomThemes); - - boolean getTabVisited(String id); - - void setTabVisited(String id); - - boolean getThemedIconEnabled(); - - void setThemedIconEnabled(boolean enabled); -} diff --git a/src/com/android/customization/module/CustomizationPreferences.kt b/src/com/android/customization/module/CustomizationPreferences.kt new file mode 100644 index 00000000..4148c3b8 --- /dev/null +++ b/src/com/android/customization/module/CustomizationPreferences.kt @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.customization.module + +import com.android.wallpaper.module.WallpaperPreferences + +interface CustomizationPreferences : WallpaperPreferences { + fun getSerializedCustomThemes(): String? + + fun storeCustomThemes(serializedCustomThemes: String) + + fun getTabVisited(id: String): Boolean + + fun setTabVisited(id: String) + + fun getThemedIconEnabled(): Boolean + + fun setThemedIconEnabled(enabled: Boolean) + + companion object { + const val KEY_CUSTOM_THEME = "themepicker_custom_theme" + const val KEY_VISITED_PREFIX = "themepicker_visited_" + const val KEY_THEMED_ICON_ENABLED = "themepicker_themed_icon_enabled" + } +} diff --git a/src/com/android/customization/module/DefaultCustomizationPreferences.java b/src/com/android/customization/module/DefaultCustomizationPreferences.java deleted file mode 100644 index 4af402f2..00000000 --- a/src/com/android/customization/module/DefaultCustomizationPreferences.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.module; - -import android.content.Context; - -import com.android.wallpaper.module.DefaultWallpaperPreferences; - -public class DefaultCustomizationPreferences extends DefaultWallpaperPreferences - implements CustomizationPreferences { - - public DefaultCustomizationPreferences(Context context) { - super(context); - } - - - @Override - public String getSerializedCustomThemes() { - return mSharedPrefs.getString(KEY_CUSTOM_THEME, null); - } - - @Override - public void storeCustomThemes(String serializedCustomThemes) { - mSharedPrefs.edit().putString(KEY_CUSTOM_THEME, serializedCustomThemes).apply(); - } - - @Override - public boolean getTabVisited(String id) { - return mSharedPrefs.getBoolean(KEY_VISITED_PREFIX + id, false); - } - - @Override - public void setTabVisited(String id) { - mSharedPrefs.edit().putBoolean(KEY_VISITED_PREFIX + id, true).apply(); - } - - @Override - public boolean getThemedIconEnabled() { - return mSharedPrefs.getBoolean(KEY_THEMED_ICON_ENABLED, false); - } - - @Override - public void setThemedIconEnabled(boolean enabled) { - mSharedPrefs.edit().putBoolean(KEY_THEMED_ICON_ENABLED, enabled).apply(); - } -} diff --git a/src/com/android/customization/module/DefaultCustomizationPreferences.kt b/src/com/android/customization/module/DefaultCustomizationPreferences.kt new file mode 100644 index 00000000..49fd1a94 --- /dev/null +++ b/src/com/android/customization/module/DefaultCustomizationPreferences.kt @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.customization.module + +import android.content.Context +import com.android.wallpaper.module.DefaultWallpaperPreferences + +open class DefaultCustomizationPreferences(context: Context) : + DefaultWallpaperPreferences(context), CustomizationPreferences { + + override fun getSerializedCustomThemes(): String? { + return sharedPrefs.getString(CustomizationPreferences.KEY_CUSTOM_THEME, null) + } + + override fun storeCustomThemes(serializedCustomThemes: String) { + sharedPrefs + .edit() + .putString(CustomizationPreferences.KEY_CUSTOM_THEME, serializedCustomThemes) + .apply() + } + + override fun getTabVisited(id: String): Boolean { + return sharedPrefs.getBoolean(CustomizationPreferences.KEY_VISITED_PREFIX + id, false) + } + + override fun setTabVisited(id: String) { + sharedPrefs + .edit() + .putBoolean(CustomizationPreferences.KEY_VISITED_PREFIX + id, true) + .apply() + } + + override fun getThemedIconEnabled(): Boolean { + return sharedPrefs.getBoolean(CustomizationPreferences.KEY_THEMED_ICON_ENABLED, false) + } + + override fun setThemedIconEnabled(enabled: Boolean) { + sharedPrefs + .edit() + .putBoolean(CustomizationPreferences.KEY_THEMED_ICON_ENABLED, enabled) + .apply() + } +} diff --git a/src/com/android/customization/module/DefaultCustomizationSections.java b/src/com/android/customization/module/DefaultCustomizationSections.java index bbe6bef1..8347d03c 100644 --- a/src/com/android/customization/module/DefaultCustomizationSections.java +++ b/src/com/android/customization/module/DefaultCustomizationSections.java @@ -9,22 +9,21 @@ import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.ViewModelProvider; import com.android.customization.model.grid.GridOptionsManager; -import com.android.customization.model.grid.GridSectionController; -import com.android.customization.model.mode.DarkModeSnapshotRestorer; import com.android.customization.model.themedicon.ThemedIconSectionController; import com.android.customization.model.themedicon.ThemedIconSwitchProvider; import com.android.customization.model.themedicon.domain.interactor.ThemedIconInteractor; import com.android.customization.model.themedicon.domain.interactor.ThemedIconSnapshotRestorer; +import com.android.customization.module.logging.ThemesUserEventLogger; import com.android.customization.picker.clock.ui.view.ClockViewFactory; import com.android.customization.picker.clock.ui.viewmodel.ClockCarouselViewModel; import com.android.customization.picker.color.domain.interactor.ColorPickerInteractor; -import com.android.customization.picker.color.ui.section.ColorSectionController2; +import com.android.customization.picker.color.ui.section.ColorSectionController; import com.android.customization.picker.color.ui.viewmodel.ColorPickerViewModel; +import com.android.customization.picker.grid.ui.section.GridSectionController; import com.android.customization.picker.notifications.ui.section.NotificationSectionController; import com.android.customization.picker.notifications.ui.viewmodel.NotificationSectionViewModel; import com.android.customization.picker.preview.ui.section.PreviewWithClockCarouselSectionController; import com.android.customization.picker.preview.ui.section.PreviewWithThemeSectionController; -import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordancePickerInteractor; import com.android.customization.picker.quickaffordance.ui.section.KeyguardQuickAffordanceSectionController; import com.android.customization.picker.quickaffordance.ui.viewmodel.KeyguardQuickAffordancePickerViewModel; import com.android.customization.picker.settings.ui.section.MoreSettingsSectionController; @@ -32,10 +31,10 @@ import com.android.wallpaper.config.BaseFlags; import com.android.wallpaper.model.CustomizationSectionController; import com.android.wallpaper.model.CustomizationSectionController.CustomizationSectionNavigationController; import com.android.wallpaper.model.PermissionRequester; -import com.android.wallpaper.model.WallpaperColorsViewModel; import com.android.wallpaper.model.WallpaperPreviewNavigator; import com.android.wallpaper.module.CurrentWallpaperInfoFactory; import com.android.wallpaper.module.CustomizationSections; +import com.android.wallpaper.picker.customization.data.repository.WallpaperColorsRepository; import com.android.wallpaper.picker.customization.domain.interactor.WallpaperInteractor; import com.android.wallpaper.picker.customization.ui.section.ConnectedSectionController; import com.android.wallpaper.picker.customization.ui.section.WallpaperQuickSwitchSectionController; @@ -49,43 +48,40 @@ import java.util.List; public final class DefaultCustomizationSections implements CustomizationSections { private final ColorPickerViewModel.Factory mColorPickerViewModelFactory; - private final KeyguardQuickAffordancePickerInteractor mKeyguardQuickAffordancePickerInteractor; private final KeyguardQuickAffordancePickerViewModel.Factory mKeyguardQuickAffordancePickerViewModelFactory; private final NotificationSectionViewModel.Factory mNotificationSectionViewModelFactory; private final BaseFlags mFlags; private final ClockCarouselViewModel.Factory mClockCarouselViewModelFactory; private final ClockViewFactory mClockViewFactory; - private final DarkModeSnapshotRestorer mDarkModeSnapshotRestorer; private final ThemedIconSnapshotRestorer mThemedIconSnapshotRestorer; private final ThemedIconInteractor mThemedIconInteractor; private final ColorPickerInteractor mColorPickerInteractor; + private final ThemesUserEventLogger mThemesUserEventLogger; public DefaultCustomizationSections( ColorPickerViewModel.Factory colorPickerViewModelFactory, - KeyguardQuickAffordancePickerInteractor keyguardQuickAffordancePickerInteractor, KeyguardQuickAffordancePickerViewModel.Factory keyguardQuickAffordancePickerViewModelFactory, NotificationSectionViewModel.Factory notificationSectionViewModelFactory, BaseFlags flags, ClockCarouselViewModel.Factory clockCarouselViewModelFactory, ClockViewFactory clockViewFactory, - DarkModeSnapshotRestorer darkModeSnapshotRestorer, ThemedIconSnapshotRestorer themedIconSnapshotRestorer, ThemedIconInteractor themedIconInteractor, - ColorPickerInteractor colorPickerInteractor) { + ColorPickerInteractor colorPickerInteractor, + ThemesUserEventLogger themesUserEventLogger) { mColorPickerViewModelFactory = colorPickerViewModelFactory; - mKeyguardQuickAffordancePickerInteractor = keyguardQuickAffordancePickerInteractor; mKeyguardQuickAffordancePickerViewModelFactory = keyguardQuickAffordancePickerViewModelFactory; mNotificationSectionViewModelFactory = notificationSectionViewModelFactory; mFlags = flags; mClockCarouselViewModelFactory = clockCarouselViewModelFactory; mClockViewFactory = clockViewFactory; - mDarkModeSnapshotRestorer = darkModeSnapshotRestorer; mThemedIconSnapshotRestorer = themedIconSnapshotRestorer; mThemedIconInteractor = themedIconInteractor; mColorPickerInteractor = colorPickerInteractor; + mThemesUserEventLogger = themesUserEventLogger; } @Override @@ -93,7 +89,7 @@ public final class DefaultCustomizationSections implements CustomizationSections Screen screen, FragmentActivity activity, LifecycleOwner lifecycleOwner, - WallpaperColorsViewModel wallpaperColorsViewModel, + WallpaperColorsRepository wallpaperColorsRepository, PermissionRequester permissionRequester, WallpaperPreviewNavigator wallpaperPreviewNavigator, CustomizationSectionNavigationController sectionNavigationController, @@ -114,7 +110,7 @@ public final class DefaultCustomizationSections implements CustomizationSections lifecycleOwner, screen, wallpaperInfoFactory, - wallpaperColorsViewModel, + wallpaperColorsRepository, displayUtils, mClockCarouselViewModelFactory, mClockViewFactory, @@ -131,7 +127,7 @@ public final class DefaultCustomizationSections implements CustomizationSections lifecycleOwner, screen, wallpaperInfoFactory, - wallpaperColorsViewModel, + wallpaperColorsRepository, displayUtils, wallpaperPreviewNavigator, wallpaperInteractor, @@ -144,7 +140,7 @@ public final class DefaultCustomizationSections implements CustomizationSections sectionControllers.add( new ConnectedSectionController( // Theme color section. - new ColorSectionController2( + new ColorSectionController( sectionNavigationController, new ViewModelProvider( activity, @@ -166,7 +162,6 @@ public final class DefaultCustomizationSections implements CustomizationSections sectionControllers.add( new KeyguardQuickAffordanceSectionController( sectionNavigationController, - mKeyguardQuickAffordancePickerInteractor, new ViewModelProvider( activity, mKeyguardQuickAffordancePickerViewModelFactory) @@ -193,7 +188,8 @@ public final class DefaultCustomizationSections implements CustomizationSections ThemedIconSwitchProvider.getInstance(activity), mThemedIconInteractor, savedInstanceState, - mThemedIconSnapshotRestorer)); + mThemedIconSnapshotRestorer, + mThemesUserEventLogger)); // App grid section. sectionControllers.add( diff --git a/src/com/android/customization/module/StatsLogUserEventLogger.java b/src/com/android/customization/module/StatsLogUserEventLogger.java deleted file mode 100644 index 647cdc9a..00000000 --- a/src/com/android/customization/module/StatsLogUserEventLogger.java +++ /dev/null @@ -1,258 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.module; - -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_COLOR; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_FONT; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_SHAPE; -import static com.android.systemui.shared.system.SysUiStatsLog.STYLE_UICHANGED__ACTION__APP_LAUNCHED; -import static com.android.systemui.shared.system.SysUiStatsLog.STYLE_UICHANGED__LAUNCHED_PREFERENCE__LAUNCHED_CROP_AND_SET_ACTION; -import static com.android.systemui.shared.system.SysUiStatsLog.STYLE_UICHANGED__LAUNCHED_PREFERENCE__LAUNCHED_DEEP_LINK; -import static com.android.systemui.shared.system.SysUiStatsLog.STYLE_UICHANGED__LAUNCHED_PREFERENCE__LAUNCHED_LAUNCHER; -import static com.android.systemui.shared.system.SysUiStatsLog.STYLE_UICHANGED__LAUNCHED_PREFERENCE__LAUNCHED_LAUNCH_ICON; -import static com.android.systemui.shared.system.SysUiStatsLog.STYLE_UICHANGED__LAUNCHED_PREFERENCE__LAUNCHED_PREFERENCE_UNSPECIFIED; -import static com.android.systemui.shared.system.SysUiStatsLog.STYLE_UICHANGED__LAUNCHED_PREFERENCE__LAUNCHED_SETTINGS; -import static com.android.systemui.shared.system.SysUiStatsLog.STYLE_UICHANGED__LAUNCHED_PREFERENCE__LAUNCHED_SETTINGS_SEARCH; -import static com.android.systemui.shared.system.SysUiStatsLog.STYLE_UICHANGED__LAUNCHED_PREFERENCE__LAUNCHED_SUW; -import static com.android.systemui.shared.system.SysUiStatsLog.STYLE_UICHANGED__LAUNCHED_PREFERENCE__LAUNCHED_TIPS; -import static com.android.wallpaper.util.LaunchSourceUtils.LAUNCH_SETTINGS_SEARCH; -import static com.android.wallpaper.util.LaunchSourceUtils.LAUNCH_SOURCE_DEEP_LINK; -import static com.android.wallpaper.util.LaunchSourceUtils.LAUNCH_SOURCE_LAUNCHER; -import static com.android.wallpaper.util.LaunchSourceUtils.LAUNCH_SOURCE_SETTINGS; -import static com.android.wallpaper.util.LaunchSourceUtils.LAUNCH_SOURCE_SUW; -import static com.android.wallpaper.util.LaunchSourceUtils.LAUNCH_SOURCE_TIPS; -import static com.android.wallpaper.util.LaunchSourceUtils.WALLPAPER_LAUNCH_SOURCE; - -import android.app.WallpaperManager; -import android.content.Intent; -import android.stats.style.StyleEnums; -import android.text.TextUtils; - -import androidx.annotation.Nullable; - -import com.android.customization.model.color.ColorOption; -import com.android.customization.model.grid.GridOption; -import com.android.customization.model.theme.ThemeBundle; -import com.android.wallpaper.module.NoOpUserEventLogger; -import com.android.wallpaper.module.WallpaperPreferences; -import com.android.wallpaper.module.WallpaperStatusChecker; - -import java.util.Map; -import java.util.Objects; - -/** - * StatsLog-backed implementation of {@link ThemesUserEventLogger}. - */ -public class StatsLogUserEventLogger extends NoOpUserEventLogger implements ThemesUserEventLogger { - - private final WallpaperPreferences mPreferences; - private final WallpaperStatusChecker mWallpaperStatusChecker; - - public StatsLogUserEventLogger( - WallpaperPreferences preferences, - WallpaperStatusChecker wallpaperStatusChecker) { - mPreferences = preferences; - mWallpaperStatusChecker = wallpaperStatusChecker; - } - - @Override - public void logAppLaunched(Intent launchSource) { - new SysUiStatsLogger(STYLE_UICHANGED__ACTION__APP_LAUNCHED) - .setLaunchedPreference(getAppLaunchSource(launchSource)) - .log(); - } - - @Override - public void logResumed(boolean provisioned, boolean wallpaper) { - new SysUiStatsLogger(StyleEnums.ONRESUME) - .log(); - } - - @Override - public void logStopped() { - new SysUiStatsLogger(StyleEnums.ONSTOP) - .log(); - } - - @Override - public void logActionClicked(String collectionId, int actionLabelResId) { - new SysUiStatsLogger(StyleEnums.WALLPAPER_EXPLORE) - .setWallpaperCategoryHash(getIdHashCode(collectionId)) - .log(); - } - - @Override - public void logIndividualWallpaperSelected(String collectionId) { - new SysUiStatsLogger(StyleEnums.WALLPAPER_SELECT) - .setWallpaperCategoryHash(getIdHashCode(collectionId)) - .log(); - } - - @Override - public void logCategorySelected(String collectionId) { - new SysUiStatsLogger(StyleEnums.WALLPAPER_OPEN_CATEGORY) - .setWallpaperCategoryHash(getIdHashCode(collectionId)) - .log(); - } - - @Override - public void logSnapshot() { - final boolean isLockWallpaperSet = mWallpaperStatusChecker.isLockWallpaperSet(); - final String homeCollectionId = mPreferences.getHomeWallpaperCollectionId(); - final String homeRemoteId = mPreferences.getHomeWallpaperRemoteId(); - final String effects = mPreferences.getHomeWallpaperEffects(); - String homeWallpaperId = TextUtils.isEmpty(homeRemoteId) - ? mPreferences.getHomeWallpaperServiceName() : homeRemoteId; - String lockCollectionId = isLockWallpaperSet ? mPreferences.getLockWallpaperCollectionId() - : homeCollectionId; - String lockWallpaperId = isLockWallpaperSet ? mPreferences.getLockWallpaperRemoteId() - : homeWallpaperId; - - new SysUiStatsLogger(StyleEnums.SNAPSHOT) - .setWallpaperCategoryHash(getIdHashCode(homeCollectionId)) - .setWallpaperIdHash(getIdHashCode(homeWallpaperId)) - .setLockWallpaperCategoryHash(getIdHashCode(lockCollectionId)) - .setLockWallpaperIdHash(getIdHashCode(lockWallpaperId)) - .setFirstLaunchDateSinceSetup(mPreferences.getFirstLaunchDateSinceSetup()) - .setFirstWallpaperApplyDateSinceSetup( - mPreferences.getFirstWallpaperApplyDateSinceSetup()) - .setAppLaunchCount(mPreferences.getAppLaunchCount()) - .setEffectIdHash(getIdHashCode(effects)) - .log(); - } - - @Override - public void logWallpaperSet(String collectionId, @Nullable String wallpaperId, - @Nullable String effects) { - new SysUiStatsLogger(StyleEnums.WALLPAPER_APPLIED) - .setWallpaperCategoryHash(getIdHashCode(collectionId)) - .setWallpaperIdHash(getIdHashCode(wallpaperId)) - .setEffectIdHash(getIdHashCode(effects)) - .log(); - } - - @Override - public void logEffectApply(String effect, @EffectStatus int status, long timeElapsedMillis, - int resultCode) { - new SysUiStatsLogger(StyleEnums.WALLPAPER_EFFECT_APPLIED) - .setEffectPreference(status) - .setEffectIdHash(getIdHashCode(effect)) - .setTimeElapsed(timeElapsedMillis) - .setEffectResultCode(resultCode) - .log(); - } - - @Override - public void logEffectProbe(String effect, @EffectStatus int status) { - new SysUiStatsLogger(StyleEnums.WALLPAPER_EFFECT_PROBE) - .setEffectPreference(status) - .setEffectIdHash(getIdHashCode(effect)) - .log(); - } - - @Override - public void logEffectForegroundDownload(String effect, @EffectStatus int status, - long timeElapsedMillis) { - new SysUiStatsLogger(StyleEnums.WALLPAPER_EFFECT_FG_DOWNLOAD) - .setEffectPreference(status) - .setEffectIdHash(getIdHashCode(effect)) - .setTimeElapsed(timeElapsedMillis) - .log(); - } - - @Nullable - private String getThemePackage(ThemeBundle theme, String category) { - Map<String, String> packages = theme.getPackagesByCategory(); - return packages.get(category); - } - - @Override - public void logThemeSelected(ThemeBundle theme, boolean isCustomTheme) { - new SysUiStatsLogger(StyleEnums.PICKER_SELECT) - .setColorPackageHash( - Objects.hashCode(getThemePackage(theme, OVERLAY_CATEGORY_COLOR))) - .setFontPackageHash(Objects.hashCode(getThemePackage(theme, OVERLAY_CATEGORY_FONT))) - .setShapePackageHash( - Objects.hashCode(getThemePackage(theme, OVERLAY_CATEGORY_SHAPE))) - .log(); - } - - @Override - public void logThemeApplied(ThemeBundle theme, boolean isCustomTheme) { - new SysUiStatsLogger(StyleEnums.PICKER_APPLIED) - .setColorPackageHash( - Objects.hashCode(getThemePackage(theme, OVERLAY_CATEGORY_COLOR))) - .setFontPackageHash(Objects.hashCode(getThemePackage(theme, OVERLAY_CATEGORY_FONT))) - .setShapePackageHash( - Objects.hashCode(getThemePackage(theme, OVERLAY_CATEGORY_SHAPE))) - .log(); - } - - @Override - public void logColorApplied(int action, ColorOption colorOption) { - new SysUiStatsLogger(action) - .setColorPreference(colorOption.getIndex()) - .setColorVariant(colorOption.getStyle().ordinal() + 1) - .log(); - } - - @Override - public void logGridSelected(GridOption grid) { - new SysUiStatsLogger(StyleEnums.PICKER_SELECT) - .setLauncherGrid(grid.cols) - .log(); - } - - @Override - public void logGridApplied(GridOption grid) { - new SysUiStatsLogger(StyleEnums.PICKER_APPLIED) - .setLauncherGrid(grid.cols) - .log(); - } - - private int getAppLaunchSource(Intent launchSource) { - if (launchSource.hasExtra(WALLPAPER_LAUNCH_SOURCE)) { - switch (launchSource.getStringExtra(WALLPAPER_LAUNCH_SOURCE)) { - case LAUNCH_SOURCE_LAUNCHER: - return STYLE_UICHANGED__LAUNCHED_PREFERENCE__LAUNCHED_LAUNCHER; - case LAUNCH_SOURCE_SETTINGS: - return STYLE_UICHANGED__LAUNCHED_PREFERENCE__LAUNCHED_SETTINGS; - case LAUNCH_SOURCE_SUW: - return STYLE_UICHANGED__LAUNCHED_PREFERENCE__LAUNCHED_SUW; - case LAUNCH_SOURCE_TIPS: - return STYLE_UICHANGED__LAUNCHED_PREFERENCE__LAUNCHED_TIPS; - case LAUNCH_SOURCE_DEEP_LINK: - return STYLE_UICHANGED__LAUNCHED_PREFERENCE__LAUNCHED_DEEP_LINK; - default: - return STYLE_UICHANGED__LAUNCHED_PREFERENCE__LAUNCHED_PREFERENCE_UNSPECIFIED; - } - } else if (launchSource.hasExtra(LAUNCH_SETTINGS_SEARCH)) { - return STYLE_UICHANGED__LAUNCHED_PREFERENCE__LAUNCHED_SETTINGS_SEARCH; - } else if (launchSource.getAction() != null && launchSource.getAction().equals( - WallpaperManager.ACTION_CROP_AND_SET_WALLPAPER)) { - return STYLE_UICHANGED__LAUNCHED_PREFERENCE__LAUNCHED_CROP_AND_SET_ACTION; - } else if (launchSource.getCategories() != null - && launchSource.getCategories().contains(Intent.CATEGORY_LAUNCHER)) { - return STYLE_UICHANGED__LAUNCHED_PREFERENCE__LAUNCHED_LAUNCH_ICON; - } else { - return STYLE_UICHANGED__LAUNCHED_PREFERENCE__LAUNCHED_PREFERENCE_UNSPECIFIED; - } - } - - private int getIdHashCode(String id) { - return id != null ? id.hashCode() : 0; - } -} diff --git a/src/com/android/customization/module/ThemePickerInjector.kt b/src/com/android/customization/module/ThemePickerInjector.kt index 497456f6..f22e562b 100644 --- a/src/com/android/customization/module/ThemePickerInjector.kt +++ b/src/com/android/customization/module/ThemePickerInjector.kt @@ -15,7 +15,9 @@ */ package com.android.customization.module +import android.app.Activity import android.app.UiModeManager +import android.app.WallpaperColors import android.app.WallpaperManager import android.content.Context import android.content.Intent @@ -23,40 +25,37 @@ import android.content.res.Resources import android.net.Uri import android.text.TextUtils import androidx.activity.ComponentActivity -import androidx.fragment.app.FragmentActivity import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.ViewModelProvider import com.android.customization.model.color.ColorCustomizationManager -import com.android.customization.model.color.ColorOptionsProvider import com.android.customization.model.color.ColorOptionsProvider.COLOR_SOURCE_PRESET +import com.android.customization.model.color.ThemedWallpaperColorResources +import com.android.customization.model.color.WallpaperColorResources import com.android.customization.model.grid.GridOptionsManager -import com.android.customization.model.grid.data.repository.GridRepositoryImpl -import com.android.customization.model.grid.domain.interactor.GridInteractor -import com.android.customization.model.grid.domain.interactor.GridSnapshotRestorer -import com.android.customization.model.grid.ui.viewmodel.GridScreenViewModel import com.android.customization.model.mode.DarkModeSnapshotRestorer import com.android.customization.model.theme.OverlayManagerCompat -import com.android.customization.model.theme.ThemeBundleProvider -import com.android.customization.model.theme.ThemeManager import com.android.customization.model.themedicon.ThemedIconSwitchProvider import com.android.customization.model.themedicon.data.repository.ThemeIconRepository import com.android.customization.model.themedicon.domain.interactor.ThemedIconInteractor import com.android.customization.model.themedicon.domain.interactor.ThemedIconSnapshotRestorer +import com.android.customization.module.logging.ThemesUserEventLogger import com.android.customization.picker.clock.data.repository.ClockPickerRepositoryImpl import com.android.customization.picker.clock.data.repository.ClockRegistryProvider import com.android.customization.picker.clock.domain.interactor.ClockPickerInteractor import com.android.customization.picker.clock.domain.interactor.ClockPickerSnapshotRestorer import com.android.customization.picker.clock.ui.view.ClockViewFactory +import com.android.customization.picker.clock.ui.view.ClockViewFactoryImpl import com.android.customization.picker.clock.ui.viewmodel.ClockCarouselViewModel -import com.android.customization.picker.clock.ui.viewmodel.ClockSectionViewModel import com.android.customization.picker.clock.ui.viewmodel.ClockSettingsViewModel -import com.android.customization.picker.clock.utils.ClockDescriptionUtils -import com.android.customization.picker.clock.utils.ThemePickerClockDescriptionUtils import com.android.customization.picker.color.data.repository.ColorPickerRepositoryImpl import com.android.customization.picker.color.domain.interactor.ColorPickerInteractor import com.android.customization.picker.color.domain.interactor.ColorPickerSnapshotRestorer import com.android.customization.picker.color.ui.viewmodel.ColorPickerViewModel +import com.android.customization.picker.grid.data.repository.GridRepositoryImpl +import com.android.customization.picker.grid.domain.interactor.GridInteractor +import com.android.customization.picker.grid.domain.interactor.GridSnapshotRestorer +import com.android.customization.picker.grid.ui.viewmodel.GridScreenViewModel import com.android.customization.picker.notifications.data.repository.NotificationsRepository import com.android.customization.picker.notifications.domain.interactor.NotificationsInteractor import com.android.customization.picker.notifications.domain.interactor.NotificationsSnapshotRestorer @@ -69,17 +68,16 @@ import com.android.systemui.shared.clocks.ClockRegistry import com.android.systemui.shared.customization.data.content.CustomizationProviderClient import com.android.systemui.shared.customization.data.content.CustomizationProviderClientImpl import com.android.wallpaper.config.BaseFlags -import com.android.wallpaper.dispatchers.BackgroundDispatcher -import com.android.wallpaper.dispatchers.MainDispatcher -import com.android.wallpaper.model.WallpaperColorsViewModel import com.android.wallpaper.module.CustomizationSections import com.android.wallpaper.module.FragmentFactory -import com.android.wallpaper.module.UserEventLogger import com.android.wallpaper.module.WallpaperPicker2Injector import com.android.wallpaper.picker.CustomizationPickerActivity import com.android.wallpaper.picker.customization.data.content.WallpaperClientImpl +import com.android.wallpaper.picker.customization.data.repository.WallpaperColorsRepository import com.android.wallpaper.picker.customization.data.repository.WallpaperRepository import com.android.wallpaper.picker.customization.domain.interactor.WallpaperInteractor +import com.android.wallpaper.picker.di.modules.BackgroundDispatcher +import com.android.wallpaper.picker.di.modules.MainDispatcher import com.android.wallpaper.picker.undo.domain.interactor.SnapshotRestorer import com.android.wallpaper.util.ScreenSizeCalculator import javax.inject.Inject @@ -94,9 +92,9 @@ internal constructor( @MainDispatcher private val mainScope: CoroutineScope, @MainDispatcher private val mainDispatcher: CoroutineDispatcher, @BackgroundDispatcher private val bgDispatcher: CoroutineDispatcher, -) : WallpaperPicker2Injector(mainScope, bgDispatcher), CustomizationInjector { + private val userEventLogger: ThemesUserEventLogger, +) : WallpaperPicker2Injector(mainScope, bgDispatcher, userEventLogger), CustomizationInjector { private var customizationSections: CustomizationSections? = null - private var userEventLogger: UserEventLogger? = null private var wallpaperInteractor: WallpaperInteractor? = null private var keyguardQuickAffordancePickerInteractor: KeyguardQuickAffordancePickerInteractor? = null @@ -109,9 +107,8 @@ internal constructor( null private var notificationsSnapshotRestorer: NotificationsSnapshotRestorer? = null private var clockPickerInteractor: ClockPickerInteractor? = null - private var clockSectionViewModel: ClockSectionViewModel? = null private var clockCarouselViewModelFactory: ClockCarouselViewModel.Factory? = null - private var clockViewFactories: MutableMap<Int, ClockViewFactory> = HashMap() + private var clockViewFactory: ClockViewFactory? = null private var clockPickerSnapshotRestorer: ClockPickerSnapshotRestorer? = null private var notificationsInteractor: NotificationsInteractor? = null private var notificationSectionViewModelFactory: NotificationSectionViewModel.Factory? = null @@ -123,33 +120,35 @@ internal constructor( private var themedIconSnapshotRestorer: ThemedIconSnapshotRestorer? = null private var themedIconInteractor: ThemedIconInteractor? = null private var clockSettingsViewModelFactory: ClockSettingsViewModel.Factory? = null - private var clockDescriptionUtils: ClockDescriptionUtils? = null private var gridInteractor: GridInteractor? = null private var gridSnapshotRestorer: GridSnapshotRestorer? = null private var gridScreenViewModelFactory: GridScreenViewModel.Factory? = null private var clockRegistryProvider: ClockRegistryProvider? = null override fun getCustomizationSections(activity: ComponentActivity): CustomizationSections { + val appContext = activity.applicationContext + val clockViewFactory = getClockViewFactory(activity) + val resources = activity.resources return customizationSections ?: DefaultCustomizationSections( getColorPickerViewModelFactory( - context = activity, - wallpaperColorsViewModel = getWallpaperColorsViewModel(), - ), - getKeyguardQuickAffordancePickerInteractor(activity), - getKeyguardQuickAffordancePickerViewModelFactory(activity), - NotificationSectionViewModel.Factory( - interactor = getNotificationsInteractor(activity), + context = appContext, + wallpaperColorsRepository = getWallpaperColorsRepository(), ), + getKeyguardQuickAffordancePickerViewModelFactory(appContext), + getNotificationSectionViewModelFactory(appContext), getFlags(), getClockCarouselViewModelFactory( - getClockPickerInteractor(activity.applicationContext), + interactor = getClockPickerInteractor(appContext), + clockViewFactory = clockViewFactory, + resources = resources, + logger = userEventLogger, ), - getClockViewFactory(activity), - getDarkModeSnapshotRestorer(activity), - getThemedIconSnapshotRestorer(activity), + clockViewFactory, + getThemedIconSnapshotRestorer(appContext), getThemedIconInteractor(), - getColorPickerInteractor(activity, getWallpaperColorsViewModel()), + getColorPickerInteractor(appContext, getWallpaperColorsRepository()), + getUserEventLogger(appContext), ) .also { customizationSections = it } } @@ -168,12 +167,7 @@ internal constructor( @Synchronized override fun getUserEventLogger(context: Context): ThemesUserEventLogger { - return userEventLogger as? ThemesUserEventLogger - ?: StatsLogUserEventLogger( - getPreferences(context.applicationContext), - getWallpaperStatusChecker(context.applicationContext), - ) - .also { userEventLogger = it } + return userEventLogger } override fun getFragmentFactory(): FragmentFactory? { @@ -195,7 +189,7 @@ internal constructor( this[KEY_THEMED_ICON_SNAPSHOT_RESTORER] = getThemedIconSnapshotRestorer(context) this[KEY_APP_GRID_SNAPSHOT_RESTORER] = getGridSnapshotRestorer(context) this[KEY_COLOR_PICKER_SNAPSHOT_RESTORER] = - getColorPickerSnapshotRestorer(context, getWallpaperColorsViewModel()) + getColorPickerSnapshotRestorer(context, getWallpaperColorsRepository()) this[KEY_CLOCKS_SNAPSHOT_RESTORER] = getClockPickerSnapshotRestorer(context) } } @@ -204,16 +198,11 @@ internal constructor( return getPreferences(context) as CustomizationPreferences } - override fun getThemeManager( - provider: ThemeBundleProvider, - activity: FragmentActivity, - overlayManagerCompat: OverlayManagerCompat, - logger: ThemesUserEventLogger - ): ThemeManager { - return ThemeManager(provider, activity, overlayManagerCompat, logger) - } - override fun getWallpaperInteractor(context: Context): WallpaperInteractor { + if (getFlags().isMultiCropEnabled() && getFlags().isMultiCropPreviewUiEnabled()) { + return injectedWallpaperInteractor + } + val appContext = context.applicationContext return wallpaperInteractor ?: WallpaperInteractor( @@ -223,8 +212,8 @@ internal constructor( client = WallpaperClientImpl( context = appContext, - infoFactory = getCurrentWallpaperInfoFactory(appContext), - wallpaperManager = WallpaperManager.getInstance(appContext) + wallpaperManager = WallpaperManager.getInstance(appContext), + wallpaperPreferences = getPreferences(appContext) ), wallpaperPreferences = getPreferences(context = appContext), backgroundDispatcher = bgDispatcher, @@ -232,7 +221,7 @@ internal constructor( shouldHandleReload = { TextUtils.equals( getColorCustomizationManager(appContext).currentColorSource, - ColorOptionsProvider.COLOR_SOURCE_PRESET + COLOR_SOURCE_PRESET, ) } ) @@ -257,6 +246,7 @@ internal constructor( getKeyguardQuickAffordancePickerInteractor(context), getWallpaperInteractor(context), getCurrentWallpaperInfoFactory(context), + getUserEventLogger(context), ) .also { keyguardQuickAffordancePickerViewModelFactory = it } } @@ -267,7 +257,7 @@ internal constructor( val client = getKeyguardQuickAffordancePickerProviderClient(context) val appContext = context.applicationContext return KeyguardQuickAffordancePickerInteractor( - KeyguardQuickAffordancePickerRepository(client, bgDispatcher), + KeyguardQuickAffordancePickerRepository(client, getApplicationCoroutineScope()), client ) { getKeyguardQuickAffordanceSnapshotRestorer(appContext) @@ -300,6 +290,7 @@ internal constructor( return notificationSectionViewModelFactory ?: NotificationSectionViewModel.Factory( interactor = getNotificationsInteractor(context), + logger = getUserEventLogger(context), ) .also { notificationSectionViewModelFactory = it } } @@ -362,30 +353,26 @@ internal constructor( .also { clockPickerInteractor = it } } - override fun getClockSectionViewModel( - context: Context, - ): ClockSectionViewModel { - return clockSectionViewModel - ?: ClockSectionViewModel( - context.applicationContext, - getClockPickerInteractor(context.applicationContext) - ) - .also { clockSectionViewModel = it } - } - override fun getClockCarouselViewModelFactory( interactor: ClockPickerInteractor, + clockViewFactory: ClockViewFactory, + resources: Resources, + logger: ThemesUserEventLogger, ): ClockCarouselViewModel.Factory { return clockCarouselViewModelFactory - ?: ClockCarouselViewModel.Factory(interactor, bgDispatcher).also { - clockCarouselViewModelFactory = it - } + ?: ClockCarouselViewModel.Factory( + interactor, + bgDispatcher, + clockViewFactory, + resources, + logger, + ) + .also { clockCarouselViewModelFactory = it } } override fun getClockViewFactory(activity: ComponentActivity): ClockViewFactory { - val activityHashCode = activity.hashCode() - return clockViewFactories[activityHashCode] - ?: ClockViewFactory( + return clockViewFactory + ?: ClockViewFactoryImpl( activity.applicationContext, ScreenSizeCalculator.getInstance() .getScreenSize(activity.windowManager.defaultDisplay), @@ -393,13 +380,13 @@ internal constructor( getClockRegistry(activity.applicationContext), ) .also { - clockViewFactories[activityHashCode] = it + clockViewFactory = it activity.lifecycle.addObserver( object : DefaultLifecycleObserver { override fun onDestroy(owner: LifecycleOwner) { super.onDestroy(owner) - clockViewFactories[activityHashCode]?.onDestroy() - clockViewFactories.remove(activityHashCode) + if ((owner as Activity).isChangingConfigurations()) return + clockViewFactory?.onDestroy() } } ) @@ -415,20 +402,27 @@ internal constructor( } } + override fun getWallpaperColorResources( + wallpaperColors: WallpaperColors, + context: Context + ): WallpaperColorResources { + return ThemedWallpaperColorResources(wallpaperColors, context) + } + override fun getColorPickerInteractor( context: Context, - wallpaperColorsViewModel: WallpaperColorsViewModel, + wallpaperColorsRepository: WallpaperColorsRepository, ): ColorPickerInteractor { val appContext = context.applicationContext return colorPickerInteractor ?: ColorPickerInteractor( repository = ColorPickerRepositoryImpl( - wallpaperColorsViewModel, + wallpaperColorsRepository, getColorCustomizationManager(appContext) ), snapshotRestorer = { - getColorPickerSnapshotRestorer(appContext, wallpaperColorsViewModel) + getColorPickerSnapshotRestorer(appContext, wallpaperColorsRepository) } ) .also { colorPickerInteractor = it } @@ -436,23 +430,24 @@ internal constructor( override fun getColorPickerViewModelFactory( context: Context, - wallpaperColorsViewModel: WallpaperColorsViewModel, + wallpaperColorsRepository: WallpaperColorsRepository, ): ColorPickerViewModel.Factory { return colorPickerViewModelFactory ?: ColorPickerViewModel.Factory( context.applicationContext, - getColorPickerInteractor(context, wallpaperColorsViewModel), + getColorPickerInteractor(context, wallpaperColorsRepository), + userEventLogger, ) .also { colorPickerViewModelFactory = it } } private fun getColorPickerSnapshotRestorer( context: Context, - wallpaperColorsViewModel: WallpaperColorsViewModel, + wallpaperColorsRepository: WallpaperColorsRepository, ): ColorPickerSnapshotRestorer { return colorPickerSnapshotRestorer ?: ColorPickerSnapshotRestorer( - getColorPickerInteractor(context, wallpaperColorsViewModel) + getColorPickerInteractor(context, wallpaperColorsRepository) ) .also { colorPickerSnapshotRestorer = it } } @@ -502,7 +497,7 @@ internal constructor( override fun getClockSettingsViewModelFactory( context: Context, - wallpaperColorsViewModel: WallpaperColorsViewModel, + wallpaperColorsRepository: WallpaperColorsRepository, clockViewFactory: ClockViewFactory, ): ClockSettingsViewModel.Factory { return clockSettingsViewModelFactory @@ -511,8 +506,9 @@ internal constructor( getClockPickerInteractor(context), getColorPickerInteractor( context, - wallpaperColorsViewModel, + wallpaperColorsRepository, ), + userEventLogger, ) { clockId -> clockId?.let { clockViewFactory.getController(clockId).config.isReactiveToTone } ?: false @@ -520,11 +516,6 @@ internal constructor( .also { clockSettingsViewModelFactory = it } } - override fun getClockDescriptionUtils(resources: Resources): ClockDescriptionUtils { - return clockDescriptionUtils - ?: ThemePickerClockDescriptionUtils().also { clockDescriptionUtils = it } - } - fun getGridScreenViewModelFactory( context: Context, ): ViewModelProvider.Factory { diff --git a/src/com/android/customization/module/ThemesUserEventLogger.java b/src/com/android/customization/module/ThemesUserEventLogger.java deleted file mode 100644 index b1a87b9c..00000000 --- a/src/com/android/customization/module/ThemesUserEventLogger.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.module; - -import com.android.customization.model.color.ColorOption; -import com.android.customization.model.grid.GridOption; -import com.android.customization.model.theme.ThemeBundle; -import com.android.wallpaper.module.UserEventLogger; - -/** - * Extension of {@link UserEventLogger} that adds ThemePicker specific events. - */ -public interface ThemesUserEventLogger extends UserEventLogger { - - void logThemeSelected(ThemeBundle theme, boolean isCustomTheme); - - void logThemeApplied(ThemeBundle theme, boolean isCustomTheme); - - /** - * Logs the color usage while color is applied. - * - * @param action color applied action. - * @param colorOption applied color option. - */ - void logColorApplied(int action, ColorOption colorOption); - - void logGridSelected(GridOption grid); - - void logGridApplied(GridOption grid); - -} diff --git a/src/com/android/customization/module/logging/AppSessionId.kt b/src/com/android/customization/module/logging/AppSessionId.kt new file mode 100644 index 00000000..c831f225 --- /dev/null +++ b/src/com/android/customization/module/logging/AppSessionId.kt @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.customization.module.logging + +import com.android.internal.logging.InstanceId +import com.android.internal.logging.InstanceIdSequence +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class AppSessionId @Inject constructor() { + + private var sessionId: InstanceId = newInstanceId() + + fun createNewId(): AppSessionId { + sessionId = newInstanceId() + return this + } + + fun getId(): Int { + return sessionId.hashCode() + } + + private fun newInstanceId(): InstanceId = InstanceIdSequence(INSTANCE_ID_MAX).newInstanceId() + + companion object { + // At most 20 bits: ~1m possibilities, ~0.5% probability of collision in 100 values + private const val INSTANCE_ID_MAX = 1 shl 20 + } +} diff --git a/src/com/android/customization/module/SysUiStatsLogger.kt b/src/com/android/customization/module/logging/SysUiStatsLogger.kt index 8e97b0b6..111c2c23 100644 --- a/src/com/android/customization/module/SysUiStatsLogger.kt +++ b/src/com/android/customization/module/logging/SysUiStatsLogger.kt @@ -13,11 +13,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.customization.module - -import android.stats.style.StyleEnums +package com.android.customization.module.logging + +import android.stats.style.StyleEnums.CLOCK_SIZE_UNSPECIFIED +import android.stats.style.StyleEnums.COLOR_SOURCE_UNSPECIFIED +import android.stats.style.StyleEnums.DATE_PREFERENCE_UNSPECIFIED +import android.stats.style.StyleEnums.EFFECT_PREFERENCE_UNSPECIFIED +import android.stats.style.StyleEnums.LAUNCHED_PREFERENCE_UNSPECIFIED +import android.stats.style.StyleEnums.LOCATION_PREFERENCE_UNSPECIFIED +import android.stats.style.StyleEnums.SET_WALLPAPER_ENTRY_POINT_UNSPECIFIED +import android.stats.style.StyleEnums.WALLPAPER_DESTINATION_UNSPECIFIED import com.android.systemui.shared.system.SysUiStatsLog import com.android.systemui.shared.system.SysUiStatsLog.STYLE_UI_CHANGED +import com.android.wallpaper.module.logging.UserEventLogger.SetWallpaperEntryPoint /** The builder for [SysUiStatsLog]. */ class SysUiStatsLogger(val action: Int) { @@ -30,10 +38,10 @@ class SysUiStatsLogger(val action: Int) { private var wallpaperCategoryHash = 0 private var wallpaperIdHash = 0 private var colorPreference = 0 - private var locationPreference = StyleEnums.EFFECT_PREFERENCE_UNSPECIFIED - private var datePreference = StyleEnums.DATE_PREFERENCE_UNSPECIFIED - private var launchedPreference = StyleEnums.LAUNCHED_PREFERENCE_UNSPECIFIED - private var effectPreference = StyleEnums.EFFECT_PREFERENCE_UNSPECIFIED + private var locationPreference = LOCATION_PREFERENCE_UNSPECIFIED + private var datePreference = DATE_PREFERENCE_UNSPECIFIED + private var launchedPreference = LAUNCHED_PREFERENCE_UNSPECIFIED + private var effectPreference = EFFECT_PREFERENCE_UNSPECIFIED private var effectIdHash = 0 private var lockWallpaperCategoryHash = 0 private var lockWallpaperIdHash = 0 @@ -43,14 +51,21 @@ class SysUiStatsLogger(val action: Int) { private var colorVariant = 0 private var timeElapsedMillis = 0L private var effectResultCode = -1 + private var appSessionId = 0 + private var setWallpaperEntryPoint = SET_WALLPAPER_ENTRY_POINT_UNSPECIFIED + private var wallpaperDestination = WALLPAPER_DESTINATION_UNSPECIFIED + private var colorSource = COLOR_SOURCE_UNSPECIFIED + private var seedColor = 0 + private var clockSize = CLOCK_SIZE_UNSPECIFIED + private var toggleOn = false + private var shortcut = "" + private var shortcutSlotId = "" fun setColorPackageHash(colorPackageHash: Int) = apply { this.colorPackageHash = colorPackageHash } - fun setFontPackageHash(fontPackageHash: Int) = apply { - this.fontPackageHash = fontPackageHash - } + fun setFontPackageHash(fontPackageHash: Int) = apply { this.fontPackageHash = fontPackageHash } fun setShapePackageHash(shapePackageHash: Int) = apply { this.shapePackageHash = shapePackageHash @@ -66,13 +81,9 @@ class SysUiStatsLogger(val action: Int) { this.wallpaperCategoryHash = wallpaperCategoryHash } - fun setWallpaperIdHash(wallpaperIdHash: Int) = apply { - this.wallpaperIdHash = wallpaperIdHash - } + fun setWallpaperIdHash(wallpaperIdHash: Int) = apply { this.wallpaperIdHash = wallpaperIdHash } - fun setColorPreference(colorPreference: Int) = apply { - this.colorPreference = colorPreference - } + fun setColorPreference(colorPreference: Int) = apply { this.colorPreference = colorPreference } fun setLocationPreference(locationPreference: Int) = apply { this.locationPreference = locationPreference @@ -111,13 +122,35 @@ class SysUiStatsLogger(val action: Int) { fun setColorVariant(colorVariant: Int) = apply { this.colorVariant = colorVariant } fun setTimeElapsed(timeElapsedMillis: Long) = apply { - this.timeElapsedMillis = timeElapsedMillis + this.timeElapsedMillis = timeElapsedMillis } fun setEffectResultCode(effectResultCode: Int) = apply { this.effectResultCode = effectResultCode } + fun setAppSessionId(sessionId: Int) = apply { this.appSessionId = sessionId } + + fun setSetWallpaperEntryPoint(@SetWallpaperEntryPoint setWallpaperEntryPoint: Int) = apply { + this.setWallpaperEntryPoint = setWallpaperEntryPoint + } + + fun setWallpaperDestination(wallpaperDestination: Int) = apply { + this.wallpaperDestination = wallpaperDestination + } + + fun setColorSource(colorSource: Int) = apply { this.colorSource = colorSource } + + fun setSeedColor(seedColor: Int) = apply { this.seedColor = seedColor } + + fun setClockSize(clockSize: Int) = apply { this.clockSize = clockSize } + + fun setToggleOn(toggleOn: Boolean) = apply { this.toggleOn = toggleOn } + + fun setShortcut(shortcut: String) = apply { this.shortcut = shortcut } + + fun setShortcutSlotId(shortcutSlotId: String) = apply { this.shortcutSlotId = shortcutSlotId } + fun log() { SysUiStatsLog.write( STYLE_UI_CHANGED, @@ -143,6 +176,15 @@ class SysUiStatsLogger(val action: Int) { colorVariant, timeElapsedMillis, effectResultCode, + appSessionId, + setWallpaperEntryPoint, + wallpaperDestination, + colorSource, + seedColor, + clockSize, + toggleOn, + shortcut, + shortcutSlotId, ) } } diff --git a/src/com/android/customization/module/logging/ThemesUserEventLogger.kt b/src/com/android/customization/module/logging/ThemesUserEventLogger.kt new file mode 100644 index 00000000..60fd062a --- /dev/null +++ b/src/com/android/customization/module/logging/ThemesUserEventLogger.kt @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.customization.module.logging + +import android.stats.style.StyleEnums +import androidx.annotation.IntDef +import com.android.customization.model.grid.GridOption +import com.android.wallpaper.module.logging.UserEventLogger + +/** Extension of [UserEventLogger] that adds ThemePicker specific events. */ +interface ThemesUserEventLogger : UserEventLogger { + + fun logThemeColorApplied(@ColorSource source: Int, style: Int, seedColor: Int) + + fun logGridApplied(grid: GridOption) + + fun logClockApplied(clockId: String) + + fun logClockColorApplied(seedColor: Int) + + fun logClockSizeApplied(@ClockSize clockSize: Int) + + fun logThemedIconApplied(useThemeIcon: Boolean) + + fun logLockScreenNotificationApplied(showLockScreenNotifications: Boolean) + + fun logShortcutApplied(shortcut: String, shortcutSlotId: String) + + fun logDarkThemeApplied(useDarkTheme: Boolean) + + @IntDef( + StyleEnums.COLOR_SOURCE_UNSPECIFIED, + StyleEnums.COLOR_SOURCE_HOME_SCREEN_WALLPAPER, + StyleEnums.COLOR_SOURCE_LOCK_SCREEN_WALLPAPER, + StyleEnums.COLOR_SOURCE_PRESET_COLOR, + ) + @Retention(AnnotationRetention.SOURCE) + annotation class ColorSource + + @IntDef( + StyleEnums.CLOCK_SIZE_UNSPECIFIED, + StyleEnums.CLOCK_SIZE_DYNAMIC, + StyleEnums.CLOCK_SIZE_SMALL, + ) + @Retention(AnnotationRetention.SOURCE) + annotation class ClockSize + + companion object { + const val NULL_SEED_COLOR = 0 + } +} diff --git a/src/com/android/customization/module/logging/ThemesUserEventLoggerImpl.kt b/src/com/android/customization/module/logging/ThemesUserEventLoggerImpl.kt new file mode 100644 index 00000000..3f4a6dc4 --- /dev/null +++ b/src/com/android/customization/module/logging/ThemesUserEventLoggerImpl.kt @@ -0,0 +1,299 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.customization.module.logging + +import android.app.WallpaperManager +import android.content.Intent +import android.stats.style.StyleEnums.APP_LAUNCHED +import android.stats.style.StyleEnums.CLOCK_APPLIED +import android.stats.style.StyleEnums.CLOCK_COLOR_APPLIED +import android.stats.style.StyleEnums.CLOCK_SIZE_APPLIED +import android.stats.style.StyleEnums.DARK_THEME_APPLIED +import android.stats.style.StyleEnums.GRID_APPLIED +import android.stats.style.StyleEnums.LAUNCHED_CROP_AND_SET_ACTION +import android.stats.style.StyleEnums.LAUNCHED_DEEP_LINK +import android.stats.style.StyleEnums.LAUNCHED_KEYGUARD +import android.stats.style.StyleEnums.LAUNCHED_LAUNCHER +import android.stats.style.StyleEnums.LAUNCHED_LAUNCH_ICON +import android.stats.style.StyleEnums.LAUNCHED_PREFERENCE_UNSPECIFIED +import android.stats.style.StyleEnums.LAUNCHED_SETTINGS +import android.stats.style.StyleEnums.LAUNCHED_SETTINGS_SEARCH +import android.stats.style.StyleEnums.LAUNCHED_SUW +import android.stats.style.StyleEnums.LAUNCHED_TIPS +import android.stats.style.StyleEnums.LOCK_SCREEN_NOTIFICATION_APPLIED +import android.stats.style.StyleEnums.RESET_APPLIED +import android.stats.style.StyleEnums.SHORTCUT_APPLIED +import android.stats.style.StyleEnums.SNAPSHOT +import android.stats.style.StyleEnums.THEMED_ICON_APPLIED +import android.stats.style.StyleEnums.THEME_COLOR_APPLIED +import android.stats.style.StyleEnums.WALLPAPER_APPLIED +import android.stats.style.StyleEnums.WALLPAPER_DESTINATION_HOME_AND_LOCK_SCREEN +import android.stats.style.StyleEnums.WALLPAPER_DESTINATION_HOME_SCREEN +import android.stats.style.StyleEnums.WALLPAPER_DESTINATION_LOCK_SCREEN +import android.stats.style.StyleEnums.WALLPAPER_EFFECT_APPLIED +import android.stats.style.StyleEnums.WALLPAPER_EFFECT_FG_DOWNLOAD +import android.stats.style.StyleEnums.WALLPAPER_EFFECT_PROBE +import android.stats.style.StyleEnums.WALLPAPER_EXPLORE +import android.text.TextUtils +import com.android.customization.model.color.ColorCustomizationManager +import com.android.customization.model.grid.GridOption +import com.android.customization.module.logging.ThemesUserEventLogger.ClockSize +import com.android.customization.module.logging.ThemesUserEventLogger.ColorSource +import com.android.wallpaper.module.WallpaperPreferences +import com.android.wallpaper.module.logging.UserEventLogger.EffectStatus +import com.android.wallpaper.module.logging.UserEventLogger.SetWallpaperEntryPoint +import com.android.wallpaper.module.logging.UserEventLogger.WallpaperDestination +import com.android.wallpaper.util.ActivityUtils +import com.android.wallpaper.util.LaunchSourceUtils +import javax.inject.Inject +import javax.inject.Singleton + +/** StatsLog-backed implementation of [ThemesUserEventLogger]. */ +@Singleton +class ThemesUserEventLoggerImpl +@Inject +constructor( + private val preferences: WallpaperPreferences, + private val colorManager: ColorCustomizationManager, + private val appSessionId: AppSessionId, +) : ThemesUserEventLogger { + + override fun logSnapshot() { + SysUiStatsLogger(SNAPSHOT) + .setWallpaperCategoryHash(preferences.getHomeCategoryHash()) + .setWallpaperIdHash(preferences.getHomeWallpaperIdHash()) + .setLockWallpaperCategoryHash(preferences.getLockCategoryHash()) + .setLockWallpaperIdHash(preferences.getLockWallpaperIdHash()) + .setEffectIdHash(preferences.getHomeWallpaperEffectsIdHash()) + .setColorSource(colorManager.currentColorSourceForLogging) + .setColorVariant(colorManager.currentStyleForLogging) + .setSeedColor(colorManager.currentSeedColorForLogging) + .log() + } + + override fun logAppLaunched(launchSource: Intent) { + SysUiStatsLogger(APP_LAUNCHED) + .setAppSessionId(appSessionId.createNewId().getId()) + .setLaunchedPreference(launchSource.getAppLaunchSource()) + .log() + } + + override fun logWallpaperApplied( + collectionId: String?, + wallpaperId: String?, + effects: String?, + @SetWallpaperEntryPoint setWallpaperEntryPoint: Int, + @WallpaperDestination destination: Int, + ) { + val categoryHash = getIdHashCode(collectionId) + val wallpaperIdHash = getIdHashCode(wallpaperId) + val isHomeWallpaperSet = + destination == WALLPAPER_DESTINATION_HOME_SCREEN || + destination == WALLPAPER_DESTINATION_HOME_AND_LOCK_SCREEN + val isLockWallpaperSet = + destination == WALLPAPER_DESTINATION_LOCK_SCREEN || + destination == WALLPAPER_DESTINATION_HOME_AND_LOCK_SCREEN + SysUiStatsLogger(WALLPAPER_APPLIED) + .setAppSessionId(appSessionId.getId()) + .setWallpaperCategoryHash(if (isHomeWallpaperSet) categoryHash else 0) + .setWallpaperIdHash(if (isHomeWallpaperSet) wallpaperIdHash else 0) + .setLockWallpaperCategoryHash(if (isLockWallpaperSet) categoryHash else 0) + .setLockWallpaperIdHash(if (isLockWallpaperSet) wallpaperIdHash else 0) + .setEffectIdHash(getIdHashCode(effects)) + .setSetWallpaperEntryPoint(setWallpaperEntryPoint) + .setWallpaperDestination(destination) + .log() + } + + override fun logEffectApply( + effect: String, + @EffectStatus status: Int, + timeElapsedMillis: Long, + resultCode: Int + ) { + SysUiStatsLogger(WALLPAPER_EFFECT_APPLIED) + .setAppSessionId(appSessionId.getId()) + .setEffectPreference(status) + .setEffectIdHash(getIdHashCode(effect)) + .setTimeElapsed(timeElapsedMillis) + .setEffectResultCode(resultCode) + .log() + } + + override fun logEffectProbe(effect: String, @EffectStatus status: Int) { + SysUiStatsLogger(WALLPAPER_EFFECT_PROBE) + .setAppSessionId(appSessionId.getId()) + .setEffectPreference(status) + .setEffectIdHash(getIdHashCode(effect)) + .log() + } + + override fun logEffectForegroundDownload( + effect: String, + @EffectStatus status: Int, + timeElapsedMillis: Long + ) { + SysUiStatsLogger(WALLPAPER_EFFECT_FG_DOWNLOAD) + .setAppSessionId(appSessionId.getId()) + .setEffectPreference(status) + .setEffectIdHash(getIdHashCode(effect)) + .setTimeElapsed(timeElapsedMillis) + .log() + } + + override fun logResetApplied() { + SysUiStatsLogger(RESET_APPLIED).setAppSessionId(appSessionId.getId()).log() + } + + override fun logWallpaperExploreButtonClicked() { + SysUiStatsLogger(WALLPAPER_EXPLORE).setAppSessionId(appSessionId.getId()).log() + } + + override fun logThemeColorApplied( + @ColorSource source: Int, + style: Int, + seedColor: Int, + ) { + SysUiStatsLogger(THEME_COLOR_APPLIED) + .setAppSessionId(appSessionId.getId()) + .setColorSource(source) + .setColorVariant(style) + .setSeedColor(seedColor) + .log() + } + + override fun logGridApplied(grid: GridOption) { + SysUiStatsLogger(GRID_APPLIED) + .setAppSessionId(appSessionId.getId()) + .setLauncherGrid(grid.getLauncherGridInt()) + .log() + } + + override fun logClockApplied(clockId: String) { + SysUiStatsLogger(CLOCK_APPLIED) + .setAppSessionId(appSessionId.getId()) + .setClockPackageHash(getIdHashCode(clockId)) + .log() + } + + override fun logClockColorApplied(seedColor: Int) { + SysUiStatsLogger(CLOCK_COLOR_APPLIED) + .setAppSessionId(appSessionId.getId()) + .setSeedColor(seedColor) + .log() + } + + override fun logClockSizeApplied(@ClockSize clockSize: Int) { + SysUiStatsLogger(CLOCK_SIZE_APPLIED) + .setAppSessionId(appSessionId.getId()) + .setClockSize(clockSize) + .log() + } + + override fun logThemedIconApplied(useThemeIcon: Boolean) { + SysUiStatsLogger(THEMED_ICON_APPLIED) + .setAppSessionId(appSessionId.getId()) + .setToggleOn(useThemeIcon) + .log() + } + + override fun logLockScreenNotificationApplied(showLockScreenNotifications: Boolean) { + SysUiStatsLogger(LOCK_SCREEN_NOTIFICATION_APPLIED) + .setAppSessionId(appSessionId.getId()) + .setToggleOn(showLockScreenNotifications) + .log() + } + + override fun logShortcutApplied(shortcut: String, shortcutSlotId: String) { + SysUiStatsLogger(SHORTCUT_APPLIED) + .setAppSessionId(appSessionId.getId()) + .setShortcut(shortcut) + .setShortcutSlotId(shortcutSlotId) + .log() + } + + override fun logDarkThemeApplied(useDarkTheme: Boolean) { + SysUiStatsLogger(DARK_THEME_APPLIED) + .setAppSessionId(appSessionId.getId()) + .setToggleOn(useDarkTheme) + .log() + } + + /** + * The grid integer depends on the column and row numbers. For example: 4x5 is 405 13x37 is 1337 + * The upper limit for the column / row count is 99. + */ + private fun GridOption.getLauncherGridInt(): Int { + return cols * 100 + rows + } + + private fun Intent.getAppLaunchSource(): Int { + return if (hasExtra(LaunchSourceUtils.WALLPAPER_LAUNCH_SOURCE)) { + when (getStringExtra(LaunchSourceUtils.WALLPAPER_LAUNCH_SOURCE)) { + LaunchSourceUtils.LAUNCH_SOURCE_LAUNCHER -> LAUNCHED_LAUNCHER + LaunchSourceUtils.LAUNCH_SOURCE_SETTINGS -> LAUNCHED_SETTINGS + LaunchSourceUtils.LAUNCH_SOURCE_SUW -> LAUNCHED_SUW + LaunchSourceUtils.LAUNCH_SOURCE_TIPS -> LAUNCHED_TIPS + LaunchSourceUtils.LAUNCH_SOURCE_DEEP_LINK -> LAUNCHED_DEEP_LINK + LaunchSourceUtils.LAUNCH_SOURCE_KEYGUARD -> LAUNCHED_KEYGUARD + else -> LAUNCHED_PREFERENCE_UNSPECIFIED + } + } else if (ActivityUtils.isLaunchedFromSettingsSearch(this)) { + LAUNCHED_SETTINGS_SEARCH + } else if (action != null && action == WallpaperManager.ACTION_CROP_AND_SET_WALLPAPER) { + LAUNCHED_CROP_AND_SET_ACTION + } else if (categories != null && categories.contains(Intent.CATEGORY_LAUNCHER)) { + LAUNCHED_LAUNCH_ICON + } else { + LAUNCHED_PREFERENCE_UNSPECIFIED + } + } + + /** If not set, the output hash is 0. */ + private fun WallpaperPreferences.getHomeCategoryHash(): Int { + return getIdHashCode(getHomeWallpaperCollectionId()) + } + + /** If not set, the output hash is 0. */ + private fun WallpaperPreferences.getHomeWallpaperIdHash(): Int { + val remoteId = getHomeWallpaperRemoteId() + val wallpaperId = + if (!TextUtils.isEmpty(remoteId)) remoteId else getHomeWallpaperServiceName() + return getIdHashCode(wallpaperId) + } + + /** If not set, the output hash is 0. */ + private fun WallpaperPreferences.getLockCategoryHash(): Int { + return getIdHashCode(getLockWallpaperCollectionId()) + } + + /** If not set, the output hash is 0. */ + private fun WallpaperPreferences.getLockWallpaperIdHash(): Int { + val remoteId = getLockWallpaperRemoteId() + val wallpaperId = + if (!TextUtils.isEmpty(remoteId)) remoteId else getLockWallpaperServiceName() + return getIdHashCode(wallpaperId) + } + + /** If not set, the output hash is 0. */ + private fun WallpaperPreferences.getHomeWallpaperEffectsIdHash(): Int { + return getIdHashCode(getHomeWallpaperEffects()) + } + + private fun getIdHashCode(id: String?): Int { + return id?.hashCode() ?: 0 + } +} diff --git a/src/com/android/customization/picker/WallpaperPreviewer.java b/src/com/android/customization/picker/WallpaperPreviewer.java index d74bfaea..18bc89c7 100644 --- a/src/com/android/customization/picker/WallpaperPreviewer.java +++ b/src/com/android/customization/picker/WallpaperPreviewer.java @@ -241,7 +241,7 @@ public class WallpaperPreviewer implements LifecycleObserver { () -> mFadeInScrim.setVisibility(View.INVISIBLE)); } } - }, mWallpaperSurface, WallpaperConnection.WHICH_PREVIEW.PREVIEW_CURRENT); + }, mWallpaperSurface, WallpaperConnection.WhichPreview.PREVIEW_CURRENT); mWallpaperConnection.setVisibility(true); mHomePreview.post(() -> { diff --git a/src/com/android/customization/picker/clock/data/repository/ClockPickerRepositoryImpl.kt b/src/com/android/customization/picker/clock/data/repository/ClockPickerRepositoryImpl.kt index 004103f3..cc4079a1 100644 --- a/src/com/android/customization/picker/clock/data/repository/ClockPickerRepositoryImpl.kt +++ b/src/com/android/customization/picker/clock/data/repository/ClockPickerRepositoryImpl.kt @@ -21,7 +21,7 @@ import androidx.annotation.ColorInt import androidx.annotation.IntRange import com.android.customization.picker.clock.shared.ClockSize import com.android.customization.picker.clock.shared.model.ClockMetadataModel -import com.android.systemui.plugins.ClockMetadata +import com.android.systemui.plugins.clocks.ClockMetadata import com.android.systemui.shared.clocks.ClockRegistry import com.android.wallpaper.settings.data.repository.SecureSettingsRepository import kotlinx.coroutines.CoroutineDispatcher @@ -187,7 +187,6 @@ class ClockPickerRepositoryImpl( ): ClockMetadataModel { return ClockMetadataModel( clockId = clockId, - name = name, isSelected = isSelected, selectedColorId = selectedColorId, colorToneProgress = colorTone, diff --git a/src/com/android/customization/picker/clock/shared/ClockSize.kt b/src/com/android/customization/picker/clock/shared/ClockSize.kt index 279ee54b..9b35f73f 100644 --- a/src/com/android/customization/picker/clock/shared/ClockSize.kt +++ b/src/com/android/customization/picker/clock/shared/ClockSize.kt @@ -16,7 +16,18 @@ */ package com.android.customization.picker.clock.shared +import android.stats.style.StyleEnums +import com.android.customization.module.logging.ThemesUserEventLogger + enum class ClockSize { DYNAMIC, SMALL, } + +@ThemesUserEventLogger.ClockSize +fun ClockSize.toClockSizeForLogging(): Int { + return when (this) { + ClockSize.DYNAMIC -> StyleEnums.CLOCK_SIZE_DYNAMIC + ClockSize.SMALL -> StyleEnums.CLOCK_SIZE_SMALL + } +} diff --git a/src/com/android/customization/picker/clock/shared/model/ClockMetadataModel.kt b/src/com/android/customization/picker/clock/shared/model/ClockMetadataModel.kt index 25225075..6e2bfb38 100644 --- a/src/com/android/customization/picker/clock/shared/model/ClockMetadataModel.kt +++ b/src/com/android/customization/picker/clock/shared/model/ClockMetadataModel.kt @@ -23,7 +23,6 @@ import androidx.annotation.IntRange /** Model for clock metadata. */ data class ClockMetadataModel( val clockId: String, - val name: String, val isSelected: Boolean, val selectedColorId: String?, @IntRange(from = 0, to = 100) val colorToneProgress: Int, diff --git a/src/com/android/customization/picker/clock/ui/binder/ClockCarouselViewBinder.kt b/src/com/android/customization/picker/clock/ui/binder/ClockCarouselViewBinder.kt index 6bd717b7..e2616c76 100644 --- a/src/com/android/customization/picker/clock/ui/binder/ClockCarouselViewBinder.kt +++ b/src/com/android/customization/picker/clock/ui/binder/ClockCarouselViewBinder.kt @@ -58,11 +58,6 @@ object ClockCarouselViewBinder { carouselView.transitionToPrevious() } ) - screenPreviewClickView.accessibilityDelegate = carouselAccessibilityDelegate - screenPreviewClickView.setOnSideClickedListener { isStart -> - if (isStart) carouselView.scrollToPrevious() else carouselView.scrollToNext() - } - lifecycleOwner.lifecycleScope.launch { lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) { launch { @@ -76,6 +71,11 @@ object ClockCarouselViewBinder { }, isTwoPaneAndSmallWidth = isTwoPaneAndSmallWidth, ) + screenPreviewClickView.accessibilityDelegate = carouselAccessibilityDelegate + screenPreviewClickView.setOnSideClickedListener { isStart -> + if (isStart) carouselView.scrollToPrevious() + else carouselView.scrollToNext() + } } } diff --git a/src/com/android/customization/picker/clock/ui/binder/ClockSectionViewBinder.kt b/src/com/android/customization/picker/clock/ui/binder/ClockSectionViewBinder.kt deleted file mode 100644 index 7dc0d0c4..00000000 --- a/src/com/android/customization/picker/clock/ui/binder/ClockSectionViewBinder.kt +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package com.android.customization.picker.clock.ui.binder - -import android.view.View -import android.widget.TextView -import androidx.lifecycle.Lifecycle -import androidx.lifecycle.LifecycleOwner -import androidx.lifecycle.lifecycleScope -import androidx.lifecycle.repeatOnLifecycle -import com.android.customization.picker.clock.ui.viewmodel.ClockSectionViewModel -import com.android.wallpaper.R -import kotlinx.coroutines.flow.collectLatest -import kotlinx.coroutines.launch - -object ClockSectionViewBinder { - fun bind( - view: View, - viewModel: ClockSectionViewModel, - lifecycleOwner: LifecycleOwner, - onClicked: () -> Unit, - ) { - view.setOnClickListener { onClicked() } - - val selectedClockColorAndSize: TextView = - view.requireViewById(R.id.selected_clock_color_and_size) - - lifecycleOwner.lifecycleScope.launch { - lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) { - launch { - viewModel.selectedClockColorAndSizeText.collectLatest { - selectedClockColorAndSize.text = it - } - } - } - } - } -} diff --git a/src/com/android/customization/picker/clock/ui/binder/ClockSettingsBinder.kt b/src/com/android/customization/picker/clock/ui/binder/ClockSettingsBinder.kt index 6e745d54..d17cdf8a 100644 --- a/src/com/android/customization/picker/clock/ui/binder/ClockSettingsBinder.kt +++ b/src/com/android/customization/picker/clock/ui/binder/ClockSettingsBinder.kt @@ -15,11 +15,18 @@ */ package com.android.customization.picker.clock.ui.binder +import android.content.Context import android.content.res.Configuration +import android.text.Spannable +import android.text.SpannableString +import android.text.style.TextAppearanceSpan import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.LinearLayout +import android.widget.RadioButton +import android.widget.RadioGroup +import android.widget.RadioGroup.OnCheckedChangeListener import android.widget.SeekBar import androidx.core.view.doOnPreDraw import androidx.core.view.isInvisible @@ -35,7 +42,6 @@ import com.android.customization.picker.clock.shared.ClockSize import com.android.customization.picker.clock.ui.adapter.ClockSettingsTabAdapter import com.android.customization.picker.clock.ui.view.ClockCarouselView import com.android.customization.picker.clock.ui.view.ClockHostView -import com.android.customization.picker.clock.ui.view.ClockSizeRadioButtonGroup import com.android.customization.picker.clock.ui.view.ClockViewFactory import com.android.customization.picker.clock.ui.viewmodel.ClockSettingsViewModel import com.android.customization.picker.color.ui.binder.ColorOptionIconBinder @@ -83,14 +89,27 @@ object ClockSettingsBinder { } ) - val sizeOptions = - view.requireViewById<ClockSizeRadioButtonGroup>(R.id.clock_size_radio_button_group) - sizeOptions.onRadioButtonClickListener = - object : ClockSizeRadioButtonGroup.OnRadioButtonClickListener { - override fun onClick(size: ClockSize) { - viewModel.setClockSize(size) - } + val onCheckedChangeListener = OnCheckedChangeListener { _, id -> + when (id) { + R.id.radio_dynamic -> viewModel.setClockSize(ClockSize.DYNAMIC) + R.id.radio_small -> viewModel.setClockSize(ClockSize.SMALL) } + } + val clockSizeRadioGroup = + view.requireViewById<RadioGroup>(R.id.clock_size_radio_button_group) + clockSizeRadioGroup.setOnCheckedChangeListener(onCheckedChangeListener) + view.requireViewById<RadioButton>(R.id.radio_dynamic).text = + getRadioText( + view.context.applicationContext, + view.resources.getString(R.string.clock_size_dynamic), + view.resources.getString(R.string.clock_size_dynamic_description) + ) + view.requireViewById<RadioButton>(R.id.radio_small).text = + getRadioText( + view.context.applicationContext, + view.resources.getString(R.string.clock_size_small), + view.resources.getString(R.string.clock_size_small_description) + ) val colorOptionContainer = view.requireViewById<View>(R.id.color_picker_container) lifecycleOwner.lifecycleScope.launch { @@ -110,11 +129,11 @@ object ClockSettingsBinder { when (tab) { ClockSettingsViewModel.Tab.COLOR -> { colorOptionContainer.isVisible = true - sizeOptions.isInvisible = true + clockSizeRadioGroup.isInvisible = true } ClockSettingsViewModel.Tab.SIZE -> { colorOptionContainer.isInvisible = true - sizeOptions.isVisible = true + clockSizeRadioGroup.isVisible = true } } } @@ -122,6 +141,7 @@ object ClockSettingsBinder { launch { viewModel.colorOptions.collect { colorOptions -> + colorOptionContainerListView.removeAllViews() colorOptions.forEachIndexed { index, colorOption -> colorOption.payload?.let { payload -> val item = @@ -189,16 +209,28 @@ object ClockSettingsBinder { clockHostView.addView(clockView) when (size) { ClockSize.DYNAMIC -> { - sizeOptions.radioButtonDynamic.isChecked = true - sizeOptions.radioButtonSmall.isChecked = false + // When clock size data flow emits clock size signal, we want + // to update the view without triggering on checked change, + // which is supposed to be triggered by user interaction only. + clockSizeRadioGroup.setOnCheckedChangeListener(null) + clockSizeRadioGroup.check(R.id.radio_dynamic) + clockSizeRadioGroup.setOnCheckedChangeListener( + onCheckedChangeListener + ) clockHostView.doOnPreDraw { it.pivotX = it.width / 2F it.pivotY = it.height / 2F } } ClockSize.SMALL -> { - sizeOptions.radioButtonDynamic.isChecked = false - sizeOptions.radioButtonSmall.isChecked = true + // When clock size data flow emits clock size signal, we want + // to update the view without triggering on checked change, + // which is supposed to be triggered by user interaction only. + clockSizeRadioGroup.setOnCheckedChangeListener(null) + clockSizeRadioGroup.check(R.id.radio_small) + clockSizeRadioGroup.setOnCheckedChangeListener( + onCheckedChangeListener + ) clockHostView.doOnPreDraw { it.pivotX = ClockCarouselView.getCenteredHostViewPivotX(it) it.pivotY = 0F @@ -238,4 +270,25 @@ object ClockSettingsBinder { } ) } + + private fun getRadioText( + context: Context, + title: String, + description: String + ): SpannableString { + val text = SpannableString(title + "\n" + description) + text.setSpan( + TextAppearanceSpan(context, R.style.SectionTitleTextStyle), + 0, + title.length, + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE + ) + text.setSpan( + TextAppearanceSpan(context, R.style.SectionSubtitleTextStyle), + title.length + 1, + title.length + 1 + description.length, + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE + ) + return text + } } diff --git a/src/com/android/customization/picker/clock/ui/fragment/ClockSettingsFragment.kt b/src/com/android/customization/picker/clock/ui/fragment/ClockSettingsFragment.kt index 4805f376..dc70633e 100644 --- a/src/com/android/customization/picker/clock/ui/fragment/ClockSettingsFragment.kt +++ b/src/com/android/customization/picker/clock/ui/fragment/ClockSettingsFragment.kt @@ -68,7 +68,7 @@ class ClockSettingsFragment : AppbarFragment() { val injector = InjectorProvider.getInjector() as ThemePickerInjector val lockScreenView: CardView = view.requireViewById(R.id.lock_preview) - val colorViewModel = injector.getWallpaperColorsViewModel() + val wallpaperColorsRepository = injector.getWallpaperColorsRepository() val displayUtils = injector.getDisplayUtils(context) ScreenPreviewBinder.bind( activity = activity, @@ -88,18 +88,18 @@ class ClockSettingsFragment : AppbarFragment() { injector .getCurrentWallpaperInfoFactory(context) .createCurrentWallpaperInfos( - { homeWallpaper, lockWallpaper, _ -> - continuation.resume( - lockWallpaper ?: homeWallpaper, - null, - ) - }, + context, forceReload, - ) + ) { homeWallpaper, lockWallpaper, _ -> + continuation.resume( + lockWallpaper ?: homeWallpaper, + null, + ) + } } }, onWallpaperColorChanged = { colors -> - colorViewModel.setLockWallpaperColors(colors) + wallpaperColorsRepository.setLockWallpaperColors(colors) }, initialExtrasProvider = { Bundle().apply { @@ -125,7 +125,7 @@ class ClockSettingsFragment : AppbarFragment() { this, injector.getClockSettingsViewModelFactory( context, - injector.getWallpaperColorsViewModel(), + injector.getWallpaperColorsRepository(), injector.getClockViewFactory(activity), ), ) diff --git a/src/com/android/customization/picker/clock/ui/section/ClockSectionController.kt b/src/com/android/customization/picker/clock/ui/section/ClockSectionController.kt deleted file mode 100644 index b47c2433..00000000 --- a/src/com/android/customization/picker/clock/ui/section/ClockSectionController.kt +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (C) 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.picker.clock.ui.section - -import android.content.Context -import android.view.LayoutInflater -import androidx.lifecycle.LifecycleOwner -import androidx.lifecycle.lifecycleScope -import com.android.customization.picker.clock.ui.binder.ClockSectionViewBinder -import com.android.customization.picker.clock.ui.fragment.ClockSettingsFragment -import com.android.customization.picker.clock.ui.view.ClockSectionView -import com.android.customization.picker.clock.ui.viewmodel.ClockSectionViewModel -import com.android.wallpaper.R -import com.android.wallpaper.config.BaseFlags -import com.android.wallpaper.model.CustomizationSectionController -import com.android.wallpaper.model.CustomizationSectionController.CustomizationSectionNavigationController -import kotlinx.coroutines.launch - -/** A [CustomizationSectionController] for clock customization. */ -class ClockSectionController( - private val navigationController: CustomizationSectionNavigationController, - private val lifecycleOwner: LifecycleOwner, - private val flag: BaseFlags, - private val viewModel: ClockSectionViewModel, -) : CustomizationSectionController<ClockSectionView> { - - override fun isAvailable(context: Context): Boolean { - return flag.isCustomClocksEnabled(context!!) - } - - override fun createView(context: Context): ClockSectionView { - val view = - LayoutInflater.from(context) - .inflate( - R.layout.clock_section_view, - null, - ) as ClockSectionView - lifecycleOwner.lifecycleScope.launch { - ClockSectionViewBinder.bind( - view = view, - viewModel = viewModel, - lifecycleOwner = lifecycleOwner - ) { - navigationController.navigateTo(ClockSettingsFragment()) - } - } - return view - } -} diff --git a/src/com/android/customization/picker/clock/ui/view/ClockCarouselView.kt b/src/com/android/customization/picker/clock/ui/view/ClockCarouselView.kt index d4f501b7..cae4e06b 100644 --- a/src/com/android/customization/picker/clock/ui/view/ClockCarouselView.kt +++ b/src/com/android/customization/picker/clock/ui/view/ClockCarouselView.kt @@ -31,7 +31,7 @@ import androidx.core.view.get import androidx.core.view.isNotEmpty import com.android.customization.picker.clock.shared.ClockSize import com.android.customization.picker.clock.ui.viewmodel.ClockCarouselItemViewModel -import com.android.systemui.plugins.ClockController +import com.android.systemui.plugins.clocks.ClockController import com.android.wallpaper.R import com.android.wallpaper.picker.FixedWidthDisplayRatioFrameLayout import java.lang.Float.max @@ -384,7 +384,7 @@ class ClockCarouselView( ) : Carousel.Adapter { fun getContentDescription(index: Int, resources: Resources): String { - return clocks[index].getContentDescription(resources) + return clocks[index].contentDescription } override fun count(): Int { diff --git a/src/com/android/customization/picker/clock/ui/view/ClockSizeRadioButtonGroup.kt b/src/com/android/customization/picker/clock/ui/view/ClockSizeRadioButtonGroup.kt deleted file mode 100644 index 909491a3..00000000 --- a/src/com/android/customization/picker/clock/ui/view/ClockSizeRadioButtonGroup.kt +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.picker.clock.ui.view - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import android.view.View -import android.widget.FrameLayout -import android.widget.RadioButton -import com.android.customization.picker.clock.shared.ClockSize -import com.android.wallpaper.R - -/** The radio button group to pick the clock size. */ -class ClockSizeRadioButtonGroup( - context: Context, - attrs: AttributeSet?, -) : FrameLayout(context, attrs) { - - interface OnRadioButtonClickListener { - fun onClick(size: ClockSize) - } - - val radioButtonDynamic: RadioButton - val radioButtonSmall: RadioButton - var onRadioButtonClickListener: OnRadioButtonClickListener? = null - - init { - LayoutInflater.from(context).inflate(R.layout.clock_size_radio_button_group, this, true) - radioButtonDynamic = requireViewById(R.id.radio_button_dynamic) - val buttonDynamic = requireViewById<View>(R.id.button_container_dynamic) - buttonDynamic.setOnClickListener { onRadioButtonClickListener?.onClick(ClockSize.DYNAMIC) } - radioButtonSmall = requireViewById(R.id.radio_button_large) - val buttonLarge = requireViewById<View>(R.id.button_container_small) - buttonLarge.setOnClickListener { onRadioButtonClickListener?.onClick(ClockSize.SMALL) } - } -} diff --git a/src/com/android/customization/picker/clock/ui/view/ClockViewFactory.kt b/src/com/android/customization/picker/clock/ui/view/ClockViewFactory.kt index 3f6f423f..2ab162d3 100644 --- a/src/com/android/customization/picker/clock/ui/view/ClockViewFactory.kt +++ b/src/com/android/customization/picker/clock/ui/view/ClockViewFactory.kt @@ -15,226 +15,38 @@ */ package com.android.customization.picker.clock.ui.view -import android.app.WallpaperColors -import android.app.WallpaperManager -import android.content.Context -import android.content.res.Resources -import android.graphics.Point -import android.graphics.Rect import android.view.View -import android.widget.FrameLayout import androidx.annotation.ColorInt -import androidx.core.text.util.LocalePreferences import androidx.lifecycle.LifecycleOwner -import com.android.systemui.plugins.ClockController -import com.android.systemui.plugins.WeatherData -import com.android.systemui.shared.clocks.ClockRegistry -import com.android.wallpaper.R -import com.android.wallpaper.util.TimeUtils.TimeTicker -import java.util.concurrent.ConcurrentHashMap +import com.android.systemui.plugins.clocks.ClockController -/** - * Provide reusable clock view and related util functions. - * - * @property screenSize The Activity or Fragment's window size. - */ -class ClockViewFactory( - private val appContext: Context, - val screenSize: Point, - private val wallpaperManager: WallpaperManager, - private val registry: ClockRegistry, -) { - private val resources = appContext.resources - private val timeTickListeners: ConcurrentHashMap<Int, TimeTicker> = ConcurrentHashMap() - private val clockControllers: HashMap<String, ClockController> = HashMap() - private val smallClockFrames: HashMap<String, FrameLayout> = HashMap() +interface ClockViewFactory { - fun getController(clockId: String): ClockController { - return clockControllers[clockId] - ?: initClockController(clockId).also { clockControllers[clockId] = it } - } + fun getController(clockId: String): ClockController /** * Reset the large view to its initial state when getting the view. This is because some view * configs, e.g. animation state, might change during the reuse of the clock view in the app. */ - fun getLargeView(clockId: String): View { - return getController(clockId).largeClock.let { - it.animations.onPickerCarouselSwiping(1F) - it.view - } - } + fun getLargeView(clockId: String): View /** * Reset the small view to its initial state when getting the view. This is because some view * configs, e.g. translation X, might change during the reuse of the clock view in the app. */ - fun getSmallView(clockId: String): View { - val smallClockFrame = - smallClockFrames[clockId] - ?: createSmallClockFrame().also { - it.addView(getController(clockId).smallClock.view) - smallClockFrames[clockId] = it - } - smallClockFrame.translationX = 0F - smallClockFrame.translationY = 0F - return smallClockFrame - } - - private fun createSmallClockFrame(): FrameLayout { - val smallClockFrame = FrameLayout(appContext) - val layoutParams = - FrameLayout.LayoutParams( - FrameLayout.LayoutParams.WRAP_CONTENT, - resources.getDimensionPixelSize(R.dimen.small_clock_height) - ) - layoutParams.topMargin = getSmallClockTopMargin() - layoutParams.marginStart = getSmallClockStartPadding() - smallClockFrame.layoutParams = layoutParams - smallClockFrame.clipChildren = false - return smallClockFrame - } - - private fun getSmallClockTopMargin() = - getStatusBarHeight(appContext.resources) + - appContext.resources.getDimensionPixelSize(R.dimen.small_clock_padding_top) - - private fun getSmallClockStartPadding() = - appContext.resources.getDimensionPixelSize(R.dimen.clock_padding_start) - - fun updateColorForAllClocks(@ColorInt seedColor: Int?) { - clockControllers.values.forEach { it.events.onSeedColorChanged(seedColor = seedColor) } - } - - fun updateColor(clockId: String, @ColorInt seedColor: Int?) { - clockControllers[clockId]?.events?.onSeedColorChanged(seedColor) - } - - fun updateRegionDarkness() { - val isRegionDark = isLockscreenWallpaperDark() - clockControllers.values.forEach { - it.largeClock.events.onRegionDarknessChanged(isRegionDark) - it.smallClock.events.onRegionDarknessChanged(isRegionDark) - } - } - - private fun isLockscreenWallpaperDark(): Boolean { - val colors = wallpaperManager.getWallpaperColors(WallpaperManager.FLAG_LOCK) - return (colors?.colorHints?.and(WallpaperColors.HINT_SUPPORTS_DARK_TEXT)) == 0 - } - - fun updateTimeFormat(clockId: String) { - getController(clockId) - .events - .onTimeFormatChanged(android.text.format.DateFormat.is24HourFormat(appContext)) - } + fun getSmallView(clockId: String): View - fun registerTimeTicker(owner: LifecycleOwner) { - val hashCode = owner.hashCode() - if (timeTickListeners.keys.contains(hashCode)) { - return - } + fun updateColorForAllClocks(@ColorInt seedColor: Int?) - timeTickListeners[hashCode] = TimeTicker.registerNewReceiver(appContext) { onTimeTick() } - } + fun updateColor(clockId: String, @ColorInt seedColor: Int?) - fun onDestroy() { - timeTickListeners.forEach { (_, timeTicker) -> appContext.unregisterReceiver(timeTicker) } - timeTickListeners.clear() - clockControllers.clear() - smallClockFrames.clear() - } + fun updateRegionDarkness() - private fun onTimeTick() { - clockControllers.values.forEach { - it.largeClock.events.onTimeTick() - it.smallClock.events.onTimeTick() - } - } + fun updateTimeFormat(clockId: String) - fun unregisterTimeTicker(owner: LifecycleOwner) { - val hashCode = owner.hashCode() - timeTickListeners[hashCode]?.let { - appContext.unregisterReceiver(it) - timeTickListeners.remove(hashCode) - } - } - - private fun initClockController(clockId: String): ClockController { - val controller = - registry.createExampleClock(clockId).also { it?.initialize(resources, 0f, 0f) } - checkNotNull(controller) - - val isWallpaperDark = isLockscreenWallpaperDark() - // Initialize large clock - controller.largeClock.events.onRegionDarknessChanged(isWallpaperDark) - controller.largeClock.events.onFontSettingChanged( - resources.getDimensionPixelSize(R.dimen.large_clock_text_size).toFloat() - ) - controller.largeClock.events.onTargetRegionChanged(getLargeClockRegion()) - - // Initialize small clock - controller.smallClock.events.onRegionDarknessChanged(isWallpaperDark) - controller.smallClock.events.onFontSettingChanged( - resources.getDimensionPixelSize(R.dimen.small_clock_text_size).toFloat() - ) - controller.smallClock.events.onTargetRegionChanged(getSmallClockRegion()) - - // Use placeholder for weather clock preview in picker. - // Use locale default temp unit since assistant default is not available in this context. - val useCelsius = - LocalePreferences.getTemperatureUnit() == LocalePreferences.TemperatureUnit.CELSIUS - controller.events.onWeatherDataChanged( - WeatherData( - description = DESCRIPTION_PLACEHODLER, - state = WEATHERICON_PLACEHOLDER, - temperature = - if (useCelsius) TEMPERATURE_CELSIUS_PLACEHOLDER - else TEMPERATURE_FAHRENHEIT_PLACEHOLDER, - useCelsius = useCelsius, - ) - ) - return controller - } - - /** - * Simulate the function of getLargeClockRegion in KeyguardClockSwitch so that we can get a - * proper region corresponding to lock screen in picker and for onTargetRegionChanged to scale - * and position the clock view - */ - private fun getLargeClockRegion(): Rect { - val largeClockTopMargin = - resources.getDimensionPixelSize(R.dimen.keyguard_large_clock_top_margin) - val targetHeight = resources.getDimensionPixelSize(R.dimen.large_clock_text_size) * 2 - val top = (screenSize.y / 2 - targetHeight / 2 + largeClockTopMargin / 2) - return Rect(0, top, screenSize.x, (top + targetHeight)) - } - - /** - * Simulate the function of getSmallClockRegion in KeyguardClockSwitch so that we can get a - * proper region corresponding to lock screen in picker and for onTargetRegionChanged to scale - * and position the clock view - */ - private fun getSmallClockRegion(): Rect { - val topMargin = getSmallClockTopMargin() - val targetHeight = resources.getDimensionPixelSize(R.dimen.small_clock_height) - return Rect(getSmallClockStartPadding(), topMargin, screenSize.x, topMargin + targetHeight) - } + fun registerTimeTicker(owner: LifecycleOwner) - companion object { - const val DESCRIPTION_PLACEHODLER = "" - const val TEMPERATURE_FAHRENHEIT_PLACEHOLDER = 58 - const val TEMPERATURE_CELSIUS_PLACEHOLDER = 21 - val WEATHERICON_PLACEHOLDER = WeatherData.WeatherStateIcon.MOSTLY_SUNNY - const val USE_CELSIUS_PLACEHODLER = false + fun onDestroy() - private fun getStatusBarHeight(resource: Resources): Int { - var result = 0 - val resourceId: Int = resource.getIdentifier("status_bar_height", "dimen", "android") - if (resourceId > 0) { - result = resource.getDimensionPixelSize(resourceId) - } - return result - } - } + fun unregisterTimeTicker(owner: LifecycleOwner) } diff --git a/src/com/android/customization/picker/clock/ui/view/ClockViewFactoryImpl.kt b/src/com/android/customization/picker/clock/ui/view/ClockViewFactoryImpl.kt new file mode 100644 index 00000000..5caea58d --- /dev/null +++ b/src/com/android/customization/picker/clock/ui/view/ClockViewFactoryImpl.kt @@ -0,0 +1,240 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.customization.picker.clock.ui.view + +import android.app.WallpaperColors +import android.app.WallpaperManager +import android.content.Context +import android.content.res.Resources +import android.graphics.Point +import android.graphics.Rect +import android.view.View +import android.widget.FrameLayout +import androidx.annotation.ColorInt +import androidx.core.text.util.LocalePreferences +import androidx.lifecycle.LifecycleOwner +import com.android.systemui.plugins.clocks.ClockController +import com.android.systemui.plugins.clocks.WeatherData +import com.android.systemui.shared.clocks.ClockRegistry +import com.android.wallpaper.R +import com.android.wallpaper.util.TimeUtils.TimeTicker +import java.util.concurrent.ConcurrentHashMap + +/** + * Provide reusable clock view and related util functions. + * + * @property screenSize The Activity or Fragment's window size. + */ +class ClockViewFactoryImpl( + private val appContext: Context, + val screenSize: Point, + private val wallpaperManager: WallpaperManager, + private val registry: ClockRegistry, +) : ClockViewFactory { + private val resources = appContext.resources + private val timeTickListeners: ConcurrentHashMap<Int, TimeTicker> = ConcurrentHashMap() + private val clockControllers: HashMap<String, ClockController> = HashMap() + private val smallClockFrames: HashMap<String, FrameLayout> = HashMap() + + override fun getController(clockId: String): ClockController { + return clockControllers[clockId] + ?: initClockController(clockId).also { clockControllers[clockId] = it } + } + + /** + * Reset the large view to its initial state when getting the view. This is because some view + * configs, e.g. animation state, might change during the reuse of the clock view in the app. + */ + override fun getLargeView(clockId: String): View { + return getController(clockId).largeClock.let { + it.animations.onPickerCarouselSwiping(1F) + it.view + } + } + + /** + * Reset the small view to its initial state when getting the view. This is because some view + * configs, e.g. translation X, might change during the reuse of the clock view in the app. + */ + override fun getSmallView(clockId: String): View { + val smallClockFrame = + smallClockFrames[clockId] + ?: createSmallClockFrame().also { + it.addView(getController(clockId).smallClock.view) + smallClockFrames[clockId] = it + } + smallClockFrame.translationX = 0F + smallClockFrame.translationY = 0F + return smallClockFrame + } + + private fun createSmallClockFrame(): FrameLayout { + val smallClockFrame = FrameLayout(appContext) + val layoutParams = + FrameLayout.LayoutParams( + FrameLayout.LayoutParams.WRAP_CONTENT, + resources.getDimensionPixelSize(R.dimen.small_clock_height) + ) + layoutParams.topMargin = getSmallClockTopMargin() + layoutParams.marginStart = getSmallClockStartPadding() + smallClockFrame.layoutParams = layoutParams + smallClockFrame.clipChildren = false + return smallClockFrame + } + + private fun getSmallClockTopMargin() = + getStatusBarHeight(appContext.resources) + + appContext.resources.getDimensionPixelSize(R.dimen.small_clock_padding_top) + + private fun getSmallClockStartPadding() = + appContext.resources.getDimensionPixelSize(R.dimen.clock_padding_start) + + override fun updateColorForAllClocks(@ColorInt seedColor: Int?) { + clockControllers.values.forEach { it.events.onSeedColorChanged(seedColor = seedColor) } + } + + override fun updateColor(clockId: String, @ColorInt seedColor: Int?) { + clockControllers[clockId]?.events?.onSeedColorChanged(seedColor) + } + + override fun updateRegionDarkness() { + val isRegionDark = isLockscreenWallpaperDark() + clockControllers.values.forEach { + it.largeClock.events.onRegionDarknessChanged(isRegionDark) + it.smallClock.events.onRegionDarknessChanged(isRegionDark) + } + } + + private fun isLockscreenWallpaperDark(): Boolean { + val colors = wallpaperManager.getWallpaperColors(WallpaperManager.FLAG_LOCK) + return (colors?.colorHints?.and(WallpaperColors.HINT_SUPPORTS_DARK_TEXT)) == 0 + } + + override fun updateTimeFormat(clockId: String) { + getController(clockId) + .events + .onTimeFormatChanged(android.text.format.DateFormat.is24HourFormat(appContext)) + } + + override fun registerTimeTicker(owner: LifecycleOwner) { + val hashCode = owner.hashCode() + if (timeTickListeners.keys.contains(hashCode)) { + return + } + + timeTickListeners[hashCode] = TimeTicker.registerNewReceiver(appContext) { onTimeTick() } + } + + override fun onDestroy() { + timeTickListeners.forEach { (_, timeTicker) -> appContext.unregisterReceiver(timeTicker) } + timeTickListeners.clear() + clockControllers.clear() + smallClockFrames.clear() + } + + private fun onTimeTick() { + clockControllers.values.forEach { + it.largeClock.events.onTimeTick() + it.smallClock.events.onTimeTick() + } + } + + override fun unregisterTimeTicker(owner: LifecycleOwner) { + val hashCode = owner.hashCode() + timeTickListeners[hashCode]?.let { + appContext.unregisterReceiver(it) + timeTickListeners.remove(hashCode) + } + } + + private fun initClockController(clockId: String): ClockController { + val controller = + registry.createExampleClock(clockId).also { it?.initialize(resources, 0f, 0f) } + checkNotNull(controller) + + val isWallpaperDark = isLockscreenWallpaperDark() + // Initialize large clock + controller.largeClock.events.onRegionDarknessChanged(isWallpaperDark) + controller.largeClock.events.onFontSettingChanged( + resources.getDimensionPixelSize(R.dimen.large_clock_text_size).toFloat() + ) + controller.largeClock.events.onTargetRegionChanged(getLargeClockRegion()) + + // Initialize small clock + controller.smallClock.events.onRegionDarknessChanged(isWallpaperDark) + controller.smallClock.events.onFontSettingChanged( + resources.getDimensionPixelSize(R.dimen.small_clock_text_size).toFloat() + ) + controller.smallClock.events.onTargetRegionChanged(getSmallClockRegion()) + + // Use placeholder for weather clock preview in picker. + // Use locale default temp unit since assistant default is not available in this context. + val useCelsius = + LocalePreferences.getTemperatureUnit() == LocalePreferences.TemperatureUnit.CELSIUS + controller.events.onWeatherDataChanged( + WeatherData( + description = DESCRIPTION_PLACEHODLER, + state = WEATHERICON_PLACEHOLDER, + temperature = + if (useCelsius) TEMPERATURE_CELSIUS_PLACEHOLDER + else TEMPERATURE_FAHRENHEIT_PLACEHOLDER, + useCelsius = useCelsius, + ) + ) + return controller + } + + /** + * Simulate the function of getLargeClockRegion in KeyguardClockSwitch so that we can get a + * proper region corresponding to lock screen in picker and for onTargetRegionChanged to scale + * and position the clock view + */ + private fun getLargeClockRegion(): Rect { + val largeClockTopMargin = + resources.getDimensionPixelSize(R.dimen.keyguard_large_clock_top_margin) + val targetHeight = resources.getDimensionPixelSize(R.dimen.large_clock_text_size) * 2 + val top = (screenSize.y / 2 - targetHeight / 2 + largeClockTopMargin / 2) + return Rect(0, top, screenSize.x, (top + targetHeight)) + } + + /** + * Simulate the function of getSmallClockRegion in KeyguardClockSwitch so that we can get a + * proper region corresponding to lock screen in picker and for onTargetRegionChanged to scale + * and position the clock view + */ + private fun getSmallClockRegion(): Rect { + val topMargin = getSmallClockTopMargin() + val targetHeight = resources.getDimensionPixelSize(R.dimen.small_clock_height) + return Rect(getSmallClockStartPadding(), topMargin, screenSize.x, topMargin + targetHeight) + } + + companion object { + const val DESCRIPTION_PLACEHODLER = "" + const val TEMPERATURE_FAHRENHEIT_PLACEHOLDER = 58 + const val TEMPERATURE_CELSIUS_PLACEHOLDER = 21 + val WEATHERICON_PLACEHOLDER = WeatherData.WeatherStateIcon.MOSTLY_SUNNY + const val USE_CELSIUS_PLACEHODLER = false + + private fun getStatusBarHeight(resource: Resources): Int { + var result = 0 + val resourceId: Int = resource.getIdentifier("status_bar_height", "dimen", "android") + if (resourceId > 0) { + result = resource.getDimensionPixelSize(resourceId) + } + return result + } + } +} diff --git a/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselItemViewModel.kt b/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselItemViewModel.kt index 98114260..e5ac953c 100644 --- a/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselItemViewModel.kt +++ b/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselItemViewModel.kt @@ -15,20 +15,8 @@ */ package com.android.customization.picker.clock.ui.viewmodel -import android.content.res.Resources -import com.android.customization.module.CustomizationInjector -import com.android.wallpaper.R -import com.android.wallpaper.module.InjectorProvider - -class ClockCarouselItemViewModel(val clockId: String, val isSelected: Boolean) { - - /** Description for accessibility purposes when a clock is selected. */ - fun getContentDescription(resources: Resources): String { - val clockContent = - (InjectorProvider.getInjector() as? CustomizationInjector) - ?.getClockDescriptionUtils(resources) - ?.getDescription(clockId) - ?: "" - return resources.getString(R.string.select_clock_action_description, clockContent) - } -} +class ClockCarouselItemViewModel( + val clockId: String, + val isSelected: Boolean, + val contentDescription: String, +) diff --git a/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselViewModel.kt b/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselViewModel.kt index 27c25a20..3f6394be 100644 --- a/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselViewModel.kt +++ b/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselViewModel.kt @@ -15,12 +15,15 @@ */ package com.android.customization.picker.clock.ui.viewmodel +import android.content.res.Resources import android.graphics.Color import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope +import com.android.customization.module.logging.ThemesUserEventLogger import com.android.customization.picker.clock.domain.interactor.ClockPickerInteractor import com.android.customization.picker.clock.shared.ClockSize +import com.android.customization.picker.clock.ui.view.ClockViewFactory import com.android.wallpaper.R import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -43,6 +46,9 @@ import kotlinx.coroutines.launch class ClockCarouselViewModel( private val interactor: ClockPickerInteractor, private val backgroundDispatcher: CoroutineDispatcher, + private val clockViewFactory: ClockViewFactory, + private val resources: Resources, + private val logger: ThemesUserEventLogger, ) : ViewModel() { @OptIn(ExperimentalCoroutinesApi::class) val allClocks: StateFlow<List<ClockCarouselItemViewModel>> = @@ -50,7 +56,14 @@ class ClockCarouselViewModel( .mapLatest { allClocks -> // Delay to avoid the case that the full list of clocks is not initiated. delay(CLOCKS_EVENT_UPDATE_DELAY_MILLIS) - allClocks.map { ClockCarouselItemViewModel(it.clockId, it.isSelected) } + allClocks.map { + val contentDescription = + resources.getString( + R.string.select_clock_action_description, + clockViewFactory.getController(it.clockId).config.description + ) + ClockCarouselItemViewModel(it.clockId, it.isSelected, contentDescription) + } } .stateIn(viewModelScope, SharingStarted.Eagerly, emptyList()) @@ -111,18 +124,27 @@ class ClockCarouselViewModel( fun setSelectedClock(clockId: String) { setSelectedClockJob?.cancel() setSelectedClockJob = - viewModelScope.launch(backgroundDispatcher) { interactor.setSelectedClock(clockId) } + viewModelScope.launch(backgroundDispatcher) { + interactor.setSelectedClock(clockId) + logger.logClockApplied(clockId) + } } class Factory( private val interactor: ClockPickerInteractor, private val backgroundDispatcher: CoroutineDispatcher, + private val clockViewFactory: ClockViewFactory, + private val resources: Resources, + private val logger: ThemesUserEventLogger, ) : ViewModelProvider.Factory { override fun <T : ViewModel> create(modelClass: Class<T>): T { @Suppress("UNCHECKED_CAST") return ClockCarouselViewModel( interactor = interactor, backgroundDispatcher = backgroundDispatcher, + clockViewFactory = clockViewFactory, + resources = resources, + logger = logger, ) as T } diff --git a/src/com/android/customization/picker/clock/ui/viewmodel/ClockSectionViewModel.kt b/src/com/android/customization/picker/clock/ui/viewmodel/ClockSectionViewModel.kt deleted file mode 100644 index 8a655225..00000000 --- a/src/com/android/customization/picker/clock/ui/viewmodel/ClockSectionViewModel.kt +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package com.android.customization.picker.clock.ui.viewmodel - -import android.content.Context -import com.android.customization.picker.clock.domain.interactor.ClockPickerInteractor -import com.android.customization.picker.clock.shared.ClockSize -import com.android.wallpaper.R -import java.util.Locale -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.map - -/** View model for the clock section view on the lockscreen customization surface. */ -class ClockSectionViewModel(context: Context, interactor: ClockPickerInteractor) { - val appContext: Context = context.applicationContext - val clockColorMap: Map<String, ClockColorViewModel> = - ClockColorViewModel.getPresetColorMap(appContext.resources) - val selectedClockColorAndSizeText: Flow<String> = - combine(interactor.selectedColorId, interactor.selectedClockSize, ::Pair).map { - (selectedColorId, selectedClockSize) -> - val colorText = - clockColorMap[selectedColorId]?.colorName - ?: appContext.getString(R.string.default_theme_title) - val sizeText = - when (selectedClockSize) { - ClockSize.SMALL -> appContext.getString(R.string.clock_size_small) - ClockSize.DYNAMIC -> appContext.getString(R.string.clock_size_dynamic) - } - appContext - .getString(R.string.clock_color_and_size_description, colorText, sizeText) - .lowercase() - .replaceFirstChar { - if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() - } - } -} diff --git a/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModel.kt b/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModel.kt index a498c716..d0e4f8fe 100644 --- a/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModel.kt +++ b/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModel.kt @@ -21,9 +21,12 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope import com.android.customization.model.color.ColorOptionImpl +import com.android.customization.module.logging.ThemesUserEventLogger +import com.android.customization.module.logging.ThemesUserEventLogger.Companion.NULL_SEED_COLOR import com.android.customization.picker.clock.domain.interactor.ClockPickerInteractor import com.android.customization.picker.clock.shared.ClockSize import com.android.customization.picker.clock.shared.model.ClockMetadataModel +import com.android.customization.picker.clock.shared.toClockSizeForLogging import com.android.customization.picker.color.domain.interactor.ColorPickerInteractor import com.android.customization.picker.color.shared.model.ColorOptionModel import com.android.customization.picker.color.shared.model.ColorType @@ -53,6 +56,7 @@ private constructor( private val clockPickerInteractor: ClockPickerInteractor, private val colorPickerInteractor: ColorPickerInteractor, private val getIsReactiveToTone: (clockId: String?) -> Boolean, + private val logger: ThemesUserEventLogger, ) : ViewModel() { enum class Tab { @@ -106,15 +110,17 @@ private constructor( suspend fun onSliderProgressStop(progress: Int) { val selectedColorId = selectedColorId.value ?: return val clockColorViewModel = colorMap[selectedColorId] ?: return + val seedColor = + blendColorWithTone( + color = clockColorViewModel.color, + colorTone = clockColorViewModel.getColorTone(progress), + ) clockPickerInteractor.setClockColor( selectedColorId = selectedColorId, colorToneProgress = progress, - seedColor = - blendColorWithTone( - color = clockColorViewModel.color, - colorTone = clockColorViewModel.getColorTone(progress), - ) + seedColor = seedColor, ) + logger.logClockColorApplied(seedColor) } @OptIn(ExperimentalCoroutinesApi::class) @@ -169,18 +175,20 @@ private constructor( } else { { viewModelScope.launch { + val seedColor = + blendColorWithTone( + color = colorModel.color, + colorTone = + colorModel.getColorTone( + colorToneProgress, + ), + ) clockPickerInteractor.setClockColor( selectedColorId = colorModel.colorId, colorToneProgress = colorToneProgress, - seedColor = - blendColorWithTone( - color = colorModel.color, - colorTone = - colorModel.getColorTone( - colorToneProgress, - ), - ), + seedColor = seedColor, ) + logger.logClockColorApplied(seedColor) } } } @@ -244,6 +252,7 @@ private constructor( ClockMetadataModel.DEFAULT_COLOR_TONE_PROGRESS, seedColor = null, ) + logger.logClockColorApplied(NULL_SEED_COLOR) } } } @@ -254,7 +263,10 @@ private constructor( val selectedClockSize: Flow<ClockSize> = clockPickerInteractor.selectedClockSize fun setClockSize(size: ClockSize) { - viewModelScope.launch { clockPickerInteractor.setClockSize(size) } + viewModelScope.launch { + clockPickerInteractor.setClockSize(size) + logger.logClockSizeApplied(size.toClockSizeForLogging()) + } } private val _selectedTabPosition = MutableStateFlow(Tab.COLOR) @@ -304,6 +316,7 @@ private constructor( private val context: Context, private val clockPickerInteractor: ClockPickerInteractor, private val colorPickerInteractor: ColorPickerInteractor, + private val logger: ThemesUserEventLogger, private val getIsReactiveToTone: (clockId: String?) -> Boolean, ) : ViewModelProvider.Factory { override fun <T : ViewModel> create(modelClass: Class<T>): T { @@ -312,6 +325,7 @@ private constructor( context = context, clockPickerInteractor = clockPickerInteractor, colorPickerInteractor = colorPickerInteractor, + logger = logger, getIsReactiveToTone = getIsReactiveToTone, ) as T diff --git a/src/com/android/customization/picker/clock/utils/ClockDescriptionUtils.kt b/src/com/android/customization/picker/clock/utils/ClockDescriptionUtils.kt deleted file mode 100644 index 28ea4a3f..00000000 --- a/src/com/android/customization/picker/clock/utils/ClockDescriptionUtils.kt +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.picker.clock.utils - -/** Provides clock description for accessibility purposes. */ -interface ClockDescriptionUtils { - - /** - * TODO (b/287507746) : Migrate the clock description to system UI or a shared library, instead - * of preserving at the Wallpaper Picker side. - */ - fun getDescription(clockId: String): String -} diff --git a/src/com/android/customization/picker/clock/utils/ThemePickerClockDescriptionUtils.kt b/src/com/android/customization/picker/clock/utils/ThemePickerClockDescriptionUtils.kt deleted file mode 100644 index a04ebfff..00000000 --- a/src/com/android/customization/picker/clock/utils/ThemePickerClockDescriptionUtils.kt +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.picker.clock.utils - -class ThemePickerClockDescriptionUtils : ClockDescriptionUtils { - override fun getDescription(clockId: String): String { - return "" - } -} diff --git a/src/com/android/customization/picker/color/data/repository/ColorPickerRepositoryImpl.kt b/src/com/android/customization/picker/color/data/repository/ColorPickerRepositoryImpl.kt index 6540ce06..942a8460 100644 --- a/src/com/android/customization/picker/color/data/repository/ColorPickerRepositoryImpl.kt +++ b/src/com/android/customization/picker/color/data/repository/ColorPickerRepositoryImpl.kt @@ -24,8 +24,8 @@ import com.android.customization.model.color.ColorOptionImpl import com.android.customization.picker.color.shared.model.ColorOptionModel import com.android.customization.picker.color.shared.model.ColorType import com.android.systemui.monet.Style -import com.android.wallpaper.model.WallpaperColorsModel -import com.android.wallpaper.model.WallpaperColorsViewModel +import com.android.wallpaper.picker.customization.data.repository.WallpaperColorsRepository +import com.android.wallpaper.picker.customization.shared.model.WallpaperColorsModel import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -37,14 +37,14 @@ import kotlinx.coroutines.suspendCancellableCoroutine // TODO (b/262924623): refactor to remove dependency on ColorCustomizationManager & ColorOption // TODO (b/268203200): Create test for ColorPickerRepositoryImpl class ColorPickerRepositoryImpl( - wallpaperColorsViewModel: WallpaperColorsViewModel, + wallpaperColorsRepository: WallpaperColorsRepository, private val colorManager: ColorCustomizationManager, ) : ColorPickerRepository { private val homeWallpaperColors: StateFlow<WallpaperColorsModel?> = - wallpaperColorsViewModel.homeWallpaperColors + wallpaperColorsRepository.homeWallpaperColors private val lockWallpaperColors: StateFlow<WallpaperColorsModel?> = - wallpaperColorsViewModel.lockWallpaperColors + wallpaperColorsRepository.lockWallpaperColors private var selectedColorOption: MutableStateFlow<ColorOptionModel> = MutableStateFlow(getCurrentColorOption()) @@ -78,7 +78,7 @@ class ColorPickerRepositoryImpl( homeColorsLoaded.colors, lockColorsLoaded.colors ) - colorManager.fetchRevampedUIOptions( + colorManager.fetchOptions( object : CustomizationManager.OptionsFetchedListener<ColorOption?> { override fun onOptionsLoaded(options: MutableList<ColorOption?>?) { val wallpaperColorOptions: MutableList<ColorOptionModel> = diff --git a/src/com/android/customization/picker/color/data/repository/FakeColorPickerRepository.kt b/src/com/android/customization/picker/color/data/repository/FakeColorPickerRepository.kt index bb2ef9d3..f35d934d 100644 --- a/src/com/android/customization/picker/color/data/repository/FakeColorPickerRepository.kt +++ b/src/com/android/customization/picker/color/data/repository/FakeColorPickerRepository.kt @@ -19,10 +19,12 @@ package com.android.customization.picker.color.data.repository import android.content.Context import android.graphics.Color import android.text.TextUtils +import com.android.customization.model.ResourceConstants import com.android.customization.model.color.ColorOptionImpl import com.android.customization.model.color.ColorOptionsProvider import com.android.customization.picker.color.shared.model.ColorOptionModel import com.android.customization.picker.color.shared.model.ColorType +import com.android.systemui.monet.Style import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow @@ -49,6 +51,53 @@ class FakeColorPickerRepository(private val context: Context) : ColorPickerRepos } fun setOptions( + wallpaperOptions: List<ColorOptionImpl>, + presetOptions: List<ColorOptionImpl>, + selectedColorOptionType: ColorType, + selectedColorOptionIndex: Int + ) { + _colorOptions.value = + mapOf( + ColorType.WALLPAPER_COLOR to + buildList { + for ((index, colorOption) in wallpaperOptions.withIndex()) { + val isSelected = + selectedColorOptionType == ColorType.WALLPAPER_COLOR && + selectedColorOptionIndex == index + val colorOptionModel = + ColorOptionModel( + key = "${ColorType.WALLPAPER_COLOR}::$index", + colorOption = colorOption, + isSelected = isSelected + ) + if (isSelected) { + selectedColorOption = colorOptionModel + } + add(colorOptionModel) + } + }, + ColorType.PRESET_COLOR to + buildList { + for ((index, colorOption) in presetOptions.withIndex()) { + val isSelected = + selectedColorOptionType == ColorType.PRESET_COLOR && + selectedColorOptionIndex == index + val colorOptionModel = + ColorOptionModel( + key = "${ColorType.PRESET_COLOR}::$index", + colorOption = colorOption, + isSelected = isSelected + ) + if (isSelected) { + selectedColorOption = colorOptionModel + } + add(colorOptionModel) + } + }, + ) + } + + fun setOptions( numWallpaperOptions: Int, numPresetOptions: Int, selectedColorOptionType: ColorType, @@ -111,6 +160,22 @@ class FakeColorPickerRepository(private val context: Context) : ColorPickerRepos return builder.build() } + fun buildPresetOption(style: Style, seedColor: String): ColorOptionImpl { + val builder = ColorOptionImpl.Builder() + builder.lightColors = + intArrayOf(Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT) + builder.darkColors = + intArrayOf(Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT) + builder.type = ColorType.PRESET_COLOR + builder.source = ColorOptionsProvider.COLOR_SOURCE_PRESET + builder.style = style + builder.title = "Preset" + builder + .addOverlayPackage("TEST_PACKAGE_TYPE", "preset_color") + .addOverlayPackage(ResourceConstants.OVERLAY_CATEGORY_SYSTEM_PALETTE, seedColor) + return builder.build() + } + private fun buildWallpaperOption(index: Int): ColorOptionImpl { val builder = ColorOptionImpl.Builder() builder.lightColors = @@ -127,6 +192,22 @@ class FakeColorPickerRepository(private val context: Context) : ColorPickerRepos return builder.build() } + fun buildWallpaperOption(source: String, style: Style, seedColor: String): ColorOptionImpl { + val builder = ColorOptionImpl.Builder() + builder.lightColors = + intArrayOf(Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT) + builder.darkColors = + intArrayOf(Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT) + builder.type = ColorType.WALLPAPER_COLOR + builder.source = source + builder.style = style + builder.title = "Dynamic" + builder + .addOverlayPackage("TEST_PACKAGE_TYPE", "wallpaper_color") + .addOverlayPackage(ResourceConstants.OVERLAY_CATEGORY_SYSTEM_PALETTE, seedColor) + return builder.build() + } + override suspend fun select(colorOptionModel: ColorOptionModel) { val colorOptions = _colorOptions.value val wallpaperColorOptions = colorOptions[ColorType.WALLPAPER_COLOR]!! diff --git a/src/com/android/customization/picker/color/ui/binder/ColorPickerBinder.kt b/src/com/android/customization/picker/color/ui/binder/ColorPickerBinder.kt index 0f82f494..9838c317 100644 --- a/src/com/android/customization/picker/color/ui/binder/ColorPickerBinder.kt +++ b/src/com/android/customization/picker/color/ui/binder/ColorPickerBinder.kt @@ -62,7 +62,7 @@ object ColorPickerBinder { colorTypeTabView.addItemDecoration(ItemSpacing(ItemSpacing.TAB_ITEM_SPACING_DP)) val colorOptionAdapter = OptionItemAdapter( - layoutResourceId = R.layout.color_option_2, + layoutResourceId = R.layout.color_option, lifecycleOwner = lifecycleOwner, bindIcon = { foregroundView: View, colorIcon: ColorOptionIconViewModel -> val colorOptionIconView = foregroundView as? ColorOptionIconView diff --git a/src/com/android/customization/picker/color/ui/fragment/ColorPickerFragment.kt b/src/com/android/customization/picker/color/ui/fragment/ColorPickerFragment.kt index 4ef29d6e..2c006090 100644 --- a/src/com/android/customization/picker/color/ui/fragment/ColorPickerFragment.kt +++ b/src/com/android/customization/picker/color/ui/fragment/ColorPickerFragment.kt @@ -33,11 +33,11 @@ import com.android.customization.model.mode.DarkModeSectionController import com.android.customization.module.ThemePickerInjector import com.android.customization.picker.color.ui.binder.ColorPickerBinder import com.android.wallpaper.R -import com.android.wallpaper.model.WallpaperColorsModel -import com.android.wallpaper.model.WallpaperColorsViewModel import com.android.wallpaper.module.CustomizationSections import com.android.wallpaper.module.InjectorProvider import com.android.wallpaper.picker.AppbarFragment +import com.android.wallpaper.picker.customization.data.repository.WallpaperColorsRepository +import com.android.wallpaper.picker.customization.shared.model.WallpaperColorsModel import com.android.wallpaper.picker.customization.ui.binder.ScreenPreviewBinder import com.android.wallpaper.picker.customization.ui.viewmodel.ScreenPreviewViewModel import com.android.wallpaper.util.DisplayUtils @@ -76,7 +76,7 @@ class ColorPickerFragment : AppbarFragment() { val homeScreenView: CardView = view.requireViewById(R.id.home_preview) val wallpaperInfoFactory = injector.getCurrentWallpaperInfoFactory(requireContext()) val displayUtils: DisplayUtils = injector.getDisplayUtils(requireContext()) - val wcViewModel = injector.getWallpaperColorsViewModel() + val wallpaperColorsRepository = injector.getWallpaperColorsRepository() val wallpaperManager = WallpaperManager.getInstance(requireContext()) binding = @@ -87,7 +87,7 @@ class ColorPickerFragment : AppbarFragment() { requireActivity(), injector.getColorPickerViewModelFactory( context = requireContext(), - wallpaperColorsViewModel = wcViewModel, + wallpaperColorsRepository = wallpaperColorsRepository, ), ) .get(), @@ -114,27 +114,27 @@ class ColorPickerFragment : AppbarFragment() { wallpaperInfoProvider = { forceReload -> suspendCancellableCoroutine { continuation -> wallpaperInfoFactory.createCurrentWallpaperInfos( - { homeWallpaper, lockWallpaper, _ -> - lifecycleScope.launch { - if ( - wcViewModel.lockWallpaperColors.value - is WallpaperColorsModel.Loading - ) { - loadInitialColors( - wallpaperManager, - wcViewModel, - CustomizationSections.Screen.LOCK_SCREEN - ) - } - } - continuation.resume(lockWallpaper ?: homeWallpaper, null) - }, + context, forceReload, - ) + ) { homeWallpaper, lockWallpaper, _ -> + lifecycleScope.launch { + if ( + wallpaperColorsRepository.lockWallpaperColors.value + is WallpaperColorsModel.Loading + ) { + loadInitialColors( + wallpaperManager, + wallpaperColorsRepository, + CustomizationSections.Screen.LOCK_SCREEN + ) + } + } + continuation.resume(lockWallpaper ?: homeWallpaper, null) + } } }, onWallpaperColorChanged = { colors -> - wcViewModel.setLockWallpaperColors(colors) + wallpaperColorsRepository.setLockWallpaperColors(colors) }, wallpaperInteractor = injector.getWallpaperInteractor(requireContext()), screen = CustomizationSections.Screen.LOCK_SCREEN, @@ -165,27 +165,27 @@ class ColorPickerFragment : AppbarFragment() { wallpaperInfoProvider = { forceReload -> suspendCancellableCoroutine { continuation -> wallpaperInfoFactory.createCurrentWallpaperInfos( - { homeWallpaper, lockWallpaper, _ -> - lifecycleScope.launch { - if ( - wcViewModel.homeWallpaperColors.value - is WallpaperColorsModel.Loading - ) { - loadInitialColors( - wallpaperManager, - wcViewModel, - CustomizationSections.Screen.HOME_SCREEN - ) - } - } - continuation.resume(homeWallpaper ?: lockWallpaper, null) - }, + context, forceReload, - ) + ) { homeWallpaper, lockWallpaper, _ -> + lifecycleScope.launch { + if ( + wallpaperColorsRepository.homeWallpaperColors.value + is WallpaperColorsModel.Loading + ) { + loadInitialColors( + wallpaperManager, + wallpaperColorsRepository, + CustomizationSections.Screen.HOME_SCREEN + ) + } + } + continuation.resume(homeWallpaper ?: lockWallpaper, null) + } } }, onWallpaperColorChanged = { colors -> - wcViewModel.setHomeWallpaperColors(colors) + wallpaperColorsRepository.setHomeWallpaperColors(colors) }, wallpaperInteractor = injector.getWallpaperInteractor(requireContext()), screen = CustomizationSections.Screen.HOME_SCREEN, @@ -202,7 +202,8 @@ class ColorPickerFragment : AppbarFragment() { DarkModeSectionController( context, lifecycle, - injector.getDarkModeSnapshotRestorer(requireContext()) + injector.getDarkModeSnapshotRestorer(requireContext()), + injector.getUserEventLogger(requireContext()), ) .createView(requireContext()) darkModeSectionView.background = null @@ -218,7 +219,7 @@ class ColorPickerFragment : AppbarFragment() { private suspend fun loadInitialColors( wallpaperManager: WallpaperManager, - colorViewModel: WallpaperColorsViewModel, + colorViewModel: WallpaperColorsRepository, screen: CustomizationSections.Screen, ) { withContext(Dispatchers.IO) { diff --git a/src/com/android/customization/picker/color/ui/section/ColorSectionController2.kt b/src/com/android/customization/picker/color/ui/section/ColorSectionController.kt index f1c982b4..a36fd80a 100644 --- a/src/com/android/customization/picker/color/ui/section/ColorSectionController2.kt +++ b/src/com/android/customization/picker/color/ui/section/ColorSectionController.kt @@ -22,37 +22,37 @@ import android.view.LayoutInflater import androidx.lifecycle.LifecycleOwner import com.android.customization.picker.color.ui.binder.ColorSectionViewBinder import com.android.customization.picker.color.ui.fragment.ColorPickerFragment -import com.android.customization.picker.color.ui.view.ColorSectionView2 +import com.android.customization.picker.color.ui.view.ColorSectionView import com.android.customization.picker.color.ui.viewmodel.ColorPickerViewModel import com.android.wallpaper.R import com.android.wallpaper.model.CustomizationSectionController import com.android.wallpaper.model.CustomizationSectionController.CustomizationSectionNavigationController as NavigationController -class ColorSectionController2( +class ColorSectionController( private val navigationController: NavigationController, private val viewModel: ColorPickerViewModel, private val lifecycleOwner: LifecycleOwner -) : CustomizationSectionController<ColorSectionView2> { +) : CustomizationSectionController<ColorSectionView> { override fun isAvailable(context: Context): Boolean { return true } - override fun createView(context: Context): ColorSectionView2 { + override fun createView(context: Context): ColorSectionView { return createView(context, CustomizationSectionController.ViewCreationParams()) } override fun createView( context: Context, params: CustomizationSectionController.ViewCreationParams - ): ColorSectionView2 { + ): ColorSectionView { @SuppressWarnings("It is fine to inflate with null parent for our need.") val view = LayoutInflater.from(context) .inflate( - R.layout.color_section_view2, + R.layout.color_section_view, null, - ) as ColorSectionView2 + ) as ColorSectionView ColorSectionViewBinder.bind( view = view, viewModel = viewModel, diff --git a/src/com/android/customization/picker/color/ui/view/ColorSectionView2.kt b/src/com/android/customization/picker/color/ui/view/ColorSectionView.kt index 7a8f21af..a89292d8 100644 --- a/src/com/android/customization/picker/color/ui/view/ColorSectionView2.kt +++ b/src/com/android/customization/picker/color/ui/view/ColorSectionView.kt @@ -23,4 +23,4 @@ import com.android.wallpaper.picker.SectionView * The class inherits from {@link SectionView} as the view representing the color section of the * customization picker. It displays a list of color options and an overflow option. */ -class ColorSectionView2(context: Context, attrs: AttributeSet?) : SectionView(context, attrs) +class ColorSectionView(context: Context, attrs: AttributeSet?) : SectionView(context, attrs) diff --git a/src/com/android/customization/picker/color/ui/viewmodel/ColorPickerViewModel.kt b/src/com/android/customization/picker/color/ui/viewmodel/ColorPickerViewModel.kt index 67c68387..ed83136e 100644 --- a/src/com/android/customization/picker/color/ui/viewmodel/ColorPickerViewModel.kt +++ b/src/com/android/customization/picker/color/ui/viewmodel/ColorPickerViewModel.kt @@ -21,6 +21,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope import com.android.customization.model.color.ColorOptionImpl +import com.android.customization.module.logging.ThemesUserEventLogger import com.android.customization.picker.color.domain.interactor.ColorPickerInteractor import com.android.customization.picker.color.shared.model.ColorType import com.android.wallpaper.R @@ -43,6 +44,7 @@ class ColorPickerViewModel private constructor( context: Context, private val interactor: ColorPickerInteractor, + private val logger: ThemesUserEventLogger, ) : ViewModel() { private val selectedColorTypeTabId = MutableStateFlow<ColorType?>(null) @@ -142,6 +144,14 @@ private constructor( { viewModelScope.launch { interactor.select(colorOptionModel) + logger.logThemeColorApplied( + colorOptionModel.colorOption + .sourceForLogging, + colorOptionModel.colorOption + .styleForLogging, + colorOptionModel.colorOption + .seedColorForLogging, + ) } } } @@ -205,12 +215,14 @@ private constructor( class Factory( private val context: Context, private val interactor: ColorPickerInteractor, + private val logger: ThemesUserEventLogger, ) : ViewModelProvider.Factory { override fun <T : ViewModel> create(modelClass: Class<T>): T { @Suppress("UNCHECKED_CAST") return ColorPickerViewModel( context = context, interactor = interactor, + logger = logger, ) as T } diff --git a/src/com/android/customization/picker/grid/GridFragment.java b/src/com/android/customization/picker/grid/GridFragment.java deleted file mode 100644 index 4de1dab7..00000000 --- a/src/com/android/customization/picker/grid/GridFragment.java +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.picker.grid; - -import static com.android.wallpaper.widget.BottomActionBar.BottomAction.APPLY_TEXT; - -import android.content.Context; -import android.graphics.Point; -import android.os.Bundle; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.SurfaceView; -import android.view.View; -import android.view.ViewGroup; -import android.view.accessibility.AccessibilityManager; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.constraintlayout.widget.ConstraintSet; -import androidx.core.widget.ContentLoadingProgressBar; -import androidx.lifecycle.ViewModelProvider; -import androidx.recyclerview.widget.RecyclerView; - -import com.android.customization.model.CustomizationManager.Callback; -import com.android.customization.model.CustomizationManager.OptionsFetchedListener; -import com.android.customization.model.CustomizationOption; -import com.android.customization.model.grid.GridOption; -import com.android.customization.model.grid.GridOptionViewModel; -import com.android.customization.model.grid.GridOptionsManager; -import com.android.customization.module.ThemesUserEventLogger; -import com.android.customization.picker.WallpaperPreviewer; -import com.android.customization.widget.OptionSelectorController; -import com.android.customization.widget.OptionSelectorController.CheckmarkStyle; -import com.android.wallpaper.R; -import com.android.wallpaper.model.WallpaperInfo; -import com.android.wallpaper.module.CurrentWallpaperInfoFactory; -import com.android.wallpaper.module.InjectorProvider; -import com.android.wallpaper.picker.AppbarFragment; -import com.android.wallpaper.util.LaunchUtils; -import com.android.wallpaper.util.ScreenSizeCalculator; -import com.android.wallpaper.widget.BottomActionBar; - -import com.bumptech.glide.Glide; - -import java.util.List; -import java.util.Locale; - -/** - * Fragment that contains the UI for selecting and applying a GridOption. - */ -public class GridFragment extends AppbarFragment { - - private static final String TAG = "GridFragment"; - - private WallpaperInfo mHomeWallpaper; - private RecyclerView mOptionsContainer; - private OptionSelectorController<GridOption> mOptionsController; - private GridOptionsManager mGridManager; - private ContentLoadingProgressBar mLoading; - private ConstraintLayout mContent; - private View mError; - private BottomActionBar mBottomActionBar; - private ThemesUserEventLogger mEventLogger; - private GridOptionPreviewer mGridOptionPreviewer; - private GridOptionViewModel mGridOptionViewModel; - - private final Callback mApplyGridCallback = new Callback() { - @Override - public void onSuccess() { - mGridManager.fetchOptions(unused -> {}, true); - Toast.makeText(getContext(), R.string.applied_grid_msg, Toast.LENGTH_SHORT).show(); - getActivity().overridePendingTransition(R.anim.fade_in, R.anim.fade_out); - getActivity().finish(); - - // Go back to launcher home - LaunchUtils.launchHome(getContext()); - } - - @Override - public void onError(@Nullable Throwable throwable) { - // Since we disabled it when clicked apply button. - mBottomActionBar.enableActions(); - mBottomActionBar.hide(); - mGridOptionViewModel.setBottomActionBarVisible(false); - //TODO(chihhangchuang): handle - } - }; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mGridOptionViewModel = new ViewModelProvider(requireActivity()).get( - GridOptionViewModel.class); - } - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View view = inflater.inflate( - R.layout.fragment_grid_picker, container, /* attachToRoot */ false); - setUpToolbar(view); - mContent = view.findViewById(R.id.content_section); - mOptionsContainer = view.findViewById(R.id.options_container); - AccessibilityManager accessibilityManager = - (AccessibilityManager) getContext().getSystemService(Context.ACCESSIBILITY_SERVICE); - if (accessibilityManager.isEnabled()) { - // Make Talkback focus won't reset when notifyDataSetChange - mOptionsContainer.setItemAnimator(null); - } - - // Set aspect ratio on the preview card dynamically. - Point mScreenSize; - ScreenSizeCalculator screenSizeCalculator = ScreenSizeCalculator.getInstance(); - mScreenSize = screenSizeCalculator.getScreenSize( - requireActivity().getWindowManager().getDefaultDisplay()); - ConstraintSet set = new ConstraintSet(); - set.clone(mContent); - String ratio = String.format(Locale.US, "%d:%d", mScreenSize.x, mScreenSize.y); - set.setDimensionRatio(R.id.preview_card_container, ratio); - set.applyTo(mContent); - - mLoading = view.findViewById(R.id.loading_indicator); - mError = view.findViewById(R.id.error_section); - - // For nav bar edge-to-edge effect. - view.setOnApplyWindowInsetsListener((v, windowInsets) -> { - v.setPadding( - v.getPaddingLeft(), - windowInsets.getSystemWindowInsetTop(), - v.getPaddingRight(), - windowInsets.getSystemWindowInsetBottom()); - return windowInsets.consumeSystemWindowInsets(); - }); - - // Clear memory cache whenever grid fragment view is being loaded. - Glide.get(getContext()).clearMemory(); - - mGridManager = GridOptionsManager.getInstance(getContext()); - mEventLogger = (ThemesUserEventLogger) InjectorProvider.getInjector() - .getUserEventLogger(getContext()); - setUpOptions(); - - SurfaceView wallpaperSurface = view.findViewById(R.id.wallpaper_preview_surface); - WallpaperPreviewer wallpaperPreviewer = new WallpaperPreviewer(getLifecycle(), - getActivity(), view.findViewById(R.id.wallpaper_preview_image), wallpaperSurface, - view.findViewById(R.id.grid_fadein_scrim)); - // Loads current Wallpaper. - CurrentWallpaperInfoFactory factory = InjectorProvider.getInjector() - .getCurrentWallpaperInfoFactory(getContext().getApplicationContext()); - factory.createCurrentWallpaperInfos((homeWallpaper, lockWallpaper, presentationMode) -> { - mHomeWallpaper = homeWallpaper; - wallpaperPreviewer.setWallpaper(mHomeWallpaper, /* listener= */ null); - }, false); - - mGridOptionPreviewer = new GridOptionPreviewer(mGridManager, - view.findViewById(R.id.grid_preview_container)); - - return view; - } - - @Override - public boolean onBackPressed() { - mGridOptionViewModel.setSelectedOption(null); - mGridOptionViewModel.setBottomActionBarVisible(false); - return super.onBackPressed(); - } - - @Override - public void onDestroy() { - super.onDestroy(); - if (mGridOptionPreviewer != null) { - mGridOptionPreviewer.release(); - } - } - - @Override - public CharSequence getDefaultTitle() { - return getString(R.string.grid_title); - } - - @Override - protected void onBottomActionBarReady(BottomActionBar bottomActionBar) { - super.onBottomActionBarReady(bottomActionBar); - mBottomActionBar = bottomActionBar; - mBottomActionBar.showActionsOnly(APPLY_TEXT); - mBottomActionBar.setActionClickListener(APPLY_TEXT, - v -> applyGridOption(mGridOptionViewModel.getSelectedOption())); - mBottomActionBar.setActionAccessibilityTraversalAfter(APPLY_TEXT, - mOptionsContainer.getId()); - } - - private void applyGridOption(GridOption gridOption) { - mBottomActionBar.disableActions(); - mGridManager.apply(gridOption, mApplyGridCallback); - } - - private void setUpOptions() { - hideError(); - mLoading.show(); - mGridManager.fetchOptions(new OptionsFetchedListener<GridOption>() { - @Override - public void onOptionsLoaded(List<GridOption> options) { - mLoading.hide(); - mOptionsController = new OptionSelectorController<>( - mOptionsContainer, options, /* useGrid= */ false, - CheckmarkStyle.CENTER_CHANGE_COLOR_WHEN_NOT_SELECTED); - mOptionsController.initOptions(mGridManager); - GridOption previouslySelectedOption = findEquivalent(options, - mGridOptionViewModel.getSelectedOption()); - mGridOptionViewModel.setSelectedOption( - previouslySelectedOption != null - ? previouslySelectedOption - : getActiveOption(options)); - - mOptionsController.setSelectedOption(mGridOptionViewModel.getSelectedOption()); - onOptionSelected(mGridOptionViewModel.getSelectedOption()); - restoreBottomActionBarVisibility(); - - mOptionsController.addListener(selectedOption -> { - String title = selectedOption.getTitle(); - int stringId = R.string.option_previewed_description; - if (selectedOption.isActive(mGridManager)) { - stringId = R.string.option_applied_previewed_description; - } - CharSequence cd = getContext().getString(stringId, title); - mOptionsContainer.announceForAccessibility(cd); - onOptionSelected(selectedOption); - mBottomActionBar.show(); - mGridOptionViewModel.setBottomActionBarVisible(true); - }); - } - - @Override - public void onError(@Nullable Throwable throwable) { - if (throwable != null) { - Log.e(TAG, "Error loading grid options", throwable); - } - showError(); - } - }, /*reload= */ true); - } - - private GridOption getActiveOption(List<GridOption> options) { - return options.stream() - .filter(option -> option.isActive(mGridManager)) - .findAny() - // For development only, as there should always be a grid set. - .orElse(options.get(0)); - } - - @Nullable - private GridOption findEquivalent(List<GridOption> options, GridOption target) { - return options.stream() - .filter(option -> option.equals(target)) - .findAny() - .orElse(null); - } - - private void hideError() { - mContent.setVisibility(View.VISIBLE); - mError.setVisibility(View.GONE); - } - - private void showError() { - mLoading.hide(); - mContent.setVisibility(View.GONE); - mError.setVisibility(View.VISIBLE); - } - - private void onOptionSelected(CustomizationOption selectedOption) { - mGridOptionViewModel.setSelectedOption((GridOption) selectedOption); - mEventLogger.logGridSelected(mGridOptionViewModel.getSelectedOption()); - mGridOptionPreviewer.setGridOption(mGridOptionViewModel.getSelectedOption()); - } - - private void restoreBottomActionBarVisibility() { - if (mGridOptionViewModel.getBottomActionBarVisible()) { - mBottomActionBar.show(); - } else { - mBottomActionBar.hide(); - } - } -} diff --git a/src/com/android/customization/picker/grid/GridOptionPreviewer.java b/src/com/android/customization/picker/grid/GridOptionPreviewer.java deleted file mode 100644 index 7786d35c..00000000 --- a/src/com/android/customization/picker/grid/GridOptionPreviewer.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.picker.grid; - -import android.content.Context; -import android.view.SurfaceHolder; -import android.view.SurfaceView; -import android.view.ViewGroup; - -import com.android.customization.model.grid.GridOption; -import com.android.customization.model.grid.GridOptionsManager; -import com.android.wallpaper.R; -import com.android.wallpaper.picker.WorkspaceSurfaceHolderCallback; -import com.android.wallpaper.util.PreviewUtils; -import com.android.wallpaper.util.SurfaceViewUtils; - -/** A class to load the {@link GridOption} preview to the view. */ -class GridOptionPreviewer { - - private final GridOptionsManager mGridManager; - private final ViewGroup mPreviewContainer; - - private SurfaceView mGridOptionSurface; - private GridOption mGridOption; - private GridOptionSurfaceHolderCallback mSurfaceCallback; - - GridOptionPreviewer(GridOptionsManager gridManager, ViewGroup previewContainer) { - mGridManager = gridManager; - mPreviewContainer = previewContainer; - } - - /** Loads the Grid option into the container view. */ - public void setGridOption(GridOption gridOption) { - mGridOption = gridOption; - if (mGridOption != null) { - updateWorkspacePreview(); - } - } - - /** Releases the view resource. */ - public void release() { - if (mGridOptionSurface != null) { - mSurfaceCallback.cleanUp(); - mGridOptionSurface = null; - } - mPreviewContainer.removeAllViews(); - } - - private void updateWorkspacePreview() { - // Reattach SurfaceView to trigger #surfaceCreated to update preview for different option. - mPreviewContainer.removeAllViews(); - if (mSurfaceCallback != null) { - mSurfaceCallback.cleanUp(); - mSurfaceCallback.resetLastSurface(); - if (mGridOptionSurface != null) { - mGridOptionSurface.getHolder().removeCallback(mSurfaceCallback); - } - } - mGridOptionSurface = new SurfaceView(mPreviewContainer.getContext()); - mGridOptionSurface.setLayoutParams(new ViewGroup.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); - mGridOptionSurface.setZOrderMediaOverlay(true); - mSurfaceCallback = new GridOptionSurfaceHolderCallback(mGridOptionSurface, - mGridOptionSurface.getContext()); - mGridOptionSurface.getHolder().addCallback(mSurfaceCallback); - mPreviewContainer.addView(mGridOptionSurface); - } - - private class GridOptionSurfaceHolderCallback extends WorkspaceSurfaceHolderCallback { - private GridOptionSurfaceHolderCallback(SurfaceView workspaceSurface, Context context) { - super( - workspaceSurface, - new PreviewUtils( - context, context.getString(R.string.grid_control_metadata_name))); - } - - @Override - public void surfaceCreated(SurfaceHolder holder) { - if (mGridOption != null) { - super.surfaceCreated(holder); - } - } - - @Override - protected void requestPreview(SurfaceView workspaceSurface, - PreviewUtils.WorkspacePreviewCallback callback) { - mGridManager.renderPreview( - SurfaceViewUtils.createSurfaceViewRequest(workspaceSurface), - mGridOption.name, callback); - } - } -} diff --git a/src/com/android/customization/model/grid/data/repository/GridRepository.kt b/src/com/android/customization/picker/grid/data/repository/GridRepository.kt index 4379dad5..f3844294 100644 --- a/src/com/android/customization/model/grid/data/repository/GridRepository.kt +++ b/src/com/android/customization/picker/grid/data/repository/GridRepository.kt @@ -15,15 +15,15 @@ * */ -package com.android.customization.model.grid.data.repository +package com.android.customization.picker.grid.data.repository import androidx.lifecycle.asFlow import com.android.customization.model.CustomizationManager import com.android.customization.model.CustomizationManager.Callback import com.android.customization.model.grid.GridOption import com.android.customization.model.grid.GridOptionsManager -import com.android.customization.model.grid.shared.model.GridOptionItemModel -import com.android.customization.model.grid.shared.model.GridOptionItemsModel +import com.android.customization.picker.grid.shared.model.GridOptionItemModel +import com.android.customization.picker.grid.shared.model.GridOptionItemsModel import kotlin.coroutines.resume import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope diff --git a/src/com/android/customization/model/grid/domain/interactor/GridInteractor.kt b/src/com/android/customization/picker/grid/domain/interactor/GridInteractor.kt index 7abd605b..02e16ddf 100644 --- a/src/com/android/customization/model/grid/domain/interactor/GridInteractor.kt +++ b/src/com/android/customization/picker/grid/domain/interactor/GridInteractor.kt @@ -15,13 +15,13 @@ * */ -package com.android.customization.model.grid.domain.interactor +package com.android.customization.picker.grid.domain.interactor import com.android.customization.model.CustomizationManager import com.android.customization.model.grid.GridOption -import com.android.customization.model.grid.data.repository.GridRepository -import com.android.customization.model.grid.shared.model.GridOptionItemModel -import com.android.customization.model.grid.shared.model.GridOptionItemsModel +import com.android.customization.picker.grid.data.repository.GridRepository +import com.android.customization.picker.grid.shared.model.GridOptionItemModel +import com.android.customization.picker.grid.shared.model.GridOptionItemsModel import javax.inject.Provider import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow diff --git a/src/com/android/customization/model/grid/domain/interactor/GridSnapshotRestorer.kt b/src/com/android/customization/picker/grid/domain/interactor/GridSnapshotRestorer.kt index 19d4c77e..74d77f75 100644 --- a/src/com/android/customization/model/grid/domain/interactor/GridSnapshotRestorer.kt +++ b/src/com/android/customization/picker/grid/domain/interactor/GridSnapshotRestorer.kt @@ -15,10 +15,10 @@ * */ -package com.android.customization.model.grid.domain.interactor +package com.android.customization.picker.grid.domain.interactor import android.util.Log -import com.android.customization.model.grid.shared.model.GridOptionItemModel +import com.android.customization.picker.grid.shared.model.GridOptionItemModel import com.android.wallpaper.picker.undo.domain.interactor.SnapshotRestorer import com.android.wallpaper.picker.undo.domain.interactor.SnapshotStore import com.android.wallpaper.picker.undo.shared.model.RestorableSnapshot diff --git a/src/com/android/customization/model/grid/shared/model/GridOptionItemModel.kt b/src/com/android/customization/picker/grid/shared/model/GridOptionItemModel.kt index 2eabeab5..1fb01be0 100644 --- a/src/com/android/customization/model/grid/shared/model/GridOptionItemModel.kt +++ b/src/com/android/customization/picker/grid/shared/model/GridOptionItemModel.kt @@ -15,7 +15,7 @@ * */ -package com.android.customization.model.grid.shared.model +package com.android.customization.picker.grid.shared.model import kotlinx.coroutines.flow.StateFlow diff --git a/src/com/android/customization/model/grid/shared/model/GridOptionItemsModel.kt b/src/com/android/customization/picker/grid/shared/model/GridOptionItemsModel.kt index e969be88..e5b33c52 100644 --- a/src/com/android/customization/model/grid/shared/model/GridOptionItemsModel.kt +++ b/src/com/android/customization/picker/grid/shared/model/GridOptionItemsModel.kt @@ -15,7 +15,7 @@ * */ -package com.android.customization.model.grid.shared.model +package com.android.customization.picker.grid.shared.model sealed class GridOptionItemsModel { data class Loaded( diff --git a/src/com/android/customization/model/grid/ui/binder/GridIconViewBinder.kt b/src/com/android/customization/picker/grid/ui/binder/GridIconViewBinder.kt index fba89a74..9fc88a0e 100644 --- a/src/com/android/customization/model/grid/ui/binder/GridIconViewBinder.kt +++ b/src/com/android/customization/picker/grid/ui/binder/GridIconViewBinder.kt @@ -1,7 +1,7 @@ -package com.android.customization.model.grid.ui.binder +package com.android.customization.picker.grid.ui.binder import android.widget.ImageView -import com.android.customization.model.grid.ui.viewmodel.GridIconViewModel +import com.android.customization.picker.grid.ui.viewmodel.GridIconViewModel import com.android.customization.widget.GridTileDrawable object GridIconViewBinder { diff --git a/src/com/android/customization/model/grid/ui/binder/GridScreenBinder.kt b/src/com/android/customization/picker/grid/ui/binder/GridScreenBinder.kt index 56fe425d..bcb37379 100644 --- a/src/com/android/customization/model/grid/ui/binder/GridScreenBinder.kt +++ b/src/com/android/customization/picker/grid/ui/binder/GridScreenBinder.kt @@ -15,7 +15,7 @@ * */ -package com.android.customization.model.grid.ui.binder +package com.android.customization.picker.grid.ui.binder import android.view.View import android.widget.Button @@ -26,9 +26,9 @@ import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView -import com.android.customization.model.grid.ui.viewmodel.GridIconViewModel -import com.android.customization.model.grid.ui.viewmodel.GridScreenViewModel import com.android.customization.picker.common.ui.view.ItemSpacing +import com.android.customization.picker.grid.ui.viewmodel.GridIconViewModel +import com.android.customization.picker.grid.ui.viewmodel.GridScreenViewModel import com.android.wallpaper.R import com.android.wallpaper.picker.option.ui.adapter.OptionItemAdapter import com.android.wallpaper.picker.option.ui.binder.OptionItemBinder @@ -55,7 +55,7 @@ object GridScreenBinder { optionView.addItemDecoration(ItemSpacing(ItemSpacing.ITEM_SPACING_DP)) val adapter = OptionItemAdapter( - layoutResourceId = R.layout.grid_option_2, + layoutResourceId = R.layout.grid_option, lifecycleOwner = lifecycleOwner, backgroundDispatcher = backgroundDispatcher, foregroundTintSpec = diff --git a/src/com/android/customization/model/grid/ui/fragment/GridFragment2.kt b/src/com/android/customization/picker/grid/ui/fragment/GridFragment.kt index 9e99efee..2a301b40 100644 --- a/src/com/android/customization/model/grid/ui/fragment/GridFragment2.kt +++ b/src/com/android/customization/picker/grid/ui/fragment/GridFragment.kt @@ -15,7 +15,7 @@ * */ -package com.android.customization.model.grid.ui.fragment +package com.android.customization.picker.grid.ui.fragment import android.os.Bundle import android.util.Log @@ -30,10 +30,10 @@ import androidx.lifecycle.ViewModelProvider import androidx.transition.Transition import androidx.transition.doOnStart import com.android.customization.model.CustomizationManager.Callback -import com.android.customization.model.grid.domain.interactor.GridInteractor -import com.android.customization.model.grid.ui.binder.GridScreenBinder -import com.android.customization.model.grid.ui.viewmodel.GridScreenViewModel import com.android.customization.module.ThemePickerInjector +import com.android.customization.picker.grid.domain.interactor.GridInteractor +import com.android.customization.picker.grid.ui.binder.GridScreenBinder +import com.android.customization.picker.grid.ui.viewmodel.GridScreenViewModel import com.android.wallpaper.R import com.android.wallpaper.config.BaseFlags import com.android.wallpaper.module.CurrentWallpaperInfoFactory @@ -48,10 +48,10 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.suspendCancellableCoroutine -private val TAG = GridFragment2::class.java.simpleName +private val TAG = GridFragment::class.java.simpleName @OptIn(ExperimentalCoroutinesApi::class) -class GridFragment2 : AppbarFragment() { +class GridFragment : AppbarFragment() { private lateinit var gridInteractor: GridInteractor @@ -185,11 +185,11 @@ class GridFragment2 : AppbarFragment() { wallpaperInfoProvider = { suspendCancellableCoroutine { continuation -> wallpaperInfoFactory.createCurrentWallpaperInfos( - { homeWallpaper, lockWallpaper, _ -> - continuation.resume(homeWallpaper ?: lockWallpaper, null) - }, + context, /* forceRefresh= */ true, - ) + ) { homeWallpaper, lockWallpaper, _ -> + continuation.resume(homeWallpaper ?: lockWallpaper, null) + } } }, wallpaperInteractor = wallpaperInteractor, diff --git a/src/com/android/customization/model/grid/GridSectionController.java b/src/com/android/customization/picker/grid/ui/section/GridSectionController.java index c50bfcc2..6ae9acd9 100644 --- a/src/com/android/customization/model/grid/GridSectionController.java +++ b/src/com/android/customization/picker/grid/ui/section/GridSectionController.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.customization.model.grid; +package com.android.customization.picker.grid.ui.section; import android.content.Context; import android.util.Log; @@ -27,9 +27,10 @@ import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.Observer; import com.android.customization.model.CustomizationManager.OptionsFetchedListener; -import com.android.customization.model.grid.ui.fragment.GridFragment2; -import com.android.customization.picker.grid.GridFragment; -import com.android.customization.picker.grid.GridSectionView; +import com.android.customization.model.grid.GridOption; +import com.android.customization.model.grid.GridOptionsManager; +import com.android.customization.picker.grid.ui.fragment.GridFragment; +import com.android.customization.picker.grid.ui.view.GridSectionView; import com.android.wallpaper.R; import com.android.wallpaper.model.CustomizationSectionController; @@ -42,7 +43,6 @@ public class GridSectionController implements CustomizationSectionController<Gri private final GridOptionsManager mGridOptionsManager; private final CustomizationSectionNavigationController mSectionNavigationController; - private final boolean mIsRevampedUiEnabled; private final Observer<Object> mOptionChangeObserver; private final LifecycleOwner mLifecycleOwner; private TextView mSectionDescription; @@ -55,7 +55,6 @@ public class GridSectionController implements CustomizationSectionController<Gri boolean isRevampedUiEnabled) { mGridOptionsManager = gridOptionsManager; mSectionNavigationController = sectionNavigationController; - mIsRevampedUiEnabled = isRevampedUiEnabled; mLifecycleOwner = lifecycleOwner; mOptionChangeObserver = o -> updateUi(/* reload= */ true); } @@ -74,20 +73,13 @@ public class GridSectionController implements CustomizationSectionController<Gri // Fetch grid options to show currently set grid. updateUi(/* The result is getting when calling isAvailable(), so reload= */ false); - if (mIsRevampedUiEnabled) { - mGridOptionsManager.getOptionChangeObservable(/* handler= */ null).observe( - mLifecycleOwner, - mOptionChangeObserver); - } + mGridOptionsManager.getOptionChangeObservable(/* handler= */ null).observe( + mLifecycleOwner, + mOptionChangeObserver); gridSectionView.setOnClickListener( v -> { - final Fragment gridFragment; - if (mIsRevampedUiEnabled) { - gridFragment = new GridFragment2(); - } else { - gridFragment = new GridFragment(); - } + final Fragment gridFragment = new GridFragment(); mSectionNavigationController.navigateTo(gridFragment); }); @@ -96,7 +88,7 @@ public class GridSectionController implements CustomizationSectionController<Gri @Override public void release() { - if (mIsRevampedUiEnabled && mGridOptionsManager.isAvailable()) { + if (mGridOptionsManager.isAvailable()) { mGridOptionsManager.getOptionChangeObservable(/* handler= */ null).removeObserver( mOptionChangeObserver ); diff --git a/src/com/android/customization/picker/grid/GridSectionView.java b/src/com/android/customization/picker/grid/ui/view/GridSectionView.java index 58468e10..545ef197 100644 --- a/src/com/android/customization/picker/grid/GridSectionView.java +++ b/src/com/android/customization/picker/grid/ui/view/GridSectionView.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.customization.picker.grid; +package com.android.customization.picker.grid.ui.view; import android.content.Context; import android.util.AttributeSet; diff --git a/src/com/android/customization/model/grid/ui/viewmodel/GridIconViewModel.kt b/src/com/android/customization/picker/grid/ui/viewmodel/GridIconViewModel.kt index 3942d7cc..d12dc6c3 100644 --- a/src/com/android/customization/model/grid/ui/viewmodel/GridIconViewModel.kt +++ b/src/com/android/customization/picker/grid/ui/viewmodel/GridIconViewModel.kt @@ -15,7 +15,7 @@ * */ -package com.android.customization.model.grid.ui.viewmodel +package com.android.customization.picker.grid.ui.viewmodel data class GridIconViewModel( val columns: Int, diff --git a/src/com/android/customization/model/grid/ui/viewmodel/GridScreenViewModel.kt b/src/com/android/customization/picker/grid/ui/viewmodel/GridScreenViewModel.kt index c11a5947..179127d1 100644 --- a/src/com/android/customization/model/grid/ui/viewmodel/GridScreenViewModel.kt +++ b/src/com/android/customization/picker/grid/ui/viewmodel/GridScreenViewModel.kt @@ -15,7 +15,7 @@ * */ -package com.android.customization.model.grid.ui.viewmodel +package com.android.customization.picker.grid.ui.viewmodel import android.annotation.SuppressLint import android.content.Context @@ -24,8 +24,8 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope import com.android.customization.model.ResourceConstants -import com.android.customization.model.grid.domain.interactor.GridInteractor -import com.android.customization.model.grid.shared.model.GridOptionItemsModel +import com.android.customization.picker.grid.domain.interactor.GridInteractor +import com.android.customization.picker.grid.shared.model.GridOptionItemsModel import com.android.wallpaper.picker.common.text.ui.viewmodel.Text import com.android.wallpaper.picker.option.ui.viewmodel.OptionItemViewModel import kotlinx.coroutines.flow.Flow diff --git a/src/com/android/customization/picker/notifications/ui/viewmodel/NotificationSectionViewModel.kt b/src/com/android/customization/picker/notifications/ui/viewmodel/NotificationSectionViewModel.kt index 954efa24..1a5254f8 100644 --- a/src/com/android/customization/picker/notifications/ui/viewmodel/NotificationSectionViewModel.kt +++ b/src/com/android/customization/picker/notifications/ui/viewmodel/NotificationSectionViewModel.kt @@ -21,6 +21,7 @@ import androidx.annotation.VisibleForTesting import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope +import com.android.customization.module.logging.ThemesUserEventLogger import com.android.customization.picker.notifications.domain.interactor.NotificationsInteractor import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map @@ -31,6 +32,7 @@ class NotificationSectionViewModel @VisibleForTesting constructor( private val interactor: NotificationsInteractor, + private val logger: ThemesUserEventLogger, ) : ViewModel() { /** Whether the switch should be on. */ @@ -39,16 +41,23 @@ constructor( /** Notifies that the section has been clicked. */ fun onClicked() { - viewModelScope.launch { interactor.toggleShowNotificationsOnLockScreenEnabled() } + viewModelScope.launch { + interactor.toggleShowNotificationsOnLockScreenEnabled() + logger.logLockScreenNotificationApplied( + interactor.getSettings().isShowNotificationsOnLockScreenEnabled + ) + } } class Factory( private val interactor: NotificationsInteractor, + private val logger: ThemesUserEventLogger, ) : ViewModelProvider.Factory { @Suppress("UNCHECKED_CAST") override fun <T : ViewModel> create(modelClass: Class<T>): T { return NotificationSectionViewModel( interactor = interactor, + logger = logger, ) as T } diff --git a/src/com/android/customization/picker/preview/ui/section/PreviewWithClockCarouselSectionController.kt b/src/com/android/customization/picker/preview/ui/section/PreviewWithClockCarouselSectionController.kt index 71dfe1da..eb25af7a 100644 --- a/src/com/android/customization/picker/preview/ui/section/PreviewWithClockCarouselSectionController.kt +++ b/src/com/android/customization/picker/preview/ui/section/PreviewWithClockCarouselSectionController.kt @@ -42,10 +42,10 @@ import com.android.customization.picker.color.domain.interactor.ColorPickerInter import com.android.wallpaper.R import com.android.wallpaper.model.CustomizationSectionController import com.android.wallpaper.model.CustomizationSectionController.CustomizationSectionNavigationController -import com.android.wallpaper.model.WallpaperColorsViewModel import com.android.wallpaper.model.WallpaperPreviewNavigator import com.android.wallpaper.module.CurrentWallpaperInfoFactory import com.android.wallpaper.module.CustomizationSections +import com.android.wallpaper.picker.customization.data.repository.WallpaperColorsRepository import com.android.wallpaper.picker.customization.domain.interactor.WallpaperInteractor import com.android.wallpaper.picker.customization.ui.section.ScreenPreviewClickView import com.android.wallpaper.picker.customization.ui.section.ScreenPreviewSectionController @@ -64,7 +64,7 @@ class PreviewWithClockCarouselSectionController( private val lifecycleOwner: LifecycleOwner, private val screen: CustomizationSections.Screen, wallpaperInfoFactory: CurrentWallpaperInfoFactory, - colorViewModel: WallpaperColorsViewModel, + wallpaperColorsRepository: WallpaperColorsRepository, displayUtils: DisplayUtils, clockCarouselViewModelFactory: ClockCarouselViewModel.Factory, private val clockViewFactory: ClockViewFactory, @@ -82,7 +82,7 @@ class PreviewWithClockCarouselSectionController( lifecycleOwner, screen, wallpaperInfoFactory, - colorViewModel, + wallpaperColorsRepository, displayUtils, wallpaperPreviewNavigator, wallpaperInteractor, diff --git a/src/com/android/customization/picker/preview/ui/section/PreviewWithThemeSectionController.kt b/src/com/android/customization/picker/preview/ui/section/PreviewWithThemeSectionController.kt index c4d6be45..b3e778ba 100644 --- a/src/com/android/customization/picker/preview/ui/section/PreviewWithThemeSectionController.kt +++ b/src/com/android/customization/picker/preview/ui/section/PreviewWithThemeSectionController.kt @@ -25,16 +25,17 @@ import com.android.customization.model.themedicon.domain.interactor.ThemedIconIn import com.android.customization.picker.color.domain.interactor.ColorPickerInteractor import com.android.customization.picker.preview.ui.viewmodel.PreviewWithThemeViewModel import com.android.wallpaper.R -import com.android.wallpaper.model.WallpaperColorsViewModel import com.android.wallpaper.model.WallpaperPreviewNavigator import com.android.wallpaper.module.CurrentWallpaperInfoFactory import com.android.wallpaper.module.CustomizationSections +import com.android.wallpaper.picker.customization.data.repository.WallpaperColorsRepository import com.android.wallpaper.picker.customization.domain.interactor.WallpaperInteractor import com.android.wallpaper.picker.customization.ui.section.ScreenPreviewSectionController import com.android.wallpaper.picker.customization.ui.viewmodel.CustomizationPickerViewModel import com.android.wallpaper.picker.customization.ui.viewmodel.ScreenPreviewViewModel import com.android.wallpaper.util.DisplayUtils import com.android.wallpaper.util.PreviewUtils +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.suspendCancellableCoroutine /** @@ -46,7 +47,7 @@ open class PreviewWithThemeSectionController( lifecycleOwner: LifecycleOwner, private val screen: CustomizationSections.Screen, private val wallpaperInfoFactory: CurrentWallpaperInfoFactory, - private val colorViewModel: WallpaperColorsViewModel, + private val wallpaperColorsRepository: WallpaperColorsRepository, displayUtils: DisplayUtils, wallpaperPreviewNavigator: WallpaperPreviewNavigator, private val wallpaperInteractor: WallpaperInteractor, @@ -61,7 +62,7 @@ open class PreviewWithThemeSectionController( lifecycleOwner, screen, wallpaperInfoFactory, - colorViewModel, + wallpaperColorsRepository, displayUtils, wallpaperPreviewNavigator, wallpaperInteractor, @@ -69,6 +70,7 @@ open class PreviewWithThemeSectionController( isTwoPaneAndSmallWidth, customizationPickerViewModel, ) { + @OptIn(ExperimentalCoroutinesApi::class) override fun createScreenPreviewViewModel(context: Context): ScreenPreviewViewModel { return PreviewWithThemeViewModel( previewUtils = @@ -92,28 +94,28 @@ open class PreviewWithThemeSectionController( wallpaperInfoProvider = { forceReload -> suspendCancellableCoroutine { continuation -> wallpaperInfoFactory.createCurrentWallpaperInfos( - { homeWallpaper, lockWallpaper, _ -> - val wallpaper = - if (isOnLockScreen) { - lockWallpaper ?: homeWallpaper - } else { - homeWallpaper ?: lockWallpaper - } - loadInitialColors( - context = context, - screen = screen, - ) - continuation.resume(wallpaper, null) - }, + context, forceReload, - ) + ) { homeWallpaper, lockWallpaper, _ -> + val wallpaper = + if (isOnLockScreen) { + lockWallpaper ?: homeWallpaper + } else { + homeWallpaper ?: lockWallpaper + } + loadInitialColors( + context = context, + screen = screen, + ) + continuation.resume(wallpaper, null) + } } }, onWallpaperColorChanged = { colors -> if (isOnLockScreen) { - colorViewModel.setLockWallpaperColors(colors) + wallpaperColorsRepository.setLockWallpaperColors(colors) } else { - colorViewModel.setHomeWallpaperColors(colors) + wallpaperColorsRepository.setHomeWallpaperColors(colors) } }, initialExtrasProvider = { getInitialExtras(isOnLockScreen) }, diff --git a/src/com/android/customization/picker/quickaffordance/data/repository/KeyguardQuickAffordancePickerRepository.kt b/src/com/android/customization/picker/quickaffordance/data/repository/KeyguardQuickAffordancePickerRepository.kt index b17af80d..6bfe3484 100644 --- a/src/com/android/customization/picker/quickaffordance/data/repository/KeyguardQuickAffordancePickerRepository.kt +++ b/src/com/android/customization/picker/quickaffordance/data/repository/KeyguardQuickAffordancePickerRepository.kt @@ -21,11 +21,11 @@ import com.android.customization.picker.quickaffordance.shared.model.KeyguardQui import com.android.customization.picker.quickaffordance.shared.model.KeyguardQuickAffordancePickerSelectionModel as SelectionModel import com.android.customization.picker.quickaffordance.shared.model.KeyguardQuickAffordancePickerSlotModel as SlotModel import com.android.systemui.shared.customization.data.content.CustomizationProviderClient as Client -import com.android.systemui.shared.customization.data.content.CustomizationProviderContract as Contract -import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.map -import kotlinx.coroutines.withContext +import kotlinx.coroutines.flow.shareIn /** * Abstracts access to application state related to functionality for selecting, picking, or setting @@ -33,39 +33,25 @@ import kotlinx.coroutines.withContext */ class KeyguardQuickAffordancePickerRepository( private val client: Client, - private val backgroundDispatcher: CoroutineDispatcher, + private val scope: CoroutineScope ) { - /** Whether the feature is enabled. */ - val isFeatureEnabled: Flow<Boolean> = - client.observeFlags().map { flags -> flags.isFeatureEnabled() } - /** List of slots available on the device. */ val slots: Flow<List<SlotModel>> = client.observeSlots().map { slots -> slots.map { slot -> slot.toModel() } } /** List of all available quick affordances. */ val affordances: Flow<List<AffordanceModel>> = - client.observeAffordances().map { affordances -> - affordances.map { affordance -> affordance.toModel() } - } + client + .observeAffordances() + .map { affordances -> affordances.map { affordance -> affordance.toModel() } } + .shareIn(scope, replay = 1, started = SharingStarted.Lazily) /** List of slot-affordance pairs, modeling what the user has currently chosen for each slot. */ val selections: Flow<List<SelectionModel>> = - client.observeSelections().map { selections -> - selections.map { selection -> selection.toModel() } - } - - suspend fun isFeatureEnabled(): Boolean { - return withContext(backgroundDispatcher) { client.queryFlags().isFeatureEnabled() } - } - - private fun List<Client.Flag>.isFeatureEnabled(): Boolean { - return find { flag -> - flag.name == - Contract.FlagsTable.FLAG_NAME_CUSTOM_LOCK_SCREEN_QUICK_AFFORDANCES_ENABLED - } - ?.value == true - } + client + .observeSelections() + .map { selections -> selections.map { selection -> selection.toModel() } } + .shareIn(scope, replay = 1, started = SharingStarted.Lazily) private fun Client.Slot.toModel(): SlotModel { return SlotModel( diff --git a/src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractor.kt b/src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractor.kt index f154de65..3eca6241 100644 --- a/src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractor.kt +++ b/src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractor.kt @@ -64,7 +64,7 @@ class KeyguardQuickAffordancePickerInteractor( } /** Unselects all affordances from the slot with the given ID. */ - suspend fun unselectAll(slotId: String) { + suspend fun unselectAllFromSlot(slotId: String) { client.deleteAllSelections( slotId = slotId, ) @@ -72,15 +72,15 @@ class KeyguardQuickAffordancePickerInteractor( snapshotRestorer.get().storeSnapshot() } + /** Unselects all affordances from all slots. */ + suspend fun unselectAll() { + client.querySlots().forEach { client.deleteAllSelections(it.id) } + } + /** Returns a [Drawable] for the given resource ID, from the system UI package. */ suspend fun getAffordanceIcon( @DrawableRes iconResourceId: Int, ): Drawable { return client.getAffordanceIcon(iconResourceId) } - - /** Returns `true` if the feature is enabled; `false` otherwise. */ - suspend fun isFeatureEnabled(): Boolean { - return repository.isFeatureEnabled() - } } diff --git a/src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordanceSnapshotRestorer.kt b/src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordanceSnapshotRestorer.kt index 3c7928ce..fee0cb51 100644 --- a/src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordanceSnapshotRestorer.kt +++ b/src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordanceSnapshotRestorer.kt @@ -42,9 +42,14 @@ class KeyguardQuickAffordanceSnapshotRestorer( } override suspend fun restoreToSnapshot(snapshot: RestorableSnapshot) { + // reset all current selections + interactor.unselectAll() + + val allSelections = checkNotNull(snapshot.args[KEY_SELECTIONS]) + if (allSelections.isEmpty()) return + val selections: List<Pair<String, String>> = - checkNotNull(snapshot.args[KEY_SELECTIONS]).split(SELECTION_SEPARATOR).map { selection - -> + allSelections.split(SELECTION_SEPARATOR).map { selection -> val (slotId, affordanceId) = selection.split(SLOT_AFFORDANCE_SEPARATOR) slotId to affordanceId } diff --git a/src/com/android/customization/picker/quickaffordance/ui/adapter/SlotTabAdapter.kt b/src/com/android/customization/picker/quickaffordance/ui/adapter/SlotTabAdapter.kt index 8891b03f..0e3b7167 100644 --- a/src/com/android/customization/picker/quickaffordance/ui/adapter/SlotTabAdapter.kt +++ b/src/com/android/customization/picker/quickaffordance/ui/adapter/SlotTabAdapter.kt @@ -67,7 +67,9 @@ class SlotTabAdapter : RecyclerView.Adapter<SlotTabAdapter.ViewHolder>() { .find { it.isSelected.value } ?.text ?.asString(holder.itemView.context) - stateDescription?.let { holder.itemView.stateDescription = it } + holder.itemView.stateDescription = + stateDescription + ?: holder.itemView.resources.getString(R.string.keyguard_affordance_none) } class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { diff --git a/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordancePickerBinder.kt b/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordancePickerBinder.kt index 091f484e..3ac52ad5 100644 --- a/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordancePickerBinder.kt +++ b/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordancePickerBinder.kt @@ -20,7 +20,11 @@ package com.android.customization.picker.quickaffordance.ui.binder import android.app.Dialog import android.content.Context import android.view.View +import android.view.ViewGroup +import android.view.accessibility.AccessibilityEvent import android.widget.ImageView +import androidx.core.view.AccessibilityDelegateCompat +import androidx.core.view.ViewCompat import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.lifecycleScope @@ -62,6 +66,26 @@ object KeyguardQuickAffordancePickerBinder { slotTabView.layoutManager = LinearLayoutManager(view.context, RecyclerView.HORIZONTAL, false) slotTabView.addItemDecoration(ItemSpacing(ItemSpacing.TAB_ITEM_SPACING_DP)) + + // Setting a custom accessibility delegate so that the default content descriptions + // for items in a list aren't announced (for left & right shortcuts). We populate + // the content description for these shortcuts later on with the right (expected) + // values. + val slotTabViewDelegate: AccessibilityDelegateCompat = + object : AccessibilityDelegateCompat() { + override fun onRequestSendAccessibilityEvent( + host: ViewGroup, + child: View, + event: AccessibilityEvent + ): Boolean { + if (event.eventType != AccessibilityEvent.TYPE_VIEW_FOCUSED) { + child.contentDescription = null + } + return super.onRequestSendAccessibilityEvent(host, child, event) + } + } + + ViewCompat.setAccessibilityDelegate(slotTabView, slotTabViewDelegate) val affordancesAdapter = OptionItemAdapter( layoutResourceId = R.layout.keyguard_quick_affordance, diff --git a/src/com/android/customization/picker/quickaffordance/ui/section/KeyguardQuickAffordanceSectionController.kt b/src/com/android/customization/picker/quickaffordance/ui/section/KeyguardQuickAffordanceSectionController.kt index e0beeff0..0c7b250d 100644 --- a/src/com/android/customization/picker/quickaffordance/ui/section/KeyguardQuickAffordanceSectionController.kt +++ b/src/com/android/customization/picker/quickaffordance/ui/section/KeyguardQuickAffordanceSectionController.kt @@ -20,27 +20,23 @@ package com.android.customization.picker.quickaffordance.ui.section import android.content.Context import android.view.LayoutInflater import androidx.lifecycle.LifecycleOwner -import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordancePickerInteractor import com.android.customization.picker.quickaffordance.ui.binder.KeyguardQuickAffordanceSectionViewBinder import com.android.customization.picker.quickaffordance.ui.fragment.KeyguardQuickAffordancePickerFragment import com.android.customization.picker.quickaffordance.ui.view.KeyguardQuickAffordanceSectionView import com.android.customization.picker.quickaffordance.ui.viewmodel.KeyguardQuickAffordancePickerViewModel import com.android.wallpaper.R +import com.android.wallpaper.config.BaseFlags import com.android.wallpaper.model.CustomizationSectionController import com.android.wallpaper.model.CustomizationSectionController.CustomizationSectionNavigationController as NavigationController -import kotlinx.coroutines.runBlocking class KeyguardQuickAffordanceSectionController( private val navigationController: NavigationController, - private val interactor: KeyguardQuickAffordancePickerInteractor, private val viewModel: KeyguardQuickAffordancePickerViewModel, private val lifecycleOwner: LifecycleOwner, ) : CustomizationSectionController<KeyguardQuickAffordanceSectionView> { - private val isFeatureEnabled: Boolean = runBlocking { interactor.isFeatureEnabled() } - override fun isAvailable(context: Context): Boolean { - return isFeatureEnabled + return BaseFlags.get().isKeyguardQuickAffordanceEnabled(context) } override fun createView(context: Context): KeyguardQuickAffordanceSectionView { diff --git a/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt b/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt index f832cdeb..260c0d3b 100644 --- a/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt +++ b/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt @@ -26,6 +26,7 @@ import androidx.annotation.DrawableRes import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope +import com.android.customization.module.logging.ThemesUserEventLogger import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordancePickerInteractor import com.android.systemui.shared.keyguard.shared.model.KeyguardQuickAffordanceSlots import com.android.systemui.shared.quickaffordance.shared.model.KeyguardPreviewConstants @@ -63,6 +64,7 @@ private constructor( private val quickAffordanceInteractor: KeyguardQuickAffordancePickerInteractor, private val wallpaperInteractor: WallpaperInteractor, private val wallpaperInfoFactory: CurrentWallpaperInfoFactory, + private val logger: ThemesUserEventLogger, ) : ViewModel() { @SuppressLint("StaticFieldLeak") private val applicationContext = context.applicationContext @@ -92,11 +94,11 @@ private constructor( wallpaperInfoProvider = { forceReload -> suspendCancellableCoroutine { continuation -> wallpaperInfoFactory.createCurrentWallpaperInfos( - { homeWallpaper, lockWallpaper, _ -> - continuation.resume(lockWallpaper ?: homeWallpaper, null) - }, + context, forceReload, - ) + ) { homeWallpaper, lockWallpaper, _ -> + continuation.resume(lockWallpaper ?: homeWallpaper, null) + } } }, wallpaperInteractor = wallpaperInteractor, @@ -158,7 +160,8 @@ private constructor( Icon.Loaded( drawable = getAffordanceIcon(affordanceModel.iconResourceId), - contentDescription = null, + contentDescription = + Text.Loaded(getSlotContentDescription(slot.id)), ), text = Text.Loaded(affordanceModel.name), isSelected = MutableStateFlow(true) as StateFlow<Boolean>, @@ -214,7 +217,13 @@ private constructor( if (!isSelected) { { viewModelScope.launch { - quickAffordanceInteractor.unselectAll(selectedSlotId) + quickAffordanceInteractor.unselectAllFromSlot( + selectedSlotId + ) + logger.logShortcutApplied( + shortcut = "none", + shortcutSlotId = selectedSlotId, + ) } } } else { @@ -250,6 +259,10 @@ private constructor( slotId = selectedSlotId, affordanceId = affordance.id, ) + logger.logShortcutApplied( + shortcut = affordance.id, + shortcutSlotId = selectedSlotId, + ) } } } else { @@ -423,6 +436,18 @@ private constructor( ) } + private fun getSlotContentDescription(slotId: String): String { + return applicationContext.getString( + when (slotId) { + KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START -> + R.string.keyguard_slot_name_bottom_start + KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END -> + R.string.keyguard_slot_name_bottom_end + else -> error("No accessibility label for slot with ID \"$slotId\"!") + } + ) + } + private suspend fun getAffordanceIcon(@DrawableRes iconResourceId: Int): Drawable { return quickAffordanceInteractor.getAffordanceIcon(iconResourceId) } @@ -463,6 +488,7 @@ private constructor( private val quickAffordanceInteractor: KeyguardQuickAffordancePickerInteractor, private val wallpaperInteractor: WallpaperInteractor, private val wallpaperInfoFactory: CurrentWallpaperInfoFactory, + private val logger: ThemesUserEventLogger, ) : ViewModelProvider.Factory { override fun <T : ViewModel> create(modelClass: Class<T>): T { @Suppress("UNCHECKED_CAST") @@ -471,6 +497,7 @@ private constructor( quickAffordanceInteractor = quickAffordanceInteractor, wallpaperInteractor = wallpaperInteractor, wallpaperInfoFactory = wallpaperInfoFactory, + logger = logger, ) as T } diff --git a/src/com/android/customization/picker/theme/CustomThemeActivity.java b/src/com/android/customization/picker/theme/CustomThemeActivity.java deleted file mode 100644 index 62a2f266..00000000 --- a/src/com/android/customization/picker/theme/CustomThemeActivity.java +++ /dev/null @@ -1,421 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.picker.theme; - -import android.app.AlertDialog.Builder; -import android.content.Intent; -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.TextView; -import android.widget.Toast; - -import androidx.annotation.Nullable; -import androidx.annotation.StringRes; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentTransaction; - -import com.android.customization.model.CustomizationManager.Callback; -import com.android.customization.model.theme.DefaultThemeProvider; -import com.android.customization.model.theme.OverlayManagerCompat; -import com.android.customization.model.theme.ThemeBundle; -import com.android.customization.model.theme.ThemeBundleProvider; -import com.android.customization.model.theme.ThemeManager; -import com.android.customization.model.theme.custom.ColorOptionsProvider; -import com.android.customization.model.theme.custom.CustomTheme; -import com.android.customization.model.theme.custom.CustomThemeManager; -import com.android.customization.model.theme.custom.FontOptionsProvider; -import com.android.customization.model.theme.custom.IconOptionsProvider; -import com.android.customization.model.theme.custom.ShapeOptionsProvider; -import com.android.customization.model.theme.custom.ThemeComponentOption; -import com.android.customization.model.theme.custom.ThemeComponentOption.ColorOption; -import com.android.customization.model.theme.custom.ThemeComponentOption.FontOption; -import com.android.customization.model.theme.custom.ThemeComponentOption.IconOption; -import com.android.customization.model.theme.custom.ThemeComponentOption.ShapeOption; -import com.android.customization.model.theme.custom.ThemeComponentOptionProvider; -import com.android.customization.module.CustomizationInjector; -import com.android.customization.module.ThemesUserEventLogger; -import com.android.customization.picker.theme.CustomThemeStepFragment.CustomThemeComponentStepHost; -import com.android.wallpaper.R; -import com.android.wallpaper.module.InjectorProvider; -import com.android.wallpaper.picker.AppbarFragment.AppbarFragmentHost; - -import org.json.JSONException; - -import java.util.ArrayList; -import java.util.List; - -public class CustomThemeActivity extends FragmentActivity implements - AppbarFragmentHost, CustomThemeComponentStepHost { - public static final String EXTRA_THEME_ID = "CustomThemeActivity.ThemeId"; - public static final String EXTRA_THEME_TITLE = "CustomThemeActivity.ThemeTitle"; - public static final String EXTRA_THEME_PACKAGES = "CustomThemeActivity.ThemePackages"; - public static final int REQUEST_CODE_CUSTOM_THEME = 1; - public static final int RESULT_THEME_DELETED = 10; - public static final int RESULT_THEME_APPLIED = 20; - - private static final String TAG = "CustomThemeActivity"; - private static final String KEY_STATE_CURRENT_STEP = "CustomThemeActivity.currentStep"; - - private ThemesUserEventLogger mUserEventLogger; - private List<ComponentStep<?>> mSteps; - private int mCurrentStep; - private CustomThemeManager mCustomThemeManager; - private ThemeManager mThemeManager; - private TextView mNextButton; - private TextView mPreviousButton; - - @Override - protected void onCreate(Bundle savedInstanceState) { - CustomizationInjector injector = (CustomizationInjector) InjectorProvider.getInjector(); - mUserEventLogger = (ThemesUserEventLogger) injector.getUserEventLogger(this); - ThemeBundleProvider themeProvider = - new DefaultThemeProvider(this, injector.getCustomizationPreferences(this)); - Intent intent = getIntent(); - CustomTheme customTheme = null; - if (intent != null && intent.hasExtra(EXTRA_THEME_PACKAGES) - && intent.hasExtra(EXTRA_THEME_TITLE) && intent.hasExtra(EXTRA_THEME_ID)) { - try { - CustomTheme.Builder themeBuilder = themeProvider.parseCustomTheme( - intent.getStringExtra(EXTRA_THEME_PACKAGES)); - if (themeBuilder != null) { - themeBuilder.setId(intent.getStringExtra(EXTRA_THEME_ID)); - themeBuilder.setTitle(intent.getStringExtra(EXTRA_THEME_TITLE)); - customTheme = themeBuilder.build(this); - } - } catch (JSONException e) { - Log.w(TAG, "Couldn't parse provided custom theme, will override it"); - } - } - - mThemeManager = injector.getThemeManager( - new DefaultThemeProvider(this, injector.getCustomizationPreferences(this)), - this, - new OverlayManagerCompat(this), - mUserEventLogger); - mThemeManager.fetchOptions(null, false); - mCustomThemeManager = CustomThemeManager.create(customTheme, mThemeManager); - if (savedInstanceState != null) { - mCustomThemeManager.readCustomTheme(themeProvider, savedInstanceState); - } - - int currentStep = 0; - if (savedInstanceState != null) { - currentStep = savedInstanceState.getInt(KEY_STATE_CURRENT_STEP); - } - initSteps(currentStep); - - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_custom_theme); - mNextButton = findViewById(R.id.next_button); - mNextButton.setOnClickListener(view -> onNextOrApply()); - mPreviousButton = findViewById(R.id.previous_button); - mPreviousButton.setOnClickListener(view -> onBackPressed()); - - FragmentManager fm = getSupportFragmentManager(); - Fragment fragment = fm.findFragmentById(R.id.fragment_container); - if (fragment == null) { - // Navigate to the first step - navigateToStep(0); - } - } - - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putInt(KEY_STATE_CURRENT_STEP, mCurrentStep); - if (mCustomThemeManager != null) { - mCustomThemeManager.saveCustomTheme(this, outState); - } - } - - private void navigateToStep(int i) { - FragmentManager fragmentManager = getSupportFragmentManager(); - ComponentStep step = mSteps.get(i); - Fragment fragment = step.getFragment(mCustomThemeManager.getOriginalTheme().getTitle()); - - FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); - fragmentTransaction.replace(R.id.fragment_container, fragment); - // Don't add step 0 to the back stack so that going back from it just finishes the Activity - if (i > 0) { - fragmentTransaction.addToBackStack("Step " + i); - } - fragmentTransaction.commit(); - fragmentManager.executePendingTransactions(); - updateNavigationButtonLabels(); - } - - private void initSteps(int currentStep) { - mSteps = new ArrayList<>(); - OverlayManagerCompat manager = new OverlayManagerCompat(this); - mSteps.add(new FontStep(new FontOptionsProvider(this, manager), 0)); - mSteps.add(new IconStep(new IconOptionsProvider(this, manager), 1)); - mSteps.add(new ColorStep(new ColorOptionsProvider(this, manager, mCustomThemeManager), 2)); - mSteps.add(new ShapeStep(new ShapeOptionsProvider(this, manager), 3)); - mSteps.add(new NameStep(4)); - mCurrentStep = currentStep; - } - - private void onNextOrApply() { - CustomThemeStepFragment stepFragment = getCurrentStepFragment(); - if (stepFragment instanceof CustomThemeComponentFragment) { - CustomThemeComponentFragment fragment = (CustomThemeComponentFragment) stepFragment; - mCustomThemeManager.apply(fragment.getSelectedOption(), new Callback() { - @Override - public void onSuccess() { - navigateToStep(mCurrentStep + 1); - } - - @Override - public void onError(@Nullable Throwable throwable) { - Log.w(TAG, "Error applying custom theme component", throwable); - Toast.makeText(CustomThemeActivity.this, R.string.apply_theme_error_msg, - Toast.LENGTH_LONG).show(); - } - }); - } else if (stepFragment instanceof CustomThemeNameFragment) { - CustomThemeNameFragment fragment = (CustomThemeNameFragment) stepFragment; - CustomTheme originalTheme = mCustomThemeManager.getOriginalTheme(); - - // We're on the last step, apply theme and leave - CustomTheme themeToApply = mCustomThemeManager.buildPartialCustomTheme(this, - originalTheme.getId(), fragment.getThemeName()); - - // If the current theme is equal to the original theme being edited, then - // don't search for an equivalent, let the user apply the same one by keeping - // it null. - ThemeBundle equivalent = (originalTheme.isEquivalent(themeToApply)) - ? null : mThemeManager.findThemeByPackages(themeToApply); - - if (equivalent != null) { - Builder builder = - new Builder(CustomThemeActivity.this); - builder.setTitle(getString(R.string.use_style_instead_title, - equivalent.getTitle())) - .setMessage(getString(R.string.use_style_instead_body, - equivalent.getTitle())) - .setPositiveButton(getString(R.string.use_style_button, - equivalent.getTitle()), - (dialogInterface, i) -> applyTheme(equivalent)) - .setNegativeButton(R.string.no_thanks, null) - .create() - .show(); - } else { - applyTheme(themeToApply); - } - } else { - throw new IllegalStateException("Unknown CustomThemeStepFragment"); - } - } - - private void applyTheme(ThemeBundle themeToApply) { - mThemeManager.apply(themeToApply, new Callback() { - @Override - public void onSuccess() { - overridePendingTransition(R.anim.fade_in, R.anim.fade_out); - Toast.makeText(getApplicationContext(), R.string.applied_theme_msg, - Toast.LENGTH_LONG).show(); - setResult(RESULT_THEME_APPLIED); - finish(); - } - - @Override - public void onError(@Nullable Throwable throwable) { - Log.w(TAG, "Error applying custom theme", throwable); - Toast.makeText(CustomThemeActivity.this, - R.string.apply_theme_error_msg, - Toast.LENGTH_LONG).show(); - } - }); - } - - private CustomThemeStepFragment getCurrentStepFragment() { - return (CustomThemeStepFragment) - getSupportFragmentManager().findFragmentById(R.id.fragment_container); - } - - @Override - public void setCurrentStep(int i) { - mCurrentStep = i; - updateNavigationButtonLabels(); - } - - private void updateNavigationButtonLabels() { - mPreviousButton.setVisibility(mCurrentStep == 0 ? View.INVISIBLE : View.VISIBLE); - mNextButton.setText((mCurrentStep < mSteps.size() -1) ? R.string.custom_theme_next - : R.string.apply_btn); - } - - @Override - public void delete() { - mThemeManager.removeCustomTheme(mCustomThemeManager.getOriginalTheme()); - setResult(RESULT_THEME_DELETED); - finish(); - } - - @Override - public void cancel() { - finish(); - } - - @Override - public ThemeComponentOptionProvider<? extends ThemeComponentOption> getComponentOptionProvider( - int position) { - return mSteps.get(position).provider; - } - - @Override - public CustomThemeManager getCustomThemeManager() { - return mCustomThemeManager; - } - - @Override - public void onUpArrowPressed() { - // Skip it because CustomThemeStepFragment will implement cancel button - // (instead of up arrow) on action bar. - } - - @Override - public boolean isUpArrowSupported() { - // Skip it because CustomThemeStepFragment will implement cancel button - // (instead of up arrow) on action bar. - return false; - } - - /** - * Represents a step in selecting a custom theme, picking a particular component (eg font, - * color, shape, etc). - * Each step has a Fragment instance associated that instances of this class will provide. - */ - private static abstract class ComponentStep<T extends ThemeComponentOption> { - @StringRes final int titleResId; - @StringRes final int accessibilityResId; - final ThemeComponentOptionProvider<T> provider; - final int position; - private CustomThemeStepFragment mFragment; - - protected ComponentStep(@StringRes int titleResId, @StringRes int accessibilityResId, - ThemeComponentOptionProvider<T> provider, int position) { - this.titleResId = titleResId; - this.accessibilityResId = accessibilityResId; - this.provider = provider; - this.position = position; - } - - CustomThemeStepFragment getFragment(String title) { - if (mFragment == null) { - mFragment = createFragment(title); - } - return mFragment; - } - - /** - * @return a newly created fragment that will handle this step's UI. - */ - abstract CustomThemeStepFragment createFragment(String title); - } - - private class FontStep extends ComponentStep<FontOption> { - - protected FontStep(ThemeComponentOptionProvider<FontOption> provider, - int position) { - super(R.string.font_component_title, R.string.accessibility_custom_font_title, provider, - position); - } - - @Override - CustomThemeComponentFragment createFragment(String title) { - return CustomThemeComponentFragment.newInstance( - title, - position, - titleResId, - accessibilityResId); - } - } - - private class IconStep extends ComponentStep<IconOption> { - - protected IconStep(ThemeComponentOptionProvider<IconOption> provider, - int position) { - super(R.string.icon_component_title, R.string.accessibility_custom_icon_title, provider, - position); - } - - @Override - CustomThemeComponentFragment createFragment(String title) { - return CustomThemeComponentFragment.newInstance( - title, - position, - titleResId, - accessibilityResId); - } - } - - private class ColorStep extends ComponentStep<ColorOption> { - - protected ColorStep(ThemeComponentOptionProvider<ColorOption> provider, - int position) { - super(R.string.color_component_title, R.string.accessibility_custom_color_title, - provider, position); - } - - @Override - CustomThemeComponentFragment createFragment(String title) { - return CustomThemeComponentFragment.newInstance( - title, - position, - titleResId, - accessibilityResId); - } - } - - private class ShapeStep extends ComponentStep<ShapeOption> { - - protected ShapeStep(ThemeComponentOptionProvider<ShapeOption> provider, - int position) { - super(R.string.shape_component_title, R.string.accessibility_custom_shape_title, - provider, position); - } - - @Override - CustomThemeComponentFragment createFragment(String title) { - return CustomThemeComponentFragment.newInstance( - title, - position, - titleResId, - accessibilityResId); - } - } - - private class NameStep extends ComponentStep { - - protected NameStep(int position) { - super(R.string.name_component_title, R.string.accessibility_custom_name_title, null, - position); - } - - @Override - CustomThemeNameFragment createFragment(String title) { - return CustomThemeNameFragment.newInstance( - title, - position, - titleResId, - accessibilityResId); - } - } -} diff --git a/src/com/android/customization/picker/theme/CustomThemeComponentFragment.java b/src/com/android/customization/picker/theme/CustomThemeComponentFragment.java deleted file mode 100644 index a1e99677..00000000 --- a/src/com/android/customization/picker/theme/CustomThemeComponentFragment.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.picker.theme; - -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.recyclerview.widget.RecyclerView; - -import com.android.customization.model.theme.custom.ThemeComponentOption; -import com.android.customization.model.theme.custom.ThemeComponentOptionProvider; -import com.android.customization.widget.OptionSelectorController; -import com.android.customization.widget.OptionSelectorController.CheckmarkStyle; -import com.android.wallpaper.R; -import com.android.wallpaper.picker.AppbarFragment; - -public class CustomThemeComponentFragment extends CustomThemeStepFragment { - private static final String ARG_USE_GRID_LAYOUT = "CustomThemeComponentFragment.use_grid";; - - public static CustomThemeComponentFragment newInstance(CharSequence toolbarTitle, int position, - int titleResId, int accessibilityResId) { - return newInstance(toolbarTitle, position, titleResId, accessibilityResId, false); - } - - public static CustomThemeComponentFragment newInstance(CharSequence toolbarTitle, int position, - int titleResId, int accessibilityResId, boolean allowGridLayout) { - CustomThemeComponentFragment fragment = new CustomThemeComponentFragment(); - Bundle arguments = AppbarFragment.createArguments(toolbarTitle); - arguments.putInt(ARG_KEY_POSITION, position); - arguments.putInt(ARG_KEY_TITLE_RES_ID, titleResId); - arguments.putInt(ARG_KEY_ACCESSIBILITY_RES_ID, accessibilityResId); - arguments.putBoolean(ARG_USE_GRID_LAYOUT, allowGridLayout); - fragment.setArguments(arguments); - return fragment; - } - - private ThemeComponentOptionProvider<? extends ThemeComponentOption> mProvider; - private boolean mUseGridLayout; - - private RecyclerView mOptionsContainer; - private OptionSelectorController<ThemeComponentOption> mOptionsController; - private ThemeComponentOption mSelectedOption; - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mUseGridLayout = getArguments().getBoolean(ARG_USE_GRID_LAYOUT); - mProvider = mHost.getComponentOptionProvider(mPosition); - } - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View view = super.onCreateView(inflater, container, savedInstanceState); - mOptionsContainer = view.findViewById(R.id.options_container); - mPreviewContainer = view.findViewById(R.id.component_preview_content); - mTitle = view.findViewById(R.id.component_options_title); - mTitle.setText(mTitleResId); - setUpOptions(); - - return view; - } - - @Override - protected int getFragmentLayoutResId() { - return R.layout.fragment_custom_theme_component; - } - - public ThemeComponentOption getSelectedOption() { - return mSelectedOption; - } - - private void bindPreview() { - mSelectedOption.bindPreview(mPreviewContainer); - } - - private void setUpOptions() { - mProvider.fetch(options -> { - mOptionsController = new OptionSelectorController( - mOptionsContainer, options, mUseGridLayout, CheckmarkStyle.NONE); - - mOptionsController.addListener(selected -> { - mSelectedOption = (ThemeComponentOption) selected; - bindPreview(); - // Preview and apply. The selection will be kept whatever user goes to previous page - // or encounter system config changes, the current selection can be recovered. - mCustomThemeManager.apply(mSelectedOption, /* callback= */ null); - }); - mOptionsController.initOptions(mCustomThemeManager); - - for (ThemeComponentOption option : options) { - if (option.isActive(mCustomThemeManager)) { - mSelectedOption = option; - break; - } - } - if (mSelectedOption == null) { - mSelectedOption = options.get(0); - } - mOptionsController.setSelectedOption(mSelectedOption); - }, false); - } -} diff --git a/src/com/android/customization/picker/theme/CustomThemeNameFragment.java b/src/com/android/customization/picker/theme/CustomThemeNameFragment.java deleted file mode 100644 index ea9099fc..00000000 --- a/src/com/android/customization/picker/theme/CustomThemeNameFragment.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.picker.theme; - -import android.os.Bundle; -import android.text.TextUtils; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.EditText; -import android.widget.ImageView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.android.customization.model.theme.ThemeBundle.PreviewInfo; -import com.android.customization.model.theme.custom.CustomTheme; -import com.android.customization.module.CustomizationInjector; -import com.android.customization.module.CustomizationPreferences; -import com.android.customization.picker.WallpaperPreviewer; -import com.android.wallpaper.R; -import com.android.wallpaper.module.CurrentWallpaperInfoFactory; -import com.android.wallpaper.module.InjectorProvider; -import com.android.wallpaper.picker.AppbarFragment; - -import org.json.JSONArray; -import org.json.JSONException; - -/** Fragment of naming a custom theme. */ -public class CustomThemeNameFragment extends CustomThemeStepFragment { - - private static final String TAG = "CustomThemeNameFragment"; - - public static CustomThemeNameFragment newInstance(CharSequence toolbarTitle, int position, - int titleResId, int accessibilityResId) { - CustomThemeNameFragment fragment = new CustomThemeNameFragment(); - Bundle arguments = AppbarFragment.createArguments(toolbarTitle); - arguments.putInt(ARG_KEY_POSITION, position); - arguments.putInt(ARG_KEY_TITLE_RES_ID, titleResId); - arguments.putInt(ARG_KEY_ACCESSIBILITY_RES_ID, accessibilityResId); - fragment.setArguments(arguments); - return fragment; - } - - private EditText mNameEditor; - private ImageView mWallpaperImage; - private ThemeOptionPreviewer mThemeOptionPreviewer; - private CustomizationPreferences mCustomizationPreferences; - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View view = super.onCreateView(inflater, container, savedInstanceState); - mTitle = view.findViewById(R.id.component_options_title); - mTitle.setText(mTitleResId); - CurrentWallpaperInfoFactory currentWallpaperFactory = InjectorProvider.getInjector() - .getCurrentWallpaperInfoFactory(getActivity().getApplicationContext()); - CustomizationInjector injector = (CustomizationInjector) InjectorProvider.getInjector(); - mCustomizationPreferences = injector.getCustomizationPreferences(getContext()); - - // Set theme option. - ViewGroup previewContainer = view.findViewById(R.id.theme_preview_container); - mThemeOptionPreviewer = new ThemeOptionPreviewer(getLifecycle(), getContext(), - previewContainer); - PreviewInfo previewInfo = mCustomThemeManager.buildCustomThemePreviewInfo(getContext()); - mThemeOptionPreviewer.setPreviewInfo(previewInfo); - - // Set wallpaper background. - mWallpaperImage = view.findViewById(R.id.wallpaper_preview_image); - final WallpaperPreviewer wallpaperPreviewer = new WallpaperPreviewer( - getLifecycle(), - getActivity(), - mWallpaperImage, - view.findViewById(R.id.wallpaper_preview_surface)); - currentWallpaperFactory.createCurrentWallpaperInfos( - (homeWallpaper, lockWallpaper, presentationMode) -> { - wallpaperPreviewer.setWallpaper(homeWallpaper, - mThemeOptionPreviewer::updateColorForLauncherWidgets); - }, false); - - // Set theme default name. - mNameEditor = view.findViewById(R.id.custom_theme_name); - mNameEditor.setText(getOriginalThemeName()); - return view; - } - - private String getOriginalThemeName() { - CustomTheme originalTheme = mCustomThemeManager.getOriginalTheme(); - if (originalTheme == null || !originalTheme.isDefined()) { - // For new custom theme. use custom themes amount plus 1 as default naming. - String serializedThemes = mCustomizationPreferences.getSerializedCustomThemes(); - int customThemesCount = 0; - if (!TextUtils.isEmpty(serializedThemes)) { - try { - JSONArray customThemes = new JSONArray(serializedThemes); - customThemesCount = customThemes.length(); - } catch (JSONException e) { - Log.w(TAG, "Couldn't read stored custom theme"); - } - } - return getContext().getString( - R.string.custom_theme_title, customThemesCount + 1); - } else { - // For existing custom theme, keep its name as default naming. - return originalTheme.getTitle(); - } - } - - @Override - protected int getFragmentLayoutResId() { - return R.layout.fragment_custom_theme_name; - } - - public String getThemeName() { - return mNameEditor.getText().toString(); - } -} diff --git a/src/com/android/customization/picker/theme/CustomThemeStepFragment.java b/src/com/android/customization/picker/theme/CustomThemeStepFragment.java deleted file mode 100644 index 3f07431d..00000000 --- a/src/com/android/customization/picker/theme/CustomThemeStepFragment.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.android.customization.picker.theme; - -import android.app.AlertDialog; -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.StringRes; - -import com.android.customization.model.theme.custom.CustomThemeManager; -import com.android.customization.model.theme.custom.ThemeComponentOption; -import com.android.customization.model.theme.custom.ThemeComponentOptionProvider; -import com.android.wallpaper.R; -import com.android.wallpaper.picker.AppbarFragment; - -abstract class CustomThemeStepFragment extends AppbarFragment { - protected static final String ARG_KEY_POSITION = "CustomThemeStepFragment.position"; - protected static final String ARG_KEY_TITLE_RES_ID = "CustomThemeStepFragment.title_res"; - protected static final String ARG_KEY_ACCESSIBILITY_RES_ID = - "CustomThemeStepFragment.accessibility_res"; - protected CustomThemeComponentStepHost mHost; - protected CustomThemeManager mCustomThemeManager; - protected int mPosition; - protected ViewGroup mPreviewContainer; - protected TextView mTitle; - @StringRes - protected int mTitleResId; - @StringRes - protected int mAccessibilityResId; - - @Override - public void onAttach(Context context) { - super.onAttach(context); - mHost = (CustomThemeComponentStepHost) context; - } - - @Override - public void onResume() { - super.onResume(); - mHost.setCurrentStep(mPosition); - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mPosition = getArguments().getInt(ARG_KEY_POSITION); - mTitleResId = getArguments().getInt(ARG_KEY_TITLE_RES_ID); - mAccessibilityResId = getArguments().getInt(ARG_KEY_ACCESSIBILITY_RES_ID); - mCustomThemeManager = mHost.getCustomThemeManager(); - } - - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View view = inflater.inflate( - getFragmentLayoutResId(), container, /* attachToRoot */ false); - // No original theme means it's a new one, so no toolbar icon for deleting it is needed - if (mCustomThemeManager.getOriginalTheme() == null - || !mCustomThemeManager.getOriginalTheme().isDefined()) { - setUpToolbar(view); - } else { - setUpToolbar(view, R.menu.custom_theme_editor_menu); - mToolbar.getMenu().getItem(0).setIconTintList( - getContext().getColorStateList(R.color.toolbar_icon_tint)); - } - Drawable closeIcon = getResources().getDrawable(R.drawable.ic_close_24px, null).mutate(); - closeIcon.setTintList(getResources().getColorStateList(R.color.toolbar_icon_tint, null)); - mToolbar.setNavigationIcon(closeIcon); - - mToolbar.setNavigationContentDescription(R.string.cancel); - mToolbar.setNavigationOnClickListener(v -> mHost.cancel()); - - mPreviewContainer = view.findViewById(R.id.component_preview_content); - return view; - } - - @Override - protected String getAccessibilityTitle() { - return getString(mAccessibilityResId); - } - - @Override - public boolean onMenuItemClick(MenuItem item) { - if (item.getItemId() == R.id.custom_theme_delete) { - AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); - builder.setMessage(R.string.delete_custom_theme_confirmation) - .setPositiveButton(R.string.delete_custom_theme_button, - (dialogInterface, i) -> mHost.delete()) - .setNegativeButton(R.string.cancel, null) - .create() - .show(); - return true; - } - return super.onMenuItemClick(item); - } - - protected abstract int getFragmentLayoutResId(); - - public interface CustomThemeComponentStepHost { - void delete(); - void cancel(); - ThemeComponentOptionProvider<? extends ThemeComponentOption> getComponentOptionProvider( - int position); - - CustomThemeManager getCustomThemeManager(); - - void setCurrentStep(int step); - } -} diff --git a/src/com/android/customization/picker/theme/ThemeFragment.java b/src/com/android/customization/picker/theme/ThemeFragment.java deleted file mode 100644 index 3a9a56f5..00000000 --- a/src/com/android/customization/picker/theme/ThemeFragment.java +++ /dev/null @@ -1,402 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.picker.theme; - -import static android.app.Activity.RESULT_OK; - -import static com.android.wallpaper.widget.BottomActionBar.BottomAction.APPLY; -import static com.android.wallpaper.widget.BottomActionBar.BottomAction.CUSTOMIZE; -import static com.android.wallpaper.widget.BottomActionBar.BottomAction.INFORMATION; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.widget.ContentLoadingProgressBar; -import androidx.recyclerview.widget.RecyclerView; - -import com.android.customization.model.CustomizationManager.Callback; -import com.android.customization.model.CustomizationManager.OptionsFetchedListener; -import com.android.customization.model.CustomizationOption; -import com.android.customization.model.theme.ThemeBundle; -import com.android.customization.model.theme.ThemeManager; -import com.android.customization.model.theme.custom.CustomTheme; -import com.android.customization.module.ThemesUserEventLogger; -import com.android.customization.picker.WallpaperPreviewer; -import com.android.customization.widget.OptionSelectorController; -import com.android.wallpaper.R; -import com.android.wallpaper.model.WallpaperInfo; -import com.android.wallpaper.module.CurrentWallpaperInfoFactory; -import com.android.wallpaper.module.InjectorProvider; -import com.android.wallpaper.picker.AppbarFragment; -import com.android.wallpaper.widget.BottomActionBar; -import com.android.wallpaper.widget.BottomActionBar.AccessibilityCallback; -import com.android.wallpaper.widget.BottomActionBar.BottomSheetContent; - -import java.util.List; - -/** - * Fragment that contains the main UI for selecting and applying a ThemeBundle. - */ -public class ThemeFragment extends AppbarFragment { - - private static final String TAG = "ThemeFragment"; - private static final String KEY_SELECTED_THEME = "ThemeFragment.SelectedThemeBundle"; - private static final String KEY_STATE_BOTTOM_ACTION_BAR_VISIBLE = - "ThemeFragment.bottomActionBarVisible"; - private static final int FULL_PREVIEW_REQUEST_CODE = 1000; - - /** - * Interface to be implemented by an Activity hosting a {@link ThemeFragment} - */ - public interface ThemeFragmentHost { - ThemeManager getThemeManager(); - } - public static ThemeFragment newInstance(CharSequence title) { - ThemeFragment fragment = new ThemeFragment(); - fragment.setArguments(AppbarFragment.createArguments(title)); - return fragment; - } - - private RecyclerView mOptionsContainer; - private OptionSelectorController<ThemeBundle> mOptionsController; - private ThemeManager mThemeManager; - private ThemesUserEventLogger mEventLogger; - private ThemeBundle mSelectedTheme; - private ContentLoadingProgressBar mLoading; - private View mContent; - private View mError; - private WallpaperInfo mCurrentHomeWallpaper; - private CurrentWallpaperInfoFactory mCurrentWallpaperFactory; - private BottomActionBar mBottomActionBar; - private WallpaperPreviewer mWallpaperPreviewer; - private ImageView mWallpaperImage; - private ThemeOptionPreviewer mThemeOptionPreviewer; - private ThemeInfoView mThemeInfoView; - - @Override - public void onAttach(Context context) { - super.onAttach(context); - mThemeManager = ((ThemeFragmentHost) context).getThemeManager(); - mEventLogger = (ThemesUserEventLogger) - InjectorProvider.getInjector().getUserEventLogger(context); - } - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View view = inflater.inflate( - R.layout.fragment_theme_picker, container, /* attachToRoot */ false); - setUpToolbar(view); - - mContent = view.findViewById(R.id.content_section); - mLoading = view.findViewById(R.id.loading_indicator); - mError = view.findViewById(R.id.error_section); - mCurrentWallpaperFactory = InjectorProvider.getInjector() - .getCurrentWallpaperInfoFactory(getActivity().getApplicationContext()); - mOptionsContainer = view.findViewById(R.id.options_container); - - mThemeOptionPreviewer = new ThemeOptionPreviewer( - getLifecycle(), - getContext(), - view.findViewById(R.id.theme_preview_container)); - - // Set Wallpaper background. - mWallpaperImage = view.findViewById(R.id.wallpaper_preview_image); - mWallpaperPreviewer = new WallpaperPreviewer( - getLifecycle(), - getActivity(), - mWallpaperImage, - view.findViewById(R.id.wallpaper_preview_surface)); - mCurrentWallpaperFactory.createCurrentWallpaperInfos( - (homeWallpaper, lockWallpaper, presentationMode) -> { - mCurrentHomeWallpaper = homeWallpaper; - mWallpaperPreviewer.setWallpaper(mCurrentHomeWallpaper, - mThemeOptionPreviewer::updateColorForLauncherWidgets); - }, false); - return view; - } - - @Override - protected void onBottomActionBarReady(BottomActionBar bottomActionBar) { - super.onBottomActionBarReady(bottomActionBar); - mBottomActionBar = bottomActionBar; - mBottomActionBar.showActionsOnly(INFORMATION, APPLY); - mBottomActionBar.setActionClickListener(APPLY, v -> { - mBottomActionBar.disableActions(); - applyTheme(); - }); - - mBottomActionBar.bindBottomSheetContentWithAction( - new ThemeInfoContent(getContext()), INFORMATION); - mBottomActionBar.setActionClickListener(CUSTOMIZE, this::onCustomizeClicked); - - // Update target view's accessibility param since it will be blocked by the bottom sheet - // when expanded. - mBottomActionBar.setAccessibilityCallback(new AccessibilityCallback() { - @Override - public void onBottomSheetCollapsed() { - mOptionsContainer.setImportantForAccessibility( - View.IMPORTANT_FOR_ACCESSIBILITY_YES); - } - - @Override - public void onBottomSheetExpanded() { - mOptionsContainer.setImportantForAccessibility( - View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS); - } - }); - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - // Setup options here when all views are ready(including BottomActionBar), since we need to - // update views after options are loaded. - setUpOptions(savedInstanceState); - } - - private void applyTheme() { - mThemeManager.apply(mSelectedTheme, new Callback() { - @Override - public void onSuccess() { - Toast.makeText(getContext(), R.string.applied_theme_msg, Toast.LENGTH_LONG).show(); - getActivity().overridePendingTransition(R.anim.fade_in, R.anim.fade_out); - getActivity().finish(); - } - - @Override - public void onError(@Nullable Throwable throwable) { - Log.w(TAG, "Error applying theme", throwable); - // Since we disabled it when clicked apply button. - mBottomActionBar.enableActions(); - mBottomActionBar.hide(); - Toast.makeText(getContext(), R.string.apply_theme_error_msg, - Toast.LENGTH_LONG).show(); - } - }); - } - - @Override - public void onSaveInstanceState(@NonNull Bundle outState) { - super.onSaveInstanceState(outState); - if (mSelectedTheme != null && !mSelectedTheme.isActive(mThemeManager)) { - outState.putString(KEY_SELECTED_THEME, mSelectedTheme.getSerializedPackages()); - } - if (mBottomActionBar != null) { - outState.putBoolean(KEY_STATE_BOTTOM_ACTION_BAR_VISIBLE, mBottomActionBar.isVisible()); - } - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode == CustomThemeActivity.REQUEST_CODE_CUSTOM_THEME) { - if (resultCode == CustomThemeActivity.RESULT_THEME_DELETED) { - mSelectedTheme = null; - reloadOptions(); - } else if (resultCode == CustomThemeActivity.RESULT_THEME_APPLIED) { - getActivity().overridePendingTransition(R.anim.fade_in, R.anim.fade_out); - getActivity().finish(); - } else { - if (mSelectedTheme != null) { - mOptionsController.setSelectedOption(mSelectedTheme); - // Set selected option above will show BottomActionBar, - // hide BottomActionBar for the mis-trigger. - mBottomActionBar.hide(); - } else { - reloadOptions(); - } - } - } else if (requestCode == FULL_PREVIEW_REQUEST_CODE && resultCode == RESULT_OK) { - applyTheme(); - } - super.onActivityResult(requestCode, resultCode, data); - } - - private void onCustomizeClicked(View view) { - if (mSelectedTheme instanceof CustomTheme) { - navigateToCustomTheme((CustomTheme) mSelectedTheme); - } - } - - private void hideError() { - mContent.setVisibility(View.VISIBLE); - mError.setVisibility(View.GONE); - } - - private void showError() { - mLoading.hide(); - mContent.setVisibility(View.GONE); - mError.setVisibility(View.VISIBLE); - } - - private void setUpOptions(@Nullable Bundle savedInstanceState) { - hideError(); - mLoading.show(); - mThemeManager.fetchOptions(new OptionsFetchedListener<ThemeBundle>() { - @Override - public void onOptionsLoaded(List<ThemeBundle> options) { - mOptionsController = new OptionSelectorController<>(mOptionsContainer, options); - mOptionsController.initOptions(mThemeManager); - - // Find out the selected theme option. - // 1. Find previously selected theme. - String previouslySelected = savedInstanceState != null - ? savedInstanceState.getString(KEY_SELECTED_THEME) : null; - ThemeBundle previouslySelectedTheme = null; - ThemeBundle activeTheme = null; - for (ThemeBundle theme : options) { - if (previouslySelected != null - && previouslySelected.equals(theme.getSerializedPackages())) { - previouslySelectedTheme = theme; - } - if (theme.isActive(mThemeManager)) { - activeTheme = theme; - } - } - // 2. Use active theme if no previously selected theme. - mSelectedTheme = previouslySelectedTheme != null - ? previouslySelectedTheme - : activeTheme; - // 3. Select the first system theme(default theme currently) - // if there is no matching custom enabled theme. - if (mSelectedTheme == null) { - mSelectedTheme = findFirstSystemThemeBundle(options); - } - - mOptionsController.setSelectedOption(mSelectedTheme); - onOptionSelected(mSelectedTheme); - restoreBottomActionBarVisibility(savedInstanceState); - - mOptionsController.addListener(selectedOption -> { - onOptionSelected(selectedOption); - if (!isAddCustomThemeOption(selectedOption)) { - mBottomActionBar.show(); - } - }); - mLoading.hide(); - } - @Override - public void onError(@Nullable Throwable throwable) { - if (throwable != null) { - Log.e(TAG, "Error loading theme bundles", throwable); - } - showError(); - } - }, false); - } - - private void reloadOptions() { - mThemeManager.fetchOptions(options -> { - mOptionsController.resetOptions(options); - for (ThemeBundle theme : options) { - if (theme.isActive(mThemeManager)) { - mSelectedTheme = theme; - break; - } - } - if (mSelectedTheme == null) { - mSelectedTheme = findFirstSystemThemeBundle(options); - } - mOptionsController.setSelectedOption(mSelectedTheme); - // Set selected option above will show BottomActionBar, - // hide BottomActionBar for the mis-trigger. - mBottomActionBar.hide(); - }, true); - } - - private ThemeBundle findFirstSystemThemeBundle(List<ThemeBundle> options) { - for (ThemeBundle bundle : options) { - if (!(bundle instanceof CustomTheme)) { - return bundle; - } - } - return null; - } - - private void onOptionSelected(CustomizationOption selectedOption) { - if (isAddCustomThemeOption(selectedOption)) { - navigateToCustomTheme((CustomTheme) selectedOption); - } else { - mSelectedTheme = (ThemeBundle) selectedOption; - mSelectedTheme.setOverrideThemeWallpaper(mCurrentHomeWallpaper); - mEventLogger.logThemeSelected(mSelectedTheme, - selectedOption instanceof CustomTheme); - mThemeOptionPreviewer.setPreviewInfo(mSelectedTheme.getPreviewInfo()); - if (mThemeInfoView != null && mSelectedTheme != null) { - mThemeInfoView.populateThemeInfo(mSelectedTheme); - } - - if (selectedOption instanceof CustomTheme) { - mBottomActionBar.showActionsOnly(INFORMATION, CUSTOMIZE, APPLY); - } else { - mBottomActionBar.showActionsOnly(INFORMATION, APPLY); - } - } - } - - private void restoreBottomActionBarVisibility(@Nullable Bundle savedInstanceState) { - boolean isBottomActionBarVisible = savedInstanceState != null - && savedInstanceState.getBoolean(KEY_STATE_BOTTOM_ACTION_BAR_VISIBLE); - if (isBottomActionBarVisible) { - mBottomActionBar.show(); - } else { - mBottomActionBar.hide(); - } - } - - private boolean isAddCustomThemeOption(CustomizationOption option) { - return option instanceof CustomTheme && !((CustomTheme) option).isDefined(); - } - - private void navigateToCustomTheme(CustomTheme themeToEdit) { - Intent intent = new Intent(getActivity(), CustomThemeActivity.class); - intent.putExtra(CustomThemeActivity.EXTRA_THEME_TITLE, themeToEdit.getTitle()); - intent.putExtra(CustomThemeActivity.EXTRA_THEME_ID, themeToEdit.getId()); - intent.putExtra(CustomThemeActivity.EXTRA_THEME_PACKAGES, - themeToEdit.getSerializedPackages()); - startActivityForResult(intent, CustomThemeActivity.REQUEST_CODE_CUSTOM_THEME); - } - - private final class ThemeInfoContent extends BottomSheetContent<ThemeInfoView> { - - private ThemeInfoContent(Context context) { - super(context); - } - - @Override - public int getViewId() { - return R.layout.theme_info_view; - } - - @Override - public void onViewCreated(ThemeInfoView view) { - mThemeInfoView = view; - if (mSelectedTheme != null) { - mThemeInfoView.populateThemeInfo(mSelectedTheme); - } - } - } -} diff --git a/src/com/android/customization/picker/theme/ThemeFullPreviewFragment.java b/src/com/android/customization/picker/theme/ThemeFullPreviewFragment.java deleted file mode 100644 index 3ba64ecc..00000000 --- a/src/com/android/customization/picker/theme/ThemeFullPreviewFragment.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.picker.theme; - -import static android.app.Activity.RESULT_OK; - -import static com.android.wallpaper.widget.BottomActionBar.BottomAction.APPLY; -import static com.android.wallpaper.widget.BottomActionBar.BottomAction.INFORMATION; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.android.customization.model.theme.DefaultThemeProvider; -import com.android.customization.model.theme.ThemeBundle; -import com.android.customization.model.theme.ThemeBundleProvider; -import com.android.customization.module.CustomizationInjector; -import com.android.customization.picker.WallpaperPreviewer; -import com.android.wallpaper.R; -import com.android.wallpaper.model.WallpaperInfo; -import com.android.wallpaper.module.InjectorProvider; -import com.android.wallpaper.picker.AppbarFragment; -import com.android.wallpaper.widget.BottomActionBar; -import com.android.wallpaper.widget.BottomActionBar.BottomSheetContent; - -import com.bumptech.glide.Glide; - -import org.json.JSONException; - -/** A Fragment for theme full preview page. */ -public class ThemeFullPreviewFragment extends AppbarFragment { - private static final String TAG = "ThemeFullPreviewFragment"; - - public static final String EXTRA_THEME_OPTION_TITLE = "theme_option_title"; - protected static final String EXTRA_THEME_OPTION = "theme_option"; - protected static final String EXTRA_WALLPAPER_INFO = "wallpaper_info"; - protected static final String EXTRA_CAN_APPLY_FROM_FULL_PREVIEW = "can_apply"; - - private WallpaperInfo mWallpaper; - private ThemeBundle mThemeBundle; - private boolean mCanApplyFromFullPreview; - - /** - * Returns a new {@link ThemeFullPreviewFragment} with the provided title and bundle arguments - * set. - */ - public static ThemeFullPreviewFragment newInstance(CharSequence title, Bundle intentBundle) { - ThemeFullPreviewFragment fragment = new ThemeFullPreviewFragment(); - Bundle bundle = new Bundle(); - bundle.putAll(AppbarFragment.createArguments(title)); - bundle.putAll(intentBundle); - fragment.setArguments(bundle); - return fragment; - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mWallpaper = getArguments().getParcelable(EXTRA_WALLPAPER_INFO); - mCanApplyFromFullPreview = getArguments().getBoolean(EXTRA_CAN_APPLY_FROM_FULL_PREVIEW); - CustomizationInjector injector = (CustomizationInjector) InjectorProvider.getInjector(); - ThemeBundleProvider themeProvider = new DefaultThemeProvider( - getContext(), injector.getCustomizationPreferences(getContext())); - try { - ThemeBundle.Builder builder = themeProvider.parseThemeBundle( - getArguments().getString(EXTRA_THEME_OPTION)); - if (builder != null) { - builder.setTitle(getArguments().getString(EXTRA_THEME_OPTION_TITLE)); - mThemeBundle = builder.build(getContext()); - } - } catch (JSONException e) { - Log.w(TAG, "Couldn't parse provided custom theme, will override it"); - // TODO(chihhangchuang): Handle the error case. - } - } - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View view = inflater.inflate( - R.layout.fragment_theme_full_preview, container, /* attachToRoot */ false); - setUpToolbar(view); - Glide.get(getContext()).clearMemory(); - - // Set theme option. - final ThemeOptionPreviewer themeOptionPreviewer = new ThemeOptionPreviewer( - getLifecycle(), - getContext(), - view.findViewById(R.id.theme_preview_container)); - themeOptionPreviewer.setPreviewInfo(mThemeBundle.getPreviewInfo()); - - // Set wallpaper background. - ImageView wallpaperImageView = view.findViewById(R.id.wallpaper_preview_image); - final WallpaperPreviewer wallpaperPreviewer = new WallpaperPreviewer( - getLifecycle(), - getActivity(), - wallpaperImageView, - view.findViewById(R.id.wallpaper_preview_surface)); - wallpaperPreviewer.setWallpaper(mWallpaper, - themeOptionPreviewer::updateColorForLauncherWidgets); - return view; - } - - @Override - protected void onBottomActionBarReady(BottomActionBar bottomActionBar) { - super.onBottomActionBarReady(bottomActionBar); - if (mCanApplyFromFullPreview) { - bottomActionBar.showActionsOnly(INFORMATION, APPLY); - bottomActionBar.setActionClickListener(APPLY, v -> finishActivityWithResultOk()); - } else { - bottomActionBar.showActionsOnly(INFORMATION); - } - bottomActionBar.bindBottomSheetContentWithAction( - new ThemeInfoContent(getContext()), INFORMATION); - bottomActionBar.show(); - } - - private void finishActivityWithResultOk() { - Activity activity = requireActivity(); - activity.overridePendingTransition(R.anim.fade_in, R.anim.fade_out); - Intent intent = new Intent(); - activity.setResult(RESULT_OK, intent); - activity.finish(); - } - - private final class ThemeInfoContent extends BottomSheetContent<ThemeInfoView> { - - private ThemeInfoContent(Context context) { - super(context); - } - - @Override - public int getViewId() { - return R.layout.theme_info_view; - } - - @Override - public void onViewCreated(ThemeInfoView view) { - view.populateThemeInfo(mThemeBundle); - } - } -} diff --git a/src/com/android/customization/picker/theme/ThemeInfoView.java b/src/com/android/customization/picker/theme/ThemeInfoView.java deleted file mode 100644 index e929c4d2..00000000 --- a/src/com/android/customization/picker/theme/ThemeInfoView.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.picker.theme; - -import android.content.Context; -import android.content.res.ColorStateList; -import android.util.AttributeSet; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.android.customization.model.theme.ThemeBundle; -import com.android.wallpaper.R; - -/** A view for displaying style info. */ -public class ThemeInfoView extends LinearLayout { - private static final int WIFI_ICON_PREVIEW_INDEX = 0; - private static final int SHAPE_PREVIEW_INDEX = 0; - - private TextView mTitle; - private TextView mFontPreviewTextView; - private ImageView mIconPreviewImageView; - private ImageView mAppPreviewImageView; - private ImageView mShapePreviewImageView; - - public ThemeInfoView(Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - mTitle = findViewById(R.id.style_info_title); - mFontPreviewTextView = findViewById(R.id.font_preview); - mIconPreviewImageView = findViewById(R.id.qs_preview_icon); - mAppPreviewImageView = findViewById(R.id.app_preview_icon); - mShapePreviewImageView = findViewById(R.id.shape_preview_icon); - } - - /** Populates theme info. */ - public void populateThemeInfo(@NonNull ThemeBundle selectedTheme) { - ThemeBundle.PreviewInfo previewInfo = selectedTheme.getPreviewInfo(); - - if (previewInfo != null) { - mTitle.setText(getContext().getString(R.string.style_info_description)); - if (previewInfo.headlineFontFamily != null) { - mTitle.setTypeface(previewInfo.headlineFontFamily); - mFontPreviewTextView.setTypeface(previewInfo.headlineFontFamily); - } - - if (previewInfo.icons.get(WIFI_ICON_PREVIEW_INDEX) != null) { - mIconPreviewImageView.setImageDrawable( - previewInfo.icons.get(WIFI_ICON_PREVIEW_INDEX)); - } - - if (previewInfo.shapeAppIcons.get(SHAPE_PREVIEW_INDEX) != null) { - mAppPreviewImageView.setBackground( - previewInfo.shapeAppIcons.get(SHAPE_PREVIEW_INDEX).getDrawableCopy()); - } - - if (previewInfo.shapeDrawable != null) { - mShapePreviewImageView.setImageDrawable(previewInfo.shapeDrawable); - mShapePreviewImageView.setImageTintList( - ColorStateList.valueOf(previewInfo.resolveAccentColor(getResources()))); - } - } - } -} diff --git a/src/com/android/customization/picker/theme/ThemeOptionPreviewer.java b/src/com/android/customization/picker/theme/ThemeOptionPreviewer.java deleted file mode 100644 index 14b53ec4..00000000 --- a/src/com/android/customization/picker/theme/ThemeOptionPreviewer.java +++ /dev/null @@ -1,405 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.picker.theme; - -import static android.view.View.MeasureSpec.EXACTLY; -import static android.view.View.MeasureSpec.makeMeasureSpec; - -import android.app.WallpaperColors; -import android.content.Context; -import android.content.res.ColorStateList; -import android.content.res.Configuration; -import android.content.res.Resources; -import android.graphics.Typeface; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.GradientDrawable; -import android.text.format.DateFormat; -import android.util.DisplayMetrics; -import android.util.TypedValue; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.animation.AnimationUtils; -import android.widget.CompoundButton; -import android.widget.ImageView; -import android.widget.Switch; -import android.widget.TextView; - -import androidx.annotation.MainThread; -import androidx.annotation.Nullable; -import androidx.cardview.widget.CardView; -import androidx.lifecycle.Lifecycle; -import androidx.lifecycle.LifecycleObserver; -import androidx.lifecycle.OnLifecycleEvent; - -import com.android.customization.model.theme.ThemeBundle; -import com.android.customization.model.theme.ThemeBundle.PreviewInfo; -import com.android.customization.model.theme.ThemeBundle.PreviewInfo.ShapeAppIcon; -import com.android.wallpaper.R; -import com.android.wallpaper.util.ResourceUtils; -import com.android.wallpaper.util.ScreenSizeCalculator; -import com.android.wallpaper.util.TimeUtils; -import com.android.wallpaper.util.TimeUtils.TimeTicker; - -import java.util.Calendar; -import java.util.List; -import java.util.Locale; -import java.util.TimeZone; - -/** A class to load the {@link ThemeBundle} preview to the view. */ -class ThemeOptionPreviewer implements LifecycleObserver { - private static final String DATE_FORMAT = "EEEE, MMM d"; - - // Maps which icon from ResourceConstants#ICONS_FOR_PREVIEW. - private static final int ICON_WIFI = 0; - private static final int ICON_BLUETOOTH = 1; - private static final int ICON_FLASHLIGHT = 3; - private static final int ICON_AUTO_ROTATE = 4; - private static final int ICON_CELLULAR_SIGNAL = 6; - private static final int ICON_BATTERY = 7; - - // Icons in the top bar (fake "status bar") with the particular order. - private static final int [] sTopBarIconToPreviewIcon = new int [] { - ICON_WIFI, ICON_CELLULAR_SIGNAL, ICON_BATTERY }; - - // Ids of app icon shape preview. - private int[] mShapeAppIconIds = { - R.id.shape_preview_icon_0, R.id.shape_preview_icon_1, - R.id.shape_preview_icon_2, R.id.shape_preview_icon_3 - }; - private int[] mShapeIconAppNameIds = { - R.id.shape_preview_icon_app_name_0, R.id.shape_preview_icon_app_name_1, - R.id.shape_preview_icon_app_name_2, R.id.shape_preview_icon_app_name_3 - }; - - // Ids of color/icons section. - private int[][] mColorTileIconIds = { - new int[] { R.id.preview_color_qs_0_icon, ICON_WIFI}, - new int[] { R.id.preview_color_qs_1_icon, ICON_BLUETOOTH}, - new int[] { R.id.preview_color_qs_2_icon, ICON_FLASHLIGHT}, - new int[] { R.id.preview_color_qs_3_icon, ICON_AUTO_ROTATE}, - }; - private int[] mColorTileIds = { - R.id.preview_color_qs_0_bg, R.id.preview_color_qs_1_bg, - R.id.preview_color_qs_2_bg, R.id.preview_color_qs_3_bg - }; - private int[] mColorButtonIds = { - R.id.preview_check_selected, R.id.preview_radio_selected, R.id.preview_toggle_selected - }; - - private final Context mContext; - - private View mContentView; - private TextView mStatusBarClock; - private TextView mSmartSpaceDate; - private TimeTicker mTicker; - - private boolean mHasPreviewInfoSet; - private boolean mHasWallpaperColorSet; - - ThemeOptionPreviewer(Lifecycle lifecycle, Context context, ViewGroup previewContainer) { - lifecycle.addObserver(this); - - mContext = context; - mContentView = LayoutInflater.from(context).inflate( - R.layout.theme_preview_content, /* root= */ null); - mContentView.setVisibility(View.INVISIBLE); - mStatusBarClock = mContentView.findViewById(R.id.theme_preview_clock); - mSmartSpaceDate = mContentView.findViewById(R.id.smart_space_date); - updateTime(); - final float screenAspectRatio = - ScreenSizeCalculator.getInstance().getScreenAspectRatio(mContext); - Configuration config = mContext.getResources().getConfiguration(); - final boolean directionLTR = config.getLayoutDirection() == View.LAYOUT_DIRECTION_LTR; - previewContainer.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { - @Override - public void onLayoutChange(View view, int left, int top, int right, int bottom, - int oldLeft, int oldTop, int oldRight, int oldBottom) { - // Calculate the full preview card height and width. - final int fullPreviewCardHeight = getFullPreviewCardHeight(); - final int fullPreviewCardWidth = (int) (fullPreviewCardHeight / screenAspectRatio); - - // Relayout the content view to match full preview card size. - mContentView.measure( - makeMeasureSpec(fullPreviewCardWidth, EXACTLY), - makeMeasureSpec(fullPreviewCardHeight, EXACTLY)); - mContentView.layout(0, 0, fullPreviewCardWidth, fullPreviewCardHeight); - - // Scale the content view from full preview size to the container size. For full - // preview, the scale value is 1. - float scale = (float) previewContainer.getMeasuredHeight() / fullPreviewCardHeight; - mContentView.setScaleX(scale); - mContentView.setScaleY(scale); - // The pivot point is centered by default, set to (0, 0). - mContentView.setPivotX(directionLTR ? 0f : mContentView.getMeasuredWidth()); - mContentView.setPivotY(0f); - - // Ensure there will be only one content view in the container. - previewContainer.removeAllViews(); - // Finally, add the content view to the container. - previewContainer.addView( - mContentView, - mContentView.getMeasuredWidth(), - mContentView.getMeasuredHeight()); - - previewContainer.removeOnLayoutChangeListener(this); - } - }); - } - - /** Loads the Theme option preview into the container view. */ - public void setPreviewInfo(PreviewInfo previewInfo) { - setHeadlineFont(previewInfo.headlineFontFamily); - setBodyFont(previewInfo.bodyFontFamily); - setTopBarIcons(previewInfo.icons); - setAppIconShape(previewInfo.shapeAppIcons); - setColorAndIconsSection(previewInfo.icons, previewInfo.shapeDrawable, - previewInfo.resolveAccentColor(mContext.getResources())); - setColorAndIconsBoxRadius(previewInfo.bottomSheeetCornerRadius); - setQsbRadius(previewInfo.bottomSheeetCornerRadius); - mHasPreviewInfoSet = true; - showPreviewIfHasAllConfigSet(); - } - - /** - * Updates the color of widgets in launcher (like top status bar, smart space, and app name - * text) which will change its content color according to different wallpapers. - * - * @param colors the {@link WallpaperColors} of the wallpaper, or {@code null} to use light - * color as default - */ - public void updateColorForLauncherWidgets(@Nullable WallpaperColors colors) { - boolean useLightTextColor = colors == null - || (colors.getColorHints() & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) == 0; - int textColor = mContext.getColor(useLightTextColor - ? android.R.color.white - : android.R.color.black); - int textShadowColor = mContext.getColor(useLightTextColor - ? android.R.color.tertiary_text_dark - : android.R.color.transparent); - // Update the top status bar clock text color. - mStatusBarClock.setTextColor(textColor); - // Update the top status bar icon color. - ViewGroup iconsContainer = mContentView.findViewById(R.id.theme_preview_top_bar_icons); - for (int i = 0; i < iconsContainer.getChildCount(); i++) { - ((ImageView) iconsContainer.getChildAt(i)) - .setImageTintList(ColorStateList.valueOf(textColor)); - } - // Update smart space date color. - mSmartSpaceDate.setTextColor(textColor); - mSmartSpaceDate.setShadowLayer( - mContext.getResources().getDimension( - R.dimen.smartspace_preview_key_ambient_shadow_blur), - /* dx = */ 0, - /* dy = */ 0, - textShadowColor); - - // Update shape app icon name text color. - for (int id : mShapeIconAppNameIds) { - TextView appName = mContentView.findViewById(id); - appName.setTextColor(textColor); - appName.setShadowLayer( - mContext.getResources().getDimension( - R.dimen.preview_theme_app_name_key_ambient_shadow_blur), - /* dx = */ 0, - /* dy = */ 0, - textShadowColor); - } - - mHasWallpaperColorSet = true; - showPreviewIfHasAllConfigSet(); - } - - @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) - @MainThread - public void onResume() { - mTicker = TimeTicker.registerNewReceiver(mContext, this::updateTime); - updateTime(); - } - - @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) - @MainThread - public void onPause() { - if (mContext != null) { - mContext.unregisterReceiver(mTicker); - } - } - - private void showPreviewIfHasAllConfigSet() { - if (mHasPreviewInfoSet && mHasWallpaperColorSet - && mContentView.getVisibility() != View.VISIBLE) { - mContentView.setAlpha(0f); - mContentView.setVisibility(View.VISIBLE); - mContentView.animate().alpha(1f) - .setStartDelay(50) - .setDuration(200) - .setInterpolator(AnimationUtils.loadInterpolator(mContext, - android.R.interpolator.fast_out_linear_in)) - .start(); - } - } - - private void setHeadlineFont(Typeface headlineFont) { - mStatusBarClock.setTypeface(headlineFont); - mSmartSpaceDate.setTypeface(headlineFont); - - // Update font of color/icons section title. - TextView colorIconsSectionTitle = mContentView.findViewById(R.id.color_icons_section_title); - colorIconsSectionTitle.setTypeface(headlineFont); - } - - private void setBodyFont(Typeface bodyFont) { - // Update font of app names. - for (int id : mShapeIconAppNameIds) { - TextView appName = mContentView.findViewById(id); - appName.setTypeface(bodyFont); - } - } - - private void setTopBarIcons(List<Drawable> icons) { - ViewGroup iconsContainer = mContentView.findViewById(R.id.theme_preview_top_bar_icons); - for (int i = 0; i < iconsContainer.getChildCount(); i++) { - int iconIndex = sTopBarIconToPreviewIcon[i]; - if (iconIndex < icons.size()) { - ((ImageView) iconsContainer.getChildAt(i)) - .setImageDrawable(icons.get(iconIndex).getConstantState() - .newDrawable().mutate()); - } else { - iconsContainer.getChildAt(i).setVisibility(View.GONE); - } - } - } - - private void setAppIconShape(List<ShapeAppIcon> appIcons) { - for (int i = 0; i < mShapeAppIconIds.length && i < mShapeIconAppNameIds.length - && i < appIcons.size(); i++) { - ShapeAppIcon icon = appIcons.get(i); - // Set app icon. - ImageView iconView = mContentView.findViewById(mShapeAppIconIds[i]); - iconView.setBackground(icon.getDrawableCopy()); - // Set app name. - TextView appName = mContentView.findViewById(mShapeIconAppNameIds[i]); - appName.setText(icon.getAppName()); - } - } - - private void setColorAndIconsSection(List<Drawable> icons, Drawable shapeDrawable, - int accentColor) { - // Set QS icons and background. - for (int i = 0; i < mColorTileIconIds.length && i < icons.size(); i++) { - Drawable icon = icons.get(mColorTileIconIds[i][1]).getConstantState() - .newDrawable().mutate(); - Drawable bgShape = shapeDrawable.getConstantState().newDrawable(); - bgShape.setTint(accentColor); - - ImageView bg = mContentView.findViewById(mColorTileIds[i]); - bg.setImageDrawable(bgShape); - ImageView fg = mContentView.findViewById(mColorTileIconIds[i][0]); - fg.setImageDrawable(icon); - } - - // Set color for Buttons (CheckBox, RadioButton, and Switch). - ColorStateList tintList = getColorStateList(accentColor); - for (int mColorButtonId : mColorButtonIds) { - CompoundButton button = mContentView.findViewById(mColorButtonId); - button.setButtonTintList(tintList); - if (button instanceof Switch) { - ((Switch) button).setThumbTintList(tintList); - ((Switch) button).setTrackTintList(tintList); - } - } - } - - private void setColorAndIconsBoxRadius(int cornerRadius) { - ((CardView) mContentView.findViewById(R.id.color_icons_section)).setRadius(cornerRadius); - } - - private void setQsbRadius(int cornerRadius) { - View qsb = mContentView.findViewById(R.id.theme_qsb); - if (qsb != null && qsb.getVisibility() == View.VISIBLE) { - if (qsb.getBackground() instanceof GradientDrawable) { - GradientDrawable bg = (GradientDrawable) qsb.getBackground(); - float radius = useRoundedQSB(cornerRadius) - ? (float) qsb.getLayoutParams().height / 2 : cornerRadius; - bg.setCornerRadii(new float[]{ - radius, radius, radius, radius, - radius, radius, radius, radius}); - } - } - } - - private void updateTime() { - Calendar calendar = Calendar.getInstance(TimeZone.getDefault()); - if (mStatusBarClock != null) { - mStatusBarClock.setText(TimeUtils.getFormattedTime(mContext, calendar)); - } - if (mSmartSpaceDate != null) { - String datePattern = - DateFormat.getBestDateTimePattern(Locale.getDefault(), DATE_FORMAT); - mSmartSpaceDate.setText(DateFormat.format(datePattern, calendar)); - } - } - - private boolean useRoundedQSB(int cornerRadius) { - return cornerRadius >= mContext.getResources().getDimensionPixelSize( - R.dimen.roundCornerThreshold); - } - - private ColorStateList getColorStateList(int accentColor) { - int controlGreyColor = - ResourceUtils.getColorAttr(mContext, android.R.attr.textColorTertiary); - return new ColorStateList( - new int[][]{ - new int[]{android.R.attr.state_selected}, - new int[]{android.R.attr.state_checked}, - new int[]{-android.R.attr.state_enabled}, - }, - new int[] { - accentColor, - accentColor, - controlGreyColor - } - ); - } - - /** - * Gets the screen height which does not include the system status bar and bottom navigation - * bar. - */ - private int getDisplayHeight() { - final DisplayMetrics dm = mContext.getResources().getDisplayMetrics(); - return dm.heightPixels; - } - - // The height of top tool bar (R.layout.section_header). - private int getTopToolBarHeight() { - final TypedValue typedValue = new TypedValue(); - return mContext.getTheme().resolveAttribute( - android.R.attr.actionBarSize, typedValue, true) - ? TypedValue.complexToDimensionPixelSize( - typedValue.data, mContext.getResources().getDisplayMetrics()) - : 0; - } - - private int getFullPreviewCardHeight() { - final Resources res = mContext.getResources(); - return getDisplayHeight() - - getTopToolBarHeight() - - res.getDimensionPixelSize(R.dimen.bottom_actions_height) - - res.getDimensionPixelSize(R.dimen.full_preview_page_default_padding_top) - - res.getDimensionPixelSize(R.dimen.full_preview_page_default_padding_bottom); - } -} diff --git a/src/com/android/customization/picker/themedicon/ThemedIconSectionView.java b/src/com/android/customization/picker/themedicon/ThemedIconSectionView.java index 3e03a41c..f83da8c1 100644 --- a/src/com/android/customization/picker/themedicon/ThemedIconSectionView.java +++ b/src/com/android/customization/picker/themedicon/ThemedIconSectionView.java @@ -40,18 +40,16 @@ public class ThemedIconSectionView extends SectionView { protected void onFinishInflate() { super.onFinishInflate(); mSwitchView = findViewById(R.id.themed_icon_toggle); - setOnClickListener(v -> mSwitchView.toggle()); - mSwitchView.setOnCheckedChangeListener((buttonView, isChecked) -> viewActivated(isChecked)); + setOnClickListener(v -> { + mSwitchView.toggle(); + if (mSectionViewListener != null) { + mSectionViewListener.onViewActivated(getContext(), mSwitchView.isChecked()); + } + }); } /** Gets the switch view. */ public Switch getSwitch() { return mSwitchView; } - - private void viewActivated(boolean isChecked) { - if (mSectionViewListener != null) { - mSectionViewListener.onViewActivated(getContext(), isChecked); - } - } } diff --git a/src/com/android/customization/widget/OptionSelectorController.java b/src/com/android/customization/widget/OptionSelectorController.java deleted file mode 100644 index 8c7af00b..00000000 --- a/src/com/android/customization/widget/OptionSelectorController.java +++ /dev/null @@ -1,469 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.widget; - -import static com.android.internal.util.Preconditions.checkNotNull; - -import android.content.Context; -import android.content.res.Resources; -import android.graphics.Rect; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.LayerDrawable; -import android.text.TextUtils; -import android.util.DisplayMetrics; -import android.util.TypedValue; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.WindowManager; -import android.view.accessibility.AccessibilityEvent; -import android.widget.TextView; - -import androidx.annotation.Dimension; -import androidx.annotation.IntDef; -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate; - -import com.android.customization.model.CustomizationManager; -import com.android.customization.model.CustomizationOption; -import com.android.wallpaper.R; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -/** - * Simple controller for a RecyclerView-based widget to hold the options for each customization - * section (eg, thumbnails for themes, clocks, grid sizes). - * To use, just pass the RV that will contain the tiles and the list of {@link CustomizationOption} - * representing each option, and call {@link #initOptions(CustomizationManager)} to populate the - * widget. - */ -public class OptionSelectorController<T extends CustomizationOption<T>> { - - /** - * Interface to be notified when an option is selected by the user. - */ - public interface OptionSelectedListener { - - /** - * Called when an option has been selected (and marked as such in the UI) - */ - void onOptionSelected(CustomizationOption selected); - } - - @IntDef({CheckmarkStyle.NONE, CheckmarkStyle.CORNER, CheckmarkStyle.CENTER, - CheckmarkStyle.CENTER_CHANGE_COLOR_WHEN_NOT_SELECTED}) - public @interface CheckmarkStyle { - int NONE = 0; - int CORNER = 1; - int CENTER = 2; - int CENTER_CHANGE_COLOR_WHEN_NOT_SELECTED = 3; - } - - private final float mLinearLayoutHorizontalDisplayOptionsMax; - - private final RecyclerView mContainer; - private final List<T> mOptions; - private final boolean mUseGrid; - @CheckmarkStyle - private final int mCheckmarkStyle; - - private final Set<OptionSelectedListener> mListeners = new HashSet<>(); - private RecyclerView.Adapter<TileViewHolder> mAdapter; - private T mSelectedOption; - private T mAppliedOption; - - public OptionSelectorController(RecyclerView container, List<T> options) { - this(container, options, true, CheckmarkStyle.CORNER); - } - - public OptionSelectorController(RecyclerView container, List<T> options, - boolean useGrid, @CheckmarkStyle int checkmarkStyle) { - mContainer = container; - mOptions = options; - mUseGrid = useGrid; - mCheckmarkStyle = checkmarkStyle; - TypedValue typedValue = new TypedValue(); - mContainer.getResources().getValue(R.dimen.linear_layout_horizontal_display_options_max, - typedValue, true); - mLinearLayoutHorizontalDisplayOptionsMax = typedValue.getFloat(); - } - - public void addListener(OptionSelectedListener listener) { - mListeners.add(listener); - } - - public void removeListener(OptionSelectedListener listener) { - mListeners.remove(listener); - } - - /** - * Mark the given option as selected - */ - public void setSelectedOption(T option) { - if (!mOptions.contains(option)) { - throw new IllegalArgumentException("Invalid option"); - } - T lastSelectedOption = mSelectedOption; - mSelectedOption = option; - mAdapter.notifyItemChanged(mOptions.indexOf(option)); - if (lastSelectedOption != null) { - mAdapter.notifyItemChanged(mOptions.indexOf(lastSelectedOption)); - } - notifyListeners(); - } - - /** - * @return whether this controller contains the given option - */ - public boolean containsOption(T option) { - return mOptions.contains(option); - } - - /** - * Mark an option as the one which is currently applied on the device. This will result in a - * check being displayed in the lower-right corner of the corresponding ViewHolder. - */ - public void setAppliedOption(T option) { - if (!mOptions.contains(option)) { - throw new IllegalArgumentException("Invalid option"); - } - T lastAppliedOption = mAppliedOption; - mAppliedOption = option; - mAdapter.notifyItemChanged(mOptions.indexOf(option)); - if (lastAppliedOption != null) { - mAdapter.notifyItemChanged(mOptions.indexOf(lastAppliedOption)); - } - } - - /** - * Notify that a given option has changed. - * - * @param option the option that changed - */ - public void optionChanged(T option) { - if (!mOptions.contains(option)) { - throw new IllegalArgumentException("Invalid option"); - } - mAdapter.notifyItemChanged(mOptions.indexOf(option)); - } - - /** - * Initializes the UI for the options passed in the constructor of this class. - */ - public void initOptions(final CustomizationManager<T> manager) { - mContainer.setAccessibilityDelegateCompat( - new OptionSelectorAccessibilityDelegate(mContainer)); - - mAdapter = new RecyclerView.Adapter<TileViewHolder>() { - @Override - public int getItemViewType(int position) { - return mOptions.get(position).getLayoutResId(); - } - - @NonNull - @Override - public TileViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View v = LayoutInflater.from(parent.getContext()).inflate(viewType, parent, false); - // Provide width constraint when a grid layout manager is not use and width is set - // to match parent - if (!mUseGrid - && v.getLayoutParams().width == RecyclerView.LayoutParams.MATCH_PARENT) { - Resources res = mContainer.getContext().getResources(); - RecyclerView.LayoutParams layoutParams = new RecyclerView.LayoutParams( - res.getDimensionPixelSize(R.dimen.option_tile_width), - RecyclerView.LayoutParams.WRAP_CONTENT); - v.setLayoutParams(layoutParams); - } - return new TileViewHolder(v); - } - - @Override - public void onBindViewHolder(@NonNull TileViewHolder holder, int position) { - T option = mOptions.get(position); - if (option.isActive(manager)) { - mAppliedOption = option; - if (mSelectedOption == null) { - mSelectedOption = option; - } - } - if (holder.labelView != null) { - holder.labelView.setText(option.getTitle()); - } - holder.itemView.setActivated(option.equals(mSelectedOption)); - option.bindThumbnailTile(holder.tileView); - holder.itemView.setOnClickListener(view -> setSelectedOption(option)); - - Resources res = mContainer.getContext().getResources(); - if (mCheckmarkStyle == CheckmarkStyle.CORNER && option.equals(mAppliedOption)) { - drawCheckmark(option, holder, - res.getDrawable(R.drawable.check_circle_accent_24dp, - mContainer.getContext().getTheme()), - Gravity.BOTTOM | Gravity.RIGHT, - res.getDimensionPixelSize(R.dimen.check_size), - res.getDimensionPixelOffset(R.dimen.check_offset), true); - } else if (mCheckmarkStyle == CheckmarkStyle.CENTER - && option.equals(mAppliedOption)) { - drawCheckmark(option, holder, - res.getDrawable(R.drawable.check_circle_grey_large, - mContainer.getContext().getTheme()), - Gravity.CENTER, res.getDimensionPixelSize(R.dimen.center_check_size), - 0, true); - } else if (mCheckmarkStyle == CheckmarkStyle.CENTER_CHANGE_COLOR_WHEN_NOT_SELECTED - && option.equals(mAppliedOption)) { - int drawableRes = option.equals(mSelectedOption) - ? R.drawable.check_circle_grey_large - : R.drawable.check_circle_grey_large_not_select; - drawCheckmark(option, holder, - res.getDrawable(drawableRes, - mContainer.getContext().getTheme()), - Gravity.CENTER, res.getDimensionPixelSize(R.dimen.center_check_size), - 0, option.equals(mSelectedOption)); - } else if (option.equals(mAppliedOption)) { - // Initialize with "previewed" description if we don't show checkmark - holder.setContentDescription(mContainer.getContext(), option, - R.string.option_previewed_description); - } else if (mCheckmarkStyle != CheckmarkStyle.NONE) { - if (mCheckmarkStyle == CheckmarkStyle.CENTER_CHANGE_COLOR_WHEN_NOT_SELECTED) { - if (option.equals(mSelectedOption)) { - holder.setContentDescription(mContainer.getContext(), option, - R.string.option_previewed_description); - } else { - holder.setContentDescription(mContainer.getContext(), option, - R.string.option_change_applied_previewed_description); - } - } - - holder.tileView.setForeground(null); - } - } - - @Override - public int getItemCount() { - return mOptions.size(); - } - - private void drawCheckmark(CustomizationOption<?> option, TileViewHolder holder, - Drawable checkmark, int gravity, @Dimension int checkSize, - @Dimension int checkOffset, boolean currentlyPreviewed) { - Drawable frame = holder.tileView.getForeground(); - Drawable[] layers = {frame, checkmark}; - if (frame == null) { - layers = new Drawable[]{checkmark}; - } - LayerDrawable checkedFrame = new LayerDrawable(layers); - - // Position according to the given gravity and offset - int idx = layers.length - 1; - checkedFrame.setLayerGravity(idx, gravity); - checkedFrame.setLayerWidth(idx, checkSize); - checkedFrame.setLayerHeight(idx, checkSize); - checkedFrame.setLayerInsetBottom(idx, checkOffset); - checkedFrame.setLayerInsetRight(idx, checkOffset); - holder.tileView.setForeground(checkedFrame); - - // Initialize the currently applied option - if (currentlyPreviewed) { - holder.setContentDescription(mContainer.getContext(), option, - R.string.option_applied_previewed_description); - } else { - holder.setContentDescription(mContainer.getContext(), option, - R.string.option_applied_description); - } - } - }; - - Resources res = mContainer.getContext().getResources(); - mContainer.setAdapter(mAdapter); - final DisplayMetrics metrics = new DisplayMetrics(); - mContainer.getContext().getSystemService(WindowManager.class) - .getDefaultDisplay().getMetrics(metrics); - final boolean hasDecoration = mContainer.getItemDecorationCount() != 0; - - if (mUseGrid) { - int numColumns = res.getInteger(R.integer.options_grid_num_columns); - GridLayoutManager gridLayoutManager = new GridLayoutManager(mContainer.getContext(), - numColumns); - mContainer.setLayoutManager(gridLayoutManager); - } else { - final int padding = res.getDimensionPixelSize( - R.dimen.option_tile_linear_padding_horizontal); - final int widthPerItem = res.getDimensionPixelSize(R.dimen.option_tile_width) + ( - hasDecoration ? 0 : 2 * padding); - mContainer.setLayoutManager(new LinearLayoutManager(mContainer.getContext(), - LinearLayoutManager.HORIZONTAL, false)); - mContainer.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); - int availableWidth = metrics.widthPixels; - int extraSpace = availableWidth - mContainer.getMeasuredWidth(); - if (extraSpace >= 0) { - mContainer.setOverScrollMode(View.OVER_SCROLL_NEVER); - } - - if (mAdapter.getItemCount() >= mLinearLayoutHorizontalDisplayOptionsMax) { - int spaceBetweenItems = availableWidth - - Math.round(widthPerItem * mLinearLayoutHorizontalDisplayOptionsMax) - - mContainer.getPaddingLeft(); - int itemEndMargin = - spaceBetweenItems / (int) mLinearLayoutHorizontalDisplayOptionsMax; - itemEndMargin = Math.max(itemEndMargin, res.getDimensionPixelOffset( - R.dimen.option_tile_margin_horizontal)); - mContainer.addItemDecoration(new ItemEndHorizontalSpaceItemDecoration( - mContainer.getContext(), itemEndMargin)); - return; - } - - int spaceBetweenItems = extraSpace / (mAdapter.getItemCount() + 1); - int itemSideMargin = spaceBetweenItems / 2; - mContainer.addItemDecoration(new HorizontalSpacerItemDecoration(itemSideMargin)); - } - } - - public void resetOptions(List<T> options) { - mOptions.clear(); - mOptions.addAll(options); - mAdapter.notifyDataSetChanged(); - } - - private void notifyListeners() { - if (mListeners.isEmpty()) { - return; - } - T option = mSelectedOption; - Set<OptionSelectedListener> iterableListeners = new HashSet<>(mListeners); - for (OptionSelectedListener listener : iterableListeners) { - listener.onOptionSelected(option); - } - } - - private static class TileViewHolder extends RecyclerView.ViewHolder { - TextView labelView; - View tileView; - CharSequence title; - - TileViewHolder(@NonNull View itemView) { - super(itemView); - labelView = itemView.findViewById(R.id.option_label); - tileView = itemView.findViewById(R.id.option_tile); - title = null; - } - - /** - * Set the content description for this holder using the given string id. - * If the option does not have a label, the description will be set on the tile view. - * - * @param context The view's context - * @param option The customization option - * @param id Resource ID of the string to use for the content description - */ - public void setContentDescription(Context context, CustomizationOption<?> option, int id) { - title = option.getTitle(); - if (TextUtils.isEmpty(title) && tileView != null) { - title = tileView.getContentDescription(); - } - - CharSequence cd = context.getString(id, title); - if (labelView != null && !TextUtils.isEmpty(labelView.getText())) { - labelView.setAccessibilityPaneTitle(cd); - labelView.setContentDescription(cd); - } else if (tileView != null) { - tileView.setAccessibilityPaneTitle(cd); - tileView.setContentDescription(cd); - } - } - - public void resetContentDescription() { - if (labelView != null && !TextUtils.isEmpty(labelView.getText())) { - labelView.setAccessibilityPaneTitle(title); - labelView.setContentDescription(title); - } else if (tileView != null) { - tileView.setAccessibilityPaneTitle(title); - tileView.setContentDescription(title); - } - } - } - - private class OptionSelectorAccessibilityDelegate extends RecyclerViewAccessibilityDelegate { - - OptionSelectorAccessibilityDelegate(RecyclerView recyclerView) { - super(recyclerView); - } - - @Override - public boolean onRequestSendAccessibilityEvent( - ViewGroup host, View child, AccessibilityEvent event) { - - // Apply this workaround to horizontal recyclerview only, - // since the symptom is TalkBack will lose focus when navigating horizontal list items. - if (mContainer.getLayoutManager() != null - && mContainer.getLayoutManager().canScrollHorizontally() - && event.getEventType() == AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED) { - int itemPos = mContainer.getChildLayoutPosition(child); - int itemWidth = mContainer.getContext().getResources() - .getDimensionPixelOffset(R.dimen.option_tile_width); - int itemMarginHorizontal = mContainer.getContext().getResources() - .getDimensionPixelOffset(R.dimen.option_tile_margin_horizontal) * 2; - int scrollOffset = itemWidth + itemMarginHorizontal; - - // Make focusing item's previous/next item totally visible when changing focus, - // ensure TalkBack won't lose focus when recyclerview scrolling. - if (itemPos >= ((LinearLayoutManager) mContainer.getLayoutManager()) - .findLastCompletelyVisibleItemPosition()) { - mContainer.scrollBy(scrollOffset, 0); - } else if (itemPos <= ((LinearLayoutManager) mContainer.getLayoutManager()) - .findFirstCompletelyVisibleItemPosition() && itemPos != 0) { - mContainer.scrollBy(-scrollOffset, 0); - } - } - return super.onRequestSendAccessibilityEvent(host, child, event); - } - } - - /** Custom ItemDecorator to add specific spacing between items in the list. */ - private static final class ItemEndHorizontalSpaceItemDecoration - extends RecyclerView.ItemDecoration { - private final int mHorizontalSpacePx; - private final boolean mDirectionLTR; - - private ItemEndHorizontalSpaceItemDecoration(Context context, int horizontalSpacePx) { - mDirectionLTR = context.getResources().getConfiguration().getLayoutDirection() - == View.LAYOUT_DIRECTION_LTR; - mHorizontalSpacePx = horizontalSpacePx; - } - - @Override - public void getItemOffsets(Rect outRect, View view, RecyclerView recyclerView, - RecyclerView.State state) { - if (recyclerView.getAdapter() == null) { - return; - } - - if (recyclerView.getChildAdapterPosition(view) - != checkNotNull(recyclerView.getAdapter()).getItemCount() - 1) { - // Don't add spacing behind the last item - if (mDirectionLTR) { - outRect.right = mHorizontalSpacePx; - } else { - outRect.left = mHorizontalSpacePx; - } - } - } - } -} diff --git a/src_override/com/android/wallpaper/module/AppModule.kt b/src_override/com/android/wallpaper/module/AppModule.kt index 95da101a..0d80e228 100644 --- a/src_override/com/android/wallpaper/module/AppModule.kt +++ b/src_override/com/android/wallpaper/module/AppModule.kt @@ -16,9 +16,16 @@ package com.android.wallpaper.module import android.content.Context +import com.android.customization.model.color.ColorCustomizationManager +import com.android.customization.model.theme.OverlayManagerCompat import com.android.customization.module.CustomizationInjector import com.android.customization.module.DefaultCustomizationPreferences import com.android.customization.module.ThemePickerInjector +import com.android.customization.module.logging.ThemesUserEventLogger +import com.android.customization.module.logging.ThemesUserEventLoggerImpl +import com.android.wallpaper.module.logging.UserEventLogger +import com.android.wallpaper.util.converter.DefaultWallpaperModelFactory +import com.android.wallpaper.util.converter.WallpaperModelFactory import dagger.Binds import dagger.Module import dagger.Provides @@ -32,6 +39,20 @@ import javax.inject.Singleton abstract class AppModule { @Binds @Singleton abstract fun bindInjector(impl: ThemePickerInjector): CustomizationInjector + @Binds + @Singleton + abstract fun bindUserEventLogger(impl: ThemesUserEventLoggerImpl): UserEventLogger + + @Binds + @Singleton + abstract fun bindThemesUserEventLogger(impl: ThemesUserEventLoggerImpl): ThemesUserEventLogger + + @Binds + @Singleton + abstract fun bindWallpaperModelFactory( + impl: DefaultWallpaperModelFactory + ): WallpaperModelFactory + companion object { @Provides @Singleton @@ -40,5 +61,13 @@ abstract class AppModule { ): WallpaperPreferences { return DefaultCustomizationPreferences(context) } + + @Provides + @Singleton + fun provideColorCustomizationManager( + @ApplicationContext context: Context + ): ColorCustomizationManager { + return ColorCustomizationManager.getInstance(context, OverlayManagerCompat(context)) + } } } diff --git a/src_override/com/android/wallpaper/picker/di/modules/InteractorModule.kt b/src_override/com/android/wallpaper/picker/di/modules/InteractorModule.kt new file mode 100644 index 00000000..81edb2fa --- /dev/null +++ b/src_override/com/android/wallpaper/picker/di/modules/InteractorModule.kt @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.wallpaper.picker.di.modules + +import android.text.TextUtils +import com.android.customization.model.color.ColorCustomizationManager +import com.android.customization.model.color.ColorOptionsProvider.COLOR_SOURCE_PRESET +import com.android.wallpaper.picker.customization.data.repository.WallpaperRepository +import com.android.wallpaper.picker.customization.domain.interactor.WallpaperInteractor +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +/** This class provides the singleton scoped interactors for theme picker. */ +@InstallIn(SingletonComponent::class) +@Module +internal object InteractorModule { + + @Provides + @Singleton + fun provideWallpaperInteractor( + wallpaperRepository: WallpaperRepository, + colorCustomizationManager: ColorCustomizationManager, + ): WallpaperInteractor { + return WallpaperInteractor(wallpaperRepository) { + TextUtils.equals(colorCustomizationManager.currentColorSource, COLOR_SOURCE_PRESET) + } + } +} diff --git a/tests/Android.bp b/tests/Android.bp index 798d9109..93851bd2 100644 --- a/tests/Android.bp +++ b/tests/Android.bp @@ -21,17 +21,43 @@ package { default_applicable_licenses: ["Android-Apache-2.0"], } +filegroup { + name: "ThemePickerTests_srcs", + + visibility: [ + "//visibility:public" + ], + + srcs: [ + "src/**/*.java", + "src/**/*.kt", + ], +} + android_test { name: "ThemePickerTests", defaults: ["ThemePicker_defaults"], srcs: [ - "src/**/*.java", - "src/**/*.kt", + ":ThemePickerTests_srcs", + ":WallpaperPicker2Tests_srcs", + "module/src/com/android/customization/TestModule.kt", ], + exclude_srcs: [":ThemePicker_src_prod"], static_libs: [ "WallpaperPicker2TestLib", + "WallpaperPicker2TestRunner", + "ThemePickerTestLib", + "androidx.test.espresso.core", + "androidx.test.espresso.contrib", + "androidx.test.espresso.intents", + "androidx.test.ext.junit", "androidx.test.rules", + "hamcrest-library", + "hamcrest", + "hilt_android", + "hilt_android_testing", + "mockito-target-minus-junit4", "junit", "kotlinx_coroutines_test", "truth", diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml index 2fd6b3f3..f1c0cf2f 100644 --- a/tests/AndroidManifest.xml +++ b/tests/AndroidManifest.xml @@ -18,9 +18,17 @@ <application> <uses-library android:name="android.test.runner" /> + + <activity android:name="com.android.wallpaper.picker.PreviewActivity" + android:resizeableActivity="false"> + </activity> + + <activity android:name="com.android.wallpaper.picker.preview.ui.WallpaperPreviewActivity" + android:resizeableActivity="false"> + </activity> </application> - <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner" + <instrumentation android:name="com.android.wallpaper.CustomTestRunner" android:targetPackage="com.android.wallpaper" android:label="Tests for ThemePicker" /> diff --git a/tests/AndroidTest.xml b/tests/AndroidTest.xml index be2119b7..18e95ef1 100644 --- a/tests/AndroidTest.xml +++ b/tests/AndroidTest.xml @@ -22,7 +22,7 @@ <option name="test-tag" value="ThemePickerTests" /> <test class="com.android.tradefed.testtype.AndroidJUnitTest" > <option name="package" value="com.android.wallpaper" /> - <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" /> + <option name="runner" value="com.android.wallpaper.CustomTestRunner" /> <option name="hidden-api-checks" value="false"/> </test> </configuration> diff --git a/tests/common/Android.bp b/tests/common/Android.bp index dd237233..9215ba6a 100644 --- a/tests/common/Android.bp +++ b/tests/common/Android.bp @@ -23,10 +23,10 @@ package { android_library { name: "ThemePickerTestLib", - defaults: ["ThemePicker_defaults"], + defaults: ["ThemePicker_common_defaults"], srcs: [ - "src/com/android/customization/testing/**/*.java", - "src/com/android/customization/testing/**/*.kt", + "src/**/*.java", + "src/**/*.kt", ], static_libs: [ "WallpaperPicker2TestLib", diff --git a/tests/common/src/com/android/customization/module/logging/TestThemesUserEventLogger.kt b/tests/common/src/com/android/customization/module/logging/TestThemesUserEventLogger.kt new file mode 100644 index 00000000..8e9dacdb --- /dev/null +++ b/tests/common/src/com/android/customization/module/logging/TestThemesUserEventLogger.kt @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.customization.module.logging + +import android.stats.style.StyleEnums +import com.android.customization.model.grid.GridOption +import com.android.customization.module.logging.ThemesUserEventLogger.ClockSize +import com.android.customization.module.logging.ThemesUserEventLogger.ColorSource +import com.android.wallpaper.module.logging.TestUserEventLogger +import javax.inject.Inject +import javax.inject.Singleton + +/** Test implementation of [ThemesUserEventLogger]. */ +@Singleton +class TestThemesUserEventLogger @Inject constructor() : + TestUserEventLogger(), ThemesUserEventLogger { + @ClockSize private var clockSize: Int = StyleEnums.CLOCK_SIZE_UNSPECIFIED + @ColorSource + var themeColorSource: Int = StyleEnums.COLOR_SOURCE_UNSPECIFIED + private set + var themeColorStyle: Int = -1 + private set + var themeSeedColor: Int = -1 + private set + + override fun logThemeColorApplied(@ColorSource source: Int, style: Int, seedColor: Int) { + this.themeColorSource = source + this.themeColorStyle = style + this.themeSeedColor = seedColor + } + + override fun logGridApplied(grid: GridOption) {} + + override fun logClockApplied(clockId: String) {} + + override fun logClockColorApplied(seedColor: Int) {} + + override fun logClockSizeApplied(@ClockSize clockSize: Int) { + this.clockSize = clockSize + } + + override fun logThemedIconApplied(useThemeIcon: Boolean) {} + + override fun logLockScreenNotificationApplied(showLockScreenNotifications: Boolean) {} + + override fun logShortcutApplied(shortcut: String, shortcutSlotId: String) {} + + override fun logDarkThemeApplied(useDarkTheme: Boolean) {} + + @ClockSize + fun getLoggedClockSize(): Int { + return clockSize + } +} diff --git a/tests/common/src/com/android/customization/testing/TestCustomizationInjector.kt b/tests/common/src/com/android/customization/testing/TestCustomizationInjector.kt new file mode 100644 index 00000000..b0ffcb6b --- /dev/null +++ b/tests/common/src/com/android/customization/testing/TestCustomizationInjector.kt @@ -0,0 +1,104 @@ +package com.android.customization.testing + +import android.app.WallpaperColors +import android.content.Context +import android.content.res.Resources +import androidx.activity.ComponentActivity +import com.android.customization.model.color.ThemedWallpaperColorResources +import com.android.customization.model.color.WallpaperColorResources +import com.android.customization.module.CustomizationInjector +import com.android.customization.module.CustomizationPreferences +import com.android.customization.module.logging.ThemesUserEventLogger +import com.android.customization.picker.clock.domain.interactor.ClockPickerInteractor +import com.android.customization.picker.clock.ui.view.ClockViewFactory +import com.android.customization.picker.clock.ui.viewmodel.ClockCarouselViewModel +import com.android.customization.picker.clock.ui.viewmodel.ClockSettingsViewModel +import com.android.customization.picker.color.domain.interactor.ColorPickerInteractor +import com.android.customization.picker.color.ui.viewmodel.ColorPickerViewModel +import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordancePickerInteractor +import com.android.systemui.shared.clocks.ClockRegistry +import com.android.wallpaper.module.logging.UserEventLogger +import com.android.wallpaper.picker.customization.data.repository.WallpaperColorsRepository +import com.android.wallpaper.testing.TestInjector +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +open class TestCustomizationInjector +@Inject +constructor( + private val customPrefs: TestDefaultCustomizationPreferences, + private val themesUserEventLogger: ThemesUserEventLogger +) : TestInjector(themesUserEventLogger), CustomizationInjector { + ///////////////// + // CustomizationInjector implementations + ///////////////// + + override fun getCustomizationPreferences(context: Context): CustomizationPreferences { + return customPrefs + } + + override fun getKeyguardQuickAffordancePickerInteractor( + context: Context + ): KeyguardQuickAffordancePickerInteractor { + throw UnsupportedOperationException("not implemented") + } + + override fun getClockRegistry(context: Context): ClockRegistry? { + throw UnsupportedOperationException("not implemented") + } + + override fun getClockPickerInteractor(context: Context): ClockPickerInteractor { + throw UnsupportedOperationException("not implemented") + } + + override fun getWallpaperColorResources( + wallpaperColors: WallpaperColors, + context: Context + ): WallpaperColorResources { + return ThemedWallpaperColorResources(wallpaperColors, context) + } + + override fun getColorPickerInteractor( + context: Context, + wallpaperColorsRepository: WallpaperColorsRepository, + ): ColorPickerInteractor { + throw UnsupportedOperationException("not implemented") + } + + override fun getColorPickerViewModelFactory( + context: Context, + wallpaperColorsRepository: WallpaperColorsRepository, + ): ColorPickerViewModel.Factory { + throw UnsupportedOperationException("not implemented") + } + + override fun getClockCarouselViewModelFactory( + interactor: ClockPickerInteractor, + clockViewFactory: ClockViewFactory, + resources: Resources, + logger: ThemesUserEventLogger, + ): ClockCarouselViewModel.Factory { + throw UnsupportedOperationException("not implemented") + } + + override fun getClockViewFactory(activity: ComponentActivity): ClockViewFactory { + throw UnsupportedOperationException("not implemented") + } + + override fun getClockSettingsViewModelFactory( + context: Context, + wallpaperColorsRepository: WallpaperColorsRepository, + clockViewFactory: ClockViewFactory, + ): ClockSettingsViewModel.Factory { + throw UnsupportedOperationException("not implemented") + } + + ///////////////// + // TestInjector overrides + ///////////////// + + override fun getUserEventLogger(context: Context): UserEventLogger { + return themesUserEventLogger + } +} diff --git a/tests/common/src/com/android/customization/testing/TestDefaultCustomizationPreferences.java b/tests/common/src/com/android/customization/testing/TestDefaultCustomizationPreferences.java deleted file mode 100644 index 81890f0f..00000000 --- a/tests/common/src/com/android/customization/testing/TestDefaultCustomizationPreferences.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.testing; - -import android.content.Context; - -import com.android.customization.module.DefaultCustomizationPreferences; - -import java.util.HashSet; -import java.util.Set; - -/** - * Test implementation of {@link DefaultCustomizationPreferences}. - */ -public class TestDefaultCustomizationPreferences extends DefaultCustomizationPreferences { - - private String mCustomThemes; - private final Set<String> mTabVisited = new HashSet<>(); - - public TestDefaultCustomizationPreferences(Context context) { - super(context); - } - - @Override - public String getSerializedCustomThemes() { - return mCustomThemes; - } - - @Override - public void storeCustomThemes(String serializedCustomThemes) { - mCustomThemes = serializedCustomThemes; - } - - @Override - public boolean getTabVisited(String id) { - return mTabVisited.contains(id); - } - - @Override - public void setTabVisited(String id) { - mTabVisited.add(id); - } -} diff --git a/tests/common/src/com/android/customization/testing/TestDefaultCustomizationPreferences.kt b/tests/common/src/com/android/customization/testing/TestDefaultCustomizationPreferences.kt new file mode 100644 index 00000000..10fe5ac8 --- /dev/null +++ b/tests/common/src/com/android/customization/testing/TestDefaultCustomizationPreferences.kt @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.customization.testing + +import com.android.customization.module.CustomizationPreferences +import com.android.wallpaper.testing.TestWallpaperPreferences +import javax.inject.Inject +import javax.inject.Singleton + +/** Test implementation of [CustomizationPreferences]. */ +@Singleton +open class TestDefaultCustomizationPreferences @Inject constructor() : + TestWallpaperPreferences(), CustomizationPreferences { + + private var customThemes: String? = null + private val tabVisited: MutableSet<String> = HashSet() + private var themedIconEnabled = false + + override fun getSerializedCustomThemes(): String? { + return customThemes + } + + override fun storeCustomThemes(serializedCustomThemes: String) { + customThemes = serializedCustomThemes + } + + override fun getTabVisited(id: String): Boolean { + return tabVisited.contains(id) + } + + override fun setTabVisited(id: String) { + tabVisited.add(id) + } + + override fun getThemedIconEnabled(): Boolean { + return themedIconEnabled + } + + override fun setThemedIconEnabled(enabled: Boolean) { + themedIconEnabled = enabled + } +} diff --git a/tests/common/src/com/android/customization/testing/TestDrawableLayerResolver.java b/tests/common/src/com/android/customization/testing/TestDrawableLayerResolver.java deleted file mode 100644 index 8b16299e..00000000 --- a/tests/common/src/com/android/customization/testing/TestDrawableLayerResolver.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.testing; - -import android.graphics.drawable.Drawable; -import android.graphics.drawable.LayerDrawable; - -import com.android.wallpaper.module.DrawableLayerResolver; - -/** - * Test implementation of {@link DrawableLayerResolver}. - */ -public class TestDrawableLayerResolver implements DrawableLayerResolver { - @Override - public Drawable resolveLayer(LayerDrawable layerDrawable) { - return layerDrawable.getDrawable(0); - } -} diff --git a/tests/common/src/com/android/customization/testing/TestPackageStatusNotifier.java b/tests/common/src/com/android/customization/testing/TestPackageStatusNotifier.java deleted file mode 100644 index 2aadae82..00000000 --- a/tests/common/src/com/android/customization/testing/TestPackageStatusNotifier.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.testing; - -import com.android.wallpaper.module.PackageStatusNotifier; - -/** - * Test implementation of {@link PackageStatusNotifier}. - */ -public class TestPackageStatusNotifier implements PackageStatusNotifier { - @Override - public void addListener(Listener listener, String action) { - // Do nothing - } - - @Override - public void removeListener(Listener listener) { - // Do nothing - } -} diff --git a/tests/common/src/com/android/customization/testing/TestThemeManager.java b/tests/common/src/com/android/customization/testing/TestThemeManager.java deleted file mode 100644 index 5175b247..00000000 --- a/tests/common/src/com/android/customization/testing/TestThemeManager.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.testing; - -import androidx.fragment.app.FragmentActivity; - -import com.android.customization.model.theme.OverlayManagerCompat; -import com.android.customization.model.theme.ThemeBundleProvider; -import com.android.customization.model.theme.ThemeManager; -import com.android.customization.module.ThemesUserEventLogger; - -/** - * Test implementation of {@link ThemeManager}. - */ -public class TestThemeManager extends ThemeManager { - - private static boolean sIsAvailable; - - public TestThemeManager( - ThemeBundleProvider provider, - FragmentActivity activity, - OverlayManagerCompat overlayManagerCompat, - ThemesUserEventLogger logger) { - super(provider, activity, overlayManagerCompat, logger); - } - - @Override - public boolean isAvailable() { - return sIsAvailable; - } - - public static void setAvailable(boolean available) { - sIsAvailable = available; - } -} diff --git a/tests/common/src/com/android/customization/testing/TestThemesUserEventLogger.java b/tests/common/src/com/android/customization/testing/TestThemesUserEventLogger.java deleted file mode 100644 index 22a5b94d..00000000 --- a/tests/common/src/com/android/customization/testing/TestThemesUserEventLogger.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.testing; - -import com.android.customization.model.color.ColorOption; -import com.android.customization.model.grid.GridOption; -import com.android.customization.model.theme.ThemeBundle; -import com.android.customization.module.ThemesUserEventLogger; -import com.android.wallpaper.testing.TestUserEventLogger; - -/** - * Test implementation of {@link ThemesUserEventLogger}. - */ -public class TestThemesUserEventLogger extends TestUserEventLogger - implements ThemesUserEventLogger { - @Override - public void logThemeSelected(ThemeBundle theme, boolean isCustomTheme) { - // Do nothing. - } - - @Override - public void logThemeApplied(ThemeBundle theme, boolean isCustomTheme) { - // Do nothing. - } - - @Override - public void logColorApplied(int action, ColorOption colorOption) { - // Do nothing. - } - - @Override - public void logGridSelected(GridOption grid) { - // Do nothing. - } - - @Override - public void logGridApplied(GridOption grid) { - // Do nothing. - } -} diff --git a/tests/module/src/com/android/customization/TestModule.kt b/tests/module/src/com/android/customization/TestModule.kt new file mode 100644 index 00000000..1ad63a91 --- /dev/null +++ b/tests/module/src/com/android/customization/TestModule.kt @@ -0,0 +1,83 @@ +package com.android.customization + +import androidx.test.core.app.ApplicationProvider +import com.android.customization.model.color.ColorCustomizationManager +import com.android.customization.model.theme.OverlayManagerCompat +import com.android.customization.module.CustomizationInjector +import com.android.customization.module.CustomizationPreferences +import com.android.customization.module.logging.TestThemesUserEventLogger +import com.android.customization.module.logging.ThemesUserEventLogger +import com.android.customization.testing.TestCustomizationInjector +import com.android.customization.testing.TestDefaultCustomizationPreferences +import com.android.wallpaper.module.AppModule +import com.android.wallpaper.module.Injector +import com.android.wallpaper.module.WallpaperPreferences +import com.android.wallpaper.module.logging.TestUserEventLogger +import com.android.wallpaper.module.logging.UserEventLogger +import com.android.wallpaper.testing.TestInjector +import com.android.wallpaper.testing.TestWallpaperPreferences +import com.android.wallpaper.util.converter.DefaultWallpaperModelFactory +import com.android.wallpaper.util.converter.WallpaperModelFactory +import dagger.Binds +import dagger.Module +import dagger.Provides +import dagger.hilt.components.SingletonComponent +import dagger.hilt.testing.TestInstallIn +import javax.inject.Singleton + +@Module +@TestInstallIn(components = [SingletonComponent::class], replaces = [AppModule::class]) +abstract class TestModule { + //// WallpaperPicker2 prod + + @Binds @Singleton abstract fun bindInjector(impl: TestCustomizationInjector): Injector + + @Binds @Singleton abstract fun bindUserEventLogger(impl: TestUserEventLogger): UserEventLogger + + @Binds + @Singleton + abstract fun bindThemesUserEventLogger(impl: TestThemesUserEventLogger): ThemesUserEventLogger + + @Binds + @Singleton + abstract fun bindWallpaperPrefs(impl: TestDefaultCustomizationPreferences): WallpaperPreferences + + //// WallpaperPicker2 test + + @Binds @Singleton abstract fun bindTestInjector(impl: TestCustomizationInjector): TestInjector + + @Binds + @Singleton + abstract fun bindTestWallpaperPrefs( + impl: TestDefaultCustomizationPreferences + ): TestWallpaperPreferences + + //// ThemePicker prod + + @Binds + @Singleton + abstract fun bindCustomizationInjector(impl: TestCustomizationInjector): CustomizationInjector + + @Binds + @Singleton + abstract fun bindCustomizationPrefs( + impl: TestDefaultCustomizationPreferences + ): CustomizationPreferences + + @Binds + @Singleton + abstract fun bindWallpaperModelFactory( + impl: DefaultWallpaperModelFactory + ): WallpaperModelFactory + + companion object { + @Provides + @Singleton + fun provideColorCustomizationManager(): ColorCustomizationManager { + return ColorCustomizationManager.getInstance( + ApplicationProvider.getApplicationContext(), + OverlayManagerCompat(ApplicationProvider.getApplicationContext()) + ) + } + } +} diff --git a/tests/robotests/Android.bp b/tests/robotests/Android.bp index 645b4527..4c675917 100644 --- a/tests/robotests/Android.bp +++ b/tests/robotests/Android.bp @@ -3,22 +3,30 @@ package { default_applicable_licenses: ["Android-Apache-2.0"], } +android_app { + name: "ThemePickerShell", + defaults: ["ThemePicker_defaults"], + platform_apis: true, + static_libs: ["ThemePickerTestLib"], +} + android_robolectric_test { name: "ThemePickerRoboTests", srcs: [ "src/**/*.java", "src/**/*.kt", ], - // TODO(b/291104503) Enable this test - exclude_srcs: ["src/com/android/customization/model/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModelTest.kt"], java_resource_dirs: ["config"], + + // Do not add picker-related dependencies here. Add them to ThemePickerShell + // instead. static_libs: [ - "WallpaperPicker2TestLib", "androidx.test.rules", "junit", "kotlinx_coroutines_test", "truth", ], + libs: [ "androidx.test.core", "androidx.test.runner", @@ -26,5 +34,5 @@ android_robolectric_test { upstream: true, - instrumentation_for: "ThemePicker", + instrumentation_for: "ThemePickerShell", } diff --git a/tests/robotests/res/values/overlayable_icons_test.xml b/tests/robotests/res/values/overlayable_icons_test.xml deleted file mode 100644 index 73cffe17..00000000 --- a/tests/robotests/res/values/overlayable_icons_test.xml +++ /dev/null @@ -1,34 +0,0 @@ -<!-- - Copyright (C) 2019 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> - <!-- overlayable_icons references all of the drawables in this package - that are being overlayed by resource overlays. If you remove/rename - any of these resources, you must also change the resource overlay icons.--> - <array name="overlayable_icons"> - <item>@drawable/ic_add_24px</item> - <item>@drawable/ic_close_24px</item> - <item>@drawable/ic_colorize_24px</item> - <item>@drawable/ic_delete_24px</item> - <item>@drawable/ic_font</item> - <item>@drawable/ic_nav_clock</item> - <item>@drawable/ic_nav_grid</item> - <item>@drawable/ic_nav_theme</item> - <item>@drawable/ic_nav_wallpaper</item> - <item>@drawable/ic_shapes_24px</item> - <item>@drawable/ic_tune</item> - <item>@drawable/ic_wifi_24px</item> - </array> -</resources> diff --git a/tests/robotests/src/com/android/customization/model/color/ColorCustomizationManagerTest.kt b/tests/robotests/src/com/android/customization/model/color/ColorCustomizationManagerTest.kt index 80d01c60..e9f46831 100644 --- a/tests/robotests/src/com/android/customization/model/color/ColorCustomizationManagerTest.kt +++ b/tests/robotests/src/com/android/customization/model/color/ColorCustomizationManagerTest.kt @@ -16,7 +16,9 @@ package com.android.customization.model.color import android.app.WallpaperColors +import android.content.Context import android.graphics.Color +import androidx.test.core.app.ApplicationProvider import com.android.customization.model.CustomizationManager import com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_COLOR import com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_SYSTEM_PALETTE @@ -25,25 +27,23 @@ import com.android.customization.model.color.ColorOptionsProvider.COLOR_SOURCE_P import com.android.customization.model.color.ColorOptionsProvider.OVERLAY_COLOR_BOTH import com.android.customization.model.color.ColorOptionsProvider.OVERLAY_COLOR_INDEX import com.android.customization.model.color.ColorOptionsProvider.OVERLAY_COLOR_SOURCE +import com.android.customization.model.color.ColorOptionsProvider.OVERLAY_THEME_STYLE import com.android.customization.model.theme.OverlayManagerCompat +import com.android.customization.picker.color.shared.model.ColorType import com.android.systemui.monet.Style import com.google.common.truth.Truth.assertThat import org.json.JSONObject import org.junit.Before -import org.junit.Ignore import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith -import org.mockito.ArgumentMatchers.anyInt import org.mockito.Mock import org.mockito.MockitoAnnotations import org.mockito.junit.MockitoJUnit import org.mockito.junit.MockitoRule import org.robolectric.RobolectricTestRunner -import org.robolectric.RuntimeEnvironment /** Tests of {@link ColorCustomizationManager}. */ -// TODO(b/222433744): most of these tests are failing due to the manager apk missing in the image @RunWith(RobolectricTestRunner::class) class ColorCustomizationManagerTest { @@ -57,12 +57,11 @@ class ColorCustomizationManagerTest { @Before fun setUp() { MockitoAnnotations.initMocks(this) - val application = RuntimeEnvironment.application + val application = ApplicationProvider.getApplicationContext<Context>() manager = ColorCustomizationManager(provider, application.contentResolver, mockOM) } @Test - @Ignore("b/260925899") fun testParseSettings() { val source = COLOR_SOURCE_HOME val style = Style.SPRITZ @@ -73,6 +72,7 @@ class ColorCustomizationManagerTest { OVERLAY_CATEGORY_SYSTEM_PALETTE to someColor, OVERLAY_CATEGORY_COLOR to someOtherColor, OVERLAY_COLOR_SOURCE to source, + OVERLAY_THEME_STYLE to style.toString(), ColorOption.TIMESTAMP_FIELD to "12345" ) val json = JSONObject(settings).toString() @@ -80,114 +80,119 @@ class ColorCustomizationManagerTest { manager.parseSettings(json) assertThat(manager.currentColorSource).isEqualTo(source) - assertThat(manager.currentStyle).isEqualTo(style) + assertThat(manager.currentStyle).isEqualTo(style.toString()) assertThat(manager.currentOverlays.size).isEqualTo(2) - assertThat(manager.currentOverlays.get(OVERLAY_CATEGORY_COLOR)).isEqualTo(someOtherColor) - assertThat(manager.currentOverlays.get(OVERLAY_CATEGORY_SYSTEM_PALETTE)) - .isEqualTo(someColor) + assertThat(manager.currentOverlays[OVERLAY_CATEGORY_COLOR]).isEqualTo(someOtherColor) + assertThat(manager.currentOverlays[OVERLAY_CATEGORY_SYSTEM_PALETTE]).isEqualTo(someColor) } @Test - @Ignore("b/260925899") - fun apply_ColorBundle_index() { - testApplyColorBundle(1, "1") - testApplyColorBundle(2, "2") - testApplyColorBundle(3, "3") - testApplyColorBundle(4, "4") + fun apply_PresetColorOption_index() { + testApplyPresetColorOption(1, "1") + testApplyPresetColorOption(2, "2") + testApplyPresetColorOption(3, "3") + testApplyPresetColorOption(4, "4") } - private fun testApplyColorBundle(index: Int, value: String) { + private fun testApplyPresetColorOption(index: Int, value: String) { manager.apply( - getColorBundle(index), + getPresetColorOption(index), object : CustomizationManager.Callback { override fun onSuccess() {} override fun onError(throwable: Throwable?) {} } ) + Thread.sleep(100) + val overlaysJson = JSONObject(manager.storedOverlays) assertThat(overlaysJson.getString(OVERLAY_COLOR_INDEX)).isEqualTo(value) } - - private fun getColorBundle(index: Int): ColorBundle { - return ColorBundle( - "fake color", - mapOf("fake_package" to "fake_color"), - /* isDefault= */ false, - null, - /* index= */ index, - null - ) - } - @Test - @Ignore("b/260925899") - fun apply_ColorSeed_index() { - testApplyColorSeed(1, "1") - testApplyColorSeed(2, "2") - testApplyColorSeed(3, "3") - testApplyColorSeed(4, "4") + fun apply_WallpaperColorOption_index() { + testApplyWallpaperColorOption(1, "1") + testApplyWallpaperColorOption(2, "2") + testApplyWallpaperColorOption(3, "3") + testApplyWallpaperColorOption(4, "4") } - private fun testApplyColorSeed(index: Int, value: String) { + private fun testApplyWallpaperColorOption(index: Int, value: String) { manager.apply( - getColorSeed(index), + getWallpaperColorOption(index), object : CustomizationManager.Callback { override fun onSuccess() {} override fun onError(throwable: Throwable?) {} } ) + Thread.sleep(100) + val overlaysJson = JSONObject(manager.storedOverlays) assertThat(overlaysJson.getString(OVERLAY_COLOR_INDEX)).isEqualTo(value) } - private fun getColorSeed(index: Int): ColorSeedOption { - return ColorSeedOption( + private fun getPresetColorOption(index: Int): ColorOptionImpl { + return ColorOptionImpl( "fake color", mapOf("fake_package" to "fake_color"), /* isDefault= */ false, COLOR_SOURCE_PRESET, - null, + Style.TONAL_SPOT, index, - null + ColorOptionImpl.PreviewInfo(intArrayOf(0), intArrayOf(0)), + ColorType.PRESET_COLOR + ) + } + + private fun getWallpaperColorOption(index: Int): ColorOptionImpl { + return ColorOptionImpl( + "fake color", + mapOf("fake_package" to "fake_color"), + /* isDefault= */ false, + COLOR_SOURCE_HOME, + Style.TONAL_SPOT, + index, + ColorOptionImpl.PreviewInfo(intArrayOf(0), intArrayOf(0)), + ColorType.WALLPAPER_COLOR ) } @Test - @Ignore("b/260925899") fun testApply_colorSeedFromWallpaperBoth_shouldReturnBothValue() { val wallpaperColor = WallpaperColors(Color.valueOf(Color.RED), null, null) manager.setWallpaperColors(wallpaperColor, wallpaperColor) manager.apply( - getColorSeed(anyInt()), + getWallpaperColorOption(0), object : CustomizationManager.Callback { override fun onSuccess() {} override fun onError(throwable: Throwable?) {} } ) + Thread.sleep(100) + val overlaysJson = JSONObject(manager.storedOverlays) assertThat(overlaysJson.getString(OVERLAY_COLOR_BOTH)).isEqualTo("1") } @Test - @Ignore("b/260925899") fun testApply_colorSeedFromWallpaperDifferent_shouldReturnNonBothValue() { val wallpaperColor1 = WallpaperColors(Color.valueOf(Color.RED), null, null) val wallpaperColor2 = WallpaperColors(Color.valueOf(Color.BLUE), null, null) manager.setWallpaperColors(wallpaperColor1, wallpaperColor2) manager.apply( - getColorSeed(anyInt()), + getWallpaperColorOption(0), object : CustomizationManager.Callback { override fun onSuccess() {} override fun onError(throwable: Throwable?) {} } ) + Thread.sleep(100) + val overlaysJson = JSONObject(manager.storedOverlays) assertThat(overlaysJson.getString(OVERLAY_COLOR_BOTH)).isEqualTo("0") } diff --git a/tests/robotests/src/com/android/customization/model/color/ColorOptionTest.kt b/tests/robotests/src/com/android/customization/model/color/ColorOptionTest.kt index 0431c196..b9156d6e 100644 --- a/tests/robotests/src/com/android/customization/model/color/ColorOptionTest.kt +++ b/tests/robotests/src/com/android/customization/model/color/ColorOptionTest.kt @@ -15,13 +15,14 @@ */ package com.android.customization.model.color +import com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_SYSTEM_PALETTE import com.android.customization.model.color.ColorOptionsProvider.COLOR_SOURCE_HOME import com.android.customization.model.color.ColorOptionsProvider.COLOR_SOURCE_LOCK import com.android.customization.model.color.ColorOptionsProvider.COLOR_SOURCE_PRESET +import com.android.customization.picker.color.shared.model.ColorType import com.android.systemui.monet.Style import com.google.common.truth.Truth.assertThat -import org.junit.Assert.assertEquals -import org.junit.Ignore +import org.json.JSONObject import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith @@ -40,108 +41,77 @@ class ColorOptionTest { @Mock private lateinit var manager: ColorCustomizationManager @Test - fun colorOption_Source_Preset() { - val bundleOption: ColorOption = - ColorBundle( - "fake color", - mapOf("fake_package" to "fake_color"), - false, - null, - /* index= */ 0, - null - ) - assertEquals(COLOR_SOURCE_PRESET, bundleOption.source) + fun colorOption_Source() { + testColorOptionSource(COLOR_SOURCE_HOME) + testColorOptionSource(COLOR_SOURCE_LOCK) + testColorOptionSource(COLOR_SOURCE_PRESET) } - @Test - fun colorOption_bundle_index() { - testBundleOptionIndex(1) - testBundleOptionIndex(2) - testBundleOptionIndex(3) - testBundleOptionIndex(4) - } - - private fun testBundleOptionIndex(index: Int) { - val bundleOption: ColorBundle = - ColorBundle( - "fake color", - mapOf("fake_package" to "fake_color"), - false, - null, - /* index= */ index, - null - ) - assertThat(bundleOption.index).isEqualTo(index) - } - - @Test - fun colorOption_Source_Seed() { - testSeedOptionSource(COLOR_SOURCE_HOME) - testSeedOptionSource(COLOR_SOURCE_LOCK) - } - - private fun testSeedOptionSource(source: String) { - val seedOption: ColorOption = - ColorSeedOption( + private fun testColorOptionSource(source: String) { + val colorOption: ColorOption = + ColorOptionImpl( "fake color", mapOf("fake_package" to "fake_color"), false, source, - null, + Style.TONAL_SPOT, /* index= */ 0, - null + ColorOptionImpl.PreviewInfo(intArrayOf(0), intArrayOf(0)), + ColorType.WALLPAPER_COLOR ) - assertThat(seedOption.source).isEqualTo(source) + assertThat(colorOption.source).isEqualTo(source) } @Test - fun colorOption_seed_style() { - testSeedOptionStyle(Style.TONAL_SPOT) - testSeedOptionStyle(Style.SPRITZ) - testSeedOptionStyle(Style.VIBRANT) - testSeedOptionStyle(Style.EXPRESSIVE) + fun colorOption_style() { + testColorOptionStyle(Style.TONAL_SPOT) + testColorOptionStyle(Style.SPRITZ) + testColorOptionStyle(Style.VIBRANT) + testColorOptionStyle(Style.EXPRESSIVE) } - private fun testSeedOptionStyle(style: Style) { - val seedOption: ColorOption = - ColorSeedOption( + private fun testColorOptionStyle(style: Style) { + val colorOption: ColorOption = + ColorOptionImpl( "fake color", mapOf("fake_package" to "fake_color"), /* isDefault= */ false, "fake_source", style, 0, - null + ColorOptionImpl.PreviewInfo(intArrayOf(0), intArrayOf(0)), + ColorType.WALLPAPER_COLOR ) - assertThat(seedOption.style).isEqualTo(style) + assertThat(colorOption.style).isEqualTo(style) } @Test - fun colorOption_seed_index() { - testSeedOptionIndex(1) - testSeedOptionIndex(2) - testSeedOptionIndex(3) - testSeedOptionIndex(4) + fun colorOption_index() { + testColorOptionIndex(1) + testColorOptionIndex(2) + testColorOptionIndex(3) + testColorOptionIndex(4) } - private fun testSeedOptionIndex(index: Int) { - val seedOption: ColorOption = - ColorSeedOption( + private fun testColorOptionIndex(index: Int) { + val colorOption: ColorOption = + ColorOptionImpl( "fake color", mapOf("fake_package" to "fake_color"), /* isDefault= */ false, "fake_source", Style.TONAL_SPOT, index, - /* previewInfo= */ null + ColorOptionImpl.PreviewInfo(intArrayOf(0), intArrayOf(0)), + ColorType.WALLPAPER_COLOR ) - assertThat(seedOption.index).isEqualTo(index) + assertThat(colorOption.index).isEqualTo(index) } - private fun setUpSeedOption( + private fun setUpWallpaperColorOption( isDefault: Boolean, source: String = "some_source" - ): ColorSeedOption { + ): ColorOptionImpl { val overlays = if (isDefault) { HashMap() @@ -149,67 +119,69 @@ class ColorOptionTest { mapOf("package" to "value", "otherPackage" to "otherValue") } `when`(manager.currentOverlays).thenReturn(overlays) - return ColorSeedOption( + return ColorOptionImpl( "seed", overlays, isDefault, source, Style.TONAL_SPOT, /* index= */ 0, - /* previewInfo= */ null + ColorOptionImpl.PreviewInfo(intArrayOf(0), intArrayOf(0)), + ColorType.WALLPAPER_COLOR ) } @Test - fun seedOption_isActive_notDefault_SourceSet() { + fun wallpaperColorOption_isActive_notDefault_SourceSet() { val source = "some_source" - val seedOption = setUpSeedOption(false, source) + val colorOption = setUpWallpaperColorOption(false, source) `when`(manager.currentColorSource).thenReturn(source) - assertThat(seedOption.isActive(manager)).isTrue() + assertThat(colorOption.isActive(manager)).isTrue() } @Test - fun seedOption_isActive_notDefault_NoSource() { - val seedOption = setUpSeedOption(false) + fun wallpaperColorOption_isActive_notDefault_NoSource() { + val colorOption = setUpWallpaperColorOption(false) `when`(manager.currentColorSource).thenReturn(null) - assertThat(seedOption.isActive(manager)).isTrue() + assertThat(colorOption.isActive(manager)).isTrue() } @Test - fun seedOption_isActive_notDefault_differentSource() { - val seedOption = setUpSeedOption(false) + fun wallpaperColorOption_isActive_notDefault_differentSource() { + val colorOption = setUpWallpaperColorOption(false) `when`(manager.currentColorSource).thenReturn("some_other_source") - assertThat(seedOption.isActive(manager)).isFalse() + assertThat(colorOption.isActive(manager)).isFalse() } @Test - fun seedOption_isActive_default_emptyJson() { - val seedOption = setUpSeedOption(true) + fun wallpaperColorOption_isActive_default_emptyJson() { + val colorOption = setUpWallpaperColorOption(true) `when`(manager.storedOverlays).thenReturn("") - assertThat(seedOption.isActive(manager)).isTrue() + assertThat(colorOption.isActive(manager)).isTrue() } @Test - fun seedOption_isActive_default_nonEmptyJson() { - val seedOption = setUpSeedOption(true) + fun wallpaperColorOption_isActive_default_nonEmptyJson() { + val colorOption = setUpWallpaperColorOption(true) `when`(manager.storedOverlays).thenReturn("{non-empty-json}") // Should still be Active because overlays is empty - assertThat(seedOption.isActive(manager)).isTrue() + assertThat(colorOption.isActive(manager)).isTrue() } @Test - @Ignore("b/260925899") - fun seedOption_isActive_default_nonEmptyOverlays() { - val seedOption = setUpSeedOption(true) - - `when`(manager.currentOverlays).thenReturn(mapOf("a" to "b")) - // TODO(b/222433744): failing as it's true - assertThat(seedOption.isActive(manager)).isFalse() + fun wallpaperColorOption_isActive_default_nonEmptyOverlays() { + val colorOption = setUpWallpaperColorOption(true) + + val settings = mapOf(OVERLAY_CATEGORY_SYSTEM_PALETTE to "fake_color") + val json = JSONObject(settings).toString() + `when`(manager.storedOverlays).thenReturn(json) + `when`(manager.currentOverlays).thenReturn(settings) + assertThat(colorOption.isActive(manager)).isFalse() } } diff --git a/tests/robotests/src/com/android/customization/model/grid/GridOptionsManagerTest.java b/tests/robotests/src/com/android/customization/model/grid/GridOptionsManagerTest.java index 04ac0241..52c64898 100644 --- a/tests/robotests/src/com/android/customization/model/grid/GridOptionsManagerTest.java +++ b/tests/robotests/src/com/android/customization/model/grid/GridOptionsManagerTest.java @@ -24,7 +24,7 @@ import static org.mockito.Mockito.when; import androidx.annotation.Nullable; import com.android.customization.model.CustomizationManager.Callback; -import com.android.customization.module.ThemesUserEventLogger; +import com.android.customization.module.logging.ThemesUserEventLogger; import org.junit.Before; import org.junit.Ignore; diff --git a/tests/robotests/src/com/android/customization/model/grid/data/repository/FakeGridRepository.kt b/tests/robotests/src/com/android/customization/model/grid/data/repository/FakeGridRepository.kt index 317ad3a2..de68bf07 100644 --- a/tests/robotests/src/com/android/customization/model/grid/data/repository/FakeGridRepository.kt +++ b/tests/robotests/src/com/android/customization/model/grid/data/repository/FakeGridRepository.kt @@ -19,8 +19,9 @@ package com.android.customization.model.grid.data.repository import com.android.customization.model.CustomizationManager import com.android.customization.model.grid.GridOption -import com.android.customization.model.grid.shared.model.GridOptionItemModel -import com.android.customization.model.grid.shared.model.GridOptionItemsModel +import com.android.customization.picker.grid.data.repository.GridRepository +import com.android.customization.picker.grid.shared.model.GridOptionItemModel +import com.android.customization.picker.grid.shared.model.GridOptionItemsModel import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.flow.Flow diff --git a/tests/robotests/src/com/android/customization/model/grid/domain/interactor/GridInteractorTest.kt b/tests/robotests/src/com/android/customization/model/grid/domain/interactor/GridInteractorTest.kt index f73d5a38..3d6c623a 100644 --- a/tests/robotests/src/com/android/customization/model/grid/domain/interactor/GridInteractorTest.kt +++ b/tests/robotests/src/com/android/customization/model/grid/domain/interactor/GridInteractorTest.kt @@ -19,7 +19,9 @@ package com.android.customization.model.grid.domain.interactor import androidx.test.filters.SmallTest import com.android.customization.model.grid.data.repository.FakeGridRepository -import com.android.customization.model.grid.shared.model.GridOptionItemsModel +import com.android.customization.picker.grid.domain.interactor.GridInteractor +import com.android.customization.picker.grid.domain.interactor.GridSnapshotRestorer +import com.android.customization.picker.grid.shared.model.GridOptionItemsModel import com.android.wallpaper.testing.FakeSnapshotStore import com.android.wallpaper.testing.collectLastValue import com.google.common.truth.Truth.assertThat diff --git a/tests/robotests/src/com/android/customization/model/grid/domain/interactor/GridSnapshotRestorerTest.kt b/tests/robotests/src/com/android/customization/model/grid/domain/interactor/GridSnapshotRestorerTest.kt index c2712b1d..e3f03b7b 100644 --- a/tests/robotests/src/com/android/customization/model/grid/domain/interactor/GridSnapshotRestorerTest.kt +++ b/tests/robotests/src/com/android/customization/model/grid/domain/interactor/GridSnapshotRestorerTest.kt @@ -19,7 +19,9 @@ package com.android.customization.model.grid.domain.interactor import androidx.test.filters.SmallTest import com.android.customization.model.grid.data.repository.FakeGridRepository -import com.android.customization.model.grid.shared.model.GridOptionItemsModel +import com.android.customization.picker.grid.domain.interactor.GridInteractor +import com.android.customization.picker.grid.domain.interactor.GridSnapshotRestorer +import com.android.customization.picker.grid.shared.model.GridOptionItemsModel import com.android.wallpaper.testing.FakeSnapshotStore import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi diff --git a/tests/robotests/src/com/android/customization/model/grid/ui/viewmodel/GridScreenViewModelTest.kt b/tests/robotests/src/com/android/customization/model/grid/ui/viewmodel/GridScreenViewModelTest.kt index 58c5d99f..46e914c8 100644 --- a/tests/robotests/src/com/android/customization/model/grid/ui/viewmodel/GridScreenViewModelTest.kt +++ b/tests/robotests/src/com/android/customization/model/grid/ui/viewmodel/GridScreenViewModelTest.kt @@ -20,8 +20,10 @@ package com.android.customization.model.grid.ui.viewmodel import androidx.test.filters.SmallTest import androidx.test.platform.app.InstrumentationRegistry import com.android.customization.model.grid.data.repository.FakeGridRepository -import com.android.customization.model.grid.domain.interactor.GridInteractor -import com.android.customization.model.grid.domain.interactor.GridSnapshotRestorer +import com.android.customization.picker.grid.domain.interactor.GridInteractor +import com.android.customization.picker.grid.domain.interactor.GridSnapshotRestorer +import com.android.customization.picker.grid.ui.viewmodel.GridIconViewModel +import com.android.customization.picker.grid.ui.viewmodel.GridScreenViewModel import com.android.wallpaper.picker.option.ui.viewmodel.OptionItemViewModel import com.android.wallpaper.testing.FakeSnapshotStore import com.android.wallpaper.testing.collectLastValue diff --git a/tests/robotests/src/com/android/customization/model/picker/color/ui/viewmodel/ColorPickerViewModelTest.kt b/tests/robotests/src/com/android/customization/model/picker/color/ui/viewmodel/ColorPickerViewModelTest.kt index 9968c5fa..889720e4 100644 --- a/tests/robotests/src/com/android/customization/model/picker/color/ui/viewmodel/ColorPickerViewModelTest.kt +++ b/tests/robotests/src/com/android/customization/model/picker/color/ui/viewmodel/ColorPickerViewModelTest.kt @@ -17,8 +17,12 @@ package com.android.customization.model.picker.color.ui.viewmodel import android.content.Context +import android.graphics.Color +import android.stats.style.StyleEnums import androidx.test.filters.SmallTest import androidx.test.platform.app.InstrumentationRegistry +import com.android.customization.model.color.ColorOptionsProvider +import com.android.customization.module.logging.TestThemesUserEventLogger import com.android.customization.picker.color.data.repository.FakeColorPickerRepository import com.android.customization.picker.color.domain.interactor.ColorPickerInteractor import com.android.customization.picker.color.domain.interactor.ColorPickerSnapshotRestorer @@ -26,6 +30,7 @@ import com.android.customization.picker.color.shared.model.ColorType import com.android.customization.picker.color.ui.viewmodel.ColorOptionIconViewModel import com.android.customization.picker.color.ui.viewmodel.ColorPickerViewModel import com.android.customization.picker.color.ui.viewmodel.ColorTypeTabViewModel +import com.android.systemui.monet.Style import com.android.wallpaper.picker.option.ui.viewmodel.OptionItemViewModel import com.android.wallpaper.testing.FakeSnapshotStore import com.android.wallpaper.testing.collectLastValue @@ -36,6 +41,7 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.runBlocking import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.TestScope +import kotlinx.coroutines.test.advanceUntilIdle import kotlinx.coroutines.test.resetMain import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.setMain @@ -49,6 +55,7 @@ import org.robolectric.RobolectricTestRunner @SmallTest @RunWith(RobolectricTestRunner::class) class ColorPickerViewModelTest { + private val logger = TestThemesUserEventLogger() private lateinit var underTest: ColorPickerViewModel private lateinit var repository: FakeColorPickerRepository private lateinit var interactor: ColorPickerInteractor @@ -77,7 +84,11 @@ class ColorPickerViewModelTest { ) underTest = - ColorPickerViewModel.Factory(context = context, interactor = interactor) + ColorPickerViewModel.Factory( + context = context, + interactor = interactor, + logger = logger + ) .create(ColorPickerViewModel::class.java) repository.setOptions(4, 4, ColorType.WALLPAPER_COLOR, 0) @@ -112,6 +123,67 @@ class ColorPickerViewModelTest { } @Test + fun `Log selected wallpaper color`() = + testScope.runTest { + repository.setOptions( + listOf( + repository.buildWallpaperOption( + ColorOptionsProvider.COLOR_SOURCE_LOCK, + Style.EXPRESSIVE, + "121212" + ) + ), + listOf(repository.buildPresetOption(Style.FRUIT_SALAD, "#ABCDEF")), + ColorType.PRESET_COLOR, + 0 + ) + + val colorTypes = collectLastValue(underTest.colorTypeTabs) + val colorOptions = collectLastValue(underTest.colorOptions) + + // Select "Wallpaper colors" tab + colorTypes()?.get(ColorType.WALLPAPER_COLOR)?.onClick?.invoke() + // Select a color option + selectColorOption(colorOptions, 0) + advanceUntilIdle() + + assertThat(logger.themeColorSource) + .isEqualTo(StyleEnums.COLOR_SOURCE_LOCK_SCREEN_WALLPAPER) + assertThat(logger.themeColorStyle).isEqualTo(Style.EXPRESSIVE.toString().hashCode()) + assertThat(logger.themeSeedColor).isEqualTo(Color.parseColor("#121212")) + } + + @Test + fun `Log selected preset color`() = + testScope.runTest { + repository.setOptions( + listOf( + repository.buildWallpaperOption( + ColorOptionsProvider.COLOR_SOURCE_LOCK, + Style.EXPRESSIVE, + "121212" + ) + ), + listOf(repository.buildPresetOption(Style.FRUIT_SALAD, "#ABCDEF")), + ColorType.WALLPAPER_COLOR, + 0 + ) + + val colorTypes = collectLastValue(underTest.colorTypeTabs) + val colorOptions = collectLastValue(underTest.colorOptions) + + // Select "Wallpaper colors" tab + colorTypes()?.get(ColorType.PRESET_COLOR)?.onClick?.invoke() + // Select a color option + selectColorOption(colorOptions, 0) + advanceUntilIdle() + + assertThat(logger.themeColorSource).isEqualTo(StyleEnums.COLOR_SOURCE_PRESET_COLOR) + assertThat(logger.themeColorStyle).isEqualTo(Style.FRUIT_SALAD.toString().hashCode()) + assertThat(logger.themeSeedColor).isEqualTo(Color.parseColor("#ABCDEF")) + } + + @Test fun `Select a preset color`() = testScope.runTest { val colorTypes = collectLastValue(underTest.colorTypeTabs) diff --git a/tests/robotests/src/com/android/customization/model/picker/quickaffordance/data/repository/KeyguardQuickAffordancePickerRepositoryTest.kt b/tests/robotests/src/com/android/customization/model/picker/quickaffordance/data/repository/KeyguardQuickAffordancePickerRepositoryTest.kt index 35dbadd5..8687b301 100644 --- a/tests/robotests/src/com/android/customization/model/picker/quickaffordance/data/repository/KeyguardQuickAffordancePickerRepositoryTest.kt +++ b/tests/robotests/src/com/android/customization/model/picker/quickaffordance/data/repository/KeyguardQuickAffordancePickerRepositoryTest.kt @@ -19,17 +19,13 @@ package com.android.customization.model.picker.quickaffordance.data.repository import androidx.test.filters.SmallTest import com.android.customization.picker.quickaffordance.data.repository.KeyguardQuickAffordancePickerRepository -import com.android.systemui.shared.customization.data.content.CustomizationProviderContract import com.android.systemui.shared.customization.data.content.FakeCustomizationProviderClient import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.flow.toList -import kotlinx.coroutines.launch import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.resetMain -import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.setMain import org.junit.After import org.junit.Before @@ -57,44 +53,18 @@ class KeyguardQuickAffordancePickerRepositoryTest { underTest = KeyguardQuickAffordancePickerRepository( client = client, - backgroundDispatcher = coroutineDispatcher, + scope = testScope.backgroundScope, ) } + // We need at least one test to prevent Studio errors + @Test + fun creationSucceeds() { + assertThat(underTest).isNotNull() + } + @After fun tearDown() { Dispatchers.resetMain() } - - @Test - fun `isFeatureEnabled - enabled`() = - testScope.runTest { - client.setFlag( - CustomizationProviderContract.FlagsTable - .FLAG_NAME_CUSTOM_LOCK_SCREEN_QUICK_AFFORDANCES_ENABLED, - true, - ) - val values = mutableListOf<Boolean>() - val job = launch { underTest.isFeatureEnabled.toList(values) } - - assertThat(values.last()).isTrue() - - job.cancel() - } - - @Test - fun `isFeatureEnabled - not enabled`() = - testScope.runTest { - client.setFlag( - CustomizationProviderContract.FlagsTable - .FLAG_NAME_CUSTOM_LOCK_SCREEN_QUICK_AFFORDANCES_ENABLED, - false, - ) - val values = mutableListOf<Boolean>() - val job = launch { underTest.isFeatureEnabled.toList(values) } - - assertThat(values.last()).isFalse() - - job.cancel() - } } diff --git a/tests/robotests/src/com/android/customization/model/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractorTest.kt b/tests/robotests/src/com/android/customization/model/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractorTest.kt index efe9f64d..4b4790ad 100644 --- a/tests/robotests/src/com/android/customization/model/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractorTest.kt +++ b/tests/robotests/src/com/android/customization/model/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractorTest.kt @@ -62,7 +62,7 @@ class KeyguardQuickAffordancePickerInteractorTest { repository = KeyguardQuickAffordancePickerRepository( client = client, - backgroundDispatcher = testDispatcher, + scope = testScope.backgroundScope, ), client = client, snapshotRestorer = { @@ -132,7 +132,7 @@ class KeyguardQuickAffordancePickerInteractorTest { affordanceId = FakeCustomizationProviderClient.AFFORDANCE_3, ) - underTest.unselectAll( + underTest.unselectAllFromSlot( slotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END, ) diff --git a/tests/robotests/src/com/android/customization/model/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModelTest.kt b/tests/robotests/src/com/android/customization/model/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModelTest.kt index f71bfc7d..b572401b 100644 --- a/tests/robotests/src/com/android/customization/model/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModelTest.kt +++ b/tests/robotests/src/com/android/customization/model/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModelTest.kt @@ -21,6 +21,7 @@ import android.content.Context import android.content.Intent import androidx.test.core.app.ApplicationProvider import androidx.test.filters.SmallTest +import com.android.customization.module.logging.TestThemesUserEventLogger import com.android.customization.picker.quickaffordance.data.repository.KeyguardQuickAffordancePickerRepository import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordancePickerInteractor import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordanceSnapshotRestorer @@ -64,6 +65,8 @@ import org.robolectric.RobolectricTestRunner @RunWith(RobolectricTestRunner::class) class KeyguardQuickAffordancePickerViewModelTest { + private val logger = TestThemesUserEventLogger() + private lateinit var underTest: KeyguardQuickAffordancePickerViewModel private lateinit var context: Context @@ -74,7 +77,7 @@ class KeyguardQuickAffordancePickerViewModelTest { @Before fun setUp() { - InjectorProvider.setInjector(TestInjector()) + InjectorProvider.setInjector(TestInjector(logger)) context = ApplicationProvider.getApplicationContext() val testDispatcher = StandardTestDispatcher() testScope = TestScope(testDispatcher) @@ -86,7 +89,7 @@ class KeyguardQuickAffordancePickerViewModelTest { repository = KeyguardQuickAffordancePickerRepository( client = client, - backgroundDispatcher = testDispatcher, + scope = testScope.backgroundScope, ), client = client, snapshotRestorer = { @@ -113,6 +116,7 @@ class KeyguardQuickAffordancePickerViewModelTest { quickAffordanceInteractor = quickAffordanceInteractor, wallpaperInteractor = wallpaperInteractor, wallpaperInfoFactory = TestCurrentWallpaperInfoFactory(context), + logger = logger, ) .create(KeyguardQuickAffordancePickerViewModel::class.java) } @@ -349,8 +353,16 @@ class KeyguardQuickAffordancePickerViewModelTest { "${FakeCustomizationProviderClient.AFFORDANCE_1}," + " ${FakeCustomizationProviderClient.AFFORDANCE_3}" ), - icon1 = Icon.Loaded(FakeCustomizationProviderClient.ICON_1, null), - icon2 = Icon.Loaded(FakeCustomizationProviderClient.ICON_3, null), + icon1 = + Icon.Loaded( + FakeCustomizationProviderClient.ICON_1, + Text.Loaded("Left shortcut") + ), + icon2 = + Icon.Loaded( + FakeCustomizationProviderClient.ICON_3, + Text.Loaded("Right shortcut") + ), ) ) } @@ -369,7 +381,11 @@ class KeyguardQuickAffordancePickerViewModelTest { .isEqualTo( KeyguardQuickAffordanceSummaryViewModel( description = Text.Loaded(FakeCustomizationProviderClient.AFFORDANCE_1), - icon1 = Icon.Loaded(FakeCustomizationProviderClient.ICON_1, null), + icon1 = + Icon.Loaded( + FakeCustomizationProviderClient.ICON_1, + Text.Loaded("Left shortcut") + ), icon2 = null, ) ) @@ -393,7 +409,11 @@ class KeyguardQuickAffordancePickerViewModelTest { KeyguardQuickAffordanceSummaryViewModel( description = Text.Loaded(FakeCustomizationProviderClient.AFFORDANCE_3), icon1 = null, - icon2 = Icon.Loaded(FakeCustomizationProviderClient.ICON_3, null), + icon2 = + Icon.Loaded( + FakeCustomizationProviderClient.ICON_3, + Text.Loaded("Right shortcut") + ), ) ) } diff --git a/tests/robotests/src/com/android/customization/model/theme/ThemeManagerTest.java b/tests/robotests/src/com/android/customization/model/theme/ThemeManagerTest.java deleted file mode 100644 index cfb8a33f..00000000 --- a/tests/robotests/src/com/android/customization/model/theme/ThemeManagerTest.java +++ /dev/null @@ -1,222 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.model.theme; - -import static com.android.customization.model.ResourceConstants.ANDROID_PACKAGE; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_COLOR; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_FONT; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_ANDROID; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_SETTINGS; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_SYSUI; -import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_SHAPE; -import static com.android.customization.model.ResourceConstants.SETTINGS_PACKAGE; -import static com.android.customization.model.ResourceConstants.SYSUI_PACKAGE; -import static com.android.customization.model.ResourceConstants.THEME_SETTING; - -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.assertTrue; -import static junit.framework.TestCase.assertEquals; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import android.provider.Settings; - -import androidx.annotation.Nullable; -import androidx.fragment.app.FragmentActivity; - -import com.android.customization.model.CustomizationManager.Callback; -import com.android.customization.model.CustomizationManager.OptionsFetchedListener; -import com.android.customization.model.theme.custom.CustomTheme; -import com.android.customization.module.ThemesUserEventLogger; -import com.android.customization.testutils.OverlayManagerMocks; - -import org.json.JSONObject; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.Robolectric; -import org.robolectric.RobolectricTestRunner; - -@RunWith(RobolectricTestRunner.class) -public class ThemeManagerTest { - - @Mock OverlayManagerCompat mMockOm; - @Mock ThemesUserEventLogger mThemesUserEventLogger; - @Mock ThemeBundleProvider mThemeBundleProvider; - private OverlayManagerMocks mMockOmHelper; - private ThemeManager mThemeManager; - private FragmentActivity mActivity; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - FragmentActivity activity = Robolectric.buildActivity(FragmentActivity.class).get(); - mActivity = spy(activity); - mMockOmHelper = new OverlayManagerMocks(); - mMockOmHelper.setUpMock(mMockOm); - mThemeManager = new ThemeManager(mThemeBundleProvider, activity, - mMockOm, mThemesUserEventLogger); - } - - @After - public void cleanUp() { - mMockOmHelper.clearOverlays(); - } - - @Test - public void apply_WithDefaultTheme_StoresEmptyJsonString() { - mMockOmHelper.addOverlay("test.package.name_color", ANDROID_PACKAGE, - OVERLAY_CATEGORY_COLOR, true, 0); - mMockOmHelper.addOverlay("test.package.name_font", ANDROID_PACKAGE, - OVERLAY_CATEGORY_FONT, true, 0); - mMockOmHelper.addOverlay("test.package.name_shape", ANDROID_PACKAGE, - OVERLAY_CATEGORY_SHAPE, true, 0); - mMockOmHelper.addOverlay("test.package.name_icon", ANDROID_PACKAGE, - OVERLAY_CATEGORY_ICON_ANDROID, true, 0); - mMockOmHelper.addOverlay("test.package.name_settings", SETTINGS_PACKAGE, - OVERLAY_CATEGORY_ICON_SETTINGS, true, 0); - mMockOmHelper.addOverlay("test.package.name_sysui", SYSUI_PACKAGE, - OVERLAY_CATEGORY_ICON_SYSUI, true, 0); - mMockOmHelper.addOverlay("test.package.name_themepicker", mActivity.getPackageName(), - OVERLAY_CATEGORY_ICON_SYSUI, true, 0); - - ThemeBundle defaultTheme = new ThemeBundle.Builder().asDefault().build(mActivity); - - applyTheme(defaultTheme); - - assertEquals("Secure Setting should be empty JSON string after applying default theme", - new JSONObject().toString(), - Settings.Secure.getString(mActivity.getContentResolver(), THEME_SETTING)); - } - - @Test - public void apply_WithOverlayTheme_StoresSerializedPackagesWithTimestamp() { - ThemeBundle theme = getOverlayTheme(); - final String serializedPackagesWithTimestamp = theme.getSerializedPackagesWithTimestamp(); - - theme = spy(theme); - // Makes it return the fixed serializedPackagesWithTimestamp to test. Since we will get - // fresh time every time, it's hard to compare for testing. - when(theme.getSerializedPackagesWithTimestamp()) - .thenReturn(serializedPackagesWithTimestamp); - - applyTheme(theme); - - assertEquals("Secure Setting should be the overlay packages after applying theme", - serializedPackagesWithTimestamp, - Settings.Secure.getString(mActivity.getContentResolver(), THEME_SETTING)); - } - - @Test - public void isAvailable_ThemeBundleProviderAndOverlayManagerAreAvailable_ReturnsTrue() { - when(mThemeBundleProvider.isAvailable()).thenReturn(true); - when(mMockOm.isAvailable()).thenReturn(true); - - assertTrue(mThemeManager.isAvailable()); - } - - @Test - public void isAvailable_ThemeBundleProviderOrOverlayManagerIsAvailable_ReturnsFalse() { - when(mThemeBundleProvider.isAvailable()).thenReturn(false); - when(mMockOm.isAvailable()).thenReturn(true); - assertFalse(mThemeManager.isAvailable()); - - when(mThemeBundleProvider.isAvailable()).thenReturn(true); - when(mMockOm.isAvailable()).thenReturn(false); - assertFalse(mThemeManager.isAvailable()); - } - - @Test - public void fetchOptions_ThemeBundleProviderFetches() { - OptionsFetchedListener listener = mock(OptionsFetchedListener.class); - - mThemeManager.fetchOptions(listener, false); - - verify(mThemeBundleProvider).fetch(listener, false); - } - - @Test - public void removeCustomTheme_ThemeBundleProviderRemovesCustomTheme() { - CustomTheme customTheme = mock(CustomTheme.class); - mThemeManager.removeCustomTheme(customTheme); - - verify(mThemeBundleProvider).removeCustomTheme(customTheme); - } - - @Test - public void findThemeByPackages_ThemeBundleProviderFindsEquivalent() { - CustomTheme theme = mock(CustomTheme.class); - mThemeManager.findThemeByPackages(theme); - - verify(mThemeBundleProvider).findEquivalent(theme); - } - - @Test - public void storeEmptyTheme_SettingsSecureStoresEmptyTheme() { - mThemeManager.storeEmptyTheme(); - - assertEquals( - new JSONObject().toString(), - Settings.Secure.getString(mActivity.getContentResolver(), THEME_SETTING)); - } - - @Test - public void getStoredOverlays_GetsFromSettingsSecureWithExpectedName() { - ThemeBundle theme = getOverlayTheme(); - - applyTheme(theme); - - assertEquals( - Settings.Secure.getString(mActivity.getContentResolver(), THEME_SETTING), - mThemeManager.getStoredOverlays()); - } - - private ThemeBundle getOverlayTheme() { - final String bundleColorPackage = "test.package.name_color"; - final String bundleFontPackage = "test.package.name_font"; - final String otherPackage = "other.package.name_font"; - - mMockOmHelper.addOverlay(bundleColorPackage, ANDROID_PACKAGE, - OVERLAY_CATEGORY_COLOR, false, 0); - mMockOmHelper.addOverlay(bundleFontPackage, ANDROID_PACKAGE, - OVERLAY_CATEGORY_FONT, false, 0); - mMockOmHelper.addOverlay(otherPackage, ANDROID_PACKAGE, - OVERLAY_CATEGORY_FONT, false, 0); - - return new ThemeBundle.Builder() - .addOverlayPackage(OVERLAY_CATEGORY_COLOR, bundleColorPackage) - .addOverlayPackage(OVERLAY_CATEGORY_FONT, bundleFontPackage) - .build(mActivity); - } - - private void applyTheme(ThemeBundle theme) { - mThemeManager.apply(theme, new Callback() { - @Override - public void onSuccess() { - } - - @Override - public void onError(@Nullable Throwable throwable) { - } - }); - } -} diff --git a/tests/robotests/src/com/android/customization/picker/clock/data/repository/FakeClockPickerRepository.kt b/tests/robotests/src/com/android/customization/picker/clock/data/repository/FakeClockPickerRepository.kt index 95d7e358..4d8f32e5 100644 --- a/tests/robotests/src/com/android/customization/picker/clock/data/repository/FakeClockPickerRepository.kt +++ b/tests/robotests/src/com/android/customization/picker/clock/data/repository/FakeClockPickerRepository.kt @@ -46,7 +46,6 @@ open class FakeClockPickerRepository(clocks: List<ClockMetadataModel> = fakeCloc checkNotNull(selectedClock) ClockMetadataModel( clockId = selectedClock.clockId, - name = selectedClock.name, isSelected = true, selectedColorId = selectedColor, colorToneProgress = colorTone, @@ -82,10 +81,10 @@ open class FakeClockPickerRepository(clocks: List<ClockMetadataModel> = fakeCloc const val CLOCK_ID_3 = "clock3" val fakeClocks = listOf( - ClockMetadataModel(CLOCK_ID_0, "clock0", true, null, 50, null), - ClockMetadataModel(CLOCK_ID_1, "clock1", false, null, 50, null), - ClockMetadataModel(CLOCK_ID_2, "clock2", false, null, 50, null), - ClockMetadataModel(CLOCK_ID_3, "clock3", false, null, 50, null), + ClockMetadataModel(CLOCK_ID_0, true, null, 50, null), + ClockMetadataModel(CLOCK_ID_1, false, null, 50, null), + ClockMetadataModel(CLOCK_ID_2, false, null, 50, null), + ClockMetadataModel(CLOCK_ID_3, false, null, 50, null), ) const val CLOCK_COLOR_ID = "RED" const val CLOCK_COLOR_TONE_PROGRESS = 87 diff --git a/tests/robotests/src/com/android/customization/picker/clock/ui/FakeClockViewFactory.kt b/tests/robotests/src/com/android/customization/picker/clock/ui/FakeClockViewFactory.kt new file mode 100644 index 00000000..6fe76b94 --- /dev/null +++ b/tests/robotests/src/com/android/customization/picker/clock/ui/FakeClockViewFactory.kt @@ -0,0 +1,93 @@ +package com.android.customization.picker.clock.ui + +import android.content.res.Resources +import android.view.View +import androidx.lifecycle.LifecycleOwner +import com.android.customization.picker.clock.data.repository.FakeClockPickerRepository +import com.android.customization.picker.clock.ui.FakeClockViewFactory.Companion.fakeClocks +import com.android.customization.picker.clock.ui.view.ClockViewFactory +import com.android.systemui.plugins.clocks.ClockConfig +import com.android.systemui.plugins.clocks.ClockController +import com.android.systemui.plugins.clocks.ClockEvents +import com.android.systemui.plugins.clocks.ClockFaceController +import java.io.PrintWriter + +/** + * This is a fake [ClockViewFactory]. Only implement the function if it's actually called in a test. + */ +class FakeClockViewFactory( + val clockControllers: MutableMap<String, ClockController> = fakeClocks.toMutableMap(), +) : ClockViewFactory { + + class FakeClockController( + override var config: ClockConfig, + ) : ClockController { + override val smallClock: ClockFaceController + get() = TODO("Not yet implemented") + + override val largeClock: ClockFaceController + get() = TODO("Not yet implemented") + + override val events: ClockEvents + get() = TODO("Not yet implemented") + + override fun initialize(resources: Resources, dozeFraction: Float, foldFraction: Float) = + TODO("Not yet implemented") + + override fun dump(pw: PrintWriter) = TODO("Not yet implemented") + } + + override fun getController(clockId: String): ClockController = clockControllers.get(clockId)!! + + override fun getLargeView(clockId: String): View { + TODO("Not yet implemented") + } + + override fun getSmallView(clockId: String): View { + TODO("Not yet implemented") + } + + override fun updateColorForAllClocks(seedColor: Int?) { + TODO("Not yet implemented") + } + + override fun updateColor(clockId: String, seedColor: Int?) { + TODO("Not yet implemented") + } + + override fun updateRegionDarkness() { + TODO("Not yet implemented") + } + + override fun updateTimeFormat(clockId: String) { + TODO("Not yet implemented") + } + + override fun registerTimeTicker(owner: LifecycleOwner) { + TODO("Not yet implemented") + } + + override fun onDestroy() { + TODO("Not yet implemented") + } + + override fun unregisterTimeTicker(owner: LifecycleOwner) { + TODO("Not yet implemented") + } + + companion object { + val fakeClocks = + FakeClockPickerRepository.fakeClocks + .map { clock -> + clock.clockId to + FakeClockController( + ClockConfig( + id = clock.clockId, + name = "Name: ${clock.clockId}", + description = "Desc: ${clock.clockId}" + ) + ) + } + .toMap() + } +} diff --git a/tests/robotests/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselViewModelTest.kt b/tests/robotests/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselViewModelTest.kt index ca6f8c79..46afe35d 100644 --- a/tests/robotests/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselViewModelTest.kt +++ b/tests/robotests/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselViewModelTest.kt @@ -16,11 +16,15 @@ package com.android.customization.picker.clock.ui.viewmodel import androidx.test.filters.SmallTest +import androidx.test.platform.app.InstrumentationRegistry +import com.android.customization.module.logging.TestThemesUserEventLogger import com.android.customization.picker.clock.data.repository.ClockPickerRepository import com.android.customization.picker.clock.data.repository.FakeClockPickerRepository import com.android.customization.picker.clock.domain.interactor.ClockPickerInteractor import com.android.customization.picker.clock.domain.interactor.ClockPickerSnapshotRestorer import com.android.customization.picker.clock.shared.model.ClockMetadataModel +import com.android.customization.picker.clock.ui.FakeClockViewFactory +import com.android.customization.picker.clock.ui.view.ClockViewFactory import com.android.wallpaper.testing.FakeSnapshotStore import com.android.wallpaper.testing.collectLastValue import com.google.common.truth.Truth.assertThat @@ -48,8 +52,7 @@ class ClockCarouselViewModelTest { FakeClockPickerRepository( listOf( ClockMetadataModel( - clockId = "clock0", - name = "clock0", + clockId = FakeClockPickerRepository.CLOCK_ID_0, isSelected = true, selectedColorId = null, colorToneProgress = ClockMetadataModel.DEFAULT_COLOR_TONE_PROGRESS, @@ -58,13 +61,16 @@ class ClockCarouselViewModelTest { ) ) } + private lateinit var testDispatcher: CoroutineDispatcher private lateinit var underTest: ClockCarouselViewModel private lateinit var interactor: ClockPickerInteractor + private lateinit var clockViewFactory: ClockViewFactory @Before fun setUp() { testDispatcher = StandardTestDispatcher() + clockViewFactory = FakeClockViewFactory() Dispatchers.setMain(testDispatcher) } @@ -78,7 +84,10 @@ class ClockCarouselViewModelTest { underTest = ClockCarouselViewModel( getClockPickerInteractor(repositoryWithMultipleClocks), - testDispatcher + backgroundDispatcher = testDispatcher, + clockViewFactory = clockViewFactory, + resources = InstrumentationRegistry.getInstrumentation().targetContext.resources, + logger = TestThemesUserEventLogger(), ) val observedSelectedIndex = collectLastValue(underTest.selectedIndex) advanceTimeBy(ClockCarouselViewModel.CLOCKS_EVENT_UPDATE_DELAY_MILLIS) diff --git a/tests/robotests/src/com/android/customization/picker/clock/ui/viewmodel/ClockSectionViewModelTest.kt b/tests/robotests/src/com/android/customization/picker/clock/ui/viewmodel/ClockSectionViewModelTest.kt deleted file mode 100644 index 19a704c9..00000000 --- a/tests/robotests/src/com/android/customization/picker/clock/ui/viewmodel/ClockSectionViewModelTest.kt +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.customization.picker.clock.ui.viewmodel - -import androidx.test.filters.SmallTest -import androidx.test.platform.app.InstrumentationRegistry -import com.android.customization.picker.clock.data.repository.FakeClockPickerRepository -import com.android.customization.picker.clock.domain.interactor.ClockPickerInteractor -import com.android.customization.picker.clock.domain.interactor.ClockPickerSnapshotRestorer -import com.android.customization.picker.clock.shared.ClockSize -import com.android.customization.picker.clock.shared.model.ClockMetadataModel -import com.android.wallpaper.testing.FakeSnapshotStore -import com.android.wallpaper.testing.collectLastValue -import com.google.common.truth.Truth.assertThat -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.runBlocking -import kotlinx.coroutines.test.StandardTestDispatcher -import kotlinx.coroutines.test.resetMain -import kotlinx.coroutines.test.runTest -import kotlinx.coroutines.test.setMain -import org.junit.After -import org.junit.Before -import org.junit.Test -import org.junit.runner.RunWith -import org.robolectric.RobolectricTestRunner - -@OptIn(ExperimentalCoroutinesApi::class) -@SmallTest -@RunWith(RobolectricTestRunner::class) -class ClockSectionViewModelTest { - - private lateinit var clockColorMap: Map<String, ClockColorViewModel> - private lateinit var interactor: ClockPickerInteractor - private lateinit var underTest: ClockSectionViewModel - - @Before - fun setUp() { - val testDispatcher = StandardTestDispatcher() - Dispatchers.setMain(testDispatcher) - val context = InstrumentationRegistry.getInstrumentation().targetContext - clockColorMap = ClockColorViewModel.getPresetColorMap(context.resources) - interactor = - ClockPickerInteractor( - repository = FakeClockPickerRepository(), - snapshotRestorer = { - ClockPickerSnapshotRestorer(interactor = interactor).apply { - runBlocking { setUpSnapshotRestorer(store = FakeSnapshotStore()) } - } - }, - ) - underTest = - ClockSectionViewModel( - context, - interactor, - ) - } - - @After - fun tearDown() { - Dispatchers.resetMain() - } - - @Test - fun setSelectedClock() = runTest { - val colorGrey = clockColorMap.values.first() - val observedSelectedClockColorAndSizeText = - collectLastValue(underTest.selectedClockColorAndSizeText) - - interactor.setClockColor( - colorGrey.colorId, - ClockMetadataModel.DEFAULT_COLOR_TONE_PROGRESS, - ClockSettingsViewModel.blendColorWithTone( - colorGrey.color, - colorGrey.getColorTone(ClockMetadataModel.DEFAULT_COLOR_TONE_PROGRESS), - ) - ) - interactor.setClockSize(ClockSize.DYNAMIC) - - assertThat(observedSelectedClockColorAndSizeText()).isEqualTo("Grey, dynamic") - } -} diff --git a/tests/robotests/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModelTest.kt b/tests/robotests/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModelTest.kt index f09e9779..d3ae9cba 100644 --- a/tests/robotests/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModelTest.kt +++ b/tests/robotests/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModelTest.kt @@ -1,8 +1,10 @@ package com.android.customization.picker.clock.ui.viewmodel import android.content.Context +import android.stats.style.StyleEnums import androidx.test.filters.SmallTest import androidx.test.platform.app.InstrumentationRegistry +import com.android.customization.module.logging.TestThemesUserEventLogger import com.android.customization.picker.clock.data.repository.FakeClockPickerRepository import com.android.customization.picker.clock.domain.interactor.ClockPickerInteractor import com.android.customization.picker.clock.domain.interactor.ClockPickerSnapshotRestorer @@ -35,6 +37,7 @@ import org.robolectric.RobolectricTestRunner @RunWith(RobolectricTestRunner::class) class ClockSettingsViewModelTest { + private val logger = TestThemesUserEventLogger() private lateinit var context: Context private lateinit var testScope: TestScope private lateinit var colorPickerInteractor: ColorPickerInteractor @@ -81,6 +84,7 @@ class ClockSettingsViewModelTest { context = context, clockPickerInteractor = clockPickerInteractor, colorPickerInteractor = colorPickerInteractor, + logger = logger, getIsReactiveToTone = getIsReactiveToTone, ) .create(ClockSettingsViewModel::class.java) @@ -186,9 +190,11 @@ class ClockSettingsViewModelTest { val observedClockSize = collectLastValue(underTest.selectedClockSize) underTest.setClockSize(ClockSize.DYNAMIC) assertThat(observedClockSize()).isEqualTo(ClockSize.DYNAMIC) + assertThat(logger.getLoggedClockSize()).isEqualTo(StyleEnums.CLOCK_SIZE_DYNAMIC) underTest.setClockSize(ClockSize.SMALL) assertThat(observedClockSize()).isEqualTo(ClockSize.SMALL) + assertThat(logger.getLoggedClockSize()).isEqualTo(StyleEnums.CLOCK_SIZE_SMALL) } @Test diff --git a/tests/robotests/src/com/android/customization/picker/notifications/ui/viewmodel/NotificationSectionViewModelTest.kt b/tests/robotests/src/com/android/customization/picker/notifications/ui/viewmodel/NotificationSectionViewModelTest.kt index 5c3544a5..1ff1fc8c 100644 --- a/tests/robotests/src/com/android/customization/picker/notifications/ui/viewmodel/NotificationSectionViewModelTest.kt +++ b/tests/robotests/src/com/android/customization/picker/notifications/ui/viewmodel/NotificationSectionViewModelTest.kt @@ -18,6 +18,8 @@ package com.android.customization.picker.notifications.ui.viewmodel import androidx.test.filters.SmallTest +import com.android.customization.module.logging.TestThemesUserEventLogger +import com.android.customization.module.logging.ThemesUserEventLogger import com.android.customization.picker.notifications.data.repository.NotificationsRepository import com.android.customization.picker.notifications.domain.interactor.NotificationsInteractor import com.android.customization.picker.notifications.domain.interactor.NotificationsSnapshotRestorer @@ -44,6 +46,8 @@ import org.robolectric.RobolectricTestRunner @RunWith(RobolectricTestRunner::class) class NotificationSectionViewModelTest { + private val logger: ThemesUserEventLogger = TestThemesUserEventLogger() + private lateinit var underTest: NotificationSectionViewModel private lateinit var testScope: TestScope @@ -73,6 +77,7 @@ class NotificationSectionViewModelTest { underTest = NotificationSectionViewModel( interactor = interactor, + logger = logger, ) } diff --git a/themes/res/values-en-rCA/strings.xml b/themes/res/values-en-rCA/strings.xml index 780a3c92..ae4e8c5f 100644 --- a/themes/res/values-en-rCA/strings.xml +++ b/themes/res/values-en-rCA/strings.xml @@ -24,6 +24,5 @@ <string name="rainbow_color_name_blue" msgid="3473176664458856892">"Blue"</string> <string name="rainbow_color_name_purple" msgid="2704722524588084868">"Purple"</string> <string name="rainbow_color_name_magenta" msgid="7248703626077785569">"Magenta"</string> - <!-- no translation found for monochromatic_name (2554823570460886176) --> - <skip /> + <string name="monochromatic_name" msgid="2554823570460886176">"Monochromatic"</string> </resources> |