summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXin Li <delphij@google.com>2024-03-06 09:30:06 -0800
committerXin Li <delphij@google.com>2024-03-06 09:30:06 -0800
commit0a19d853fa8042e184788c2da2ed7d3b889b165a (patch)
treef86037efa286448f802ffcc1fce929e01f5bbe02
parente97783b38925690aba7633c21effa56fbc2e0070 (diff)
parente224e186edb36908ad02a1cbaf338614ce5c7d69 (diff)
downloadThemePicker-master.tar.gz
Merge Android 14 QPR2 to AOSP mainHEADmastermain
Bug: 319669529 Merged-In: I08772f7df3f3c78e2b7c94bcadce1e0784255a77 Change-Id: I964ee4c686efede980f593364e4de38e3330eba0
-rw-r--r--Android.bp17
-rw-r--r--PREUPLOAD.cfg2
-rw-r--r--TEST_MAPPING1
-rw-r--r--res/layout-land/activity_custom_theme.xml63
-rw-r--r--res/layout-land/fragment_custom_theme_component.xml75
-rw-r--r--res/layout-land/fragment_custom_theme_name.xml76
-rw-r--r--res/layout-land/fragment_theme_picker.xml82
-rw-r--r--res/layout/activity_custom_theme.xml53
-rw-r--r--res/layout/clock_color_option.xml2
-rw-r--r--res/layout/clock_size_radio_button_group.xml88
-rw-r--r--res/layout/color_option.xml122
-rw-r--r--res/layout/color_option_2.xml51
-rw-r--r--res/layout/color_options_view.xml27
-rw-r--r--res/layout/color_pages_view.xml33
-rw-r--r--res/layout/color_section_view.xml (renamed from res/layout/color_section_view2.xml)4
-rw-r--r--res/layout/custom_theme_option.xml51
-rw-r--r--res/layout/fragment_clock_settings.xml25
-rw-r--r--res/layout/fragment_color_picker.xml2
-rw-r--r--res/layout/fragment_custom_theme_component.xml93
-rw-r--r--res/layout/fragment_custom_theme_name.xml86
-rw-r--r--res/layout/fragment_grid.xml2
-rw-r--r--res/layout/fragment_theme_full_preview.xml35
-rw-r--r--res/layout/fragment_theme_picker.xml87
-rw-r--r--res/layout/grid_option.xml93
-rw-r--r--res/layout/grid_option_2.xml70
-rw-r--r--res/layout/grid_section_view.xml4
-rw-r--r--res/layout/notification_section.xml1
-rw-r--r--res/layout/preview_card_color_content.xml160
-rw-r--r--res/layout/preview_card_font_content.xml55
-rw-r--r--res/layout/preview_card_icon_content.xml91
-rw-r--r--res/layout/preview_card_shape_content.xml127
-rw-r--r--res/layout/theme_color_option.xml30
-rw-r--r--res/layout/theme_component_preview.xml58
-rw-r--r--res/layout/theme_font_option.xml41
-rw-r--r--res/layout/theme_icon_option.xml38
-rw-r--r--res/layout/theme_info_view.xml76
-rw-r--r--res/layout/theme_option.xml74
-rw-r--r--res/layout/theme_preview_app_icon_shape.xml149
-rw-r--r--res/layout/theme_preview_card.xml42
-rw-r--r--res/layout/theme_preview_color_icons.xml181
-rw-r--r--res/layout/theme_preview_content.xml92
-rw-r--r--res/layout/theme_preview_topbar.xml56
-rw-r--r--res/layout/theme_shape_option.xml33
-rw-r--r--res/menu/custom_theme_editor_menu.xml23
-rw-r--r--res/values-af/strings.xml20
-rw-r--r--res/values-am/strings.xml46
-rw-r--r--res/values-ar/strings.xml24
-rw-r--r--res/values-as/strings.xml26
-rw-r--r--res/values-az/strings.xml18
-rw-r--r--res/values-b+sr+Latn/strings.xml20
-rw-r--r--res/values-be/strings.xml26
-rw-r--r--res/values-bg/strings.xml28
-rw-r--r--res/values-bn/strings.xml28
-rw-r--r--res/values-bs/strings.xml26
-rw-r--r--res/values-ca/strings.xml32
-rw-r--r--res/values-cs/strings.xml32
-rw-r--r--res/values-da/strings.xml24
-rw-r--r--res/values-de/strings.xml26
-rw-r--r--res/values-el/strings.xml20
-rw-r--r--res/values-en-rAU/strings.xml20
-rw-r--r--res/values-en-rCA/strings.xml158
-rw-r--r--res/values-en-rGB/strings.xml20
-rw-r--r--res/values-en-rIN/strings.xml20
-rw-r--r--res/values-en-rXC/strings.xml18
-rw-r--r--res/values-es-rUS/strings.xml34
-rw-r--r--res/values-es/strings.xml32
-rw-r--r--res/values-et/strings.xml24
-rw-r--r--res/values-eu/strings.xml28
-rw-r--r--res/values-fa/strings.xml22
-rw-r--r--res/values-fi/strings.xml30
-rw-r--r--res/values-fr-rCA/strings.xml30
-rw-r--r--res/values-fr/strings.xml28
-rw-r--r--res/values-gl/strings.xml26
-rw-r--r--res/values-gu/strings.xml24
-rw-r--r--res/values-hi/strings.xml28
-rw-r--r--res/values-hr/strings.xml26
-rw-r--r--res/values-hu/strings.xml24
-rw-r--r--res/values-hy/strings.xml24
-rw-r--r--res/values-in/strings.xml28
-rw-r--r--res/values-is/strings.xml18
-rw-r--r--res/values-it/strings.xml32
-rw-r--r--res/values-iw/strings.xml30
-rw-r--r--res/values-ja/strings.xml22
-rw-r--r--res/values-ka/strings.xml18
-rw-r--r--res/values-kk/strings.xml36
-rw-r--r--res/values-km/strings.xml22
-rw-r--r--res/values-kn/strings.xml20
-rw-r--r--res/values-ko/strings.xml24
-rw-r--r--res/values-ky/strings.xml28
-rw-r--r--res/values-lo/strings.xml20
-rw-r--r--res/values-lt/strings.xml18
-rw-r--r--res/values-lv/strings.xml24
-rw-r--r--res/values-mk/strings.xml30
-rw-r--r--res/values-ml/strings.xml18
-rw-r--r--res/values-mn/strings.xml28
-rw-r--r--res/values-mr/strings.xml20
-rw-r--r--res/values-ms/strings.xml22
-rw-r--r--res/values-my/strings.xml22
-rw-r--r--res/values-nb/strings.xml24
-rw-r--r--res/values-ne/strings.xml24
-rw-r--r--res/values-nl/strings.xml20
-rw-r--r--res/values-or/strings.xml30
-rw-r--r--res/values-pa/strings.xml28
-rw-r--r--res/values-pl/strings.xml18
-rw-r--r--res/values-pt-rPT/strings.xml30
-rw-r--r--res/values-pt/strings.xml20
-rw-r--r--res/values-ro/strings.xml28
-rw-r--r--res/values-ru/strings.xml24
-rw-r--r--res/values-si/strings.xml18
-rw-r--r--res/values-sk/strings.xml18
-rw-r--r--res/values-sl/strings.xml26
-rw-r--r--res/values-sq/strings.xml18
-rw-r--r--res/values-sr/strings.xml20
-rw-r--r--res/values-sv/strings.xml24
-rw-r--r--res/values-sw/strings.xml28
-rw-r--r--res/values-ta/strings.xml28
-rw-r--r--res/values-te/strings.xml26
-rw-r--r--res/values-th/strings.xml24
-rw-r--r--res/values-tl/strings.xml24
-rw-r--r--res/values-tr/strings.xml26
-rw-r--r--res/values-uk/strings.xml28
-rw-r--r--res/values-ur/strings.xml26
-rw-r--r--res/values-uz/strings.xml18
-rw-r--r--res/values-vi/strings.xml26
-rw-r--r--res/values-zh-rCN/strings.xml32
-rw-r--r--res/values-zh-rHK/strings.xml28
-rw-r--r--res/values-zh-rTW/strings.xml28
-rw-r--r--res/values-zu/strings.xml18
-rwxr-xr-xres/values/strings.xml12
-rw-r--r--res/values/styles.xml4
-rw-r--r--src/com/android/customization/model/color/ColorBundle.java306
-rw-r--r--src/com/android/customization/model/color/ColorBundlePreviewExtractor.java77
-rw-r--r--src/com/android/customization/model/color/ColorCustomizationManager.java56
-rw-r--r--src/com/android/customization/model/color/ColorOption.java34
-rw-r--r--src/com/android/customization/model/color/ColorOptionImpl.kt12
-rw-r--r--src/com/android/customization/model/color/ColorOptionsProvider.java5
-rw-r--r--src/com/android/customization/model/color/ColorProvider.kt312
-rw-r--r--src/com/android/customization/model/color/ColorSeedOption.java252
-rw-r--r--src/com/android/customization/model/color/ThemedWallpaperColorResources.kt72
-rw-r--r--src/com/android/customization/model/grid/GridOption.java20
-rw-r--r--src/com/android/customization/model/grid/GridOptionViewModel.java53
-rw-r--r--src/com/android/customization/model/grid/GridOptionsManager.java2
-rw-r--r--src/com/android/customization/model/mode/DarkModeSectionController.java7
-rw-r--r--src/com/android/customization/model/theme/DefaultThemeProvider.java424
-rw-r--r--src/com/android/customization/model/theme/OverlayThemeExtractor.java293
-rw-r--r--src/com/android/customization/model/theme/ThemeBundle.java432
-rw-r--r--src/com/android/customization/model/theme/ThemeBundleProvider.java51
-rw-r--r--src/com/android/customization/model/theme/ThemeBundledWallpaperInfo.java190
-rw-r--r--src/com/android/customization/model/theme/ThemeManager.java149
-rw-r--r--src/com/android/customization/model/theme/custom/ColorOptionsProvider.java171
-rw-r--r--src/com/android/customization/model/theme/custom/CustomTheme.java106
-rw-r--r--src/com/android/customization/model/theme/custom/CustomThemeManager.java116
-rw-r--r--src/com/android/customization/model/theme/custom/FontOptionsProvider.java86
-rw-r--r--src/com/android/customization/model/theme/custom/IconOptionsProvider.java153
-rw-r--r--src/com/android/customization/model/theme/custom/ShapeOptionsProvider.java154
-rw-r--r--src/com/android/customization/model/theme/custom/ThemeComponentOption.java556
-rw-r--r--src/com/android/customization/model/theme/custom/ThemeComponentOptionProvider.java78
-rw-r--r--src/com/android/customization/model/themedicon/ThemedIconSectionController.java13
-rw-r--r--src/com/android/customization/module/CustomizationInjector.kt31
-rw-r--r--src/com/android/customization/module/CustomizationPreferences.java37
-rw-r--r--src/com/android/customization/module/CustomizationPreferences.kt38
-rw-r--r--src/com/android/customization/module/DefaultCustomizationPreferences.java59
-rw-r--r--src/com/android/customization/module/DefaultCustomizationPreferences.kt56
-rw-r--r--src/com/android/customization/module/DefaultCustomizationSections.java32
-rw-r--r--src/com/android/customization/module/StatsLogUserEventLogger.java258
-rw-r--r--src/com/android/customization/module/ThemePickerInjector.kt163
-rw-r--r--src/com/android/customization/module/ThemesUserEventLogger.java44
-rw-r--r--src/com/android/customization/module/logging/AppSessionId.kt43
-rw-r--r--src/com/android/customization/module/logging/SysUiStatsLogger.kt (renamed from src/com/android/customization/module/SysUiStatsLogger.kt)76
-rw-r--r--src/com/android/customization/module/logging/ThemesUserEventLogger.kt64
-rw-r--r--src/com/android/customization/module/logging/ThemesUserEventLoggerImpl.kt299
-rw-r--r--src/com/android/customization/picker/WallpaperPreviewer.java2
-rw-r--r--src/com/android/customization/picker/clock/data/repository/ClockPickerRepositoryImpl.kt3
-rw-r--r--src/com/android/customization/picker/clock/shared/ClockSize.kt11
-rw-r--r--src/com/android/customization/picker/clock/shared/model/ClockMetadataModel.kt1
-rw-r--r--src/com/android/customization/picker/clock/ui/binder/ClockCarouselViewBinder.kt10
-rw-r--r--src/com/android/customization/picker/clock/ui/binder/ClockSectionViewBinder.kt53
-rw-r--r--src/com/android/customization/picker/clock/ui/binder/ClockSettingsBinder.kt81
-rw-r--r--src/com/android/customization/picker/clock/ui/fragment/ClockSettingsFragment.kt20
-rw-r--r--src/com/android/customization/picker/clock/ui/section/ClockSectionController.kt62
-rw-r--r--src/com/android/customization/picker/clock/ui/view/ClockCarouselView.kt4
-rw-r--r--src/com/android/customization/picker/clock/ui/view/ClockSizeRadioButtonGroup.kt50
-rw-r--r--src/com/android/customization/picker/clock/ui/view/ClockViewFactory.kt212
-rw-r--r--src/com/android/customization/picker/clock/ui/view/ClockViewFactoryImpl.kt240
-rw-r--r--src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselItemViewModel.kt22
-rw-r--r--src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselViewModel.kt26
-rw-r--r--src/com/android/customization/picker/clock/ui/viewmodel/ClockSectionViewModel.kt51
-rw-r--r--src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModel.kt42
-rw-r--r--src/com/android/customization/picker/clock/utils/ClockDescriptionUtils.kt26
-rw-r--r--src/com/android/customization/picker/clock/utils/ThemePickerClockDescriptionUtils.kt22
-rw-r--r--src/com/android/customization/picker/color/data/repository/ColorPickerRepositoryImpl.kt12
-rw-r--r--src/com/android/customization/picker/color/data/repository/FakeColorPickerRepository.kt81
-rw-r--r--src/com/android/customization/picker/color/ui/binder/ColorPickerBinder.kt2
-rw-r--r--src/com/android/customization/picker/color/ui/fragment/ColorPickerFragment.kt81
-rw-r--r--src/com/android/customization/picker/color/ui/section/ColorSectionController.kt (renamed from src/com/android/customization/picker/color/ui/section/ColorSectionController2.kt)14
-rw-r--r--src/com/android/customization/picker/color/ui/view/ColorSectionView.kt (renamed from src/com/android/customization/picker/color/ui/view/ColorSectionView2.kt)2
-rw-r--r--src/com/android/customization/picker/color/ui/viewmodel/ColorPickerViewModel.kt12
-rw-r--r--src/com/android/customization/picker/grid/GridFragment.java299
-rw-r--r--src/com/android/customization/picker/grid/GridOptionPreviewer.java105
-rw-r--r--src/com/android/customization/picker/grid/data/repository/GridRepository.kt (renamed from src/com/android/customization/model/grid/data/repository/GridRepository.kt)6
-rw-r--r--src/com/android/customization/picker/grid/domain/interactor/GridInteractor.kt (renamed from src/com/android/customization/model/grid/domain/interactor/GridInteractor.kt)8
-rw-r--r--src/com/android/customization/picker/grid/domain/interactor/GridSnapshotRestorer.kt (renamed from src/com/android/customization/model/grid/domain/interactor/GridSnapshotRestorer.kt)4
-rw-r--r--src/com/android/customization/picker/grid/shared/model/GridOptionItemModel.kt (renamed from src/com/android/customization/model/grid/shared/model/GridOptionItemModel.kt)2
-rw-r--r--src/com/android/customization/picker/grid/shared/model/GridOptionItemsModel.kt (renamed from src/com/android/customization/model/grid/shared/model/GridOptionItemsModel.kt)2
-rw-r--r--src/com/android/customization/picker/grid/ui/binder/GridIconViewBinder.kt (renamed from src/com/android/customization/model/grid/ui/binder/GridIconViewBinder.kt)4
-rw-r--r--src/com/android/customization/picker/grid/ui/binder/GridScreenBinder.kt (renamed from src/com/android/customization/model/grid/ui/binder/GridScreenBinder.kt)8
-rw-r--r--src/com/android/customization/picker/grid/ui/fragment/GridFragment.kt (renamed from src/com/android/customization/model/grid/ui/fragment/GridFragment2.kt)20
-rw-r--r--src/com/android/customization/picker/grid/ui/section/GridSectionController.java (renamed from src/com/android/customization/model/grid/GridSectionController.java)28
-rw-r--r--src/com/android/customization/picker/grid/ui/view/GridSectionView.java (renamed from src/com/android/customization/picker/grid/GridSectionView.java)2
-rw-r--r--src/com/android/customization/picker/grid/ui/viewmodel/GridIconViewModel.kt (renamed from src/com/android/customization/model/grid/ui/viewmodel/GridIconViewModel.kt)2
-rw-r--r--src/com/android/customization/picker/grid/ui/viewmodel/GridScreenViewModel.kt (renamed from src/com/android/customization/model/grid/ui/viewmodel/GridScreenViewModel.kt)6
-rw-r--r--src/com/android/customization/picker/notifications/ui/viewmodel/NotificationSectionViewModel.kt11
-rw-r--r--src/com/android/customization/picker/preview/ui/section/PreviewWithClockCarouselSectionController.kt6
-rw-r--r--src/com/android/customization/picker/preview/ui/section/PreviewWithThemeSectionController.kt40
-rw-r--r--src/com/android/customization/picker/quickaffordance/data/repository/KeyguardQuickAffordancePickerRepository.kt38
-rw-r--r--src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractor.kt12
-rw-r--r--src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordanceSnapshotRestorer.kt9
-rw-r--r--src/com/android/customization/picker/quickaffordance/ui/adapter/SlotTabAdapter.kt4
-rw-r--r--src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordancePickerBinder.kt24
-rw-r--r--src/com/android/customization/picker/quickaffordance/ui/section/KeyguardQuickAffordanceSectionController.kt8
-rw-r--r--src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt39
-rw-r--r--src/com/android/customization/picker/theme/CustomThemeActivity.java421
-rw-r--r--src/com/android/customization/picker/theme/CustomThemeComponentFragment.java121
-rw-r--r--src/com/android/customization/picker/theme/CustomThemeNameFragment.java132
-rw-r--r--src/com/android/customization/picker/theme/CustomThemeStepFragment.java116
-rw-r--r--src/com/android/customization/picker/theme/ThemeFragment.java402
-rw-r--r--src/com/android/customization/picker/theme/ThemeFullPreviewFragment.java165
-rw-r--r--src/com/android/customization/picker/theme/ThemeInfoView.java84
-rw-r--r--src/com/android/customization/picker/theme/ThemeOptionPreviewer.java405
-rw-r--r--src/com/android/customization/picker/themedicon/ThemedIconSectionView.java14
-rw-r--r--src/com/android/customization/widget/OptionSelectorController.java469
-rw-r--r--src_override/com/android/wallpaper/module/AppModule.kt29
-rw-r--r--src_override/com/android/wallpaper/picker/di/modules/InteractorModule.kt44
-rw-r--r--tests/Android.bp30
-rw-r--r--tests/AndroidManifest.xml10
-rw-r--r--tests/AndroidTest.xml2
-rw-r--r--tests/common/Android.bp6
-rw-r--r--tests/common/src/com/android/customization/module/logging/TestThemesUserEventLogger.kt67
-rw-r--r--tests/common/src/com/android/customization/testing/TestCustomizationInjector.kt104
-rw-r--r--tests/common/src/com/android/customization/testing/TestDefaultCustomizationPreferences.java56
-rw-r--r--tests/common/src/com/android/customization/testing/TestDefaultCustomizationPreferences.kt55
-rw-r--r--tests/common/src/com/android/customization/testing/TestDrawableLayerResolver.java31
-rw-r--r--tests/common/src/com/android/customization/testing/TestPackageStatusNotifier.java33
-rw-r--r--tests/common/src/com/android/customization/testing/TestThemeManager.java48
-rw-r--r--tests/common/src/com/android/customization/testing/TestThemesUserEventLogger.java53
-rw-r--r--tests/module/src/com/android/customization/TestModule.kt83
-rw-r--r--tests/robotests/Android.bp16
-rw-r--r--tests/robotests/res/values/overlayable_icons_test.xml34
-rw-r--r--tests/robotests/src/com/android/customization/model/color/ColorCustomizationManagerTest.kt97
-rw-r--r--tests/robotests/src/com/android/customization/model/color/ColorOptionTest.kt156
-rw-r--r--tests/robotests/src/com/android/customization/model/grid/GridOptionsManagerTest.java2
-rw-r--r--tests/robotests/src/com/android/customization/model/grid/data/repository/FakeGridRepository.kt5
-rw-r--r--tests/robotests/src/com/android/customization/model/grid/domain/interactor/GridInteractorTest.kt4
-rw-r--r--tests/robotests/src/com/android/customization/model/grid/domain/interactor/GridSnapshotRestorerTest.kt4
-rw-r--r--tests/robotests/src/com/android/customization/model/grid/ui/viewmodel/GridScreenViewModelTest.kt6
-rw-r--r--tests/robotests/src/com/android/customization/model/picker/color/ui/viewmodel/ColorPickerViewModelTest.kt74
-rw-r--r--tests/robotests/src/com/android/customization/model/picker/quickaffordance/data/repository/KeyguardQuickAffordancePickerRepositoryTest.kt44
-rw-r--r--tests/robotests/src/com/android/customization/model/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractorTest.kt4
-rw-r--r--tests/robotests/src/com/android/customization/model/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModelTest.kt32
-rw-r--r--tests/robotests/src/com/android/customization/model/theme/ThemeManagerTest.java222
-rw-r--r--tests/robotests/src/com/android/customization/picker/clock/data/repository/FakeClockPickerRepository.kt9
-rw-r--r--tests/robotests/src/com/android/customization/picker/clock/ui/FakeClockViewFactory.kt93
-rw-r--r--tests/robotests/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselViewModelTest.kt15
-rw-r--r--tests/robotests/src/com/android/customization/picker/clock/ui/viewmodel/ClockSectionViewModelTest.kt95
-rw-r--r--tests/robotests/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModelTest.kt6
-rw-r--r--tests/robotests/src/com/android/customization/picker/notifications/ui/viewmodel/NotificationSectionViewModelTest.kt5
-rw-r--r--themes/res/values-en-rCA/strings.xml3
267 files changed, 4127 insertions, 11797 deletions
diff --git a/Android.bp b/Android.bp
index 4dbe399f..d3a7c514 100644
--- a/Android.bp
+++ b/Android.bp
@@ -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">"ঘড়ির রঙ &amp; সাইজ"</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">"ঘড়ির রঙ &amp; সাইজ"</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 &amp; 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 &amp; -Größe"</string>
<string name="clock_color_and_size_title" msgid="7146791234905111351">"Uhr-Farbe &amp; -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 &amp; 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 &amp; 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 &amp; size"</string>
+ <string name="clock_color_and_size_title" msgid="7146791234905111351">"Clock color &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; size‎‏‎‎‏‎"</string>
<string name="clock_color_and_size_title" msgid="7146791234905111351">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‎‏‏‏‎‏‎‎‎‎‎‎‎‏‏‎‎‎‎‏‏‎‏‎‎‏‎‎‎‎‏‏‎‎‏‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‏‏‏‎Clock color &amp; 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">"Predeter­minado"</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 &amp; 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 &amp; ukuran jam"</string>
<string name="clock_color_and_size_title" msgid="7146791234905111351">"Warna &amp; 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; 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 &amp; gaya"</string>
+ <string name="app_name" msgid="1647136562008520313">"Hiasan latar &amp; 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 &amp; saiz jam"</string>
<string name="clock_color_and_size_title" msgid="7146791234905111351">"Warna &amp; 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">"கடிகார நிறம் &amp; அளவு"</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>
@@ -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">"வால்பேப்பருடன் பொருந்தும் ஐகான், உரை &amp; பலவற்றின் வண்ணம்"</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">"గడియారం రంగు &amp; సైజు"</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>
@@ -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>