summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXin Li <delphij@google.com>2024-01-17 22:14:26 -0800
committerXin Li <delphij@google.com>2024-01-17 22:14:26 -0800
commitca0dc4eed22306afb60388fcc470b5ddb540be5e (patch)
treeaebdc230b2ed55dceb9f841d3af075a97e97d740
parentdb18f8987c18009a69397514a1b02762e8c0fc78 (diff)
parentc9a3d8cbf247e76f1e4f2b4ce6d5fd1a46d0cccb (diff)
downloadWallpaperPicker2-ca0dc4eed22306afb60388fcc470b5ddb540be5e.tar.gz
Merge Android 24Q1 Release (ab/11220357)
Bug: 319669529 Merged-In: I3e45f087b19d832c63dd70d762b15d51c8b0d93e Change-Id: Ife5c286db9cd47ae0bfb4b2a0f1253f46dd4d08d
-rw-r--r--Android.bp29
-rwxr-xr-xAndroidManifest.xml6
-rw-r--r--PREUPLOAD.cfg2
-rw-r--r--TEST_MAPPING1
-rw-r--r--aconfig/Android.bp10
-rw-r--r--aconfig/customization_picker.aconfig22
-rw-r--r--res/drawable/check_circle_full_preview.xml20
-rw-r--r--res/drawable/ic_check_wallpaper.xml25
-rw-r--r--res/drawable/ic_explore_24px.xml12
-rw-r--r--res/drawable/set_crop_button_background.xml32
-rw-r--r--res/drawable/set_crop_button_background_base.xml25
-rw-r--r--res/drawable/set_wallpaper_button_background_variant.xml33
-rw-r--r--res/drawable/set_wallpaper_button_background_variant_base.xml26
-rw-r--r--res/drawable/set_wallpaper_dialog_button.xml43
-rw-r--r--res/drawable/set_wallpaper_dialog_outlined_button.xml46
-rw-r--r--res/drawable/set_wallpaper_dialog_text_button.xml43
-rw-r--r--res/drawable/small_preview_tab_background.xml27
-rw-r--r--res/drawable/wallpaper_control_button_group_divider_horizontal.xml21
-rw-r--r--res/drawable/wallpaper_control_button_group_divider_vertical.xml (renamed from res/drawable/wallpaper_control_button_group_divider.xml)0
-rw-r--r--res/layout/collapsing_toolbar_container_layout.xml70
-rw-r--r--res/layout/floating_sheet.xml2
-rw-r--r--res/layout/floating_sheet2.xml41
-rw-r--r--res/layout/fragment_full_preview.xml45
-rw-r--r--res/layout/fragment_image_preview.xml99
-rw-r--r--res/layout/fragment_live_preview.xml102
-rw-r--r--res/layout/fragment_small_preview_foldable.xml84
-rw-r--r--res/layout/fragment_small_preview_handheld.xml83
-rw-r--r--res/layout/fragment_wallpaper_preview.xml2
-rw-r--r--res/layout/fullscreen_buttons.xml55
-rw-r--r--[-rwxr-xr-x]res/layout/item_text.xml (renamed from res/layout/activity_wallpaper_preview_demo.xml)27
-rw-r--r--res/layout/preview_action_group.xml116
-rw-r--r--res/layout/preview_foldable_card_view.xml25
-rw-r--r--res/layout/preview_handheld_card_view.xml (renamed from res/layout/fragment_small_preview.xml)17
-rw-r--r--res/layout/set_wallpaper_dialog.xml53
-rw-r--r--res/layout/wallpaper_control_button_group.xml2
-rw-r--r--res/layout/wallpaper_info_view2.xml55
-rw-r--r--res/layout/wallpaper_preview_full.xml32
-rw-r--r--res/layout/wallpaper_preview_small.xml83
-rw-r--r--res/layout/wallpaper_quick_switch_option.xml7
-rw-r--r--res/navigation/wallpaper_preview_nav_graph.xml7
-rw-r--r--res/transition/shared_view.xml21
-rw-r--r--res/values-af/strings.xml14
-rw-r--r--res/values-am/strings.xml56
-rw-r--r--res/values-ar/strings.xml20
-rw-r--r--res/values-as/strings.xml20
-rw-r--r--res/values-az/strings.xml20
-rw-r--r--res/values-b+sr+Latn/strings.xml20
-rw-r--r--res/values-be/strings.xml20
-rw-r--r--res/values-bg/strings.xml14
-rw-r--r--res/values-bn/strings.xml20
-rw-r--r--res/values-bs/strings.xml16
-rw-r--r--res/values-ca/strings.xml20
-rw-r--r--res/values-cs/strings.xml20
-rw-r--r--res/values-da/strings.xml20
-rw-r--r--res/values-de/strings.xml20
-rw-r--r--res/values-el/strings.xml20
-rw-r--r--res/values-en-rAU/strings.xml14
-rw-r--r--res/values-en-rCA/strings.xml26
-rw-r--r--res/values-en-rGB/strings.xml14
-rw-r--r--res/values-en-rIN/strings.xml14
-rw-r--r--res/values-en-rXC/strings.xml14
-rw-r--r--res/values-es-rUS/strings.xml22
-rw-r--r--res/values-es/strings.xml22
-rw-r--r--res/values-et/strings.xml14
-rw-r--r--res/values-eu/strings.xml20
-rw-r--r--res/values-fa/strings.xml24
-rw-r--r--res/values-fi/strings.xml20
-rw-r--r--res/values-fr-rCA/strings.xml20
-rw-r--r--res/values-fr/strings.xml24
-rw-r--r--res/values-gl/strings.xml20
-rw-r--r--res/values-gu/strings.xml20
-rw-r--r--res/values-hi/strings.xml18
-rw-r--r--res/values-hr/strings.xml32
-rw-r--r--res/values-hu/strings.xml16
-rw-r--r--res/values-hy/strings.xml24
-rw-r--r--res/values-in/strings.xml20
-rw-r--r--res/values-is/strings.xml20
-rw-r--r--res/values-it/strings.xml20
-rw-r--r--res/values-iw/strings.xml20
-rw-r--r--res/values-ja/strings.xml14
-rw-r--r--res/values-ka/strings.xml14
-rw-r--r--res/values-kk/strings.xml30
-rw-r--r--res/values-km/strings.xml14
-rw-r--r--res/values-kn/strings.xml16
-rw-r--r--res/values-ko/strings.xml22
-rw-r--r--res/values-ky/strings.xml24
-rw-r--r--res/values-lo/strings.xml20
-rw-r--r--res/values-lt/strings.xml20
-rw-r--r--res/values-lv/strings.xml20
-rw-r--r--res/values-mk/strings.xml28
-rw-r--r--res/values-ml/strings.xml18
-rw-r--r--res/values-mn/strings.xml24
-rw-r--r--res/values-mr/strings.xml22
-rw-r--r--res/values-ms/strings.xml24
-rw-r--r--res/values-my/strings.xml14
-rw-r--r--res/values-nb/strings.xml24
-rw-r--r--res/values-ne/strings.xml26
-rw-r--r--res/values-nl/strings.xml20
-rwxr-xr-xres/values-notnight-v27/styles.xml7
-rw-r--r--res/values-or/strings.xml22
-rw-r--r--res/values-pa/strings.xml22
-rw-r--r--res/values-pl/strings.xml14
-rw-r--r--res/values-pt-rPT/strings.xml14
-rw-r--r--res/values-pt/strings.xml20
-rw-r--r--res/values-ro/strings.xml20
-rw-r--r--res/values-ru/strings.xml20
-rw-r--r--res/values-si/strings.xml20
-rw-r--r--res/values-sk/strings.xml20
-rw-r--r--res/values-sl/strings.xml20
-rw-r--r--res/values-sq/strings.xml20
-rw-r--r--res/values-sr/strings.xml20
-rw-r--r--res/values-sv/strings.xml20
-rw-r--r--res/values-sw/strings.xml24
-rw-r--r--res/values-ta/strings.xml22
-rw-r--r--res/values-te/strings.xml28
-rw-r--r--res/values-th/strings.xml24
-rw-r--r--res/values-tl/strings.xml20
-rw-r--r--res/values-tr/strings.xml20
-rw-r--r--res/values-uk/strings.xml20
-rw-r--r--res/values-ur/strings.xml20
-rw-r--r--res/values-uz/strings.xml20
-rw-r--r--res/values-vi/strings.xml24
-rw-r--r--res/values-w600dp/dimens.xml5
-rw-r--r--res/values-zh-rCN/strings.xml22
-rw-r--r--res/values-zh-rHK/strings.xml30
-rw-r--r--res/values-zh-rTW/strings.xml20
-rw-r--r--res/values-zu/strings.xml20
-rw-r--r--res/values/attrs.xml8
-rwxr-xr-xres/values/dimens.xml24
-rw-r--r--res/values/ids.xml7
-rwxr-xr-xres/values/strings.xml10
-rwxr-xr-xres/values/styles.xml31
-rw-r--r--src/com/android/customization/model/color/WallpaperColorResources.java52
-rw-r--r--src/com/android/customization/model/color/WallpaperColorResources.kt51
-rwxr-xr-xsrc/com/android/wallpaper/asset/CurrentWallpaperAsset.java (renamed from src/com/android/wallpaper/asset/CurrentWallpaperAssetVN.java)36
-rwxr-xr-xsrc/com/android/wallpaper/asset/CurrentWallpaperAssetLoader.java (renamed from src/com/android/wallpaper/asset/CurrentWallpaperAssetVNLoader.java)38
-rwxr-xr-xsrc/com/android/wallpaper/asset/WallpaperGlideModule.java6
-rw-r--r--src/com/android/wallpaper/config/BaseFlags.kt25
-rw-r--r--src/com/android/wallpaper/model/CreativeWallpaperInfo.java53
-rwxr-xr-xsrc/com/android/wallpaper/model/CurrentWallpaperInfo.java40
-rwxr-xr-xsrc/com/android/wallpaper/model/LiveWallpaperInfo.java36
-rw-r--r--src/com/android/wallpaper/model/LiveWallpaperMetadata.java24
-rwxr-xr-xsrc/com/android/wallpaper/model/StaticWallpaperMetadata.kt9
-rwxr-xr-xsrc/com/android/wallpaper/model/SystemStaticWallpaperInfo.java10
-rwxr-xr-xsrc/com/android/wallpaper/model/WallpaperInfo.java59
-rwxr-xr-xsrc/com/android/wallpaper/model/WallpaperMetadata.java56
-rw-r--r--src/com/android/wallpaper/model/category /CollectionCategoryData.kt29
-rw-r--r--src/com/android/wallpaper/model/category /CommonCategoryData.kt20
-rw-r--r--src/com/android/wallpaper/model/category /ImageCategoryData.kt23
-rw-r--r--src/com/android/wallpaper/model/category /ThirdPartyCategoryData.kt25
-rw-r--r--src/com/android/wallpaper/model/wallpaper/CommonWallpaperData.kt8
-rw-r--r--src/com/android/wallpaper/model/wallpaper/CreativeWallpaperData.kt1
-rw-r--r--src/com/android/wallpaper/model/wallpaper/DownloadableWallpaperData.kt28
-rw-r--r--src/com/android/wallpaper/model/wallpaper/FoldableDisplay.kt21
-rw-r--r--src/com/android/wallpaper/model/wallpaper/ImageWallpaperData.kt2
-rw-r--r--src/com/android/wallpaper/model/wallpaper/LiveWallpaperData.kt3
-rw-r--r--src/com/android/wallpaper/model/wallpaper/PreviewPagerPage.kt9
-rw-r--r--src/com/android/wallpaper/model/wallpaper/ScreenOrientation.kt50
-rw-r--r--src/com/android/wallpaper/model/wallpaper/StaticWallpaperData.kt6
-rw-r--r--src/com/android/wallpaper/model/wallpaper/WallpaperDestination.kt2
-rw-r--r--src/com/android/wallpaper/model/wallpaper/WallpaperId.kt2
-rw-r--r--src/com/android/wallpaper/model/wallpaper/WallpaperModel.kt18
-rwxr-xr-xsrc/com/android/wallpaper/module/CurrentWallpaperInfoFactory.java5
-rw-r--r--src/com/android/wallpaper/module/CustomizationSections.java4
-rwxr-xr-xsrc/com/android/wallpaper/module/DailyLoggingAlarmReceiver.java132
-rwxr-xr-xsrc/com/android/wallpaper/module/DefaultCurrentWallpaperInfoFactory.java78
-rwxr-xr-xsrc/com/android/wallpaper/module/DefaultWallpaperPersister.java85
-rwxr-xr-xsrc/com/android/wallpaper/module/DefaultWallpaperPreferences.java1073
-rwxr-xr-xsrc/com/android/wallpaper/module/DefaultWallpaperPreferences.kt894
-rwxr-xr-xsrc/com/android/wallpaper/module/DefaultWallpaperRefresher.java25
-rwxr-xr-xsrc/com/android/wallpaper/module/Injector.kt14
-rwxr-xr-xsrc/com/android/wallpaper/module/NoOpUserEventLogger.java156
-rw-r--r--src/com/android/wallpaper/module/RotationWallpaperUpdateReceiver.java2
-rwxr-xr-xsrc/com/android/wallpaper/module/UserEventLogger.java266
-rwxr-xr-xsrc/com/android/wallpaper/module/WallpaperPersister.java12
-rwxr-xr-xsrc/com/android/wallpaper/module/WallpaperPicker2Injector.kt51
-rw-r--r--src/com/android/wallpaper/module/WallpaperPickerSections.java6
-rwxr-xr-xsrc/com/android/wallpaper/module/WallpaperPreferenceKeys.java8
-rwxr-xr-xsrc/com/android/wallpaper/module/WallpaperPreferences.java650
-rwxr-xr-xsrc/com/android/wallpaper/module/WallpaperPreferences.kt435
-rwxr-xr-xsrc/com/android/wallpaper/module/WallpaperRotationRefresher.java43
-rw-r--r--src/com/android/wallpaper/module/WallpaperSetter.java147
-rwxr-xr-xsrc/com/android/wallpaper/module/logging/NoOpUserEventLogger.kt55
-rwxr-xr-xsrc/com/android/wallpaper/module/logging/UserEventLogger.kt118
-rwxr-xr-xsrc/com/android/wallpaper/picker/BasePreviewActivity.java2
-rw-r--r--src/com/android/wallpaper/picker/CategorySelectorFragment.java12
-rw-r--r--src/com/android/wallpaper/picker/CustomizationPickerActivity.java24
-rw-r--r--src/com/android/wallpaper/picker/CustomizationPickerFragment.java29
-rwxr-xr-xsrc/com/android/wallpaper/picker/ImagePreviewFragment.java18
-rw-r--r--src/com/android/wallpaper/picker/LivePreviewFragment.java63
-rwxr-xr-xsrc/com/android/wallpaper/picker/PreviewFragment.java30
-rwxr-xr-xsrc/com/android/wallpaper/picker/StandalonePreviewActivity.java11
-rw-r--r--src/com/android/wallpaper/picker/WallpaperInfoHelper.java35
-rw-r--r--src/com/android/wallpaper/picker/WallpaperOnlyFragment.java3
-rw-r--r--src/com/android/wallpaper/picker/customization/data/content/WallpaperClient.kt38
-rw-r--r--src/com/android/wallpaper/picker/customization/data/content/WallpaperClientImpl.kt110
-rw-r--r--src/com/android/wallpaper/picker/customization/data/repository/WallpaperColorsRepository.kt (renamed from src/com/android/wallpaper/model/WallpaperColorsViewModel.kt)11
-rw-r--r--src/com/android/wallpaper/picker/customization/data/repository/WallpaperRepository.kt21
-rw-r--r--src/com/android/wallpaper/picker/customization/domain/interactor/WallpaperInteractor.kt14
-rw-r--r--src/com/android/wallpaper/picker/customization/domain/interactor/WallpaperSnapshotRestorer.kt25
-rw-r--r--src/com/android/wallpaper/picker/customization/shared/model/WallpaperColorsModel.kt (renamed from src/com/android/wallpaper/model/WallpaperColorsModel.kt)2
-rw-r--r--src/com/android/wallpaper/picker/customization/shared/model/WallpaperDestination.kt17
-rw-r--r--src/com/android/wallpaper/picker/customization/shared/model/WallpaperModel.kt1
-rw-r--r--src/com/android/wallpaper/picker/customization/ui/binder/ScreenPreviewBinder.kt66
-rw-r--r--src/com/android/wallpaper/picker/customization/ui/binder/WallpaperQuickSwitchOptionBinder.kt28
-rw-r--r--src/com/android/wallpaper/picker/customization/ui/binder/WallpaperQuickSwitchSectionBinder.kt3
-rw-r--r--src/com/android/wallpaper/picker/customization/ui/section/ScreenPreviewSectionController.kt63
-rw-r--r--src/com/android/wallpaper/picker/customization/ui/viewmodel/CustomizationPickerViewModel.kt5
-rw-r--r--src/com/android/wallpaper/picker/customization/ui/viewmodel/ScreenPreviewViewModel.kt21
-rw-r--r--src/com/android/wallpaper/picker/customization/ui/viewmodel/WallpaperQuickSwitchOptionViewModel.kt8
-rw-r--r--src/com/android/wallpaper/picker/customization/ui/viewmodel/WallpaperQuickSwitchViewModel.kt23
-rw-r--r--src/com/android/wallpaper/picker/di/modules/AppModule.kt (renamed from src/com/android/wallpaper/picker/di/modules/NavigationModule.kt)21
-rw-r--r--src/com/android/wallpaper/picker/di/modules/DispatchersModule.kt (renamed from src/com/android/wallpaper/dispatchers/DispatchersModule.kt)3
-rw-r--r--src/com/android/wallpaper/picker/di/modules/PreviewUtilsModule.kt69
-rw-r--r--src/com/android/wallpaper/picker/di/modules/RepositoryModule.kt65
-rw-r--r--src/com/android/wallpaper/picker/di/navigation/NavigationController.kt62
-rw-r--r--src/com/android/wallpaper/picker/di/navigation/NavigationControllerImpl.kt61
-rwxr-xr-xsrc/com/android/wallpaper/picker/individual/CreativeCategoryIndividualHolder.java5
-rwxr-xr-xsrc/com/android/wallpaper/picker/individual/IndividualPickerFragment.java38
-rw-r--r--src/com/android/wallpaper/picker/individual/IndividualPickerFragment2.kt35
-rwxr-xr-xsrc/com/android/wallpaper/picker/individual/PreviewIndividualHolder.java5
-rw-r--r--src/com/android/wallpaper/picker/preview/data/repository/WallpaperPreviewRepository.kt37
-rw-r--r--src/com/android/wallpaper/picker/preview/domain/interactor/PreviewActionsInteractor.kt43
-rw-r--r--src/com/android/wallpaper/picker/preview/domain/interactor/WallpaperPreviewInteractor.kt34
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/WallpaperPreviewActivity.kt20
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/WallpaperPreviewDemoActivity.kt61
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/binder/CropWallpaperButtonBinder.kt44
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/binder/DualPreviewPagerBinder.kt74
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/binder/DualPreviewSelectorBinder.kt95
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/binder/FullWallpaperPreviewBinder.kt155
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/binder/PreviewActionsBinder.kt181
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/binder/PreviewPagerBinder.kt65
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/binder/PreviewSelectorBinder.kt88
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/binder/SetWallpaperButtonBinder.kt30
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/binder/SetWallpaperDialogBinder.kt37
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/binder/SmallPreviewBinder.kt67
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/binder/SmallWallpaperPreviewBinder.kt97
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/binder/StaticWallpaperPreviewBinder.kt55
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/binder/TabPagerBinder.kt36
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/binder/WorkspacePreviewBinder.kt105
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/fragment/FullPreviewFragment.kt79
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/fragment/SetWallpaperDialogFragment.kt60
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/fragment/SmallPreviewFragment.kt132
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/DualPreviewViewPager.kt80
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/adapters/DualPreviewPagerAdapter.kt57
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/adapters/SinglePreviewPagerAdapter.kt47
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/adapters/TabTextPagerAdapter.kt53
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/pagetransformers/PreviewCardPageTransformer.kt42
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/pagetransformers/PreviewTabsPageTransformer.kt47
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/views/TabsPager.kt53
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/views/TabsPagerContainer.kt63
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/util/CropSizeUtil.kt69
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/util/FullResImageViewUtil.kt58
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/util/SurfaceViewUtil.kt42
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/view/DualDisplayAspectRatioLayout.kt154
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/view/FullPreviewFrameLayout.kt76
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/view/PreviewActionFloatingSheet.kt112
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/view/PreviewActionGroup.kt130
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/view/SystemScaledWallpaperPreviewSurfaceView.kt49
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/viewmodel/FullResWallpaperViewModel.kt4
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/viewmodel/PreviewActionsViewModel.kt279
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/viewmodel/StaticWallpaperPreviewViewModel.kt103
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/viewmodel/WallpaperPreviewConfigViewModel.kt33
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/viewmodel/WallpaperPreviewViewModel.kt135
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/viewmodel/WorkspacePreviewConfigViewModel.kt28
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/viewmodel/floatingSheet/InfoFloatingSheetViewModel.kt40
-rw-r--r--src/com/android/wallpaper/picker/preview/ui/viewmodel/floatingSheet/InformationFloatingSheetViewModel.kt23
-rw-r--r--src/com/android/wallpaper/picker/undo/ui/viewmodel/UndoViewModel.kt3
-rw-r--r--src/com/android/wallpaper/util/DeletableUtils.kt15
-rw-r--r--src/com/android/wallpaper/util/DisplayUtils.kt25
-rw-r--r--src/com/android/wallpaper/util/FullScreenAnimation.java512
-rw-r--r--src/com/android/wallpaper/util/LaunchSourceUtils.java14
-rw-r--r--src/com/android/wallpaper/util/LaunchSourceUtils.kt31
-rw-r--r--src/com/android/wallpaper/util/SurfaceViewUtils.java2
-rw-r--r--src/com/android/wallpaper/util/WallpaperConnection.java17
-rw-r--r--src/com/android/wallpaper/util/converter/DefaultWallpaperModelFactory.kt56
-rw-r--r--src/com/android/wallpaper/util/converter/WallpaperModelFactory.kt133
-rw-r--r--src/com/android/wallpaper/util/wallpaperconnection/WallpaperConnectionUtils.kt161
-rw-r--r--src/com/android/wallpaper/util/wallpaperconnection/WallpaperEngineConnection.kt129
-rw-r--r--src/com/android/wallpaper/util/wallpaperconnection/WallpaperServiceConnection.kt23
-rw-r--r--src/com/android/wallpaper/widget/WallpaperControlButtonGroup.java57
-rw-r--r--src/com/android/wallpaper/widget/floatingsheetcontent/WallpaperInfoContent.kt6
-rw-r--r--src/com/android/wallpaper/widget/floatingsheetcontent/WallpaperInfoView.kt44
-rw-r--r--src/com/android/wallpaper/widget/floatingsheetcontent/WallpaperModelInfoContent.kt88
-rw-r--r--src_override/com/android/wallpaper/module/AppModule.kt16
-rw-r--r--src_override/com/android/wallpaper/picker/di/modules/InteractorModule.kt36
-rw-r--r--tests/Android.bp14
-rw-r--r--tests/AndroidManifest.xml2
-rw-r--r--tests/AndroidTest.xml2
-rw-r--r--tests/common/Android.bp4
-rw-r--r--tests/common/src/com/android/wallpaper/module/logging/TestUserEventLogger.kt63
-rw-r--r--tests/common/src/com/android/wallpaper/testing/FakeWallpaperClient.kt42
-rw-r--r--tests/common/src/com/android/wallpaper/testing/TestCurrentWallpaperInfoFactory.java4
-rw-r--r--tests/common/src/com/android/wallpaper/testing/TestCustomizationSections.kt4
-rw-r--r--tests/common/src/com/android/wallpaper/testing/TestInjector.kt54
-rw-r--r--tests/common/src/com/android/wallpaper/testing/TestUserEventLogger.java316
-rw-r--r--tests/common/src/com/android/wallpaper/testing/TestWallpaperPersister.java9
-rw-r--r--tests/common/src/com/android/wallpaper/testing/TestWallpaperPreferences.java665
-rw-r--r--tests/common/src/com/android/wallpaper/testing/TestWallpaperPreferences.kt505
-rw-r--r--tests/common/src/com/android/wallpaper/testing/TestWallpaperRefresher.java18
-rw-r--r--tests/module/src/com/android/wallpaper/TestModule.kt49
-rw-r--r--tests/robotests/Android.bp2
-rw-r--r--tests/robotests/src/com/android/wallpaper/module/DefaultWallpaperPersisterTest.java8
-rw-r--r--tests/robotests/src/com/android/wallpaper/module/DefaultWallpaperPreferencesTest.kt61
-rw-r--r--tests/robotests/src/com/android/wallpaper/picker/customization/data/repository/WallpaperRepositoryTest.kt11
-rw-r--r--tests/robotests/src/com/android/wallpaper/picker/customization/domain/interactor/WallpaperInteractorTest.kt37
-rw-r--r--tests/robotests/src/com/android/wallpaper/picker/customization/domain/interactor/WallpaperSnapshotRestorerTest.kt15
-rw-r--r--tests/robotests/src/com/android/wallpaper/picker/customization/ui/viewmodel/CustomizationPickerViewModelTest.kt5
-rw-r--r--tests/robotests/src/com/android/wallpaper/picker/customization/ui/viewmodel/WallpaperQuickSwitchViewModelTest.kt29
-rw-r--r--tests/robotests/src/com/android/wallpaper/picker/preview/ui/util/CropSizeUtilTest.kt34
-rw-r--r--tests/robotests/src/com/android/wallpaper/picker/preview/ui/util/FullResImageViewUtilTest.kt21
-rw-r--r--tests/robotests/src/com/android/wallpaper/picker/undo/ui/viewmodel/UndoViewModelTest.kt2
-rw-r--r--tests/runner/Android.bp37
-rw-r--r--tests/runner/AndroidManifest.xml21
-rw-r--r--tests/runner/src/com/android/wallpaper/CustomTestRunner.kt27
-rw-r--r--tests/src/com/android/wallpaper/picker/PreviewActivityTest.java55
-rw-r--r--tests/src/com/android/wallpaper/picker/preview/ui/WallpaperPreviewActivityTest.kt27
-rw-r--r--tests/src/com/android/wallpaper/picker/preview/ui/fragment/SmallPreviewFragmentTest.kt4
318 files changed, 10084 insertions, 6132 deletions
diff --git a/Android.bp b/Android.bp
index ee39083d..8479134a 100644
--- a/Android.bp
+++ b/Android.bp
@@ -39,6 +39,7 @@ android_library {
"androidx.navigation_navigation-ui-ktx",
"androidx.navigation_navigation-fragment-ktx",
"com.google.android.material_material",
+ "com_android_wallpaper_flags_lib",
"glide-prebuilt",
"glide-gifdecoder-prebuilt",
"glide-disklrucache-prebuilt",
@@ -90,6 +91,13 @@ filegroup {
],
}
+// Production-only files that should be excluded in tests.
+filegroup {
+ name: "WallpaperPicker2_src_prod",
+ visibility: [":__subpackages__"],
+ srcs: ["src_override/com/android/wallpaper/picker/WallpapersApplication.java"],
+}
+
genrule {
name: "WallpaperPicker2_res",
tools: ["soong_zip"],
@@ -139,30 +147,11 @@ java_defaults {
java_defaults {
name: "WallpaperPicker2_defaults",
-
- static_libs: [
- "wallpaper-common-deps",
- "monet",
- "hilt_android",
- ],
+ defaults: ["WallpaperPicker2_common_defaults"],
srcs: [
- ":WallpaperPicker2_srcs",
":WallpaperPicker2_src_overrides",
],
- resource_zips: [":WallpaperPicker2_res"],
-
- certificate: "",
-
- optimize: {
- enabled: false,
- },
-
- kotlincflags: ["-Xjvm-default=all"],
- privileged: true,
- system_ext_specific: true,
-
- use_embedded_native_libs: true,
}
//
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index bcd85433..7281160b 100755
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -137,12 +137,6 @@
android:theme="@style/WallpaperTheme.Preview">
</activity>
- <activity
- android:name="com.android.wallpaper.picker.preview.ui.WallpaperPreviewDemoActivity"
- android:resizeableActivity="false"
- android:theme="@style/WallpaperTheme.Preview">
- </activity>
-
<activity android:name="com.android.wallpaper.picker.StandalonePreviewActivity"
android:resizeableActivity="false"
android:relinquishTaskIdentity="true"
diff --git a/PREUPLOAD.cfg b/PREUPLOAD.cfg
index ace848bd..f0190efa 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/WallpaperPicker2/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/aconfig/Android.bp b/aconfig/Android.bp
new file mode 100644
index 00000000..0e019d0d
--- /dev/null
+++ b/aconfig/Android.bp
@@ -0,0 +1,10 @@
+aconfig_declarations {
+ name: "com_android_wallpaper_flags",
+ package: "com.android.wallpaper",
+ srcs: ["customization_picker.aconfig"],
+}
+
+java_aconfig_library {
+ name: "com_android_wallpaper_flags_lib",
+ aconfig_declarations: "com_android_wallpaper_flags",
+} \ No newline at end of file
diff --git a/aconfig/customization_picker.aconfig b/aconfig/customization_picker.aconfig
new file mode 100644
index 00000000..7c7cc45c
--- /dev/null
+++ b/aconfig/customization_picker.aconfig
@@ -0,0 +1,22 @@
+package: "com.android.wallpaper"
+
+flag {
+ name: "multi_crop_preview_ui_flag"
+ namespace: "customization_picker"
+ description: "Enables new preview UI if both the SysUI multi crop flag and this flag are true."
+ bug: "291761856"
+}
+
+flag {
+ name: "wallpaper_restorer_flag"
+ namespace: "customization_picker"
+ description: "Enables wallpaper restorer when the flag is turned on."
+ bug: "285047815"
+}
+
+flag {
+ name: "refactor_wallpaper_category_flag"
+ namespace: "customization_picker"
+ description: "Enables wallpaper category selection according to recommended architecture when flag is turned on."
+ bug: "290840060"
+}
diff --git a/res/drawable/check_circle_full_preview.xml b/res/drawable/check_circle_full_preview.xml
new file mode 100644
index 00000000..f716d8f9
--- /dev/null
+++ b/res/drawable/check_circle_full_preview.xml
@@ -0,0 +1,20 @@
+<?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.
+-->
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:drawable="@drawable/set_crop_button_background" />
+ <item android:drawable="@drawable/ic_check_wallpaper" />
+</layer-list> \ No newline at end of file
diff --git a/res/drawable/ic_check_wallpaper.xml b/res/drawable/ic_check_wallpaper.xml
new file mode 100644
index 00000000..6c2f238f
--- /dev/null
+++ b/res/drawable/ic_check_wallpaper.xml
@@ -0,0 +1,25 @@
+<?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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="48dp"
+ android:height="48dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+ <path
+ android:fillColor="@color/system_on_primary"
+ android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41L9,16.17z"/>
+</vector>
diff --git a/res/drawable/ic_explore_24px.xml b/res/drawable/ic_explore_24px.xml
deleted file mode 100644
index 57fa1b2d..00000000
--- a/res/drawable/ic_explore_24px.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24"
- android:viewportHeight="24">
- <path
- android:fillColor="#FF000000"
- android:pathData="M12,2C6.48,2 2,6.48 2,12c0,5.52 4.48,10 10,10s10,-4.48 10,-10C22,6.48 17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8c0,-4.41 3.59,-8 8,-8s8,3.59 8,8C20,16.41 16.41,20 12,20z"/>
- <path
- android:fillColor="#FF000000"
- android:pathData="M6.5,17.5l7.51,-3.49L17.5,6.5L9.99,9.99L6.5,17.5zM12,10.9c0.61,0 1.1,0.49 1.1,1.1s-0.49,1.1 -1.1,1.1s-1.1,-0.49 -1.1,-1.1S11.39,10.9 12,10.9z"/>
-</vector>
diff --git a/res/drawable/set_crop_button_background.xml b/res/drawable/set_crop_button_background.xml
new file mode 100644
index 00000000..68149ada
--- /dev/null
+++ b/res/drawable/set_crop_button_background.xml
@@ -0,0 +1,32 @@
+<?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.
+-->
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="?android:colorControlHighlight">
+
+ <item android:id="@android:id/mask">
+ <shape android:shape="oval">
+ <padding
+ android:bottom="@dimen/wallpaper_control_button_padding"
+ android:left="@dimen/wallpaper_control_button_padding"
+ android:right="@dimen/wallpaper_control_button_padding"
+ android:top="@dimen/wallpaper_control_button_padding" />
+ <solid android:color="?android:colorControlHighlight" />
+ </shape>
+ </item>
+
+ <item android:drawable="@drawable/set_crop_button_background_base" />
+</ripple> \ No newline at end of file
diff --git a/res/drawable/set_crop_button_background_base.xml b/res/drawable/set_crop_button_background_base.xml
new file mode 100644
index 00000000..338fc3f0
--- /dev/null
+++ b/res/drawable/set_crop_button_background_base.xml
@@ -0,0 +1,25 @@
+<?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.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+ <padding
+ android:left="@dimen/wallpaper_control_button_padding"
+ android:right="@dimen/wallpaper_control_button_padding"
+ android:top="@dimen/wallpaper_control_button_padding"
+ android:bottom="@dimen/wallpaper_control_button_padding"/>
+ <solid android:color="@color/system_primary" />
+</shape> \ No newline at end of file
diff --git a/res/drawable/set_wallpaper_button_background_variant.xml b/res/drawable/set_wallpaper_button_background_variant.xml
new file mode 100644
index 00000000..1f2a7468
--- /dev/null
+++ b/res/drawable/set_wallpaper_button_background_variant.xml
@@ -0,0 +1,33 @@
+<?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.
+-->
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="?android:colorControlHighlight">
+
+ <item android:id="@android:id/mask">
+ <shape android:shape="rectangle">
+ <corners android:radius="@dimen/set_wallpaper_button_corner_radius" />
+ <padding
+ android:left="@dimen/set_wallpaper_button_horizontal_padding"
+ android:top="@dimen/set_wallpaper_button_vertical_padding"
+ android:right="@dimen/set_wallpaper_button_horizontal_padding"
+ android:bottom="@dimen/set_wallpaper_button_vertical_padding" />
+ <solid android:color="?android:colorControlHighlight" />
+ </shape>
+ </item>
+
+ <item android:drawable="@drawable/set_wallpaper_button_background_variant_base" />
+</ripple> \ No newline at end of file
diff --git a/res/drawable/set_wallpaper_button_background_variant_base.xml b/res/drawable/set_wallpaper_button_background_variant_base.xml
new file mode 100644
index 00000000..14e2448d
--- /dev/null
+++ b/res/drawable/set_wallpaper_button_background_variant_base.xml
@@ -0,0 +1,26 @@
+<?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.
+ -->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle">
+ <corners android:radius="@dimen/set_wallpaper_button_corner_radius" />
+ <padding
+ android:left="@dimen/set_wallpaper_button_horizontal_padding"
+ android:top="@dimen/set_wallpaper_button_vertical_padding"
+ android:right="@dimen/set_wallpaper_button_horizontal_padding"
+ android:bottom="@dimen/set_wallpaper_button_vertical_padding" />
+ <solid android:color="@color/system_primary" />
+</shape> \ No newline at end of file
diff --git a/res/drawable/set_wallpaper_dialog_button.xml b/res/drawable/set_wallpaper_dialog_button.xml
new file mode 100644
index 00000000..1011e805
--- /dev/null
+++ b/res/drawable/set_wallpaper_dialog_button.xml
@@ -0,0 +1,43 @@
+<?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.
+ -->
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="?android:colorControlHighlight">
+
+ <item android:id="@android:id/mask">
+ <shape android:shape="rectangle">
+ <corners android:radius="@dimen/set_wallpaper_button_corner_radius" />
+ <padding
+ android:left="@dimen/set_wallpaper_button_horizontal_padding"
+ android:top="@dimen/set_wallpaper_button_vertical_padding"
+ android:right="@dimen/set_wallpaper_button_horizontal_padding"
+ android:bottom="@dimen/set_wallpaper_button_vertical_padding" />
+ <solid android:color="?android:colorControlHighlight" />
+ </shape>
+ </item>
+ <item>
+ <shape
+ android:shape="rectangle">
+ <corners android:radius="@dimen/set_wallpaper_button_corner_radius" />
+ <padding
+ android:left="@dimen/set_wallpaper_button_horizontal_padding"
+ android:top="@dimen/set_wallpaper_button_vertical_padding"
+ android:right="@dimen/set_wallpaper_button_horizontal_padding"
+ android:bottom="@dimen/set_wallpaper_button_vertical_padding" />
+ <solid android:color="@color/system_secondary" />
+ </shape>
+ </item>
+</ripple> \ No newline at end of file
diff --git a/res/drawable/set_wallpaper_dialog_outlined_button.xml b/res/drawable/set_wallpaper_dialog_outlined_button.xml
new file mode 100644
index 00000000..af4ed7ec
--- /dev/null
+++ b/res/drawable/set_wallpaper_dialog_outlined_button.xml
@@ -0,0 +1,46 @@
+<?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.
+ -->
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="?android:colorControlHighlight">
+
+ <item android:id="@android:id/mask">
+ <shape android:shape="rectangle">
+ <corners android:radius="@dimen/set_wallpaper_button_corner_radius" />
+ <padding
+ android:left="@dimen/set_wallpaper_button_horizontal_padding"
+ android:top="@dimen/set_wallpaper_button_vertical_padding"
+ android:right="@dimen/set_wallpaper_button_horizontal_padding"
+ android:bottom="@dimen/set_wallpaper_button_vertical_padding" />
+ <solid android:color="?android:colorControlHighlight" />
+ </shape>
+ </item>
+ <item>
+ <shape
+ android:shape="rectangle">
+ <corners android:radius="@dimen/set_wallpaper_button_corner_radius" />
+ <solid android:color="@android:color/transparent"/>
+ <stroke
+ android:color="@color/system_primary"
+ android:width="1dp" />
+ <padding
+ android:left="@dimen/set_wallpaper_button_horizontal_padding"
+ android:top="@dimen/set_wallpaper_button_vertical_padding"
+ android:right="@dimen/set_wallpaper_button_horizontal_padding"
+ android:bottom="@dimen/set_wallpaper_button_vertical_padding" />
+ </shape>
+ </item>
+</ripple> \ No newline at end of file
diff --git a/res/drawable/set_wallpaper_dialog_text_button.xml b/res/drawable/set_wallpaper_dialog_text_button.xml
new file mode 100644
index 00000000..3535ea13
--- /dev/null
+++ b/res/drawable/set_wallpaper_dialog_text_button.xml
@@ -0,0 +1,43 @@
+<?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.
+ -->
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="?android:colorControlHighlight">
+
+ <item android:id="@android:id/mask">
+ <shape android:shape="rectangle">
+ <corners android:radius="@dimen/set_wallpaper_button_corner_radius" />
+ <padding
+ android:left="@dimen/set_wallpaper_button_horizontal_padding"
+ android:top="@dimen/set_wallpaper_button_vertical_padding"
+ android:right="@dimen/set_wallpaper_button_horizontal_padding"
+ android:bottom="@dimen/set_wallpaper_button_vertical_padding" />
+ <solid android:color="?android:colorControlHighlight" />
+ </shape>
+ </item>
+ <item>
+ <shape
+ android:shape="rectangle">
+ <corners android:radius="@dimen/set_wallpaper_button_corner_radius" />
+ <padding
+ android:left="@dimen/set_wallpaper_button_horizontal_padding"
+ android:top="@dimen/set_wallpaper_button_vertical_padding"
+ android:right="@dimen/set_wallpaper_button_horizontal_padding"
+ android:bottom="@dimen/set_wallpaper_button_vertical_padding" />
+ <solid android:color="@android:color/transparent" />
+ </shape>
+ </item>
+</ripple> \ No newline at end of file
diff --git a/res/drawable/small_preview_tab_background.xml b/res/drawable/small_preview_tab_background.xml
new file mode 100644
index 00000000..ced92422
--- /dev/null
+++ b/res/drawable/small_preview_tab_background.xml
@@ -0,0 +1,27 @@
+<!--
+ ~ 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.
+ ~
+ -->
+<shape
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle">
+ <solid android:color="@color/system_secondary" />
+ <corners android:radius="@dimen/small_preview_button_radius" />
+ <padding
+ android:top="@dimen/small_preview_button_padding_vertical"
+ android:bottom="@dimen/small_preview_button_padding_vertical"
+ android:left="@dimen/small_preview_button_padding_horizontal"
+ android:right="@dimen/small_preview_button_padding_horizontal"/>
+</shape> \ No newline at end of file
diff --git a/res/drawable/wallpaper_control_button_group_divider_horizontal.xml b/res/drawable/wallpaper_control_button_group_divider_horizontal.xml
new file mode 100644
index 00000000..d981ea1d
--- /dev/null
+++ b/res/drawable/wallpaper_control_button_group_divider_horizontal.xml
@@ -0,0 +1,21 @@
+<?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.
+ -->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+ <size
+ android:height="0dp"
+ android:width="@dimen/wallpaper_control_button_group_divider_space" />
+</shape> \ No newline at end of file
diff --git a/res/drawable/wallpaper_control_button_group_divider.xml b/res/drawable/wallpaper_control_button_group_divider_vertical.xml
index b8f115cc..b8f115cc 100644
--- a/res/drawable/wallpaper_control_button_group_divider.xml
+++ b/res/drawable/wallpaper_control_button_group_divider_vertical.xml
diff --git a/res/layout/collapsing_toolbar_container_layout.xml b/res/layout/collapsing_toolbar_container_layout.xml
deleted file mode 100644
index 9d20c13d..00000000
--- a/res/layout/collapsing_toolbar_container_layout.xml
+++ /dev/null
@@ -1,70 +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.
--->
-<androidx.coordinatorlayout.widget.CoordinatorLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:id="@+id/content_parent"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:fitsSystemWindows="true">
-
- <com.google.android.material.appbar.AppBarLayout
- android:id="@+id/app_bar"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="?android:attr/colorPrimary"
- android:fitsSystemWindows="true"
- android:outlineAmbientShadowColor="@android:color/transparent"
- android:outlineSpotShadowColor="@android:color/transparent"
- android:theme="@style/Theme.CollapsingToolbar.Settings">
-
- <com.google.android.material.appbar.CollapsingToolbarLayout
- android:id="@+id/collapsing_toolbar"
- android:layout_width="match_parent"
- android:layout_height="@dimen/settingslib_toolbar_layout_height"
- android:clipToPadding="false"
- app:forceApplySystemWindowInsetTop="true"
- app:extraMultilineHeightEnabled="true"
- app:contentScrim="@color/settingslib_colorSurfaceHeader"
- app:maxLines="3"
- app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
- app:scrimAnimationDuration="50"
- app:scrimVisibleHeightTrigger="@dimen/settingslib_scrim_visible_height_trigger"
- app:statusBarScrim="@null"
- app:titleCollapseMode="fade"
- app:collapsedTitleTextAppearance="@style/CollapsingToolbar.Collapsed"
- app:expandedTitleTextAppearance="@style/CollapsingToolbar.Expanded"
- app:expandedTitleMarginEnd="@dimen/expanded_title_margin_end"
- app:toolbarId="@id/action_bar">
-
- <Toolbar
- android:id="@+id/action_bar"
- android:layout_width="match_parent"
- android:layout_height="?attr/actionBarSize"
- android:theme="?android:attr/actionBarTheme"
- app:layout_collapseMode="pin"/>
-
- </com.google.android.material.appbar.CollapsingToolbarLayout>
- </com.google.android.material.appbar.AppBarLayout>
-
- <FrameLayout
- android:id="@+id/content_frame"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
-
-</androidx.coordinatorlayout.widget.CoordinatorLayout> \ No newline at end of file
diff --git a/res/layout/floating_sheet.xml b/res/layout/floating_sheet.xml
index 24aacfe2..74bfba66 100644
--- a/res/layout/floating_sheet.xml
+++ b/res/layout/floating_sheet.xml
@@ -23,7 +23,7 @@
android:id="@+id/floating_sheet_container"
android:layout_height="wrap_content"
android:layout_width="match_parent"
- android:clickable="true"
+ android:importantForAccessibility="no"
app:behavior_hideable="true"
app:behavior_peekHeight="0dp"
app:behavior_skipCollapsed="true"
diff --git a/res/layout/floating_sheet2.xml b/res/layout/floating_sheet2.xml
new file mode 100644
index 00000000..c0637f18
--- /dev/null
+++ b/res/layout/floating_sheet2.xml
@@ -0,0 +1,41 @@
+<?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.
+-->
+<androidx.coordinatorlayout.widget.CoordinatorLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent">
+ <!-- Bottom Sheet Behavior view should be a child view of CoordinatorLayout -->
+ <FrameLayout
+ android:id="@+id/floating_sheet_container"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:importantForAccessibility="no"
+ app:behavior_hideable="true"
+ app:behavior_peekHeight="0dp"
+ app:behavior_skipCollapsed="true"
+ app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
+ <!-- To enable a floating sheet, content and styling are included as child view -->
+ <FrameLayout
+ android:id="@+id/floating_sheet_content"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:padding="@dimen/wallpaper_info_pane_padding"
+ android:layout_marginHorizontal="@dimen/floating_sheet_margin"
+ android:layout_marginBottom="120dp"
+ android:background="@drawable/floating_sheet_background" />
+ </FrameLayout>
+</androidx.coordinatorlayout.widget.CoordinatorLayout> \ No newline at end of file
diff --git a/res/layout/fragment_full_preview.xml b/res/layout/fragment_full_preview.xml
index 5bae56bf..d9f59ba1 100644
--- a/res/layout/fragment_full_preview.xml
+++ b/res/layout/fragment_full_preview.xml
@@ -14,6 +14,47 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<FrameLayout
+ 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:layout_height="match_parent">
+
+ <com.android.wallpaper.picker.TouchForwardingLayout
+ android:id="@+id/touch_forwarding_layout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@android:color/transparent"
+ android:contentDescription="@string/preview_screen_description"/>
+
+ <include layout="@layout/wallpaper_preview_full"/>
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@android:color/transparent"
+ android:fitsSystemWindows="true">
+ <include
+ android:id="@+id/toolbar_container"
+ layout="@layout/section_header_content"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <Button
+ android:id="@+id/crop_wallpaper_button"
+ android:layout_width="@dimen/wallpaper_control_button_size"
+ android:layout_height="@dimen/wallpaper_control_button_size"
+ android:background="@drawable/check_circle_full_preview"
+ android:elevation="@dimen/wallpaper_preview_buttons_elevation"
+ android:layout_marginEnd="@dimen/set_wallpaper_button_margin_end"
+ android:contentDescription="@string/show_preview_controls_action"
+ android:textColor="@color/system_on_primary"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="@id/toolbar_container"
+ app:layout_constraintBottom_toBottomOf="@id/toolbar_container"/>
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+</FrameLayout>
diff --git a/res/layout/fragment_image_preview.xml b/res/layout/fragment_image_preview.xml
deleted file mode 100644
index a736e894..00000000
--- a/res/layout/fragment_image_preview.xml
+++ /dev/null
@@ -1,99 +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.
--->
-
-<FrameLayout 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:background="?android:colorBackground">
-
- <!-- Preview header (toolbar + status bar) is used to solve preview with full screen animated
- to non-full screen cases. -->
- <FrameLayout
- android:id="@+id/preview_header"
- style="@style/PreviewHeaderStyle"
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
- </FrameLayout>
-
- <FrameLayout
- android:id="@+id/separated_tabs_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom"
- android:layout_marginBottom="@dimen/bottom_actions_height"
- android:paddingHorizontal="@dimen/full_preview_page_tabs_horizontal_padding">
- <include layout="@layout/separated_tabs" />
- </FrameLayout>
-
- <FrameLayout
- android:id="@+id/screen_preview_layout"
- style="@style/ScreenPreviewLayoutStyle"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginBottom="@dimen/bottom_actions_plus_separated_tabs">
-
- <androidx.constraintlayout.widget.ConstraintLayout
- android:id="@+id/container"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_gravity="center"
- android:clipChildren="false"
- android:clipToPadding="false"
- android:paddingHorizontal="@dimen/full_preview_page_default_horizontal_padding"
- android:paddingVertical="@dimen/full_preview_page_default_padding_top">
-
- <com.android.wallpaper.picker.TouchForwardingLayout
- android:id="@+id/touch_forwarding_layout"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:background="@android:color/transparent"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintLeft_toLeftOf="parent"
- app:layout_constraintRight_toRightOf="parent"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintVertical_bias="@dimen/full_preview_page_vertical_bias">
- <include layout="@layout/wallpaper_preview_card" />
- </com.android.wallpaper.picker.TouchForwardingLayout>
- </androidx.constraintlayout.widget.ConstraintLayout>
- </FrameLayout>
-
- <FrameLayout
- android:id="@+id/section_header_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
- <include layout="@layout/section_header" android:id="@+id/toolbar_container"/>
- </FrameLayout>
-
- <FrameLayout
- android:id="@+id/fullscreen_buttons_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom|center"
- android:layout_marginBottom="@dimen/fullscreen_preview_button_margin"
- android:paddingHorizontal="@dimen/fullscreen_preview_buttons_horizontal_margin">
- <include layout="@layout/fullscreen_buttons" />
- </FrameLayout>
-
- <FrameLayout
- android:id="@+id/bottom_action_bar_container"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom">
- <include layout="@layout/bottom_action_bar" />
- </FrameLayout>
-</FrameLayout>
diff --git a/res/layout/fragment_live_preview.xml b/res/layout/fragment_live_preview.xml
deleted file mode 100644
index 2294441f..00000000
--- a/res/layout/fragment_live_preview.xml
+++ /dev/null
@@ -1,102 +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.
--->
-<FrameLayout
- 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:background="?android:colorBackground">
-
- <!-- Preview header (toolbar + status bar) is used to solve preview with full screen animated
- to non-full screen cases. -->
- <FrameLayout
- android:id="@+id/preview_header"
- style="@style/PreviewHeaderStyle"
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
- </FrameLayout>
-
- <FrameLayout
- android:id="@+id/separated_tabs_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom"
- android:layout_marginBottom="@dimen/bottom_actions_height"
- android:paddingHorizontal="@dimen/separated_tabs_horizontal_padding">
- <include layout="@layout/separated_tabs" />
- </FrameLayout>
-
- <FrameLayout
- android:id="@+id/screen_preview_layout"
- style="@style/ScreenPreviewLayoutStyle"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginBottom="@dimen/bottom_actions_plus_separated_tabs">
-
- <androidx.constraintlayout.widget.ConstraintLayout
- android:id="@+id/container"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_gravity="center"
- android:clipChildren="false"
- android:paddingHorizontal="@dimen/full_preview_page_default_horizontal_padding"
- android:paddingVertical="@dimen/full_preview_page_default_padding_top">
-
- <com.android.wallpaper.picker.TouchForwardingLayout
- android:id="@+id/touch_forwarding_layout"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:background="@android:color/transparent"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintLeft_toLeftOf="parent"
- app:layout_constraintRight_toRightOf="parent"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintVertical_bias="@dimen/full_preview_page_vertical_bias">
-
- <include
- android:id="@+id/wallpaper_full_preview_card"
- layout="@layout/wallpaper_preview_card" />
- </com.android.wallpaper.picker.TouchForwardingLayout>
- </androidx.constraintlayout.widget.ConstraintLayout>
-
- </FrameLayout>
-
- <FrameLayout
- android:id="@+id/section_header_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
- <include layout="@layout/section_header" android:id="@+id/toolbar_container"/>
- </FrameLayout>
-
- <FrameLayout
- android:id="@+id/fullscreen_buttons_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom|center"
- android:layout_marginBottom="@dimen/fullscreen_preview_button_margin"
- android:paddingHorizontal="@dimen/fullscreen_preview_buttons_horizontal_margin">
- <include layout="@layout/fullscreen_buttons" />
- </FrameLayout>
-
- <FrameLayout
- android:id="@+id/bottom_action_bar_container"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom">
- <include layout="@layout/bottom_action_bar" />
- </FrameLayout>
-</FrameLayout>
diff --git a/res/layout/fragment_small_preview_foldable.xml b/res/layout/fragment_small_preview_foldable.xml
new file mode 100644
index 00000000..2ea100b3
--- /dev/null
+++ b/res/layout/fragment_small_preview_foldable.xml
@@ -0,0 +1,84 @@
+<?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.
+ ~
+ -->
+<androidx.constraintlayout.widget.ConstraintLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:id="@+id/container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:fitsSystemWindows="true">
+
+ <include
+ android:id="@+id/toolbar_container"
+ layout="@layout/section_header_content"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <Button
+ android:id="@+id/button_set_wallpaper"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:elevation="@dimen/wallpaper_preview_buttons_elevation"
+ android:layout_marginEnd="@dimen/set_wallpaper_button_margin_end"
+ android:background="@drawable/set_wallpaper_button_background_variant"
+ android:text="@string/set_wallpaper_button_text"
+ android:textColor="@color/system_on_primary"
+ android:textAppearance="@style/WallpaperPicker.Preview.TextAppearance.NoAllCaps"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="@id/toolbar_container"
+ app:layout_constraintBottom_toBottomOf="@id/toolbar_container"/>
+
+ <com.android.wallpaper.picker.preview.ui.fragment.smallpreview.DualPreviewViewPager
+ android:id="@+id/dual_preview_pager"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingHorizontal="@dimen/small_dual_preview_edge_space"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent"/>
+
+ <com.android.wallpaper.picker.preview.ui.fragment.smallpreview.views.TabsPagerContainer
+ android:id="@+id/pager_container"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:clipChildren="false"
+ android:clipToPadding="false"
+ android:layout_marginTop="@dimen/spacing_10dp"
+ app:layout_constraintTop_toBottomOf="@id/dual_preview_pager"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <com.android.wallpaper.picker.preview.ui.view.PreviewActionFloatingSheet
+ android:id="@+id/floating_sheet"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent" />
+
+ <com.android.wallpaper.picker.preview.ui.view.PreviewActionGroup
+ android:id="@+id/action_button_group"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="@dimen/wallpaper_control_button_group_margin_end"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent"/>
+
+</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file
diff --git a/res/layout/fragment_small_preview_handheld.xml b/res/layout/fragment_small_preview_handheld.xml
new file mode 100644
index 00000000..a255ace0
--- /dev/null
+++ b/res/layout/fragment_small_preview_handheld.xml
@@ -0,0 +1,83 @@
+<?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.
+ ~
+ -->
+<androidx.constraintlayout.widget.ConstraintLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:id="@+id/container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:fitsSystemWindows="true">
+
+ <include
+ android:id="@+id/toolbar_container"
+ layout="@layout/section_header_content"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <Button
+ android:id="@+id/button_set_wallpaper"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:elevation="@dimen/wallpaper_preview_buttons_elevation"
+ android:layout_marginEnd="@dimen/set_wallpaper_button_margin_end"
+ android:background="@drawable/set_wallpaper_button_background_variant"
+ android:text="@string/set_wallpaper_button_text"
+ android:textColor="@color/system_on_primary"
+ android:textAppearance="@style/WallpaperPicker.Preview.TextAppearance.NoAllCaps"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="@id/toolbar_container"
+ app:layout_constraintBottom_toBottomOf="@id/toolbar_container"/>
+
+ <androidx.viewpager2.widget.ViewPager2
+ android:id="@+id/pager_previews"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ app:layout_constraintTop_toBottomOf="@id/toolbar_container"
+ app:layout_constraintBottom_toTopOf="@id/pager_container"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent" />
+
+ <com.android.wallpaper.picker.preview.ui.fragment.smallpreview.views.TabsPagerContainer
+ android:id="@+id/pager_container"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:clipChildren="false"
+ android:layout_marginBottom="36dp"
+ app:layout_constraintBottom_toTopOf="@id/action_button_group"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent" />
+
+ <com.android.wallpaper.picker.preview.ui.view.PreviewActionFloatingSheet
+ android:id="@+id/floating_sheet"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent" />
+
+ <com.android.wallpaper.picker.preview.ui.view.PreviewActionGroup
+ android:id="@+id/action_button_group"
+ android:layout_width="wrap_content"
+ android:layout_height="0dp"
+ android:layout_marginBottom="36dp"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent"/>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/res/layout/fragment_wallpaper_preview.xml b/res/layout/fragment_wallpaper_preview.xml
index 0299ef52..9426c75b 100644
--- a/res/layout/fragment_wallpaper_preview.xml
+++ b/res/layout/fragment_wallpaper_preview.xml
@@ -127,7 +127,7 @@
android:layout_marginTop="@dimen/wallpaper_control_button_group_margin_top"
android:layout_marginEnd="@dimen/wallpaper_control_button_group_margin_end"
app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/barrier_bottom" />
+ app:layout_constraintTop_toBottomOf="@+id/barrier_bottom"/>
<com.android.wallpaper.widget.DuoTabs
android:id="@+id/overlay_tabs"
diff --git a/res/layout/fullscreen_buttons.xml b/res/layout/fullscreen_buttons.xml
deleted file mode 100644
index d9121499..00000000
--- a/res/layout/fullscreen_buttons.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- 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.
--->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_height="@dimen/separated_tabs_height"
- android:layout_width="match_parent"
- android:orientation="horizontal"
- android:weightSum="2">
-
- <Button
- android:id="@+id/hide_ui_preview_button"
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:layout_gravity="center"
- android:layout_marginEnd="@dimen/fullscreen_preview_button_margin_between"
- android:layout_weight="1"
- android:background="@drawable/fullscreen_button_background"
- android:gravity="center"
- android:text="@string/hide_ui_preview_text"
- android:textAlignment="center"
- android:textAppearance="@style/SeparatedTabsTextAppearance"
- android:textColor="@color/text_color_on_accent"
- android:visibility="visible">
- </Button>
-
- <Button
- android:id="@+id/set_as_wallpaper_button"
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:layout_gravity="center"
- android:layout_marginStart="@dimen/fullscreen_preview_button_margin_between"
- android:layout_weight="1"
- android:background="@drawable/fullscreen_button_background"
- android:gravity="center"
- android:text="@string/set_wallpaper_button_text"
- android:textAlignment="center"
- android:textAppearance="@style/SeparatedTabsTextAppearance"
- android:textColor="@color/text_color_on_accent"
- android:visibility="visible">
- </Button>
-</LinearLayout>
diff --git a/res/layout/activity_wallpaper_preview_demo.xml b/res/layout/item_text.xml
index 0216a31b..97fe155b 100755..100644
--- a/res/layout/activity_wallpaper_preview_demo.xml
+++ b/res/layout/item_text.xml
@@ -1,4 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?><!--
+<?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");
@@ -17,20 +18,12 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
- <FrameLayout
- android:id="@+id/wallpaper_preview"
- android:layout_width="match_parent"
- android:layout_height="match_parent" >
-
- <ImageView
- android:id="@+id/low_res_image"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:scaleType="centerCrop" />
-
- <com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
- android:id="@+id/full_res_image"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
- </FrameLayout>
+ <TextView
+ android:id="@+id/preview_tab_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:background="@drawable/small_preview_tab_background"
+ android:layout_gravity="center"
+ android:textAppearance="@style/WallpaperPicker.Preview.TextAppearance.NoAllCaps"
+ android:textColor="@color/system_on_primary" />
</FrameLayout>
diff --git a/res/layout/preview_action_group.xml b/res/layout/preview_action_group.xml
new file mode 100644
index 00000000..ea08de05
--- /dev/null
+++ b/res/layout/preview_action_group.xml
@@ -0,0 +1,116 @@
+<?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:id="@+id/wallpaper_control_container"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:divider="@drawable/wallpaper_control_button_group_divider_horizontal"
+ android:showDividers="middle">
+ <ToggleButton
+ android:id="@+id/information_button"
+ android:layout_width="@dimen/wallpaper_control_button_size"
+ android:layout_height="@dimen/wallpaper_control_button_size"
+ android:background="@android:color/transparent"
+ android:contentDescription="@string/tab_info"
+ android:elevation="@dimen/wallpaper_preview_buttons_elevation"
+ android:foreground="@drawable/wallpaper_control_button_info"
+ android:textOff=""
+ android:textOn="" />
+
+ <FrameLayout
+ android:id="@+id/download_button"
+ android:layout_width="@dimen/wallpaper_control_button_size"
+ android:layout_height="@dimen/wallpaper_control_button_size">
+ <ToggleButton
+ android:id="@+id/download_button_toggle"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@android:color/transparent"
+ android:contentDescription="@string/bottom_action_bar_download"
+ android:foreground="@drawable/wallpaper_control_button_download"
+ android:textOff=""
+ android:textOn="" />
+
+ <FrameLayout
+ android:id="@+id/download_button_progress"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@drawable/wallpaper_control_button_off_background"
+ android:visibility="gone">
+ <ProgressBar
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:indeterminateTint="?android:textColorTertiary"/>
+ </FrameLayout>
+ </FrameLayout>
+
+ <ToggleButton
+ android:id="@+id/delete_button"
+ android:layout_width="@dimen/wallpaper_control_button_size"
+ android:layout_height="@dimen/wallpaper_control_button_size"
+ android:background="@android:color/transparent"
+ android:contentDescription="@string/delete_live_wallpaper"
+ android:elevation="@dimen/wallpaper_preview_buttons_elevation"
+ android:foreground="@drawable/wallpaper_control_button_delete"
+ android:textOff=""
+ android:textOn="" />
+
+ <ToggleButton
+ android:id="@+id/edit_button"
+ android:layout_width="@dimen/wallpaper_control_button_size"
+ android:layout_height="@dimen/wallpaper_control_button_size"
+ android:background="@android:color/transparent"
+ android:contentDescription="@string/edit_live_wallpaper"
+ android:elevation="@dimen/wallpaper_preview_buttons_elevation"
+ android:foreground="@drawable/wallpaper_control_button_edit"
+ android:textOff=""
+ android:textOn="" />
+
+ <ToggleButton
+ android:id="@+id/customize_button"
+ android:layout_width="@dimen/wallpaper_control_button_size"
+ android:layout_height="@dimen/wallpaper_control_button_size"
+ android:background="@android:color/transparent"
+ android:contentDescription="@string/tab_customize"
+ android:elevation="@dimen/wallpaper_preview_buttons_elevation"
+ android:foreground="@drawable/wallpaper_control_button_customize"
+ android:textOff=""
+ android:textOn="" />
+
+ <ToggleButton
+ android:id="@+id/effects_button"
+ android:layout_width="@dimen/wallpaper_control_button_size"
+ android:layout_height="@dimen/wallpaper_control_button_size"
+ android:background="@android:color/transparent"
+ android:contentDescription="@string/tab_effects"
+ android:elevation="@dimen/wallpaper_preview_buttons_elevation"
+ android:foreground="@drawable/wallpaper_control_button_effect"
+ android:textOff=""
+ android:textOn="" />
+
+ <ToggleButton
+ android:id="@+id/share_button"
+ android:layout_width="@dimen/wallpaper_control_button_size"
+ android:layout_height="@dimen/wallpaper_control_button_size"
+ android:background="@android:color/transparent"
+ android:contentDescription="@string/tab_share"
+ android:foreground="@drawable/wallpaper_control_button_share"
+ android:textOff=""
+ android:textOn="" />
+</LinearLayout>
+
diff --git a/res/layout/preview_foldable_card_view.xml b/res/layout/preview_foldable_card_view.xml
new file mode 100644
index 00000000..98984f58
--- /dev/null
+++ b/res/layout/preview_foldable_card_view.xml
@@ -0,0 +1,25 @@
+<?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.
+ ~
+ -->
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <com.android.wallpaper.picker.preview.ui.view.DualDisplayAspectRatioLayout
+ android:id="@+id/dual_preview"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"/>
+</FrameLayout> \ No newline at end of file
diff --git a/res/layout/fragment_small_preview.xml b/res/layout/preview_handheld_card_view.xml
index 600c8673..d43bc776 100644
--- a/res/layout/fragment_small_preview.xml
+++ b/res/layout/preview_handheld_card_view.xml
@@ -14,26 +14,21 @@
~ limitations under the License.
~
-->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:orientation="vertical"
android:clipChildren="false">
- <include layout="@layout/section_header" />
-
<com.android.wallpaper.picker.DisplayAspectRatioFrameLayout
android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1"
- android:paddingTop="20dp"
- android:paddingBottom="40dp">
+ android:layout_height="wrap_content"
+ android:paddingTop="@dimen/small_preview_preview_top_padding"
+ android:paddingBottom="@dimen/small_preview_preview_bottom_padding">
<include
android:id="@+id/preview"
- layout="@layout/wallpaper_preview_card"
+ layout="@layout/wallpaper_preview_small"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_gravity="center"/>
-
</com.android.wallpaper.picker.DisplayAspectRatioFrameLayout>
-</LinearLayout>
+</FrameLayout> \ No newline at end of file
diff --git a/res/layout/set_wallpaper_dialog.xml b/res/layout/set_wallpaper_dialog.xml
new file mode 100644
index 00000000..c90a4219
--- /dev/null
+++ b/res/layout/set_wallpaper_dialog.xml
@@ -0,0 +1,53 @@
+<?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.
+-->
+<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">
+
+ <TextView
+ android:id="@+id/title"
+ style="@style/TextAppearance.SetWallpaperDialog.Title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingLeft="?attr/dialogPreferredPadding"
+ android:paddingRight="?attr/dialogPreferredPadding"
+ android:paddingTop="@dimen/abc_dialog_padding_top_material"
+ android:text="Set wallpaper"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent" />
+
+ <android.widget.Space
+ android:id="@+id/titleDividerNoCustom"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/abc_dialog_title_divider_material"
+ app:layout_constraintTop_toBottomOf="@id/title"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <LinearLayout
+ android:id="@+id/previews"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ app:layout_constraintTop_toBottomOf="@+id/titleDividerNoCustom"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file
diff --git a/res/layout/wallpaper_control_button_group.xml b/res/layout/wallpaper_control_button_group.xml
index 966aa189..297d845f 100644
--- a/res/layout/wallpaper_control_button_group.xml
+++ b/res/layout/wallpaper_control_button_group.xml
@@ -19,7 +19,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
- android:divider="@drawable/wallpaper_control_button_group_divider"
+ android:divider="@drawable/wallpaper_control_button_group_divider_vertical"
android:showDividers="middle">
<ToggleButton
android:id="@+id/delete_button"
diff --git a/res/layout/wallpaper_info_view2.xml b/res/layout/wallpaper_info_view2.xml
new file mode 100644
index 00000000..737a8223
--- /dev/null
+++ b/res/layout/wallpaper_info_view2.xml
@@ -0,0 +1,55 @@
+<?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="wrap_content"
+ android:divider="@drawable/horizontal_divider_8dp"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/wallpaper_info_title"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textSize="20sp"
+ android:textColor="@color/text_color_primary"
+ android:visibility="gone"/>
+
+ <TextView
+ android:id="@+id/wallpaper_info_subtitle1"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textColor="@color/text_color_secondary"
+ android:textSize="14sp"
+ android:visibility="gone" />
+
+ <TextView
+ android:id="@+id/wallpaper_info_subtitle2"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textColor="@color/text_color_secondary"
+ android:textSize="14sp"
+ android:visibility="gone" />
+
+ <Button
+ android:id="@+id/wallpaper_info_explore_button"
+ style="@style/ExploreButtonStyle"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/explore"
+ android:visibility="gone" />
+</LinearLayout>
diff --git a/res/layout/wallpaper_preview_full.xml b/res/layout/wallpaper_preview_full.xml
new file mode 100644
index 00000000..f2aebf86
--- /dev/null
+++ b/res/layout/wallpaper_preview_full.xml
@@ -0,0 +1,32 @@
+<?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.
+-->
+<com.android.wallpaper.picker.preview.ui.view.FullPreviewFrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/wallpaper_preview_crop"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_gravity="center">
+ <com.android.wallpaper.picker.preview.ui.view.SystemScaledWallpaperPreviewSurfaceView
+ android:id="@+id/wallpaper_surface"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
+
+ <SurfaceView
+ android:id="@+id/workspace_surface"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
+
+</com.android.wallpaper.picker.preview.ui.view.FullPreviewFrameLayout> \ No newline at end of file
diff --git a/res/layout/wallpaper_preview_small.xml b/res/layout/wallpaper_preview_small.xml
new file mode 100644
index 00000000..7f35bf8e
--- /dev/null
+++ b/res/layout/wallpaper_preview_small.xml
@@ -0,0 +1,83 @@
+<?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.
+-->
+<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
+ style="@style/FullContentPreviewCard"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:clipChildren="true"
+ android:contentDescription="@string/wallpaper_preview_card_content_description">
+
+ <com.android.wallpaper.picker.preview.ui.view.SystemScaledWallpaperPreviewSurfaceView
+ android:id="@+id/wallpaper_surface"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
+
+ <SurfaceView
+ android:id="@+id/wallpaper_surface_cinematic"
+ android:visibility="gone"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
+
+ <!-- A 30% opacity black scrim that can be shown to "dim" the wallpaper. -->
+ <View
+ android:id="@+id/wallpaper_dimming_scrim"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@color/wallpaper_preview_scrim_color"
+ android:visibility="invisible"
+ android:importantForAccessibility="noHideDescendants" />
+
+ <SurfaceView
+ android:id="@+id/workspace_surface"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="invisible"
+ android:importantForAccessibility="noHideDescendants" />
+
+ <FrameLayout
+ android:id="@+id/lock_screen_preview_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:importantForAccessibility="noHideDescendants" />
+
+ <androidx.core.widget.ContentLoadingProgressBar
+ android:id="@+id/wallpaper_preview_spinner"
+ style="?android:progressBarStyleLarge"
+ android:background="@android:color/transparent"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:visibility="gone" />
+
+ <ImageView
+ android:id="@+id/wallpaper_fadein_scrim"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@color/color_surface"
+ android:forceHasOverlappingRendering="false"
+ android:importantForAccessibility="no"
+ android:visibility="invisible" />
+
+ <ImageView
+ android:id="@+id/loading_view"
+ android:layerType="hardware"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:scaleType="centerCrop"
+ android:importantForAccessibility="no" />
+
+</androidx.cardview.widget.CardView>
diff --git a/res/layout/wallpaper_quick_switch_option.xml b/res/layout/wallpaper_quick_switch_option.xml
index bd40898d..0da8e407 100644
--- a/res/layout/wallpaper_quick_switch_option.xml
+++ b/res/layout/wallpaper_quick_switch_option.xml
@@ -48,11 +48,4 @@
android:src="@drawable/check_circle_secondary_24dp"
android:visibility="gone" />
- <ProgressBar
- android:id="@+id/progress_indicator"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:visibility="gone" />
-
</FrameLayout> \ No newline at end of file
diff --git a/res/navigation/wallpaper_preview_nav_graph.xml b/res/navigation/wallpaper_preview_nav_graph.xml
index 184be46a..68723b59 100644
--- a/res/navigation/wallpaper_preview_nav_graph.xml
+++ b/res/navigation/wallpaper_preview_nav_graph.xml
@@ -24,9 +24,16 @@
<action
android:id="@+id/action_smallPreviewFragment_to_fullPreviewFragment"
app:destination="@+id/fullPreviewFragment" />
+ <action
+ android:id="@+id/action_smallPreviewFragment_to_setWallpaperDialog"
+ app:destination="@id/setWallpaperDialog" />
</fragment>
<fragment
android:id="@+id/fullPreviewFragment"
android:name="com.android.wallpaper.picker.preview.ui.fragment.FullPreviewFragment">
</fragment>
+ <dialog
+ android:id="@+id/setWallpaperDialog"
+ android:name="com.android.wallpaper.picker.preview.ui.fragment.SetWallpaperDialogFragment">
+ </dialog>
</navigation> \ No newline at end of file
diff --git a/res/transition/shared_view.xml b/res/transition/shared_view.xml
new file mode 100644
index 00000000..184d9182
--- /dev/null
+++ b/res/transition/shared_view.xml
@@ -0,0 +1,21 @@
+<?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.
+ -->
+
+<transitionSet>
+ <changeTransform />
+ <changeBounds />
+</transitionSet> \ No newline at end of file
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 36b19206..a9f9fe26 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Muurpapierkategorieë"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Stel muurpapier"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Stel muurpapier"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Stel tans muurpapier …"</string>
<string name="try_again" msgid="8278874823700921234">"Probeer weer"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Kan nie muurpapier stel nie."</string>
@@ -66,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Verken sluitskermmuurpapier"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Herlaai daaglikse tuisskermmuurpapier"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Herlaai daaglikse muurpapier"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Muurpapiervoorskouskerm"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Herlaai tans daaglikse muurpapier …"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Kon nie daaglikse muurpapier herlaai nie. Gaan jou netwerkverbinding na en probeer weer."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Muurpapiere op toestel"</string>
@@ -89,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Vee uit"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Wysig"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Vee hierdie muurpapier op jou toestel uit?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Terug"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Navigeer op"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Wysig"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Laai af"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Skyfievertoningmuurpapier"</string>
@@ -99,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Vorige"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Muurpapier"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Muurpapiervoorskou"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Voorskou van sluitskerm se muurpapier"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Voorskou van tuisskerm se muurpapier"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Die versameling bestaan nie"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Verlaat deelskermmodus en probeer weer"</string>
<string name="cancel" msgid="4970902691067201584">"Kanselleer"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Versteek UI-voorskou"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI word versteek in voorskou. Dubbeltik om te wys"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Wys UI-voorskou"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Voorskoukontroles word vertoon. Dubbeltik om te versteek"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Versteek voorskoukontroles"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Voorskoukontroles is versteek. Dubbeltik om te vertoon."</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Vertoon voorskoukontroles"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Versteek muurpapierinligting"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI wys in voorskou. Dubbeltik om te versteek"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Verander muurpapier"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Voorskou van sluitskerm se muurpapier"</string>
@@ -121,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Stel veranderinge terug?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Jou veranderinge sal nie gestoor word nie"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Nog muurpapiere"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Muurpapier %1$s"</string>
</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 4e24008e..4634e71f 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -21,25 +21,23 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"የልጣፍ ምድቦች"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"ልጣፍ ያዘጋጁ"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"ልጣፍ አቀናብር"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"ልጣፍን በማዘጋጀት ላይ…"</string>
<string name="try_again" msgid="8278874823700921234">"እንደገና ሞክር"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"ልጣፍን ማዘጋጀት አልተቻለም።"</string>
<string name="load_wallpaper_error_message" msgid="7913278480467707374">"ወደ ልጣፍ መጫን አልተቻለም። ምስሉ የተበላሸ ወይም የማይገኝ ነው።"</string>
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"በአሁኑ ጊዜ የተዘጋጀ"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"ዕለታዊ ልጣፍ"</string>
- <string name="wallpaper_destination_both" msgid="1124197176741944063">"መነሻ ገጽ እና የማያ ገጽ ቁልፍ"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
- <string name="home_screen_message" msgid="106444102822522813">"መነሻ ገጽ"</string>
- <string name="lock_screen_message" msgid="1534506081955058013">"ማያ ገጽ ቁልፍ"</string>
+ <string name="wallpaper_destination_both" msgid="1124197176741944063">"መነሻ ገፅ እና የማያ ገፅ ቁልፍ"</string>
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"ልጣፍ ይምረጡ"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"ልጣፍ ይፍጠሩ"</string>
+ <string name="home_screen_message" msgid="106444102822522813">"መነሻ ገፅ"</string>
+ <string name="lock_screen_message" msgid="1534506081955058013">"ማያ ገፅ ቁልፍ"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"መነሻ እና ቁልፍ"</string>
<string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"እንደ ልጣፍ ያቀናብሩ"</string>
- <string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"መነሻ ገጽ"</string>
- <string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"ማያ ገጽ ቁልፍ"</string>
- <string name="set_wallpaper_both_destination" msgid="2536004558738350775">"የመነሻ እና ማያ ገጽ ቁልፎች"</string>
+ <string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"መነሻ ገፅ"</string>
+ <string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"ማያ ገፅ ቁልፍ"</string>
+ <string name="set_wallpaper_both_destination" msgid="2536004558738350775">"የመነሻ እና ማያ ገፅ ቁልፎች"</string>
<string name="no_backup_image_wallpaper_label" msgid="6316627676107284851">"የምስል ልጣፍን በማሽከርከር ላይ"</string>
<string name="permission_needed_explanation" msgid="139166837541426823">"የአሁኑን ልጣፍ ለማሳየት <xliff:g id="APP_NAME">%1$s</xliff:g> የመሣሪያዎ ማከማቻ መዳረሻ ያስፈልገዋል።"</string>
<string name="permission_needed_explanation_go_to_settings" msgid="3923551582092599609">"የአሁኑን ልጣፍ እዚህ ለማሳየት ልጣፎች የመሣሪያዎን ማከማቻ መድረስ አለባቸው።\n\nይህን ቅንብር ለመቀየር ወደ የልጣፎች መተግበሪያ መረጃው የፈቃዶች አካባቢ ይሂዱ።"</string>
@@ -47,7 +45,7 @@
<string name="no_backup_image_wallpaper_description" msgid="8303268619408738057">"የሕያው ልጣፍ አገልግሎት ለተሽከርካሪ ልጣፎች"</string>
<string name="daily_refresh_tile_title" msgid="3270456074558525091">"ዕለታዊ ልጣፍ"</string>
<string name="daily_refresh_tile_subtitle" msgid="3976682014885446443">"ለማብራት ነካ ያድርጉ"</string>
- <string name="start_rotation_dialog_body_live_wallpaper_needed" msgid="5132580257563846082">"ልጣፍ በየቀኑ በራስ-ሰር ይቀየራል። ማዋቀርን ለመጨረሽ በሚቀጥለው ማያ ገጽ ላይ &lt;strong&gt;ልጣፍ አዘጋጅ&gt;/strong&gt;ን መታ ያድርጉ።"</string>
+ <string name="start_rotation_dialog_body_live_wallpaper_needed" msgid="5132580257563846082">"ልጣፍ በየቀኑ በራስ-ሰር ይቀየራል። ማዋቀርን ለመጨረሽ በሚቀጥለው ማያ ገፅ ላይ &lt;strong&gt;ልጣፍ አዘጋጅ&gt;/strong&gt;ን መታ ያድርጉ።"</string>
<string name="start_rotation_dialog_wifi_only_option_message" msgid="3126269859713666225">"የወደፊት ልጣፎችን በWi-Fi ላይ ብቻ ያውርዱ"</string>
<string name="start_rotation_dialog_continue" msgid="276678987852274872">"ቀጥል"</string>
<string name="start_rotation_progress_message" msgid="7872623873682262083">"የመጀመሪያ ልጣፍን በማውረድ ላይ…"</string>
@@ -60,14 +58,15 @@
<string name="wallpaper_disabled_by_administrator_message" msgid="1551430406714747884">"ልጣፍ ማዘጋጀት በመሣሪያዎ አስተዳዳሪ ተሰናክሏል"</string>
<string name="wallpaper_set_successfully_message" msgid="2958998799111688578">"ልጣፍ በተሳካ ሁኔታ ተዘጋጅቷል"</string>
<string name="wallpapers_unavailable_offline_message" msgid="8136405438621689532">"ልጣፎችን ለማየት የበይነመረብ ግንኙነት ያስፈልገዎታል። እባክዎ ይገናኙና እንደገና ይሞክሩ።"</string>
- <string name="currently_set_home_wallpaper_thumbnail" msgid="4022381436821898917">"በአሁኑ ጊዜ የተዘጋጀው የመነሻ ማያ ገጽ ልጣፍ ድንክዬ"</string>
- <string name="currently_set_lock_wallpaper_thumbnail" msgid="2094209303934569997">"በአሁኑ ጊዜ የተዘጋጀው የማያ ገጽ ቁልፍ ልጣፍ ድንክዬ"</string>
+ <string name="currently_set_home_wallpaper_thumbnail" msgid="4022381436821898917">"በአሁኑ ጊዜ የተዘጋጀው የመነሻ ማያ ገፅ ልጣፍ ድንክዬ"</string>
+ <string name="currently_set_lock_wallpaper_thumbnail" msgid="2094209303934569997">"በአሁኑ ጊዜ የተዘጋጀው የማያ ገፅ ቁልፍ ልጣፍ ድንክዬ"</string>
<string name="currently_set_wallpaper_thumbnail" msgid="8651887838745545107">"በአሁኑ ጊዜ የተዘጋጀው የልጣፍ ድንክዬ"</string>
<string name="wallpaper_thumbnail" msgid="569931475923605974">"የልጣፍ ድንክዬ"</string>
- <string name="explore_home_screen" msgid="8756346794535765482">"የመነሻ ማያ ገጽ ልጣፍን አስስ"</string>
- <string name="explore_lock_screen" msgid="268938342103703665">"የማያ ገጽ ቁልፍ ልጣፍን አስስ"</string>
- <string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"የዕለታዊ መነሻ ማያ ገጽ ልጣፍን ያድሱ"</string>
+ <string name="explore_home_screen" msgid="8756346794535765482">"የመነሻ ማያ ገፅ ልጣፍን አስስ"</string>
+ <string name="explore_lock_screen" msgid="268938342103703665">"የማያ ገፅ ቁልፍ ልጣፍን አስስ"</string>
+ <string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"የዕለታዊ መነሻ ማያ ገፅ ልጣፍን ያድሱ"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"ዕለታዊ ልጣፍን ያድሱ"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"የልጣፍ ቅድመ ዕይታ ማያ ገጽ"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"ዕለታዊ ልጣፍን በማደስ ላይ…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"ዕለታዊ ልጣፍን ማደስ አልተሳካም። እባክዎ የእርስዎን የአውታረ መረብ ግንኙነት ይፈትሹ እና እንደገና ይሞክሩ።"</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"የመሣሪያ ላይ ልጣፎች"</string>
@@ -81,7 +80,7 @@
<string name="center_wallpaper_position" msgid="4166894762352288883">"መሃል"</string>
<string name="center_crop_wallpaper_position" msgid="1681980019815343348">"መሃል ላይ ከርክም"</string>
<string name="stretch_wallpaper_position" msgid="5002680983147456935">"ወጥር"</string>
- <string name="preview" msgid="1774602101743861071">"ቅድመ-እይታ"</string>
+ <string name="preview" msgid="1774602101743861071">"ቅድመ-ዕይታ"</string>
<string name="tab_info" msgid="818614080690111416">"መረጃ"</string>
<string name="tab_customize" msgid="2533745409174959960">"ብጁ አድርግ"</string>
<string name="tab_effects" msgid="3213606157589233901">"ተጽዕኖዎች"</string>
@@ -91,24 +90,32 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"ሰርዝ"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"አርትዕ"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"ይህ ልጣፍ ከመሣሪያዎ ይሰረዝ?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"ተመለስ"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"ወደ ላይ አስስ"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"አርትዕ"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"አውርድ"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"የተንሸራታች ትዕይንት ልጣፍ"</string>
<string name="bottom_action_bar_apply" msgid="2983308349819178932">"ተግብር"</string>
- <string name="accessibility_preview_pager" msgid="1839869637405028575">"ገጽ <xliff:g id="ID_1">%1$d</xliff:g> ከ<xliff:g id="ID_2">%2$d</xliff:g>"</string>
+ <string name="accessibility_preview_pager" msgid="1839869637405028575">"ገፅ <xliff:g id="ID_1">%1$d</xliff:g> ከ<xliff:g id="ID_2">%2$d</xliff:g>"</string>
<string name="next_page_content_description" msgid="6268461446679584152">"ቀጣይ"</string>
<string name="previous_page_content_description" msgid="1138597031571078429">"ቀዳሚ"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"ልጣፍ"</string>
- <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"የልጣፍ ቅድመ-እይታ"</string>
+ <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"የልጣፍ ቅድመ-ዕይታ"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"የማያ ገጽ ቁልፍ ልጣፍ ቅድመ ዕይታ"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"የመነሻ ማያ ገጽ ልጣፍ ቅድመ ዕይታ"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"ስብስቡ የለም"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"እባክዎ ከየተከፈለ ማያ ገጽ ሁነታ ይውጡ እና እንደገና ይሞክሩ"</string>
<string name="cancel" msgid="4970902691067201584">"ይቅር"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"የዩአይ ቅድመ-ዕይታን ደብቅ"</string>
- <string name="hint_hide_ui_preview" msgid="4527603797714586070">"ዩአይ በቅድመ-እይታ ውስጥ ተደብቋል። ላለመደበቅ ሁለቴ መታ ያድርጉ"</string>
+ <string name="hint_hide_ui_preview" msgid="4527603797714586070">"ዩአይ በቅድመ-ዕይታ ውስጥ ተደብቋል። ላለመደበቅ ሁለቴ መታ ያድርጉ"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"የዩአይ ቅድመ-ዕይታን አሳይ"</string>
- <string name="hint_show_ui_preview" msgid="2744155435325318349">"ዩአይ በቅድመ-እይታ ውስጥ ይታያል። ለመደበቅ ሁለቴ መታ ያድርጉ"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"የቅድመ ዕይታ መቆጣጠሪያዎች ይታያሉ። ለመደበቅ ሁለቴ መታ ያድርጉ"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"የቅድመ ዕይታ መቆጣጠሪያዎችን ደብቅ"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"የቅድመ ዕይታ መቆጣጠሪያዎች ተደብቀዋል። ለማሳየት ሁለቴ መታ ያድርጉ"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"የቅድመ ዕይታ መቆጣጠሪያዎችን አሳይ"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"የልጣፍ መረጃን ደብቅ"</string>
+ <string name="hint_show_ui_preview" msgid="2744155435325318349">"ዩአይ በቅድመ-ዕይታ ውስጥ ይታያል። ለመደበቅ ሁለቴ መታ ያድርጉ"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"ልጣፍን ይቀይሩ"</string>
- <string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"የማያ ገጽ ቁልፍ ልጣፍ ቅድመ-እይታ"</string>
+ <string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"የማያ ገፅ ቁልፍ ልጣፍ ቅድመ-ዕይታ"</string>
<string name="apply_btn" msgid="5764555565943538528">"ተግብር"</string>
<string name="accessibility_customize_hidden" msgid="6320568529768181691">"ማበጀት ተደብቋል"</string>
<string name="accessibility_customize_shown" msgid="590964727831547651">"ማበጀት ታይቷል"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"ለውጦች ዳግም ይጀመሩ?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"የእርስዎ ለውጦች አይቀመጡም"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"ተጨማሪ ልጣፎች"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"ልጣፍ %1$s"</string>
</resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index b27f4738..a1fb1e5d 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"فئات الخلفيات"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"الضبط كخلفية"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"ضبط كصورة خلفية"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"جارٍ تعيين الخلفية…"</string>
<string name="try_again" msgid="8278874823700921234">"إعادة المحاولة"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"يتعذّر تعيين الخلفية."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"الخلفية المختارة حاليًا"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"خلفية يومية"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"الشاشة الرئيسية وشاشة القفل"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"اختيار خلفية"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"إنشاء خلفية"</string>
<string name="home_screen_message" msgid="106444102822522813">"الشاشة الرئيسية"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"شاشة القفل"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"الشاشة الرئيسية وشاشة القفل"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"استكشاف خلفية شاشة القفل"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"إعادة تحميل خلفية الشاشة الرئيسية اليومية"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"إعادة تحميل الخلفية اليومية"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"شاشة معاينة الخلفية"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"تجري إعادة تحميل الخلفية اليومية…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"تعذّرت إعادة تحميل الخلفية اليومية. يُرجى التحقق من اتصالك بالشبكة وإعادة المحاولة."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"خلفيات على الجهاز"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"حذف"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"تعديل"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"هل تريد حذف هذه الخلفية من جهازك؟"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"رجوع"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"الانتقال إلى الأعلى"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"تعديل"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"تنزيل"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"خلفية عرض الشرائح"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"الصفحة السابقة"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"الخلفية"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"معاينة عرض الشرائح"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"معاينة خلفية شاشة القفل"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"معاينة خلفية الشاشة الرئيسية"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"المجموعة غير متوفرة."</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"يُرجى الخروج من \"وضع تقسيم الشاشة\" ثم إعادة المحاولة."</string>
<string name="cancel" msgid="4970902691067201584">"إلغاء"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"إخفاء معاينة واجهة المستخدم"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"تم إخفاء معاينة واجهة مستخدم. انقر مرّتين للإظهار."</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"عرض معاينة واجهة المستخدم"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"عناصر التحكّم في المعاينة معروضة. انقر مرّتين لإخفائها."</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"إخفاء عناصر التحكّم في المعاينة"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"عناصر التحكّم في المعاينة مخفية. انقر مرّتَين لإظهارها."</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"إظهار عناصر التحكّم في المعاينة"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"إخفاء معلومات الخلفية"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"تم عرض معاينة واجهة مستخدم. انقر مرّتين للإخفاء."</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"تغيير الخلفية"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"معاينة خلفية شاشة القفل"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"هل تريد إعادة ضبط التغييرات؟"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"لن يتم حفظ تغييراتك."</string>
<string name="more_wallpapers" msgid="8116268433411881705">"المزيد من الخلفيات"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"‏الخلفية %1$s"</string>
</resources>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index b81b668d..283cfc27 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"ৱালপেপাৰৰ শিতানসমূহ"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"ৱালপেপাৰ ছেট কৰক"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"ৱালপেপাৰ ছেট কৰক"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"ৱালপেপাৰ ছেট কৰি থকা হৈছে…"</string>
<string name="try_again" msgid="8278874823700921234">"আকৌ চেষ্টা কৰক"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"ৱালপেপাৰ ছেট কৰিব পৰা নগ\'ল।"</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"বর্তমান ছেট কৰি থোৱা ৱালপেপাৰ"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"দৈনিক ৱালপেপাৰ"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"গৃহ আৰু লক স্ক্ৰীন"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"ৱালপেপাৰ বাছনি কৰক"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"ৱালপেপাৰ সৃষ্টি কৰক"</string>
<string name="home_screen_message" msgid="106444102822522813">"গৃহ স্ক্ৰীন"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"লক স্ক্ৰীন"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"গৃহ স্ক্ৰীন আৰু লক স্ক্ৰীন"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"লক স্ক্ৰীনৰ ৱালপেপাৰ অন্বেষণ কৰক"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"গৃহ স্ক্ৰীনৰ দৈনিক ৱালপেপাৰ ৰিফ্ৰেশ্ব কৰক"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"দৈনিক ৱালপেপাৰ ৰিফ্ৰেশ্ব কৰক"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"ৱালপেপাৰৰ পূৰ্বদৰ্শনৰ স্ক্ৰীন"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"দৈনিক ৱালপেপাৰ ৰিফ্ৰেশ্ব কৰি থকা হৈছে …"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"দৈনিক ৱালপেপাৰ ৰিফ্ৰেশ্ব কৰিব পৰা নগ\'ল। অনুগ্ৰহ কৰি আপোনাৰ নেটৱর্ক সংযোগ পৰীক্ষা কৰক আৰু আকৌ চেষ্টা কৰক।"</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"ডিভাইচত থকা ৱালপেপাৰ"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"মচক"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"সম্পাদনা কৰক"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"আপোনাৰ ডিভাইচটোৰ পৰা এই ৱালপেপাৰখন মচিবনে?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"উভতি যাওক"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"ওপৰলৈ নেভিগে’ট কৰক"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"সম্পাদনা কৰক"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"ডাউনল’ড কৰক"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"ৱালপেপাৰৰ শ্লাইডশ্ব’ দেখুৱাওক"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"পূৰ্বৱৰ্তী"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"ৱালপেপাৰ"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"ৱালপেপাৰৰ পূৰ্বদৰ্শন"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"লক স্ক্ৰীনৰ ৱালপেপাৰৰ পূৰ্বদৰ্শন"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"গৃহ স্ক্ৰীনৰ ৱালপেপাৰৰ পূৰ্বদৰ্শন"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"এই সংগ্ৰহটোৰ অস্তিত্ব নাই"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"অনুগ্ৰহ কৰি, বিভাজিত-স্ক্ৰীন ম’ডটোৰ পৰা বাহিৰ হৈ পুনৰ চেষ্টা কৰক"</string>
<string name="cancel" msgid="4970902691067201584">"বাতিল কৰক"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"UIৰ পূৰ্বদৰ্শন লুকুৱাওক"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"পূর্বদর্শনত UI লুকুওৱা হৈছে। দেখুৱাবলৈ দুবাৰ টিপক"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"UIৰ পূৰ্বদৰ্শন দেখুৱাওক"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"পূৰ্বদৰ্শনৰ নিয়ন্ত্ৰণসমূহ দেখুওৱা হয়। লুকুৱাবলৈ দুবাৰ টিপক"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"পূৰ্বদৰ্শনৰ নিয়ন্ত্ৰণসমূহ লুকুৱাওক"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"পূৰ্বদৰ্শনৰ নিয়ন্ত্ৰণসমূহ লুকুওৱা হয়। দেখুৱাবলৈ দুবাৰ টিপক"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"পূৰ্বদৰ্শনৰ নিয়ন্ত্ৰণসমূহ দেখুৱাওক"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"ৱালপেপাৰৰ তথ্য লুকুৱাওক"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"পূর্বদর্শনত UI দেখুওৱা হৈছে। লুকুৱাবলৈ দুবাৰ টিপক"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"ৱালপেপাৰ সলনি কৰক"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"লকস্ক্ৰীনৰ ৱালপেপাৰৰ পূৰ্বদৰ্শন"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"সালসলনিসমূহ ৰিছেট কৰিবনে?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"আপোনাৰ সম্পাদনাবোৰ ছেভ কৰা নহ’ব"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"অধিক ৱালপেপাৰ"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"ৱালপেপাৰ %1$s"</string>
</resources>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 38ed1f93..28bab644 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Divar kağızı kateqoriyaları"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Divar kağızı ayarlayın"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Divar kağızı ayarlayın"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Divar kağızı ayarlanır..."</string>
<string name="try_again" msgid="8278874823700921234">"Yenidən sınayın"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Divar kağızı ayarlamaq mümkün olmadı."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Hazırda ayarlanıb"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Günlük divar kağızları"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Əsas səhifə &amp; Ekran kilidi"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Divar kağızı seçin"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Divar kağızı yaradın"</string>
<string name="home_screen_message" msgid="106444102822522813">"Əsas ekran"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Ekran kilidi"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Əsas səhifə və Kilid"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Ekran kilidi divar kağızını araşdırın"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Əsas ekranın divar kağızını gündəlik yeniləyin"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Divar kağızını gündəlik yeniləyin"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Divar kağızını önizləmə ekranı"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Günlük divar kağızı yenilənir..."</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Gündəlik divar kağızını yeniləmək olmadı. Şəbəkəni yoxlayın və yenidən cəhd edin."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Cihazdakı divar kağızları"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Silin"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Redaktə edin"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Bu divar kağızı cihazınızdan silinsin?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Geri"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Yuxarı keçin"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Düzəliş"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Endirin"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Divar Kağızı Slaydşou"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Əvvəlki"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Divar kağızı"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Divar Kağızı önizləməsi"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Kilid ekranında divar kağızı önizləməsi"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Əsas ekranda divar kağızı önizləməsi"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Kolleksiya mövcud deyil"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Bölünmüş ekran rejimindən çıxıb, yenidən cəhd edin"</string>
<string name="cancel" msgid="4970902691067201584">"Ləğv edin"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"UI Önizləməsini gizlədin"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI önizləmədə gizlədilib. Göstərmək üçün iki dəfə toxunun"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"UI Önizləməsini göstərin"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Önizləmə nizamlayıcıları göstərilir. Gizlətmək üçün iki dəfə toxunun"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Önizləmə nizamlayıcılarını gizlədin"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Önizləmə nizamlayıcıları gizlədilib. Göstərmək üçün iki dəfə toxunun"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Önizləmə nizamlayıcılarını göstərin"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Divar kağızı məlumatını gizlədin"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI önizləmədə göstərilir. Gizlətmək üçün iki dəfə toxunun"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Divar kağızını dəyişin"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Kilid ekranında divar kağızı önizləməsi"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Dəyişikliklər sıfırlansın?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Dəyişiklikləriniz yadda saxlanılmayacaq"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Digər divar kağızları"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Divar kağızı %1$s"</string>
</resources>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index fe4235da..d3907ad6 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Kategorije pozadina"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Podesi pozadinu"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Podesi pozadinu"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Podešava se pozadina…"</string>
<string name="try_again" msgid="8278874823700921234">"Probajte ponovo"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Podešavanje pozadine nije uspelo."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Trenutno podešena"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Dnevna pozadina"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Početni i zaključani ekran"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Odaberite pozadinu"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Napravite pozadinu"</string>
<string name="home_screen_message" msgid="106444102822522813">"Početni ekran"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Zaključan ekran"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Početni i zaključani ekran"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Istražite pozadinu za zaključani ekran"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Osveži dnevnu pozadinu za početni ekran"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Osveži dnevnu pozadinu"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Ekran prikaza pozadine"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Dnevna pozadina se osvežava…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Osvežavanje dnevne pozadine nije uspelo. Proverite mrežnu vezu i probajte ponovo."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Pozadine na uređaju"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Izbriši"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Izmeni"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Želite da izbrišete ovu pozadinu sa uređaja?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Nazad"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Idi nagore"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Izmeni"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Preuzmi"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Projekcija slajdova u pozadini"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Prethodna"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Pozadina"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Pregled pozadine"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Prikaz pozadine zaključanog ekrana"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Prikaz pozadine početnog ekrana"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Kolekcija ne postoji"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Napustite režim podeljenog ekrana i probajte ponovo"</string>
<string name="cancel" msgid="4970902691067201584">"Otkaži"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Sakrij korisnički interfejs"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Krijemo korisnič. interfejs. Otkrijte u dva dodira"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Prikaži korisnički interfejs"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Kontrole pregleda se prikazuju. Sakrijte u dva dodira"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Sakrij kontrole pregleda"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Kontrole pregleda su sakrivene. Otkrijte u dva dodira"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Prikaži kontrole pregleda"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Sakrij informacije o pozadini"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Prikazujemo korisn. interf. Sakrijte u dva dodira"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Promenite pozadinu"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Pregled pozadine zaključanog ekrana"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Želite da resetujete promene?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Promene neće biti sačuvane"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Još pozadina"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Pozadina %1$s"</string>
</resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index b40d6da0..b6fadf5a 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Катэгорыі шпалер"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Усталяваць як шпалеры"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Задаць шпалеры"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Усталяванне шпалер…"</string>
<string name="try_again" msgid="8278874823700921234">"Паўтарыць спробу"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Не ўдалося ўсталяваць як шпалеры."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Усталяванае як шпалеры"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Шпалеры на кожны дзень"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Галоўная старонка і экран блакіроўкі"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Выбраць шпалеры"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Стварыць шпалеры"</string>
<string name="home_screen_message" msgid="106444102822522813">"Галоўны экран"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Экран блакіроўкі"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Стандартна"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Праглядзець шпалеры экрана блакіроўкі"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Абнавіць шпалеры галоўнага экрана на кожны дзень"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Абнавіць шпалеры на кожны дзень"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Экран перадпрагляду шпалер"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Абнаўленне шпалер на кожны дзень…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Не атрымалася абнавіць шпалеры на кожны дзень. Спраўдзіце падключэнне да сеткі і паўтарыце спробу."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Шпалеры на прыладзе"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Выдаліць"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Змяніць"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Выдаліць шпалеры з вашай прылады?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Назад"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Перайсці ўверх"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Змяніць"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Спампаваць"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Паказаць шпалеры як слайд-шоу"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Назад"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Шпалеры"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Перадпрагляд шпалер"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Перадпрагляд шпалер экрана блакіроўкі"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Перадпрагляд шпалер галоўнага экрана"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Калекцыя не існуе"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Выйдзіце з рэжыму падзеленага экрана і паўтарыце спробу"</string>
<string name="cancel" msgid="4970902691067201584">"Скасаваць"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Схаваць перадпрагляд UI"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Інтэрфейс схаваны. Двойчы націсніце, каб убачыць"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Паказаць перадпрагляд UI"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Элементы кіравання перадпраглядам паказваюцца. Каб схаваць іх, націсніце двойчы."</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Схаваць элементы кіравання перадпраглядам"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Элементы кіравання перадпраглядам схаваны. Каб яны паказваліся, націсніце двойчы."</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Паказаць элементы кіравання перадпраглядам"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Схаваць інфармацыю пра шпалеры"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Перадпрагляд: UI бачны. Схавайце двайным дотыкам"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Змяніць шпалеры"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Перадпрагляд шпалер экрана блакіроўкі"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Скінуць змяненні?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Вашы змяненні не будуць захаваны"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Дадатковыя шпалеры"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Шпалеры – %1$s"</string>
</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 801dcc35..02a60596 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Категории на тапетите"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Задаване на тапета"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Задаване на тапет"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Тапетът се задава…"</string>
<string name="try_again" msgid="8278874823700921234">"Нов опит"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Тапетът не може да се зададе."</string>
@@ -66,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Разглеждане на тапета на заключения екран"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Опресняване на тапета за деня на началния екран"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Опресняване на тапета за деня"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Екран за визуализация на тапета"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Тапетът за деня се опреснява…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Опресняването на тапета за деня не бе успешно. Моля, проверете връзката си с мрежата и опитайте отново."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Тапети, съхранявани на у-вото"</string>
@@ -89,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Изтриване"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Редактиране"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Този тапет да се изтрие ли от устройството ви?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Назад"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Придвижване нагоре"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Редактиране"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Изтегляне"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Тапет със слайдшоу"</string>
@@ -99,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Назад"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Тапет"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Визуализация на тапета"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Визуализация на тапета на заключения екран"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Визуализация на тапета на началния екран"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Колекцията не съществува"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Излезте от режима за разделен екран и опитайте отново"</string>
<string name="cancel" msgid="4970902691067201584">"Отказ"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Скриване на визуал. на ПИ"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"ПИ е скрит във визуализацията. Докоснете два пъти за показване."</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Показване на визуал. на ПИ"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Контролите за визуализация са показани. Докоснете два пъти за скриване"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Скриване на контролите за визуализация"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Контролите за визуализация са скрити. Докоснете два пъти за показване"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Показване на контролите за визуализация"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Скриване на информацията за тапета"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"ПИ се показва във визуализацията. Докоснете два пъти за скриване."</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Промяна на тапета"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Визуализация на тапета на закл. екран"</string>
@@ -121,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Да се нулират ли промените?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Промените ви няма да бъдат запазени"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Още тапети"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Тапет %1$s"</string>
</resources>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 96f12398..a242b425 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"ওয়ালপেপারের বিভাগ"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"ওয়ালপেপার সেট করুন"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"ওয়ালপেপার সেট করুন"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"ওয়ালপেপার সেট করা হচ্ছে…"</string>
<string name="try_again" msgid="8278874823700921234">"আবার চেষ্টা করুন"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"ওয়ালপেপার সেট করা গেল না।"</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"বর্তমানে সেট করা রয়েছে"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"প্রতিদিনের ওয়ালপেপার"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"হোম ও লক স্ক্রিন"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"ওয়ালপেপার বেছে নিন"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"ওয়ালপেপার তৈরি করুন"</string>
<string name="home_screen_message" msgid="106444102822522813">"হোম স্ক্রিন"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"লক স্ক্রিন"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"হোম ও লক"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"লক স্ক্রিন ওয়ালপেপার ঘুরে দেখুন"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"প্রতিদিনের হোম স্ক্রিন ওয়ালপেপার রিফ্রেশ করুন"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"প্রতিদিনের ওয়ালপেপার রিফ্রেশ করুন"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"ওয়ালপেপার প্রিভিউ স্ক্রিন"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"প্রতিদিনের ওয়ালপেপার রিফ্রশ করা হচ্ছে…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"প্রতিদিনের ওয়ালপেপার রিফ্রেশ করা গেল না। অনুগ্রহ করে আপনার কানেকশন যাচাই করে আবার চেষ্টা করুন।"</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"ডিভাইসে থাকা ওয়ালপেপার"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"মুছে দিন"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"এডিট করুন"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"আপনার ডিভাইস থেকে এই ওয়ালপেপার মুছে দেবেন?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"ফিরে যান"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"উপরের দিকে নেভিগেট করুন"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"এডিট করুন"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"ডাউনলোড করুন"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"ওয়ালপেপার স্লাইডশো দেখুন"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"আগের"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"ওয়ালপেপার"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"ওয়ালপেপার প্রিভিউ করুন"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"লকস্ক্রিন ওয়ালপেপার প্রিভিউ"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"হোম স্ক্রিন ওয়ালপেপার প্রিভিউ"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"কালেকশন উপলভ্য নেই"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"\'স্প্লিট স্ক্রিন\' মোড থেকে বেরিয়ে আবার চেষ্টা করুন"</string>
<string name="cancel" msgid="4970902691067201584">"বাতিল করুন"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"UI প্রিভিউ লুকান"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"প্রিভিউতে UI লুকানো হয়েছে। দেখাতে ডবল ট্যাপ করুন"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"UI প্রিভিউ দেখুন"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"প্রিভিউ কন্ট্রোল দেখানো আছে। লুকাতে ডবল ট্যাপ করুন"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"প্রিভিউ কন্ট্রোল লুকান"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"প্রিভিউ কন্ট্রোল লুকানো আছে। দেখতে ডবল ট্যাপ করুন"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"প্রিভিউ কন্ট্রোল দেখুন"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"ওয়ালপেপার সম্পর্কিত তথ্য লুকান"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"প্রিভিউতে UI দেখানো হয়েছে। লুকাতে ডবল ট্যাপ করুন"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"ওয়ালপেপার পরিবর্তন করুন"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"লকস্ক্রিন ওয়ালপেপার প্রিভিউ"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"পরিবর্তন রিসেট করবেন?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"আপনার করা পরিবর্তন সেভ করা হবে না"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"আরও ওয়ালপেপার"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"ওয়ালপেপার %1$s"</string>
</resources>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index a1d5c8e5..9ee36c18 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Kategorije pozadinskih slika"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Postavi pozadinsku sliku"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Postavi pozadinsku sliku"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Postavljanje pozadinske slike…"</string>
<string name="try_again" msgid="8278874823700921234">"Pokušaj ponovo"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Nije moguće postaviti pozadinsku sliku."</string>
@@ -66,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Istražite pozadinske slike zaključanog ekrana"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Osvježite dnevnu pozadinsku sliku na početnom ekranu"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Osvježite dnevnu pozadinsku sliku"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Ekran pregleda pozadinske slike"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Osvježavanje dnevne pozadinske slike…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Osvježavanje dnevne pozadinske slike nije uspjelo. Provjerite vezu s mrežom i pokušajte ponovo."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Pozadinske slike na uređaju"</string>
@@ -89,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Izbriši"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Uredite"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Izbrisati ovu pozadinsku sliku s uređaja?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Nazad"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Kretanje nagore"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Uredi"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Preuzmi"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Pozadinska slika prezentacije"</string>
@@ -99,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Nazad"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Pozadinska slika"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Pregled pozadinske slike"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Pregled pozadinske slike na zaključanom ekranu"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Pregled pozadinske slike na početnom ekranu"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Kolekcija ne postoji"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Izađite iz načina rada podijeljenog ekrana i pokušajte ponovo"</string>
<string name="cancel" msgid="4970902691067201584">"Otkaži"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Sakrij pregled UI-a"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI skriven u pregledu. Dodirnite dvaput da otkrijete"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Prikaži pregled UI-a"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Kontrole pregleda se prikazuju. Dodirnite dvaput da ih sakrijete"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Sakrij kontrole pregleda"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Kontrole pregleda su sakrivene. Dodirnite dvaput da ih prikažete"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Prikaži kontrole pregleda"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Sakrije informacije o pozadinskoj slici"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI prikazan u pregledu. Dodirnite dvaput da sakrijte"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Promijenite pozadinsku sliku"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Pregled pozadinske slike zaključanog ekrana"</string>
@@ -115,10 +124,11 @@
<string name="settings_snackbar_description" msgid="890168814524778486">"Omogućite fajlove i medije u postavkama."</string>
<string name="settings_snackbar_enable" msgid="5992112808061426068">"Omogući"</string>
<string name="open_my_photos" msgid="4107196465713868381">"Otvori Moje fotografije"</string>
- <string name="lock_screen_tab" msgid="6672930765010407652">"Zaključavanje ekrana"</string>
+ <string name="lock_screen_tab" msgid="6672930765010407652">"Zaključani ekran"</string>
<string name="home_screen_tab" msgid="1080445697837877526">"Početni ekran"</string>
<string name="reset" msgid="4945445169532850631">"Poništi"</string>
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Poništiti izmjene?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Vaše izmjene se neće sačuvati"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Više pozadinskih slika"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Pozadinska slika %1$s"</string>
</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 388fd51b..9be4522c 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Categories de fons de pantalla"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Estableix el fons de pantalla"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Defineix fons de pantalla"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"S\'està establint el fons de pantalla…"</string>
<string name="try_again" msgid="8278874823700921234">"Torna-ho a provar"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"No es pot establir el fons de pantalla."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Establert actualment"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Fons de pantalla diari"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Pantalla d\'inici i de bloqueig"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Tria un fons de pantalla"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Crea un fons de pantalla"</string>
<string name="home_screen_message" msgid="106444102822522813">"Pantalla d\'inici"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Pantalla de bloqueig"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Pantalla d\'inici i de bloqueig"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Explora el fons de pantalla de la pantalla de bloqueig"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Actualitza el fons de pantalla diari de la pantalla d\'inici"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Actualitza el fons de pantalla diari"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Pantalla de previsualització del fons de pantalla"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"S\'està actualitzant el fons de pantalla diari…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"No s\'ha pogut actualitzar el fons de pantalla diari. Comprova la connexió a la xarxa i torna-ho a provar."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Fons de pantalla del dispositiu"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Suprimeix"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Edita"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Vols suprimir aquest fons de pantalla del dispositiu?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Enrere"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Navega cap amunt"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Edita"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Baixa"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Fons de pantalla de diapositives"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Anterior"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Fons de pantalla"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Previsualitz. fons de pantalla"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Previsualització del fons de pantalla de bloqueig"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Previsualització del fons de pantalla d\'inici"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"La col·lecció no existeix"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Surt del mode de pantalla dividida i torna-ho a provar"</string>
<string name="cancel" msgid="4970902691067201584">"Cancel·la"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Amaga la previsualització de IU"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"IU amagada a la prev. Doble toc per deixar d\'amagar."</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Mostra la previsualització de IU"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Els controls de previsualització estan visibles. Fes doble toc per amagar-los."</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Amaga els controls de previsualització"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Els controls de previsualització estan amagats. Fes doble toc per mostrar-los."</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Mostra els controls de previsualització"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Amaga la informació del fons de pantalla"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"La IU es mostra a la prev. Fes doble toc per amagar."</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Canvia el fons de pantalla"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Previsual. fons de pantalla de bloqueig"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Vols restablir els canvis?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Els teus canvis no es desaran"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Més fons de pantalla"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Fons de pantalla %1$s"</string>
</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 840b2320..c891e9d8 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Kategorie tapet"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Nastavit jako tapetu"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Nastavit tapetu"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Nastavování tapety…"</string>
<string name="try_again" msgid="8278874823700921234">"Zkusit znovu"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Tapetu nelze nastavit."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Aktuálně nastaveno"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Denní tapeta"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Plocha a obrazovka uzamčení"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Vyberte tapetu"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Vytvořte tapetu"</string>
<string name="home_screen_message" msgid="106444102822522813">"Plocha"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Obrazovka uzamčení"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Plocha a uzamknutí"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Prozkoumat tapetu obrazovky uzamčení"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Obnovit denní tapetu plochy"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Obnovit denní tapetu"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Obrazovka náhledu tapety"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Obnovování denní tapety…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Denní tapetu se nepodařilo obnovit. Zkontrolujte připojení k síti a zkuste to znovu."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Tapety v zařízení"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Smazat"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Upravit"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Smazat tuto tapetu ze zařízení?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Zpět"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Přejít nahoru"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Upravit"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Stáhnout"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Tapeta prezentace"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Předchozí"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Tapeta"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Náhled prezentace"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Náhled tapety na obrazovce uzamčení"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Náhled tapety na ploše"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Sbírka neexistuje"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Ukončete režim rozdělené obrazovky a zkuste to znovu"</string>
<string name="cancel" msgid="4970902691067201584">"Zrušit"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Skrýt náhled rozhraní"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"V náhledu je skryto uživatelské rozhraní. Zobrazíte ho dvojitým klepnutím."</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Zobrazit náhled rozhraní"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Zobrazují se ovládací prvky náhledu. Skryjete je dvojitým klepnutím."</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Skrýt ovládací prvky náhledu"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Ovládací prvky náhledu jsou skryté. Zobrazíte je dvojitým klepnutím."</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Zobrazit ovládací prvky náhledu"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Skrýt informace o tapetě"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"V náhledu je zobrazeno uživatelské rozhraní. Skryjete ho dvojitým klepnutím."</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Změnit tapetu"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Náhled tapety na obrazovce uzamčení"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Resetovat změny?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Změny nebudou uloženy"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Více tapet"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Tapeta %1$s"</string>
</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index c7f866aa..65ef3f72 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Kategorier for baggrunde"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Angiv baggrund"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Angiv baggrund"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Angiver baggrund…"</string>
<string name="try_again" msgid="8278874823700921234">"Prøv igen"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Baggrunden kunne ikke angives."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Nuværende"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Daglig baggrund"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Start- og låseskærm"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Vælg en baggrund"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Opret en baggrund"</string>
<string name="home_screen_message" msgid="106444102822522813">"Startskærm"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Låseskærm"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Start- og låseskærm"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Udforsk låseskærmens baggrund"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Opdater daglig baggrund på startskærmen"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Opdater daglig baggrund"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Skærm til forhåndsvisning af baggrund"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Opdaterer daglig baggrund…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Opdateringen af din daglige baggrund mislykkedes. Tjek din netværksforbindelse, og prøv igen."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Baggrunde på enheden"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Slet"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Rediger"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Vil du slette denne baggrund fra din enhed?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Tilbage"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Gå op"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Rediger"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Download"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Baggrund med diasshow"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Forrige"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Baggrund"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Forhåndsvisning af baggrund"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Forhåndsvisning af låseskærmens baggrund"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Forhåndsvisning af startskærmens baggrund"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Samlingen eksisterer ikke"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Afslut opdelt skærm, og prøv igen"</string>
<string name="cancel" msgid="4970902691067201584">"Annuller"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Skjul forhåndsvisning af brugerflade"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Brugerfladen er skjult i forhåndsvisning. Tryk to gange for at vise den."</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Vis forhåndsvisning af brugerflade"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Styringselementer til forhåndsvisning vises. Tryk to gange for at skjule dem"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Skjul styringselementer til forhåndsvisning"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Styringselementer til forhåndsvisning er skjult. Tryk to gange for at vise dem."</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Vis styringselementer til forhåndsvisning"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Skjul oplysninger om baggrund"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Brugerfladen er synlig i forhåndsvisning. Tryk to gange for at skjule den."</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Skift baggrund"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Forhåndsvisning af låseskærmens baggrund"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Vil du nulstille ændringerne?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Dine ændringer gemmes ikke"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Flere baggrunde"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Baggrund %1$s"</string>
</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 57c419e3..e2b50c45 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Hintergrundkategorien"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Als Hintergrund festlegen"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Hintergrund festlegen"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Hintergrund wird festgelegt…"</string>
<string name="try_again" msgid="8278874823700921234">"Noch einmal versuchen"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Hintergrund kann nicht festgelegt werden."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Derzeit festgelegt"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Täglicher Hintergrund"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Startbildschirm &amp; Sperrbildschirm"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Hintergrund auswählen"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Hintergrund erstellen"</string>
<string name="home_screen_message" msgid="106444102822522813">"Startbildschirm"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Sperrbildschirm"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Startbildschirm &amp; Sperrbildschirm"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Mehr zum Hintergrund des Sperrbildschirms"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Täglichen Hintergrund des Startbildschirms aktualisieren"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Täglichen Hintergrund aktualisieren"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Vorschau für Bildschirmhintergrund"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Täglicher Hintergrund wird aktualisiert…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Aktualisierung des täglichen Hintergrunds fehlgeschlagen. Prüfe die Netzwerkverbindung und versuche es noch einmal."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Hintergründe auf dem Gerät"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Löschen"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Bearbeiten"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Diesen Hintergrund von deinem Gerät löschen?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Zurück"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Nach oben"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Bearbeiten"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Herunterladen"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Diashowhintergrund"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Zurück"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Hintergrund"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Hintergrundvorschau"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Vorschau für Sperrbildschirmhintergrund"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Vorschau für Startbildschirmhintergrund"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Die Sammlung existiert nicht"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Bitte beende den Splitscreen-Modus und versuch es noch einmal"</string>
<string name="cancel" msgid="4970902691067201584">"Abbrechen"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"UI-Vorschau ausblenden"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI in der Vorschau ausgeblendet. Zum Einblenden doppeltippen."</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"UI-Vorschau einblenden"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Steuerelemente für die Vorschau werden angezeigt. Zum Ausblenden doppeltippen."</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Steuerelemente für die Vorschau ausblenden"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Steuerelemente für die Vorschau sind ausgeblendet. Zum Einblenden doppeltippen."</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Steuerelemente für die Vorschau anzeigen"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Informationen zum Hintergrund ausblenden"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI in der Vorschau angezeigt. Zum Ausblenden doppeltippen."</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Hintergrund ändern"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Vorschau für Sperrbildschirmhintergrund"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Änderungen zurücksetzen?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Änderungen werden nicht gespeichert."</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Weitere Hintergrundbilder"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Hintergrund %1$s"</string>
</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index bc3706da..e5960f17 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Κατηγορίες ταπετσαρίας"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Ορισμός ταπετσαρίας"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Ορισμός ταπετσαρίας"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Ορισμός ταπετσαρίας…"</string>
<string name="try_again" msgid="8278874823700921234">"Δοκιμάστε ξανά"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Αδυναμία ορισμού ταπετσαρίας."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Έχει οριστεί"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Ημερήσια ταπετσαρία"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Αρχική οθόνη και οθόνη κλειδώματος"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Επιλέξτε μια ταπετσαρία"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Δημιουργήστε μια ταπετσαρία"</string>
<string name="home_screen_message" msgid="106444102822522813">"Αρχική οθόνη"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Οθόνη κλειδώματος"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Αρχική και κλειδώματος"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Εξερεύνηση ταπετσαρίας οθόνης κλειδώματος"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Ανανέωση ημερήσιας ταπετσαρίας αρχικής οθόνης"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Ανανέωση ημερήσιας ταπετσαρίας"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Οθόνη προεπισκόπησης ταπετσαρίας"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Ανανέωση ημερήσιας ταπετσαρίας…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Αποτυχία ανανέωσης ημερήσιας ταπετσαρίας. Ελέγξτε τη σύνδεση δικτύου σας και δοκιμάστε ξανά."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Ταπετσαρίες στη συσκευή"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Διαγραφή"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Επεξεργασία"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Να διαγραφεί αυτή η ταπετσαρία από τη συσκευή σας;"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Πίσω"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Πλοήγηση προς τα επάνω"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Επεξεργασία"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Λήψη"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Ταπετσαρία: Προβολή διαφανειών"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Προηγούμενη"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Ταπετσαρία"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Προεπισκόπηση ταπετσαρίας"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Προεπισκόπηση ταπετσαρίας οθόνης κλειδώματος"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Προεπισκόπηση ταπετσαρίας αρχικής οθόνης"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Η συλλογή δεν υπάρχει."</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Βγείτε από τη λειτουργία διαχωρισμού οθόνης και δοκιμάστε ξανά"</string>
<string name="cancel" msgid="4970902691067201584">"Ακύρωση"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Απόκρυψη προεπ/σης διεπ.χρήστη"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Η διεπαφή χρήστη είναι κρυφή σε προεπισκόπηση. Διπλό πάτημα για κατάργηση απόκρυψης"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Εμφάνιση προεπ/σης διεπ.χρήστη"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Γίνεται προβολή των στοιχείων ελέγχου προεπισκόπησης. Πατήστε δύο φορές για απόκρυψη"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Απόκρυψη στοιχείων ελέγχου προεπισκόπησης"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Γίνεται απόκρυψη των στοιχείων ελέγχου προεπισκόπησης. Πατήστε δύο φορές για εμφάνιση"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Εμφάνιση στοιχείων ελέγχου προεπισκόπησης"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Απόκρυψη πληροφοριών ταπετσαρίας"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Η διεπαφή χρήστη εμφανίζεται σε προεπισκόπηση. Διπλό πάτημα για απόκρυψη"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Αλλαγή ταπετσαρίας"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Προεπ/ση ταπετσαρίας οθόνης κλειδώματος"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Να γίνει επαναφορά αλλαγών;"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Οι αλλαγές σας δεν θα αποθηκευτούν"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Περισσότερες ταπετσαρίες"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Ταπετσαρία %1$s"</string>
</resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 2f85b0a2..14892174 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Wallpaper categories"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Set wallpaper"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Set wallpaper"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Setting wallpaper…"</string>
<string name="try_again" msgid="8278874823700921234">"Try again"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Unable to set wallpaper."</string>
@@ -66,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Explore lock screen wallpaper"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Refresh daily home screen wallpaper"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Refresh daily wallpaper"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Wallpaper preview screen"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Refreshing daily wallpaper…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Failed to refresh daily wallpaper. Please check your network connection and try again."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"On-device wallpapers"</string>
@@ -89,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Delete"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Edit"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Delete this wallpaper from your device?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Back"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Navigate up"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Edit"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Download"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Slideshow wallpaper"</string>
@@ -99,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Previous"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Wallpaper"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Wallpaper preview"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Lock screen wallpaper preview"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Home screen wallpaper preview"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"The collection doesn\'t exist"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Please exit split screen mode and try again"</string>
<string name="cancel" msgid="4970902691067201584">"Cancel"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Hide UI preview"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI is hidden in preview. Double-tap to unhide"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Show UI preview"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Preview controls are displayed. Double tap to hide"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Hide preview controls"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Preview controls are hidden. Double tap to show"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Show preview controls"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Hide wallpaper info"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI is displayed in preview. Double-tap to hide"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Change wallpaper"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Lockscreen wallpaper preview"</string>
@@ -121,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Reset changes?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Your changes won\'t be saved"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"More wallpapers"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Wallpaper %1$s"</string>
</resources>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index 14e2a076..5c73531b 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -21,7 +21,8 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Wallpaper categories"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Set wallpaper"</string>
+ <!-- no translation found for set_wallpaper_button_text (5445978864530156290) -->
+ <skip />
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Setting wallpaper…"</string>
<string name="try_again" msgid="8278874823700921234">"Try again"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Unable to set wallpaper."</string>
@@ -68,6 +69,8 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Explore lock screen wallpaper"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Refresh daily home screen wallpaper"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Refresh daily wallpaper"</string>
+ <!-- no translation found for preview_screen_description (3386387053327775919) -->
+ <skip />
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Refreshing daily wallpaper…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Failed to refresh daily wallpaper. Please check your network connection and try again."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"On-device wallpapers"</string>
@@ -94,7 +97,8 @@
<skip />
<!-- no translation found for delete_wallpaper_confirmation (1905114562243802354) -->
<skip />
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Back"</string>
+ <!-- no translation found for bottom_action_bar_back (2620581414970740784) -->
+ <skip />
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Edit"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Download"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Slideshow wallpaper"</string>
@@ -104,11 +108,27 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Previous"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Wallpaper"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Wallpaper preview"</string>
+ <!-- no translation found for lock_wallpaper_preview_card_content_description (5236839857695985498) -->
+ <skip />
+ <!-- no translation found for home_wallpaper_preview_card_content_description (4059418716070821630) -->
+ <skip />
<string name="collection_not_exist_msg" msgid="3504852962885064842">"The collection doesn\'t exist"</string>
+ <!-- no translation found for wallpaper_exit_split_screen (1928870664619591636) -->
+ <skip />
<string name="cancel" msgid="4970902691067201584">"Cancel"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Hide UI preview"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI is hidden in preview. Double-tap to unhide"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Show UI preview"</string>
+ <!-- no translation found for hide_preview_controls_content_description (894958599274977655) -->
+ <skip />
+ <!-- no translation found for hide_preview_controls_action (3419260118386783295) -->
+ <skip />
+ <!-- no translation found for show_preview_controls_content_description (908147864005440602) -->
+ <skip />
+ <!-- no translation found for show_preview_controls_action (7700775001986890400) -->
+ <skip />
+ <!-- no translation found for hide_wallpaper_info_action (6572492484253895374) -->
+ <skip />
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI is displayed in preview. Double-tap to hide"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Change wallpaper"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Lockscreen wallpaper preview"</string>
@@ -132,4 +152,6 @@
<skip />
<!-- no translation found for more_wallpapers (8116268433411881705) -->
<skip />
+ <!-- no translation found for recent_wallpaper_label (3996353584371118367) -->
+ <skip />
</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 2f85b0a2..14892174 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Wallpaper categories"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Set wallpaper"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Set wallpaper"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Setting wallpaper…"</string>
<string name="try_again" msgid="8278874823700921234">"Try again"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Unable to set wallpaper."</string>
@@ -66,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Explore lock screen wallpaper"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Refresh daily home screen wallpaper"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Refresh daily wallpaper"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Wallpaper preview screen"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Refreshing daily wallpaper…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Failed to refresh daily wallpaper. Please check your network connection and try again."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"On-device wallpapers"</string>
@@ -89,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Delete"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Edit"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Delete this wallpaper from your device?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Back"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Navigate up"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Edit"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Download"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Slideshow wallpaper"</string>
@@ -99,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Previous"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Wallpaper"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Wallpaper preview"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Lock screen wallpaper preview"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Home screen wallpaper preview"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"The collection doesn\'t exist"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Please exit split screen mode and try again"</string>
<string name="cancel" msgid="4970902691067201584">"Cancel"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Hide UI preview"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI is hidden in preview. Double-tap to unhide"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Show UI preview"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Preview controls are displayed. Double tap to hide"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Hide preview controls"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Preview controls are hidden. Double tap to show"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Show preview controls"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Hide wallpaper info"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI is displayed in preview. Double-tap to hide"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Change wallpaper"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Lockscreen wallpaper preview"</string>
@@ -121,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Reset changes?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Your changes won\'t be saved"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"More wallpapers"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Wallpaper %1$s"</string>
</resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 2f85b0a2..14892174 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Wallpaper categories"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Set wallpaper"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Set wallpaper"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Setting wallpaper…"</string>
<string name="try_again" msgid="8278874823700921234">"Try again"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Unable to set wallpaper."</string>
@@ -66,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Explore lock screen wallpaper"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Refresh daily home screen wallpaper"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Refresh daily wallpaper"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Wallpaper preview screen"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Refreshing daily wallpaper…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Failed to refresh daily wallpaper. Please check your network connection and try again."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"On-device wallpapers"</string>
@@ -89,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Delete"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Edit"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Delete this wallpaper from your device?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Back"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Navigate up"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Edit"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Download"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Slideshow wallpaper"</string>
@@ -99,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Previous"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Wallpaper"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Wallpaper preview"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Lock screen wallpaper preview"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Home screen wallpaper preview"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"The collection doesn\'t exist"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Please exit split screen mode and try again"</string>
<string name="cancel" msgid="4970902691067201584">"Cancel"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Hide UI preview"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI is hidden in preview. Double-tap to unhide"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Show UI preview"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Preview controls are displayed. Double tap to hide"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Hide preview controls"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Preview controls are hidden. Double tap to show"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Show preview controls"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Hide wallpaper info"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI is displayed in preview. Double-tap to hide"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Change wallpaper"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Lockscreen wallpaper preview"</string>
@@ -121,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Reset changes?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Your changes won\'t be saved"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"More wallpapers"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Wallpaper %1$s"</string>
</resources>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index aebbd793..fe1a5f46 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‏‎‎‏‎‎‎‎‏‎‏‎Wallpaper categories‎‏‎‎‏‎"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‎‏‏‎‏‎‏‎‏‎‏‎‎‎‏‏‏‏‎‎‏‏‎‏‏‎‎‏‎‏‏‎‎‏‏‏‎‏‎‏‎‏‏‏‏‎‎‏‎‏‏‏‎‎Set Wallpaper‎‏‎‎‏‎"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‏‎‏‎‎‎‎‎‎‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‎‏‎‏‎‎‏‏‎‏‎‏‏‏‎‏‎‏‏‎‎‎‎‎‎‏‎‎Set wallpaper‎‏‎‎‏‎"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‎‏‏‏‎‏‏‎‎‏‎‎‏‎‏‎‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‏‎‏‎‏‏‎Setting wallpaper…‎‏‎‎‏‎"</string>
<string name="try_again" msgid="8278874823700921234">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‏‎‎‎‏‏‏‏‎‎‎‏‏‎‎‏‎‎‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‏‏‎‎‏‎‎‏‎‎Try again‎‏‎‎‏‎"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‏‎‏‎‏‏‏‎‏‏‎‎‎‎‎‏‎‏‎‏‎‏‏‎‎‏‎‏‎‏‎‎‎‎‎‎‏‎‎‏‏‏‎‏‏‎‎‏‎‏‎‎Unable to set wallpaper.‎‏‎‎‏‎"</string>
@@ -66,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‎‏‏‎‏‏‏‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‎‏‎‎‏‎‏‏‏‎‎‎‎‎‎‏‏‏‎‎‎‏‎Explore lock screen wallpaper‎‏‎‎‏‎"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‏‎‎‏‎‏‎‎‏‏‎‎‏‎‎‎‏‎‏‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‎‏‎‏‏‏‎‏‏‎‎‏‎‏‎‎‎‏‏‎Refresh daily home screen wallpaper‎‏‎‎‏‎"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‎‎‎‏‏‎‏‎‎‎‏‎‏‏‎‏‎‎‏‏‏‏‎‎‏‏‎‏‏‎‏‎‏‎‎‏‏‎‏‏‏‏‏‏‎Refresh daily wallpaper‎‏‎‎‏‎"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‎‏‎‏‎‏‎‏‎‎‏‎‎‏‏‎‎‏‎‏‎‏‎‏‏‏‏‎‎‎‏‎‏‎‏‏‏‏‎Wallpaper preview screen‎‏‎‎‏‎"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‎‎‎‎‏‏‏‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‎‏‎Refreshing daily wallpaper…‎‏‎‎‏‎"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‏‎‏‎‏‏‏‏‎‏‏‎‏‎‏‏‎‎‎‎‎‎‏‏‏‏‎‎‏‏‏‎‏‏‏‎‏‎‎‏‏‏‎‏‎‏‏‎‏‏‏‎‎Failed to refresh daily wallpaper. Please check your network connection and try again.‎‏‎‎‏‎"</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‏‏‏‎‏‏‎‏‏‎‎‎‎‎‏‏‎‏‎‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‎‎‎‎‏‎‏‏‎‏‎‎‏‎‏‏‎‎‎On-device wallpapers‎‏‎‎‏‎"</string>
@@ -89,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‎‎‎‏‎‏‏‎‏‎‏‎‎‏‏‎‏‏‏‎‏‎‎‏‏‎‏‎‎‏‎‎‎‎‏‎‏‏‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‎‎‏‎Delete‎‏‎‎‏‎"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‏‎‏‏‏‎‏‎‏‎‎‎‎‎‎‎‎‏‎‏‎‏‏‏‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‏‎‏‏‏‎‎‏‎‏‏‏‎‏‎Edit‎‏‎‎‏‎"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‎‎‎‎‎‏‎‏‎‎‏‏‏‎‎‏‏‎‎‏‏‏‎‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‎‏‏‏‏‎‎‏‎‎Delete this wallpaper from your device?‎‏‎‎‏‎"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‎‎‎‏‎‏‎‎‏‏‎‎‎‏‎‏‎‏‎‎‏‏‏‏‎‎‏‎‏‎Back‎‏‎‎‏‎"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‎‏‎‏‏‎‎‏‏‏‎‏‎‎‏‏‎‎‏‏‎‎‎‎‏‎‏‎‎‏‎‎‏‎‏‎‎‎‎‎‎‏‏‎‎‎‎‎Navigate up‎‏‎‎‏‎"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‎‎‎‎‎‏‏‏‎‎‎‏‏‎‎‏‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‏‎‏‎‎Edit‎‏‎‎‏‎"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‎‏‏‎‏‏‏‎‎‏‎‎‏‎‏‎‏‎‎‏‏‎‏‏‏‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‎‎‎‏‎‏‏‎‏‎Download‎‏‎‎‏‎"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‎‏‏‎‎‎‏‎‎‎‏‏‎‎‏‎‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‏‎‏‎‎‏‎‏‎‏‏‏‎‏‏‎‎‎‏‎‎Slideshow Wallpaper‎‏‎‎‏‎"</string>
@@ -99,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‎‏‎‎‎‏‏‎‏‏‏‎‏‏‏‏‎‏‎‎‎‏‏‏‎‏‎Previous‎‏‎‎‏‎"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‏‎‎‏‏‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‏‏‎‎‏‎‏‎‎‏‎‎‏‎‎‏‎‏‎‏‎‎‎Wallpaper‎‏‎‎‏‎"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‎‏‏‎‏‎‎‏‎‏‎‏‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‏‏‎‏‎‎‏‏‎‏‏‎‎‎‏‎‎‏‎‏‏‎‎‎‎Wallpaper preview‎‏‎‎‏‎"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‎‎‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎‏‏‎‎‎‏‏‏‏‎‎‏‎‎‏‏‏‎‎‎‏‏‏‏‎‏‎‏‏‎‏‎‎Lock screen wallpaper preview‎‏‎‎‏‎"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‎‏‎‏‏‏‏‏‎‎‏‏‏‏‎‏‎‎‎‎‏‎‎‎‎‏‎‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎Home screen wallpaper preview‎‏‎‎‏‎"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‎‎‎‏‏‏‎‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‎‎‎‎‏‎‏‎‏‏‏‏‎‏‎‏‎‏‏‎‎‎‏‎‎‎‏‎‏‎‎The collection doesn\'t exist‎‏‎‎‏‎"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‎‎‏‎‎‏‎‏‏‏‎‎‏‏‎‏‎‎‏‏‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‏‎‏‎‎‎‎‏‏‏‏‏‎‏‎‏‎‎‎Please exit split screen mode and try again‎‏‎‎‏‎"</string>
<string name="cancel" msgid="4970902691067201584">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‏‏‎‏‎‏‎‎‏‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‎‎‎‎‎‏‎‎‎‎‎‏‏‎‎‎‎‎Cancel‎‏‎‎‏‎"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‎‏‎‏‏‎‏‎‎‎‏‏‏‎Hide UI Preview‎‏‎‎‏‎"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‎‏‎‎‎‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‏‏‏‎‎‏‏‏‏‏‎‎‏‏‎‎‏‎‎‏‏‏‎‏‎‏‏‎‎UI is hidden in preview. Double tap to unhide‎‏‎‎‏‎"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‎‏‎‏‏‏‎‏‎‎‎‏‏‎‎‎‏‏‎‏‎‎‏‎‎‎‏‏‏‏‏‏‎‎‎‏‎‎‏‎‏‏‎‏‎‏‏‎‏‎‏‏‎‎Show UI Preview‎‏‎‎‏‎"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‏‎‏‎‏‎‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‏‎‏‏‎‎‏‎‏‏‏‎‏‏‏‎Preview controls are displayed. Double tap to hide‎‏‎‎‏‎"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‏‎‎‏‏‏‎‏‎‎‏‏‎‏‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎Hide preview controls‎‏‎‎‏‎"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‎‎‏‎‎‏‏‎‏‎‎‏‏‎‎‎‏‏‏‎‏‎‏‎‏‏‏‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‏‏‏‏‎‏‎‎‎‏‎‏‏‎‏‎‎Preview controls are hidden. Double tap to show‎‏‎‎‏‎"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‏‏‎‏‎‏‎‎‏‏‎‎‎‎‏‎‎‎‎‎‏‎‏‏‎‎‎‏‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‎Show preview controls‎‏‎‎‏‎"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‏‏‎‎‎‏‎‏‏‏‏‎‎‎‏‎‏‏‏‏‎‎‎‎‏‎‎‏‏‏‎‎‎‎‎‏‏‎‎‏‎‏‎‏‏‎‎‏‏‏‎‎Hide wallpaper info‎‏‎‎‏‎"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‎‏‎‏‎‏‎‎‏‏‎‎‏‎‏‏‎‏‎‏‎‎‎‏‎‎‏‎‏‏‎‎‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‏‏‎‏‎UI is displayed in preview. Double tap to hide‎‏‎‎‏‎"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‎‎‎‎‏‎‏‎‎‎‏‏‏‎‏‎‏‎‏‎‎‏‏‎‏‎‏‏‏‎‏‏‏‏‎‎‎‏‏‎‏‏‎Change wallpaper‎‏‎‎‏‎"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‏‏‏‎‏‏‏‎‏‎‎‎‏‎‎‏‏‏‎‏‎‏‏‎‎‏‏‎‎‎‎‎‏‏‎‏‎‎‎‎‏‏‏‎‏‏‎‎‏‎‏‎Lockscreen wallpaper preview‎‏‎‎‏‎"</string>
@@ -121,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‎‎‏‎‎‏‏‏‏‎‎‎‎‏‎‎‎‎‎‎‎‎‎‎‏‏‎‎‎‎‎‎‎‎‏‏‏‎‏‏‎‎‏‎‎‏‎‏‎‎‎‎‎Reset changes?‎‏‎‎‏‎"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‎‎‎‏‎‏‎‏‎‏‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‎‏‎‎‎‏‏‎‏‎‏‏‎‎‏‏‏‏‎‎‎‎‏‏‎Your changes won\'t be saved‎‏‎‎‏‎"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‏‎‏‏‎‎‎‏‏‏‎‎‏‎‎‎‏‏‎‏‏‎‏‎‏‏‎‎‏‏‏‎‏‏‎‎‏‏‏‎‏‎‏‏‏‎‏‎‎‏‎More wallpapers‎‏‎‎‏‎"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‏‏‎‏‎‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‎‏‎‏‎‏‎‎‎‏‎‏‎‎‏‏‎‎‏‎‏‏‎‎‎‏‎‎‎‏‏‏‏‏‎Wallpaper %1$s‎‏‎‎‏‎"</string>
</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index e27c0011..5c41ab07 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Categorías de fondos de pantalla"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Definir como fondo de pantalla"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Definir como fondo de pantalla"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Estableciendo como fondo de pantalla…"</string>
<string name="try_again" msgid="8278874823700921234">"Reintentar"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"No se pudo establecer como fondo de pantalla."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Establecido actualmente"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Fondo de pantalla diario"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Pantalla principal y de bloqueo"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Elige un fondo de pantalla"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Crea un fondo de pantalla"</string>
<string name="home_screen_message" msgid="106444102822522813">"Pantalla principal"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Pantalla de bloqueo"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Pantalla principal y bloqueada"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Explorar fondo de la pantalla bloqueada"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Actualiza el fondo diario de la pantalla principal"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Actualiza el fondo de pantalla diario"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Pantalla de vista previa del fondo de pantalla"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Actualizando fondo de pantalla diario…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"No se pudo actualizar el fondo de pantalla diario. Comprueba tu conexión de red y vuelve a intentarlo."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Fondos del dispositivo"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Borrar"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Editar"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"¿Quieres borrar este fondo de pantalla del dispositivo?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Atrás"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Navegar hacia arriba"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Editar"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Descargar"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Fondo de diapositivas"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Anterior"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Fondo de pantalla"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Vista previa del fondo"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Vista previa del fondo de pantalla de la pantalla de bloqueo"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Vista previa del fondo de pantalla de la pantalla principal"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"La colección no existe"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Sal del modo de pantalla dividida y vuelve a intentarlo"</string>
<string name="cancel" msgid="4970902691067201584">"Cancelar"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Ocultar vista previa de la IU"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"IU oculta en vista previa; pres. 2 veces para ver"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Mostrar vista previa de la IU"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Se muestran los controles de vista previa. Presiona dos veces para ocultarlos"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Ocultar controles de vista previa"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Los controles de vista previa están ocultos. Presiona dos veces para mostrarlos"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Mostrar controles de vista previa"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Ocultar información del fondo de pantalla"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"IU en vista previa; pres. 2 veces para ocultar"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Cambiar fondo de pantalla"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Vista del fondo de pantalla de bloqueo"</string>
@@ -122,5 +129,6 @@
<string name="reset" msgid="4945445169532850631">"Restablecer"</string>
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"¿Restablecer los cambios?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"No se guardarán los cambios"</string>
- <string name="more_wallpapers" msgid="8116268433411881705">"Más fondos de escritorio"</string>
+ <string name="more_wallpapers" msgid="8116268433411881705">"Más fondos de pantalla"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Fondo de pantalla %1$s"</string>
</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 1dd9edb5..4983aced 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Categorías de fondos de pantalla"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Establecer fondo de pantalla"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Establecer fondo"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Estableciendo fondo de pantalla…"</string>
<string name="try_again" msgid="8278874823700921234">"Reintentar"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"No se puede establecer el fondo de pantalla."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Establecido actualmente"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Fondo de pantalla diario"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Pantalla de inicio y bloqueo"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Elige un fondo de pantalla"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Crea un fondo de pantalla"</string>
<string name="home_screen_message" msgid="106444102822522813">"Pantalla de inicio"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Pantalla de bloqueo"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Inicio y bloqueo"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Explora el fondo de la pantalla de bloqueo"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Actualizar el fondo de la pantalla de inicio diario"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Actualizar el fondo de pantalla diario"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Pantalla de vista previa del fondo de pantalla"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Actualizando el fondo de pantalla diario…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"No se ha podido actualizar el fondo de pantalla diario. Comprueba tu conexión a Internet y vuelve a intentarlo."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Fondos pantalla en dispositivo"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Eliminar"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Editar"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"¿Eliminar este fondo de pantalla de tu dispositivo?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Volver"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Desplazarse hacia arriba"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Editar"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Descargar"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Fondo de diapositivas"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Anterior"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Fondo de pantalla"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Vista previa de fondo"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Vista previa del fondo de pantalla de bloqueo"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Vista previa del fondo de pantalla de inicio"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"La colección no existe"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Sal del modo Pantalla dividida y vuelve a intentarlo"</string>
<string name="cancel" msgid="4970902691067201584">"Cancelar"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Ocultar vista previa de UI"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI oculta en la vista previa. Toca dos veces para mostrar."</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Mostrar vista previa de UI"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Los controles de vista previa están visibles. Toca dos veces para ocultarlos."</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Ocultar controles de vista previa"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Los controles de vista previa están ocultos. Toca dos veces para que se muestren."</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Mostrar controles de vista previa"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Ocultar información del fondo de pantalla"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI mostrada en la vista previa. Toca dos veces para ocultar."</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Cambiar fondo de pantalla"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Vista del fondo de pantalla de bloqueo"</string>
@@ -119,8 +126,9 @@
<string name="open_my_photos" msgid="4107196465713868381">"Abrir Mis fotos"</string>
<string name="lock_screen_tab" msgid="6672930765010407652">"Pantalla de bloqueo"</string>
<string name="home_screen_tab" msgid="1080445697837877526">"Pantalla de inicio"</string>
- <string name="reset" msgid="4945445169532850631">"Restablecer"</string>
+ <string name="reset" msgid="4945445169532850631">"Revertir"</string>
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"¿Revertir cambios?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Tus cambios no se guardarán"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Más fondos de pantalla"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Fondo de pantalla %1$s"</string>
</resources>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 693b9523..145f849c 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Taustapiltide kategooriad"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Määra taustapilt"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Määra taustapildiks"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Taustapildi määramine …"</string>
<string name="try_again" msgid="8278874823700921234">"Proovi uuesti"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Taustapilti ei saa määrata."</string>
@@ -66,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Lukustuskuva taustapildi avastamine"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Avaekraani päeva taustapildi värskendamine"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Päeva taustapildi värskendamine"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Taustapildi eelvaatekuva"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Päeva taustapildi värskendamine …"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Päeva taustapildi värskendamine ebaõnnestus. Kontrollige võrguühendust ja proovige uuesti."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Seadmes olevad taustapildid"</string>
@@ -89,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Kustuta"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Muuda"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Kas kustutada see taustapilt seadmest?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Tagasi"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Üles liikumine"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Muuda"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Laadi alla"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Taustapiltide slaidiseanss"</string>
@@ -99,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Eelmine"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Taustapilt"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Taustapildi eelvaade"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Lukustuskuva taustapildi eelvaade"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Avakuva taustapildi eelvaade"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Kogu pole olemas"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Väljuge poolitatud ekraani režiimist ja proovige uuesti"</string>
<string name="cancel" msgid="4970902691067201584">"Tühista"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Peida kasutajaliidese eelvaade"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Kasutajaliides on eelvaates peidetud. Topeltpuudutage kuvamiseks."</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Kuva kasutajaliidese eelvaade"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Eelvaate juhtelemendid on kuvatud. Topeltpuudutage peitmiseks"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Peida eelvaate juhtelemendid"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Eelvaate juhtelemendid on peidetud. Topeltpuudutage kuvamiseks"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Kuva eelvaate juhtelemendid"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Peida taustapildi teave"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Kasutajaliides on eelvaates kuvatud. Topeltpuudutage peitmiseks."</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Taustapildi muutmine"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Lukustuskuva taustapildi eelvaade"</string>
@@ -121,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Kas lähtestada muudatused?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Muudatusi ei salvestata"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Rohkem taustapilte"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Taustapilt %1$s"</string>
</resources>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 96726a8d..692ba033 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Horma-paperen kategoriak"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Ezarri horma-papera"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Ezarri horma-papera"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Horma-papera ezartzen…"</string>
<string name="try_again" msgid="8278874823700921234">"Saiatu berriro"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Ezin da ezarri horma-papera."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Hau dago ezarrita:"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Eguneko horma-papera"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Hasieran eta pantaila blokeatuan"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Hautatu horma-paper bat"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Sortu horma-paper bat"</string>
<string name="home_screen_message" msgid="106444102822522813">"Hasierako pantaila"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Pantaila blokeatua"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Hasieran + pantaila blokeatuan"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Arakatu pantaila blokeatuaren horma-papera"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Freskatu hasierako pantailaren eguneko horma-papera"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Freskatu eguneko horma-papera"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Horma-paperaren aurrebistaren pantaila"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Eguneko horma-papera freskatzen…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Ezin izan da freskatu eguneko horma-papera. Egiaztatu sarera konektatuta zaudela eta saiatu berriro."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Gailuko horma-paperak"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Ezabatu"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Editatu"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Horma-papera ezabatu nahi duzu gailutik?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Atzera"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Joan gora"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Editatu"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Deskargatu"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Diapositiba-aurkezpenaren horma-papera"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Aurrekoa"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Horma-papera"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Horma-paperaren aurrebista"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Pantaila blokeatuko horma-paperaren aurrebista"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Hasierako pantailako horma-paperaren aurrebista"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Ez dago bildumarik"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Irten pantaila zatituaren modutik eta saiatu berriro"</string>
<string name="cancel" msgid="4970902691067201584">"Utzi"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Ezkutatu EIaren aurrebista"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Interfazea ezkutatuta dago aurrebistan. Ager dadin, sakatu pantaila birritan."</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Erakutsi EIaren aurrebista"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Aurrebista kontrolatzeko aukerak ikusgai daude. Haiek ezkutatzeko, sakatu pantaila birritan."</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Ezkutatu aurrebista kontrolatzeko aukerak"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Aurrebista kontrolatzeko aukerak ezkutatuta daude. Haiek erakusteko, sakatu pantaila birritan."</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Erakutsi aurrebista kontrolatzeko aukerak"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Ezkutatu horma-paperari buruzko informazioa"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Interfazea ikusgai dago aurrebistan. Hura ezkutatzeko, sakatu pantaila birritan."</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Aldatu horma-papera"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Pantaila blokeatuko horma-paperaren aurrebista"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Aldaketak berrezarri?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Ez dira gordeko aldaketak"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Horma-paper gehiago"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"%1$s horma-papera"</string>
</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 0b4a052e..d5acceb4 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"دسته‌های کاغذدیواری"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"تنظیم کاغذ‌دیواری"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"تنظیم کاغذدیواری"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"در حال تنظیم کاغذدیواری..."</string>
<string name="try_again" msgid="8278874823700921234">"امتحان مجدد"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"کاغذ‌دیواری تنظیم نشد."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"درحال حاضر تنظیم‌ شده است"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"کاغذ‌دیواری روزانه"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"صفحه اصلی و صفحه قفل"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"انتخاب کاغذدیواری"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"ایجاد کاغذدیواری"</string>
<string name="home_screen_message" msgid="106444102822522813">"صفحه اصلی"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"صفحه در حالت قفل"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"صفحه اصلی و صفحه در حالت قفل"</string>
@@ -42,7 +40,7 @@
<string name="set_wallpaper_both_destination" msgid="2536004558738350775">"صفحه اصلی و صفحه قفل"</string>
<string name="no_backup_image_wallpaper_label" msgid="6316627676107284851">"کاغذ‌دیواری با تصویر چرخشی"</string>
<string name="permission_needed_explanation" msgid="139166837541426823">"برای نمایش کاغذدیواری فعلی در اینجا، <xliff:g id="APP_NAME">%1$s</xliff:g> باید به حافظه دستگاهتان دسترسی داشته باشد."</string>
- <string name="permission_needed_explanation_go_to_settings" msgid="3923551582092599609">"‏برای اینکه کاغذدیواری کنونی اینجا نمایش داده شود، Wallpapers باید به حافظه دستگاهتان دسترسی داشته باشد.\n\nبرای تغییر این تنظیم، به بخش «مجوزها»ی اطلاعات برنامه Wallpapers بروید."</string>
+ <string name="permission_needed_explanation_go_to_settings" msgid="3923551582092599609">"‏برای اینکه کاغذدیواری کنونی اینجا نمایش داده شود، Wallpapers باید به حافظه دستگاهتان دسترسی داشته باشد.\n\nبرای تغییر این تنظیم، به بخش «اجازه‌ها»ی اطلاعات برنامه Wallpapers بروید."</string>
<string name="permission_needed_allow_access_button_label" msgid="1943133660612924306">"اجازه دسترسی"</string>
<string name="no_backup_image_wallpaper_description" msgid="8303268619408738057">"سرویس کاغذ‌دیواری پویا برای کاغذدیواری‌های چرخشی"</string>
<string name="daily_refresh_tile_title" msgid="3270456074558525091">"کاغذ‌دیواری روزانه"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"کاوش کاغذ‌دیواری صفحه در حالت قفل"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"بازآوری کاغذدیواری روزانه در صفحه اصلی"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"بازآوری کاغذدیواری روزانه"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"صفحه پیش‌نمای کاغذدیواری"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"درحال بازآوری کاغذدیواری روزانه…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"کاغذدیواری روزانه بازآوری نشد. لطفاً اتصال شبکه‌تان را بررسی و دوباره امتحان کنید."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"کاغذدیواری‌های موجود در دستگاه"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"حذف"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"ویرایش"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"این کاغذدیواری از دستگاهتان حذف شود؟"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"برگشت"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"پیمایش به‌بالا"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"ویرایش"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"بارگیری"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"نمایش اسلاید کاغذدیواری"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"قبلی"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"کاغذدیواری"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"پیش‌نمای کاغذدیواری"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"پیش‌نمای کاغذدیواری صفحه قفل"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"پیش‌نمای کاغذدیواری صفحه اصلی"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"مجموعه وجود ندارد"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"لطفاً از حالت صفحه تقسیم‌شده خارج شوید و دوباره امتحان کنید"</string>
<string name="cancel" msgid="4970902691067201584">"لغو"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"پنهان کردن پیش‌نمای رابط کاربری"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"رابط در پیش‌دید پنهان است. دوضربه برای نمایش مجدد"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"نمایش دادن پیش‌نمای رابط کاربری"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"کنترل‌های پیش‌نما نمایش داده می‌شود. برای پنهان کردن دوضربه بزنید"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"پنهان کردن کنترل‌های پیش‌نما"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"کنترل‌های پیش‌نما پنهان شده است. برای نمایش دوضربه بزنید"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"نمایش کنترل‌های پیش‌نما"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"پنهان کردن اطلاعات کاغذدیواری"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"رابط در پیش‌دید نمایان است. دوضربه برای پنهان کردن"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"تغییر کاغذدیواری"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"پیش‌نمای کاغذدیواری صفحه قفل"</string>
@@ -121,6 +128,7 @@
<string name="home_screen_tab" msgid="1080445697837877526">"صفحه اصلی"</string>
<string name="reset" msgid="4945445169532850631">"بازنشانی"</string>
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"تغییرات بازنشانی شود؟"</string>
- <string name="reset_confirmation_dialog_message" msgid="888669268626289603">"تغییرات شما ذخیره نمی‌شود"</string>
+ <string name="reset_confirmation_dialog_message" msgid="888669268626289603">"تغییرات شما ذخیره نخواهد شد"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"کاغذدیواری‌های بیشتر"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"‏کاغذدیواری %1$s"</string>
</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index c14dfa2a..9c136f68 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Taustakuvaluokat"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Aseta taustakuva"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Aseta taustakuva"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Asetetaan taustakuvaa…"</string>
<string name="try_again" msgid="8278874823700921234">"Yritä uudelleen"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Taustakuvan asettaminen epäonnistui."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Nykyinen taustakuva"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Päivän taustakuva"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Aloitus- ja lukitusnäyttö"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Valitse taustakuva"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Luo taustakuva"</string>
<string name="home_screen_message" msgid="106444102822522813">"Aloitusnäyttö"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Lukitusnäyttö"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Aloitus- ja lukitusnäyttö"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Tutustu lukitusnäytön taustakuvaan"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Päivitä etusivun päivittäinen taustakuva."</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Siirry seuraavaan taustakuvaan"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Taustakuvan esikatselunäkymä"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Päivitetään päivän taustakuvaa…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Päivän taustakuvan päivittäminen epäonnistui. Tarkista verkkoasetukset ja yritä uudelleen."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Laitteella olevat taustakuvat"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Poista"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Muokkaa"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Poistetaanko tämä taustakuva laitteelta?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Takaisin"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Siirry ylös"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Muokkaa"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Lataa"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Diasarja taustakuvana"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Edellinen"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Taustakuva"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Taustakuvan esikatselu"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Lukitusnäytön taustakuvan esikatselu"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Aloitusnäytön taustakuvan esikatselu"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Kyseistä kokoelmaa ei ole olemassa"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Sulje jaettu näyttö ja yritä uudelleen"</string>
<string name="cancel" msgid="4970902691067201584">"Peru"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Piilota UI:n esikatselu"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI on piilotettu. Näytä kaksoisnapauttamalla"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Näytä UI:n esikatselu"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Esikatselun ohjaimet näytetään. Piilota kaksoisnapauttamalla"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Piilota esikatselun ohjaimet"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Esikatselun ohjaimet on piilotettu. Näytä kaksoisnapauttamalla"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Näytä esikatselun ohjaimet"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Piilota taustakuvatiedot"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI on näkyvissä. Piilota kaksoisnapauttamalla"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Vaihda taustakuva"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Lukitusnäytön taustakuvan esikatselu"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Nollataanko muutokset?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Muutoksia ei tallenneta"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Lisää taustakuvia"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Taustakuva %1$s"</string>
</resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index c9156db3..71b0bfde 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Catégories de fond d\'écran"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Définir le fond d\'écran"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Définir le fond d\'écran"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Définition du fond d\'écran en cours…"</string>
<string name="try_again" msgid="8278874823700921234">"Réessayer"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Impossible de définir le fond d\'écran."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Fond d\'écran actuel"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Fond d\'écran quotidien"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Écrans d\'accueil et de verrouillage"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Choisir un fond d\'écran"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Créer un fond d\'écran"</string>
<string name="home_screen_message" msgid="106444102822522813">"Écran d\'accueil"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Écran de verrouillage"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Écr. d\'accueil et de verrouill."</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"En savoir plus sur le fond d\'écran de l\'écran de verrouillage"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Actualiser le fond d\'écran quotidien de l\'écran d\'accueil"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Actualiser le fond d\'écran quotidien"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Écran d\'aperçu du fond d\'écran"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Actualisation du fond d\'écran quotidien en cours…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Échec de l\'actualisation du fond d\'écran quotidien. Veuillez vérifier votre connexion réseau, puis réessayer."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Fonds d\'écran sur l\'appareil"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Supprimer"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Modifier"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Supprimer ce fond d\'écran de votre appareil?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Retour"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Revenir en haut de la page"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Modifier"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Télécharger"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Fond d\'écran diaporama"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Précédent"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Fond d\'écran"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Aperçu du fond d\'écran"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Aperçu du fond d\'écran de l\'écran de verrouillage"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Aperçu du fond d\'écran de l\'écran d\'accueil"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"La collection n\'existe pas"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Veuillez quitter le mode d\'écran partagé et réessayer"</string>
<string name="cancel" msgid="4970902691067201584">"Annuler"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Masquer l\'aperçu de l\'IU"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Aperçu : IU masquée. Touchez 2 fois pour afficher"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Afficher l\'aperçu de l\'IU"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Les commandes de l\'aperçu sont affichées. Touchez deux fois pour les masquer"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Masquer les commandes de l\'aperçu"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Les commandes de l\'aperçu sont masquées. Touchez deux fois pour les afficher"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Afficher les commandes de l\'aperçu"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Masquer l\'information du fond d\'écran"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Aperçu : IU affichée. Touchez 2 fois pour masquer"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Modifier le fond d\'écran"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Aperçu du fond d\'écran de verrouillage"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Réinitialiser les modifications?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Vos modifications ne seront pas enregistrées"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Plus de fonds d\'écran"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Fonds d\'écran %1$s"</string>
</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 69842d4e..40256e51 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Catégories de fonds d\'écran"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Définir comme fond d\'écran"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Définir comme fond d\'écran"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Définition du fond d\'écran…"</string>
<string name="try_again" msgid="8278874823700921234">"Réessayer"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Impossible de définir le fond d\'écran."</string>
@@ -29,14 +29,12 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Sélectionné"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Fond d\'écran quotidien"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Écran d\'accueil et écran de verrouillage"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Choisir un fond d\'écran"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Créer un fond d\'écran"</string>
<string name="home_screen_message" msgid="106444102822522813">"Écran d\'accueil"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Écran de verrouillage"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Accueil et verrouillage"</string>
- <string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"Définir comme fond d\'écran"</string>
+ <string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"Définir comme fond d\'écran pour"</string>
<string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"Écran d\'accueil"</string>
<string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"Écran de verrouillage"</string>
<string name="set_wallpaper_both_destination" msgid="2536004558738350775">"Écrans d\'accueil et de verrouillage"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Découvrir le fond d\'écran de l\'écran de verrouillage"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Actualiser le fond d\'écran quotidien de l\'écran d\'accueil"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Actualiser le fond d\'écran quotidien"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Écran d\'aperçu des fonds d\'écran"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Actualisation du fond d\'écran quotidien…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Échec de l\'actualisation du fond d\'écran quotidien. Veuillez vérifier votre connexion réseau, puis réessayer."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Fonds d\'écran sur l\'appareil"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Supprimer"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Modifier"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Supprimer ce fond d\'écran de votre appareil ?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Retour"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Remonter"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Modifier"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Télécharger"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Fond d\'écran diaporama"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Précédente"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Fond d\'écran"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Aperçu du fond d\'écran"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Aperçu du fond d\'écran de verrouillage"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Aperçu du fond d\'écran d\'accueil"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Cette collection n\'existe pas"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Veuillez quitter le mode Écran partagé et réessayer"</string>
<string name="cancel" msgid="4970902691067201584">"Annuler"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Masquer l\'aperçu de l\'UI"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI masquée dans aperçu. Appuyez 2 fois pour afficher"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Afficher l\'aperçu de l\'UI"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Les commandes de prévisualisation sont affichées. Appuyez deux fois pour les masquer."</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Masquer les commandes de prévisualisation"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Les commandes de prévisualisation sont masquées. Appuyez deux fois pour les afficher."</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Afficher les commandes de prévisualisation"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Masquer les infos du fond d\'écran"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI affichée dans aperçu. Appuyez 2 fois pour masquer"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Changer de fond d\'écran"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Aperçu du fond d\'écran de verrouillage"</string>
@@ -120,7 +127,8 @@
<string name="lock_screen_tab" msgid="6672930765010407652">"Écran de verrouillage"</string>
<string name="home_screen_tab" msgid="1080445697837877526">"Écran d\'accueil"</string>
<string name="reset" msgid="4945445169532850631">"Réinitialiser"</string>
- <string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Réinitialiser modifications ?"</string>
+ <string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Réinitialiser les modifications ?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Vos modifications ne seront pas enregistrées"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Autres fonds d\'écran"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Fonds d\'écran %1$s"</string>
</resources>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 6388fdeb..7aa0db42 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Categorías de fondos de pantalla"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Fixar fondo de pantalla"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Fixar fondo de pantalla"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Establecendo fondo de pantalla…"</string>
<string name="try_again" msgid="8278874823700921234">"Tentar de novo"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Non se puido establecer o fondo de pantalla."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Establecido actualmente"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Fondo de pantalla diario"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Pantallas de inicio e bloqueo"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Escolle un fondo de pantalla"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Crear un fondo de pantalla"</string>
<string name="home_screen_message" msgid="106444102822522813">"Pantalla de inicio"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Pantalla de bloqueo"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Pantallas de inicio e bloqueo"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Explora o fondo de pantalla para a pantalla de bloqueo"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Actualiza o fondo de pantalla diario para a pantalla de inicio"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Actualiza o fondo de pantalla diario"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Pantalla de vista previa do fondo de pantalla"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Actualizando fondo de pantalla diario…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Produciuse un erro ao actualizar o fondo de pantalla diario. Comproba a conexión de rede e téntao de novo."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Fondos no dispositivo"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Eliminar"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Editar"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Queres eliminar este fondo de pantalla do dispositivo?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Atrás"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Desprazarse cara arriba"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Editar"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Descargar"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Fondo: diapositivas"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Anterior"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Fondo de pantalla"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Vista previa do fondo"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Vista previa do fondo da pantalla de bloqueo"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Vista previa do fondo da pantalla de inicio"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"A colección non existe"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Sae do modo de pantalla dividida e téntao de novo"</string>
<string name="cancel" msgid="4970902691067201584">"Cancelar"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Ocultar vista previa da IU"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"IU oculta: vista previa. Toca dúas veces para vela"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Mostrar vista previa da IU"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Móstranse os controis de vista previa. Toca dúas veces para ocultalos"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Ocultar controis de vista previa"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Os controis de vista previa están ocultos. Toca dúas veces para mostralos"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Mostrar controis de vista previa"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Ocultar información do fondo de pantalla"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"IU mostrada: vista previa. 2 toques para ocultala"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Cambiar fondo de pantalla"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Vista previa do fondo de pantalla"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Queres restablecer os cambios?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Non se gardarán os cambios"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Máis fondos de pantalla"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Fondo de pantalla %1$s"</string>
</resources>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 56c16fbf..8e4722d3 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"વૉલપેપરની કૅટેગરી"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"વૉલપેપર સેટ કરો"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"વૉલપેપર સેટ કરો"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"વૉલપેપર સેટ કરી રહ્યાં છીએ…"</string>
<string name="try_again" msgid="8278874823700921234">"ફરી પ્રયાસ કરો"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"વૉલપેપર સેટ કરવામાં અસમર્થ છીએ."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"સેટ કરેલું વૉલપેપર"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"દૈનિક વૉલપેપર"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"હોમ અને લૉક સ્ક્રીન"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"વૉલપેપર પસંદ કરો"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"વૉલપેપર બનાવો"</string>
<string name="home_screen_message" msgid="106444102822522813">"હોમ સ્ક્રીન"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"લૉક સ્ક્રીન"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"હોમ અને લૉક"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"લૉક સ્ક્રીન વૉલપેપર માટે શોધખોળ કરો"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"દૈનિક હોમ સ્ક્રીન વૉલપેપર રિફ્રેશ કરો"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"દૈનિક વૉલપેપર રિફ્રેશ કરો"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"વૉલપેપરનો પ્રીવ્યૂ બતાવતી સ્ક્રીન"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"દૈનિક વૉલપેપર રિફ્રેશ કરી રહ્યાં છીએ…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"દૈનિક વૉલપેપર રિફ્રેશ કરવામાં નિષ્ફળ રહ્યાં. કૃપા કરીને તમારું નેટવર્ક કનેક્શન ચેક કરો અને ફરી પ્રયાસ કરો."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"ઉપકરણ પરના વૉલપેપર"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"ડિલીટ કરો"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"ફેરફાર કરો"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"તમારા ડિવાઇસમાંથી આ વૉલપેપર ડિલીટ કરીએ?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"પાછળ"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"ઉપર નૅવિગેટ કરો"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"ફેરફાર કરો"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"ડાઉનલોડ કરો"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"વૉલપેપરનો સ્લાઇડશો"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"પાછળ"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"વૉલપેપર"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"વૉલપેપરનો પ્રીવ્યૂ કરો"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"લૉક સ્ક્રીનના વૉલપેપરનો પ્રીવ્યૂ"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"હોમ સ્ક્રીનના વૉલપેપરનો પ્રીવ્યૂ"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"સંગ્રહ અસ્તિત્વમાં નથી"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"કૃપા કરીને સ્ક્રીન-વિભાજન મોડમાંથી બહાર નીકળો અને ફરીથી પ્રયાસ કરો"</string>
<string name="cancel" msgid="4970902691067201584">"રદ કરો"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"UIનો પ્રીવ્યૂ છુપાવો"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"પ્રીવ્યૂમાં UI છુપાવેલું છે. બતાવવા બે વાર ટૅપ કરો"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"UIનો પ્રીવ્યૂ બતાવો"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"પ્રીવ્યૂના નિયંત્રણો બતાવવામાં આવ્યા છે. છુપાવવા માટે, બે વાર ટૅપ કરો"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"પ્રીવ્યૂના નિયંત્રણો છુપાવો"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"પ્રીવ્યૂના નિયંત્રણો છુપાવેલા છે. બતાવવા માટે, બે વાર ટૅપ કરો"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"પ્રીવ્યૂના નિયંત્રણો બતાવો"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"વૉલપેપરની માહિતી છુપાવો"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"પ્રીવ્યૂમાં UI બતાવેલું છે. છુપાવવા બે વાર ટૅપ કરો"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"વૉલપેપર બદલો"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"લૉકસ્ક્રીન વૉલપેપરનો પ્રીવ્યૂ"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"ફેરફારો રીસેટ કરીએ?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"તમારા ફેરફારો સાચવવામાં આવશે નહીં"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"વધુ વૉલપેપર"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"વૉલપેપર %1$s"</string>
</resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 9004f17c..d268a5b9 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"वॉलपेपर की श्रेणियां"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"वॉलपेपर सेट करें"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"वॉलपेपर सेट करें"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"वॉलपेपर सेट किया जा रहा है…"</string>
<string name="try_again" msgid="8278874823700921234">"फिर से कोशिश करें"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"वॉलपेपर सेट नहीं हो पा रहा है."</string>
@@ -66,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"लॉक स्क्रीन पर सेट किए गए मौजूदा वॉलपेपर के बारे में ज़्यादा जानें"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"होम स्क्रीन का रोज़ बदलने वाला वॉलपेपर रीफ़्रेश करें"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"रोज़ बदलने वाला वॉलपेपर रीफ़्रेश करें"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"स्क्रीन पर दिखने वाले वॉलपेपर की झलक"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"रोज़ बदलने वाला वॉलपेपर रीफ़्रेश हो रहा है…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"रोज़ बदलने वाला वॉलपेपर रीफ़्रेश नहीं हो पा रहा है. कृपया अपना इंटरनेट कनेक्शन जाँचें और फिर से कोशिश करें."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"डिवाइस पर पहले से मौजूद वॉलपेपर"</string>
@@ -89,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"मिटाएं"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"बदलाव करें"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"क्या आपको अपने डिवाइस से यह वॉलपेपर मिटाना है?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"वापस जाएं"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"वापस जाएं"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"बदलाव करें"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"डाउनलोड करें"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"वॉलपेपर का स्लाइड शो देखें"</string>
@@ -99,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"पीछे जाएं"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"वॉलपेपर"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"वॉलपेपर की झलक देखें"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"लॉक स्क्रीन पर दिखने वाले वॉलपेपर की झलक"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"होम स्क्रीन पर दिखने वाले वॉलपेपर की झलक"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"वॉलपेपर का संग्रह मौजूद नहीं है"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"दो-स्क्रीन मोड को बंद करके दोबारा कोशिश करें"</string>
<string name="cancel" msgid="4970902691067201584">"रद्द करें"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"यूज़र इंटरफ़ेस की झलक छिपाएं"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"झलक में यूआई को छिपाया गया. इसे दिखाने के लिए दो बार टैप करें"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"यूज़र इंटरफ़ेस की झलक दिखाएं"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"प्रीव्यू के कंट्रोल दिखाए गए हैं. इन्हें छिपाने के लिए दो बार टैप करें"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"फ़ुल स्क्रीन प्रीव्यू के कंट्रोल छिपाएं"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"प्रीव्यू के कंट्रोल छिपाए गए हैं. इन्हें दिखाने के लिए दो बार टैप करें"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"प्रीव्यू के कंट्रोल दिखाएं"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"वॉलपेपर की जानकारी छिपाएं"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"झलक में यूआई को दिखाया गया. इसे छिपाने के लिए दो बार टैप करें"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"वॉलपेपर बदलें"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"लॉकस्क्रीन पर दिखने वाले वॉलपेपर की झलक"</string>
@@ -118,7 +127,8 @@
<string name="lock_screen_tab" msgid="6672930765010407652">"लॉक स्क्रीन"</string>
<string name="home_screen_tab" msgid="1080445697837877526">"होम स्क्रीन"</string>
<string name="reset" msgid="4945445169532850631">"रीसेट करें"</string>
- <string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"क्या आपको बदलाव रीसेट करना है?"</string>
+ <string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"क्या आपको बदलाव रीसेट करने हैं?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"आपके बदलाव सेव नहीं किए जाएंगे"</string>
- <string name="more_wallpapers" msgid="8116268433411881705">"ज़्यादा वॉलपेपर"</string>
+ <string name="more_wallpapers" msgid="8116268433411881705">"कुछ और वॉलपेपर"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"वॉलपेपर %1$s"</string>
</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 0b2bead5..0a876c0e 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -21,24 +21,22 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Kategorije pozadina"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Postavi pozadinu"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Postavi pozadinu"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Postavljanje pozadine…"</string>
<string name="try_again" msgid="8278874823700921234">"Pokušaj ponovo"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Postavljanje pozadine nije uspjelo."</string>
<string name="load_wallpaper_error_message" msgid="7913278480467707374">"Učitavanje pozadine nije uspjelo. Slika je oštećena ili nije dostupna."</string>
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Trenutačno postavljeno"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Dnevna pozadina"</string>
- <string name="wallpaper_destination_both" msgid="1124197176741944063">"Početni i zaključan zaslon"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="wallpaper_destination_both" msgid="1124197176741944063">"Početni i zaključani zaslon"</string>
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Odaberite pozadinu"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Izradite pozadinu"</string>
<string name="home_screen_message" msgid="106444102822522813">"Početni zaslon"</string>
- <string name="lock_screen_message" msgid="1534506081955058013">"Zaključan zaslon"</string>
- <string name="home_and_lock_short_label" msgid="2937922943541927983">"Početni i zaključan zaslon"</string>
+ <string name="lock_screen_message" msgid="1534506081955058013">"Zaključani zaslon"</string>
+ <string name="home_and_lock_short_label" msgid="2937922943541927983">"Početni i zaključani zaslon"</string>
<string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"Postavljanje pozadine"</string>
<string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"Početni zaslon"</string>
- <string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"Zaključan zaslon"</string>
+ <string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"Zaključani zaslon"</string>
<string name="set_wallpaper_both_destination" msgid="2536004558738350775">"Početni i zaključani zaslon"</string>
<string name="no_backup_image_wallpaper_label" msgid="6316627676107284851">"Pozadina s izmjenom slika"</string>
<string name="permission_needed_explanation" msgid="139166837541426823">"Da bi se ovdje prikazala trenutačna pozadina, <xliff:g id="APP_NAME">%1$s</xliff:g> treba pristup pohrani vašeg uređaja."</string>
@@ -61,13 +59,14 @@
<string name="wallpaper_set_successfully_message" msgid="2958998799111688578">"Pozadina je uspješno postavljena"</string>
<string name="wallpapers_unavailable_offline_message" msgid="8136405438621689532">"Da biste vidjeli pozadine, potrebna vam je internetska veza. Povežite se i pokušajte ponovo."</string>
<string name="currently_set_home_wallpaper_thumbnail" msgid="4022381436821898917">"Minijatura pozadine trenutačno postavljene za početni zaslon"</string>
- <string name="currently_set_lock_wallpaper_thumbnail" msgid="2094209303934569997">"Minijatura pozadine trenutačno postavljene za zaključan zaslon"</string>
+ <string name="currently_set_lock_wallpaper_thumbnail" msgid="2094209303934569997">"Minijatura pozadine trenutačno postavljene za zaključani zaslon"</string>
<string name="currently_set_wallpaper_thumbnail" msgid="8651887838745545107">"Minijatura trenutačno postavljene pozadine"</string>
<string name="wallpaper_thumbnail" msgid="569931475923605974">"Minijatura pozadine"</string>
<string name="explore_home_screen" msgid="8756346794535765482">"Istražite pozadinu početnog zaslona"</string>
<string name="explore_lock_screen" msgid="268938342103703665">"Istražite pozadinu zaključanog zaslona"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Osvježi dnevnu pozadinu početnog zaslona"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Osvježi dnevnu pozadinu"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Zaslon pregleda pozadine"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Osvježavanje dnevne pozadine…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Osvježavanje dnevne pozadine nije uspjelo. Provjerite mrežnu vezu i pokušajte ponovo."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Pozadine na uređaju"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Izbriši"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Uredi"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Izbrisati ovu pozadinu s uređaja?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Natrag"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Idi na vrh"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Uredi"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Preuzmi"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Pozadina s prezentacijom"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Prethodno"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Pozadina"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Pregled pozadine"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Pregled pozadine zaključanog zaslona"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Pregled pozadine početnog zaslona"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Zbirka ne postoji"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Izađite iz načina podijeljenog zaslona i pokušajte ponovno"</string>
<string name="cancel" msgid="4970902691067201584">"Odustani"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Sakrij pregled koris. sučelja"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Kor. sučelje skriveno je u pregledu. Dvaput dodirnite za otkrivanje"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Prikaži pregled koris. sučelja"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Kontrole pregleda su prikazane. Dvaput dodirnite za skrivanje"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Sakrij kontrole pregleda"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Kontrole pregleda su skrivene. Dvaput dodirnite za prikazivanje"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Prikaži kontrole pregleda"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Sakrij informacije o pozadini"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Kor. sučelje prikazano je u pregledu. Dvaput dodirnite za skrivanje"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Promijenite pozadinu"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Pregled pozadine zaključanog zaslona"</string>
@@ -117,10 +124,11 @@
<string name="settings_snackbar_description" msgid="890168814524778486">"U postavkama omogućite datoteke i medije."</string>
<string name="settings_snackbar_enable" msgid="5992112808061426068">"Omogući"</string>
<string name="open_my_photos" msgid="4107196465713868381">"Otvori Moje fotografije"</string>
- <string name="lock_screen_tab" msgid="6672930765010407652">"Zaključan zaslon"</string>
+ <string name="lock_screen_tab" msgid="6672930765010407652">"Zaključani zaslon"</string>
<string name="home_screen_tab" msgid="1080445697837877526">"Početni zaslon"</string>
<string name="reset" msgid="4945445169532850631">"Poništi"</string>
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Poništiti promjene?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Promjene se neće spremiti"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Više pozadina"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Pozadina %1$s"</string>
</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index b3d51860..3e5f88b7 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Háttérkép-kategóriák"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Háttérkép beállítása"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Háttérkép kiválasztása"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Háttérkép beállítása…"</string>
<string name="try_again" msgid="8278874823700921234">"Újra"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Nem sikerült beállítani a háttérképet."</string>
@@ -66,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"A lezárási képernyő hátterének felfedezése"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"A kezdőképernyő napi háttérképének frissítése"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Napi háttérkép frissítése"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Háttérkép előnézeti képernyője"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Napi háttérkép frissítése…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Nem sikerült frissíteni a napi háttérképet. Ellenőrizze hálózati kapcsolatát, majd próbálkozzon újra."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Eszközön lévő háttérképek"</string>
@@ -89,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Törlés"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Szerkesztés"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Törli ezt a háttérképet az eszközről?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Vissza"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Ugrás az oldal tetejére"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Módosítás"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Letöltés"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Háttérkép diavetítése"</string>
@@ -99,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Előző"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Háttérkép"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Háttérkép előnézete"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Lezárási képernyő háttérképének előnézete"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Kezdőképernyő háttérképének előnézete"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Nincs ilyen gyűjtemény"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Lépjen ki az osztott képernyős módból, és próbálja újra"</string>
<string name="cancel" msgid="4970902691067201584">"Mégse"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"UI előnézetének elrejtése"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI: rejtve előnézetben. Felfedés: dupla koppintás."</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"UI előnézetének megjelenítése"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Előnézet-vezérlők megjelenítve. Elrejtés: dupla koppintás."</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Előnézet-vezérlők elrejtése"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Előnézet-vezérlők elrejtve. Megjelenítés: dupla koppintás."</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Előnézet-vezérlők megjelenítése"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Háttérképadatok elrejtése"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI: látható előnézetben. Elrejtés: dupla koppintás."</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Háttérkép megváltoztatása"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Lezárási képernyő háttérképének előnézete"</string>
@@ -118,7 +127,8 @@
<string name="lock_screen_tab" msgid="6672930765010407652">"Lezárási képernyő"</string>
<string name="home_screen_tab" msgid="1080445697837877526">"Kezdőképernyő"</string>
<string name="reset" msgid="4945445169532850631">"Alaphelyzet"</string>
- <string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Visszaállítja a módosításokat?"</string>
+ <string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Visszavonja a módosításokat?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"A módosítások nem lesznek mentve"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"További hátterek"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Háttérképek %1$s"</string>
</resources>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index c2a1b747..bc9de779 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Պաստառների կատեգորիաներ"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Օգտագործել որպես պաստառ"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Օգտագործել որպես պաստառ"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Պաստառը տեղադրվում է…"</string>
<string name="try_again" msgid="8278874823700921234">"Նորից փորձել"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Չհաջողվեց տեղադրել պաստառը:"</string>
@@ -29,14 +29,12 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Ընթացիկ պաստառ"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Օրվա պաստառ"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Հիմնական էկրան և կողպէկրան"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Ընտրեք պաստառ"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Ստեղծեք պաստառ"</string>
<string name="home_screen_message" msgid="106444102822522813">"Հիմնական էկրան"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Կողպէկրան"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Հիմնական էկրան և կողպէկրան"</string>
- <string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"Դնել պաստառ՝"</string>
+ <string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"Որտեղ օգտագործել որպես պաստառ"</string>
<string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"Հիմնական էկրան"</string>
<string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"Կողպէկրան"</string>
<string name="set_wallpaper_both_destination" msgid="2536004558738350775">"Հիմնական էկրան և կողպէկրան"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Ուսումնասիրել կողպէկրանի պաստառը"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Թարմացնել հիմնական էկրանի օրվա պաստառը"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Թարմացնել օրվա պաստառը"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Պաստառի նախադիտման էկրան"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Օրվա պաստառը թարմացվում է…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Չհաջողվեց թարմացնել օրվա պաստառը: Ստուգեք ինտերնետ կապը և նորից փորձեք:"</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Սարքում պահված պաստառներ"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Ջնջել"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Փոփոխել"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Ջնջե՞լ այս պաստառը ձեր սարքից։"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Հետ"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Անցնել վերև"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Փոփոխել"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Ներբեռնել"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Պատկերահանդեսի պաստառ"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Հետ"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Պաստառ"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Պաստառի նախադիտում"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Կողպէկրանի պաստառի նախադիտում"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Հիմնական էկրանի պաստառի նախադիտում"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Հավաքածուն գոյություն չունի"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Դուրս եկեք էկրանի տրոհման ռեժիմից և նորից փորձեք"</string>
<string name="cancel" msgid="4970902691067201584">"Չեղարկել"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Թաքցնել նախադիտման էկրանը"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Հպեք՝ նախադիտման էկրանը ցուցադրելու համար"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Ցուցադրել նախադիտման էկրանը"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Նախադիտման կարգավորումները ցուցադրված են։ Կրկնակի հպեք թաքցնելու համար"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Թաքցնել նախադիտման կարգավորումները"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Նախադիտման կարգավորումները թաքցված են։ Կրկնակի հպեք ցուցադրելու համար"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Ցուցադրել նախադիտման կարգավորումները"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Թաքցնել պաստառի մասին տեղեկությունները"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Հպեք՝ նախադիտման էկրանը թաքցնելու համար"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Փոխել պաստառը"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Կողպէկրանի պաստառի նախադիտում"</string>
@@ -120,7 +127,8 @@
<string name="lock_screen_tab" msgid="6672930765010407652">"Կողպէկրան"</string>
<string name="home_screen_tab" msgid="1080445697837877526">"Հիմնական էկրան"</string>
<string name="reset" msgid="4945445169532850631">"Զրոյացնել"</string>
- <string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Չեղարկե՞լ փոփոխությունները"</string>
+ <string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Զրոյացնե՞լ փոփոխությունները"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Ձեր փոփոխությունները չեն պահվի"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Այլ պաստառներ"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Պաստառ %1$s"</string>
</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 13298958..fdc1820c 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Kategori wallpaper"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Setel Wallpaper"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Setel wallpaper"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Menyetel wallpaper…"</string>
<string name="try_again" msgid="8278874823700921234">"Coba lagi"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Tidak dapat menyetel wallpaper."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Yang disetel saat ini"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Wallpaper harian"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Layar utama &amp; layar kunci"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Pilih Wallpaper"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Buat Wallpaper"</string>
<string name="home_screen_message" msgid="106444102822522813">"Layar utama"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Layar kunci"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Beranda &amp; Layar Kunci"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Jelajahi wallpaper layar kunci"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Muat ulang wallpaper layar utama harian"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Muat ulang wallpaper harian"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Layar pratinjau wallpaper"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Memuat ulang wallpaper harian…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Gagal memuat ulang wallpaper harian. Harap periksa koneksi jaringan Anda dan coba lagi."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Wallpaper di perangkat"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Hapus"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Edit"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Hapus wallpaper ini dari perangkat?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Kembali"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Kembali ke atas"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Edit"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Download"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Wallpaper Slideshow"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Sebelumnya"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Wallpaper"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Pratinjau wallpaper"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Pratinjau wallpaper layar kunci"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Pratinjau wallpaper layar utama"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Koleksi tidak ada"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Keluar dari mode layar terpisah, lalu coba lagi"</string>
<string name="cancel" msgid="4970902691067201584">"Batal"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Sembunyikan Pratinjau UI"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI disembunyikan di pratinjau. Ketuk dua kali untuk menampilkan"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Tampilkan Pratinjau UI"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Kontrol pratinjau ditampilkan. Ketuk dua kali untuk menyembunyikan"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Sembunyikan kontrol pratinjau"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Kontrol pratinjau disembunyikan. Ketuk dua kali untuk menampilkan"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Tampilkan kontrol pratinjau"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Sembunyikan info wallpaper"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI ditampilkan di pratinjau. Ketuk dua kali untuk menyembunyikan"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Ubah wallpaper"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Pratinjau wallpaper layar kunci"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Reset perubahan?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Perubahan tidak akan disimpan"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Wallpaper lainnya"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Wallpaper %1$s"</string>
</resources>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index c8821a5f..e2e115f2 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Veggfóðursflokkar"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Velja veggfóður"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Velja veggfóður"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Vistar sem veggfóður…"</string>
<string name="try_again" msgid="8278874823700921234">"Reyna aftur"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Ekki hægt að vista sem veggfóður."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Valið núna"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Daglegt veggfóður"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Heima- og lásskjár"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Veldu veggfóður"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Búðu til veggfóður"</string>
<string name="home_screen_message" msgid="106444102822522813">"Heimaskjár"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Lásskjár"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Heima- og lásskjár"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Skoða veggfóður á lásskjá"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Uppfæra daglegt veggfóður á heimaskjá"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Uppfæra daglegt veggfóður"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Forskoðunarskjár veggfóðurs"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Uppfærir daglegt veggfóður…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Ekki tókst að endurnýja daglegt veggfóður. Athugaðu nettenginguna og reyndu aftur."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Veggfóður í tækinu"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Eyða"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Breyta"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Eyða þessu veggfóðri úr tækinu?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Til baka"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Fletta upp"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Breyta"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Sækja"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Veggfóður með skyggnusýningu"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Fyrri"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Veggfóður"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Forskoðun veggfóðurs"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Forskoðun veggfóðurs á lásskjá"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Forskoðun veggfóðurs á heimaskjá"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Safnið er ekki til"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Lokaðu skjáskiptingu og reyndu aftur"</string>
<string name="cancel" msgid="4970902691067201584">"Hætta við"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Fela forskoðun notendaviðmóts"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Notendaviðmót falið í forskoðun. Ýttu tvisvar til að sýna"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Sýna forskoðun notendaviðmóts"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Stýringar forskoðunar sjást. Ýttu tvisvar til að fela"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Fela stýringar forskoðunar"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Stýringar forskoðunar eru faldar. Ýttu tvisvar til að birta"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Sýna stýringar forskoðunar"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Fela upplýsingar um veggfóður"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Notendaviðmót sýnt í forskoðun. Ýttu tvisvar til að fela"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Skipta um veggfóður"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Forskoðun veggfóðurs á lásskjá"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Endurstilla breytingar?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Breytingarnar verða ekki vistaðar"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Fleiri veggfóður"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Veggfóður %1$s"</string>
</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 38df13c6..1cd9eae8 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Categorie di sfondi"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Imposta sfondo"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Imposta sfondo"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Impostazione dello sfondo…"</string>
<string name="try_again" msgid="8278874823700921234">"Riprova"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Impossibile impostare lo sfondo."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Attualmente impostato"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Sfondo giornaliero"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Schermate Home e di blocco"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Scegli uno sfondo"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Crea uno sfondo"</string>
<string name="home_screen_message" msgid="106444102822522813">"Schermata Home"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Schermata di blocco"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Schermate Home e di blocco"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Esplora lo sfondo della schermata di blocco"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Aggiorna lo sfondo giornaliero della schermata Home"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Aggiorna lo sfondo giornaliero"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Schermata di anteprima sfondo"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Aggiornamento dello sfondo giornaliero…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Impossibile aggiornare lo sfondo giornaliero. Controlla la connessione di rete e riprova."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Sfondi sul dispositivo"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Elimina"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Modifica"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Eliminare questo sfondo dal tuo dispositivo?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Indietro"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Torna indietro"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Modifica"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Scarica"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Sfondo presentazione"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Indietro"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Sfondo"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Anteprima sfondo"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Anteprima sfondo schermata di blocco"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Anteprima sfondo schermata Home"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"La raccolta non esiste"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Esci dalla modalità schermo diviso e riprova"</string>
<string name="cancel" msgid="4970902691067201584">"Annulla"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Nascondi UI Anteprima"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Anteprima UI nascosta. Mostra toccando due volte"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Mostra UI Anteprima"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"I controlli anteprima sono visualizzati. Nascondi toccando due volte"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Nascondi controlli anteprima"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"I controlli anteprima sono nascosti. Visualizza toccando due volte"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Visualizza controlli anteprima"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Nascondi informazioni dello sfondo"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Anteprima UI mostrata. Nascondi toccando due volte"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Cambia sfondo"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Anteprima sfondo schermata di blocco"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Vuoi reimpostare le modifiche?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Le modifiche non verranno salvate"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Altri sfondi"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Sfondo %1$s"</string>
</resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index f2189182..8817f0df 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"קטגוריות של טפטים"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"הגדרת טפט"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"הגדרה כטפט"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"מגדיר טפט…"</string>
<string name="try_again" msgid="8278874823700921234">"ניסיון חוזר"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"לא ניתן להגדיר טפט."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"מוגדר עכשיו"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"טפט יומי"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"מסך הבית ומסך הנעילה"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"בחירת טפט"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"יצירת טפט"</string>
<string name="home_screen_message" msgid="106444102822522813">"מסך הבית"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"מסך נעילה"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"מסך הבית ונעילה"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"מידע על הטפט של מסך הנעילה"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"רענון הטפט היומי של מסך הבית"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"רענון הטפט היומי"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"מסך התצוגה המקדימה של הטפט"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"מרענן את הטפט היומי..."</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"רענון הטפט היומי נכשל. יש לבדוק את החיבור לרשת ולנסות שוב."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"טפטים במכשיר"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"מחיקה"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"עריכה"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"למחוק את הטפט הזה מהמכשיר?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"חזרה"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"מעבר למעלה"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"עריכה"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"הורדה"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"טפט עם מצגת"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"הקודם"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"טפט"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"תצוגה מקדימה של הטפט"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"תצוגה מקדימה של הטפט במסך הנעילה"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"תצוגה מקדימה של הטפט במסך הבית"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"האוסף לא קיים"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"יש לצאת ממצב מסך מפוצל ולנסות שוב"</string>
<string name="cancel" msgid="4970902691067201584">"ביטול"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"ללא תצוגה מקדימה בממשק המשתמש"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"הממשק מוסתר בתצוגה. לוחצים פעמיים לביטול ההסתרה"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"עם תצוגה מקדימה בממשק המשתמש"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"הפקדים של התצוגה המקדימה מוצגים. צריך להקיש הקשה כפולה כדי להסתיר אותם"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"הסתרת פקדי התצוגה המקדימה"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"הפקדים של התצוגה המקדימה מוסתרים. צריך להקיש הקשה כפולה כדי להציג אותם"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"הצגת פקדי התצוגה המקדימה"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"הסתרת פרטי הטפט"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"הממשק מוצג בתצוגה. לוחצים פעמיים לביטול ההסתרה"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"החלפת הטפט"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"תצוגה מקדימה של הטפט במסך הנעילה"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"לאפס את השינויים?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"השינויים שביצעת לא יישמרו"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"עוד טפטים"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"‏טפט %1$s"</string>
</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 1c3dd6e3..ef05f16e 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"壁紙のカテゴリ"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"壁紙を設定"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"壁紙に設定"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"壁紙を設定しています…"</string>
<string name="try_again" msgid="8278874823700921234">"再試行"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"壁紙を設定できませんでした。"</string>
@@ -66,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"ロック画面の壁紙の詳細"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"ホーム画面の日替り壁紙を更新"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"毎日の壁紙を更新"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"壁紙のプレビュー画面"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"日替り壁紙を更新しています…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"日替り壁紙を更新できませんでした。ネットワーク接続を確認してからもう一度お試しください。"</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"デバイスに保存されている壁紙"</string>
@@ -89,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"削除"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"編集"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"この壁紙をデバイスから削除しますか?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"戻る"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"上へ移動"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"編集"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"ダウンロード"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"スライドショーの壁紙"</string>
@@ -99,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"前へ"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"壁紙"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"壁紙のプレビュー"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"ロック画面の壁紙のプレビュー"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"ホーム画面の壁紙のプレビュー"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"コレクションは存在しません"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"分割画面モードを終了してから、もう一度お試しください"</string>
<string name="cancel" msgid="4970902691067201584">"キャンセル"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"UI プレビューを非表示"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI を非表示にしました。ダブルタップで再表示します"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"UI プレビューを表示"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"プレビュー コントロールを表示しています。ダブルタップで非表示にします"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"プレビュー コントロールを表示しない"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"プレビュー コントロールを非表示にしています。ダブルタップで表示します"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"プレビュー コントロールを表示"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"壁紙の情報を表示しない"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI を表示しました。ダブルタップで非表示にします"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"壁紙の変更"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"ロック画面の壁紙のプレビュー"</string>
@@ -121,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"変更をリセットしますか?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"変更内容は保存されません"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"その他の壁紙"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"壁紙 %1$s"</string>
</resources>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index 565f27f7..dad2b7b9 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"ფონის კატეგორიები"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"ფონის დაყენება"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"ფონის დაყენება"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"მიმდინარეობს ფონის დაყენება…"</string>
<string name="try_again" msgid="8278874823700921234">"ხელახლა ცდა"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"ფონის დაყენება ვერ მოხერხდა."</string>
@@ -66,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"ჩაკეტილი ეკრანის ფონის მიმოხილვა"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"მთავარი ეკრანის ყოველდღიური ფონის განახლება"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"ყოველდღიური ფონის განახლება"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"ფონის გადახედვის ეკრანი"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"მიმდინარეობს ყოველდღიური ფონის განახლება…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"ყოველდღიური ფონი ვერ განახლდა. გთხოვთ, შეამოწმოთ ქსელის კავშირი და ხელახლა ცადოთ."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"მოწყობილობაზე შენახული ფონები"</string>
@@ -89,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"წაშლა"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"რედაქტირება"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"წაიშალოს ეს ფონი თქვენი მოწყობილობიდან?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"უკან"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"ნავიგაცია ზემოთ"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"რედაქტირება"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"ჩამოტვირთვა"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"ფონების სლაიდშოუ"</string>
@@ -99,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"წინა"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"ფონი"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"ფონის გადახედვა"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"ჩაკეტილი ეკრანის ფონის გადახედვა"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"მთავარი ეკრანის ფონის გადახედვა"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"კოლექცია არ არსებობს"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"გთხოვთ, გახვიდეთ გაყოფილი ეკრანის რეჟიმიდან და ცადოთ ხელახლა"</string>
<string name="cancel" msgid="4970902691067201584">"გაუქმება"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"UI გადახედვის დამალვა"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI დამალულია გადახედვაში. ორმაგად შეეხეთ გამოსაჩენად"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"UI გადახედვის გამოჩენა"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"წინასწარი ვერსიის მართვის საშუალებები ნაჩვენებია. დასამალად შეეხეთ ორმაგად"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"წინასწარი ვერსიის მართვის საშუალებების დამალვა"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"წინასწარი ვერსიის მართვის საშუალებები დამალულია. საჩვენებლად შეეხეთ ორმაგად"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"წინასწარი ვერსიის მართვის საშუალებების ჩვენება"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"ფონის ინფორმაციის დამალვა"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI ნაჩვენებია გადახედვაში. ორმაგად შეეხეთ დასამალად"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"ფონის შეცვლა"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"ჩაკეტილი ეკრანის ფონის გადახედვა"</string>
@@ -121,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"ცვლილებების გადაყენება?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"თქვენი ცვლილებები არ შეინახება"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"მეტი ფონი"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"ფონი %1$s"</string>
</resources>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 9fda301f..fa9836e5 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Тұсқағаз санаттары"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Тұсқағаз етіп орнату"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Тұсқағаз етіп орнату"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Тұсқағаз орнатылуда…"</string>
<string name="try_again" msgid="8278874823700921234">"Қайталау"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Тұсқағаз орнатылмады."</string>
@@ -29,17 +29,15 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Қазіргісі"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Күнделікті тұсқағаз"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Негізгі экран және құлып экраны"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Тұсқағаз таңдау"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Тұсқағаз жасау"</string>
<string name="home_screen_message" msgid="106444102822522813">"Негізгі экран"</string>
- <string name="lock_screen_message" msgid="1534506081955058013">"Құлыпталған экран"</string>
+ <string name="lock_screen_message" msgid="1534506081955058013">"Құлыптаулы экран"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Негізгі және құлыпталған экран"</string>
<string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"Тұсқағаз ретінде орнату"</string>
<string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"Негізгі экран"</string>
- <string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"Құлыпталған экран"</string>
- <string name="set_wallpaper_both_destination" msgid="2536004558738350775">"Негізгі экран мен құлып экрандары"</string>
+ <string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"Құлыптаулы экран"</string>
+ <string name="set_wallpaper_both_destination" msgid="2536004558738350775">"Негізгі экран мен құлыптаулы экран"</string>
<string name="no_backup_image_wallpaper_label" msgid="6316627676107284851">"Тұсқағазды ауыстырып тұру"</string>
<string name="permission_needed_explanation" msgid="139166837541426823">"Ағымдағы тұсқағазды көрсету үшін <xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасына құрылғының жадына кіру рұқсаты қажет."</string>
<string name="permission_needed_explanation_go_to_settings" msgid="3923551582092599609">"Ағымдағы тұсқағаз осы жерге шығуы үшін, \"Тұсқағаздар\" қолданбасына құрылғы жадына кіру рұқсаты қажет.\n\nБұл параметрді осы қолданба ақпаратындағы \"Рұқсаттар\" бөлімінен өзгертуге болады."</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Құлыпталған экран тұсқағазын шолу"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Негізгі экрандағы күнделікті тұсқағазды ауыстыру"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Күнделікті тұсқағазды ауыстыру"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Тұсқағазды алдын ала көру экраны"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Күнделікті тұсқағаз ауыстырылуда…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Күнделікті тұсқағаз ауыстырылмады. Желі байланысын тексеріп, әрекетті қайталаңыз."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Құрылғыдағы тұсқағаздар"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Жою"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Өзгерту"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Осы тұсқағазды құрылғыдан өшіру керек пе?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Артқа"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Жоғары қарай өту"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Өзгерту"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Жүктеп алу"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Слайдшоу тұсқағазы"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Алдыңғы"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Тұсқағаз"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Тұсқағазды алдын ала көру"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Құлып экраны тұсқағазын алдын ала көру"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Негізгі экран тұсқағазын алдын ала көру"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Жинақ жоқ."</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Экранды бөлу режимінен шығып, қайталап көріңіз."</string>
<string name="cancel" msgid="4970902691067201584">"Бас тарту"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Алдын ала көру экранын жасыру"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Пайдаланушы интерфейсі алдын ала көру режимінде жасырылған. Көрсету үшін екі рет түртіңіз."</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Алдын ала көру экранын көрсету"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Алғы көрініс басқару элементтері көрсетіліп тұр. Жасыру үшін екі рет түртіңіз."</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Алғы көрініс басқару элементтерін жасыру"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Алғы көрініс басқару элементтерін жасырылып тұр. Көрсету үшін екі рет түртіңіз."</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Алғы көрініс басқару элементтерін көрсету"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Түсқағаз туралы ақпаратты жасыру"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Пайдаланушы интерфейсі алдын ала көру режимінде көрсетілген. Жасыру үшін екі рет түртіңіз."</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Тұсқағазды өзгерту"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Құлып экраны тұсқағазын алдын ала көру"</string>
@@ -117,10 +124,11 @@
<string name="settings_snackbar_description" msgid="890168814524778486">"\"Параметрлер\" бөлімінде \"Файлдар және мультимедиа\" рұқсатын қосыңыз."</string>
<string name="settings_snackbar_enable" msgid="5992112808061426068">"Қосу"</string>
<string name="open_my_photos" msgid="4107196465713868381">"Фотоларымды көру"</string>
- <string name="lock_screen_tab" msgid="6672930765010407652">"Экранды құлыптау"</string>
+ <string name="lock_screen_tab" msgid="6672930765010407652">"Құлыптаулы экран"</string>
<string name="home_screen_tab" msgid="1080445697837877526">"Негізгі экран"</string>
- <string name="reset" msgid="4945445169532850631">"Қайта орнату"</string>
+ <string name="reset" msgid="4945445169532850631">"Қайтару"</string>
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Өзгертулерді қайтару керек пе?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Өзгертулер сақталмайды."</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Басқа да тұсқағаздар"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Тұсқағаз: %1$s"</string>
</resources>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index d3c73d1d..171aa552 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"ប្រភេទផ្ទាំងរូបភាព"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"កំណត់ផ្ទាំងរូបភាព"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"កំណត់​ផ្ទាំង​រូបភាព"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"កំពុង​កំណត់​ផ្ទាំង​រូបភាព..."</string>
<string name="try_again" msgid="8278874823700921234">"ព្យាយាមម្ដងទៀត"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"មិនអាចកំណត់ផ្ទាំងរូបភាពបានទេ"</string>
@@ -66,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"ស្វែងយល់ពីផ្ទាំងរូបភាពអេក្រង់ចាក់សោ"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"ផ្ទុកផ្ទាំងរូបភាពអេក្រង់ដើមប្រចាំថ្ងៃឡើងវិញ"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"ផ្ទុកផ្ទាំងរូបភាពប្រចាំថ្ងៃឡើងវិញ"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"អេក្រង់មើល​ផ្ទាំងរូបភាព​សាកល្បង"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"កំពុងផ្ទុកផ្ទាំងរូបភាពប្រចាំថ្ងៃឡើងវិញ…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"បានបរាជ័យក្នុងការផ្ទុកផ្ទាំងរូបភាពប្រចាំថ្ងៃឡើងវិញ។ សូមពិនិត្យការតភ្ជាប់បណ្តាញរបស់អ្នក ហើយព្យាយាមម្តងទៀត។"</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"ផ្ទាំងរូបភាពនៅលើឧបករណ៍"</string>
@@ -89,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"លុប"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"កែ"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"លុបផ្ទាំងរូបភាពនេះចេញពីឧបករណ៍របស់អ្នកឬ?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"ថយក្រោយ"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"រុករកឡើងលើ"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"កែ"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"ទាញយក"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"ផ្ទាំងរូបភាព​បញ្ចាំងស្លាយ"</string>
@@ -99,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"មុន"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"ផ្ទាំងរូបភាព"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"ការមើលផ្ទាំង​រូបភាពសាកល្បង"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"ការមើល​ផ្ទាំងរូបភាព​អេក្រង់ចាក់សោ​សាកល្បង"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"ការមើល​ផ្ទាំងរូបភាព​អេក្រង់ដើម​សាកល្បង"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"បណ្ដុំមិនមានទេ"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"សូមចាកចេញពីមុខងារបំបែកអេក្រង់ រួចព្យាយាមម្ដងទៀត"</string>
<string name="cancel" msgid="4970902691067201584">"បោះបង់"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"លាក់ការមើល UI សាកល្បង"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI ត្រូវបានលាក់ក្នុងការមើលសាកល្បង។ ចុចពីរដង ដើម្បីឈប់លាក់"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"បង្ហាញការមើល UI សាកល្បង"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"ការគ្រប់គ្រងការមើលសាកល្បងត្រូវបានបង្ហាញ។ ចុចពីរដង ដើម្បីលាក់"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"លាក់ការគ្រប់គ្រងការមើលសាកល្បង"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"ការគ្រប់គ្រងការមើលសាកល្បងត្រូវបានលាក់។ ចុចពីរដង ដើម្បីបង្ហាញ"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"បង្ហាញការគ្រប់គ្រងការមើលសាកល្បង"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"លាក់ព័ត៌មានផ្ទាំង​រូបភាព"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI បង្ហាញក្នុងការមើលសាកល្បង។ ចុចពីរដង ដើម្បីលាក់"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"ប្ដូរផ្ទាំងរូបភាព"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"ការមើល​ផ្ទាំងរូបភាព​អេក្រង់ចាក់សោសាកល្បង"</string>
@@ -121,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"កំណត់​ការផ្លាស់ប្ដូរ​ឡើង​វិញឬ?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"ការផ្លាស់ប្ដូររបស់អ្នកនឹងមិនត្រូវបានរក្សាទុកទេ"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"ផ្ទាំងរូបភាព​ច្រើនទៀត"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"ផ្ទាំង​រូបភាព %1$s"</string>
</resources>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 864b1574..d4ba33eb 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"ವಾಲ್‌ಪೇಪರ್‌ ವರ್ಗಗಳು"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"ವಾಲ್‌ಪೇಪರ್ ಹೊಂದಿಸಿ"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"ವಾಲ್‌ಪೇಪರ್ ಸೆಟ್ ಮಾಡಿ"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"ವಾಲ್‌ಪೇಪರ್ ಹೊಂದಿಸಲಾಗುತ್ತಿದೆ..."</string>
<string name="try_again" msgid="8278874823700921234">"ಪುನಃ ಪ್ರಯತ್ನಿಸಿ"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"ವಾಲ್‌ಪೇಪರ್ ಹೊಂದಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
@@ -66,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"ಲಾಕ್ ಪರದೆಯ ವಾಲ್‌ಪೇಪರ್ ಎಕ್ಸ್‌ಪ್ಲೋರ್ ಮಾಡಿ"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"ದೈನಂದಿನ ಮುಖಪುಟ ಪರದೆಯ ವಾಲ್‌ಪೇಪರ್ ರಿಫ್ರೆಶ್ ಮಾಡಿ"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"ದಿನನಿತ್ಯದ ವಾಲ್‌ಪೇಪರ್ ಅನ್ನು ರಿಫ್ರೆಶ್ ಮಾಡಿ"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"ವಾಲ್‌ಪೇಪರ್ ಪೂರ್ವವೀಕ್ಷಣೆಯ ಪರದೆ"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"ದೈನಂದಿನ ವಾಲ್‌ಪೇಪರ್ ಅನ್ನು ರಿಫ್ರೆಶ್ ಮಾಡಲಾಗುತ್ತಿದೆ…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"ಪ್ರತಿದಿನದ ವಾಲ್‌ಪೇಪರ್ ರಿಫ್ರೆಶ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ. ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್ ಸಂಪರ್ಕವನ್ನು ಪರಿಶೀಲಿಸಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"ಸಾಧನದಲ್ಲಿನ ವಾಲ್‌ಪೇಪರ್‌ಗಳು"</string>
@@ -89,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"ಅಳಿಸಿ"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"ಎಡಿಟ್ ಮಾಡಿ"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"ನಿಮ್ಮ ಸಾಧನದಿಂದ ಈ ವಾಲ್‌ಪೇಪರ್ ಅಳಿಸಬೇಕೆ?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"ಹಿಂದೆ"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"ಮೇಲಕ್ಕೆ ನ್ಯಾವಿಗೇಟ್ ಮಾಡಿ"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"ಎಡಿಟ್ ಮಾಡಿ"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"ಡೌನ್‌ಲೋಡ್"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"ಸ್ಲೈಡ್‌ಶೋ ವಾಲ್‌ಪೇಪರ್"</string>
@@ -99,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"ಹಿಂದಕ್ಕೆ"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"ವಾಲ್‌ಪೇಪರ್‌"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"ವಾಲ್‌ಪೇಪರ್ ಪೂರ್ವವೀಕ್ಷಣೆ"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"ಲಾಕ್‌ಸ್ಕ್ರೀನ್ ವಾಲ್‌ಪೇಪರ್‌ನ ಪೂರ್ವವೀಕ್ಷಣೆ"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"ಹೋಮ್ ಸ್ಕ್ರೀನ್ ವಾಲ್‌ಪೇಪರ್‌ನ ಪೂರ್ವವೀಕ್ಷಣೆ"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"ಸಂಗ್ರಹಣೆ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"ಸ್ಪ್ಲಿಟ್ ಸ್ಕ್ರೀನ್ ಮೋಡ್‌ನಿಂದ ನಿರ್ಗಮಿಸಿ ಹಾಗೂ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ"</string>
<string name="cancel" msgid="4970902691067201584">"ರದ್ದುಮಾಡಿ"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"UI ಪೂರ್ವವೀಕ್ಷಣೆಯನ್ನು ಮರೆಮಾಡಿ"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"ಪೂರ್ವವೀಕ್ಷಣೆಯಲ್ಲಿ UI ಅನ್ನು ಮರೆಮಾಡಲಾಗಿದೆ. ಪ್ರದರ್ಶಿಸಲು ಡಬಲ್ ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"UI ಪೂರ್ವವೀಕ್ಷಣೆಯನ್ನು ತೋರಿಸಿ"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"ಪೂರ್ವವೀಕ್ಷಣೆಯ ನಿಯಂತ್ರಣಗಳನ್ನು ಡಿಸ್‌ಪ್ಲೇ ಮಾಡಲಾಗಿದೆ. ಮರೆಮಾಡಲು ಡಬಲ್ ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"ಪೂರ್ವವೀಕ್ಷಣೆಯ ನಿಯಂತ್ರಣಗಳನ್ನು ಮರೆಮಾಡಿ"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"ಪೂರ್ವವೀಕ್ಷಣೆಯ ನಿಯಂತ್ರಣಗಳನ್ನು ಮರೆಮಾಡಲಾಗಿದೆ. ತೋರಿಸಲು ಡಬಲ್ ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"ಪೂರ್ವವೀಕ್ಷಣೆಯ ನಿಯಂತ್ರಣಗಳನ್ನು ತೋರಿಸಿ"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"ವಾಲ್‌ಪೇಪರ್ ಮಾಹಿತಿಯನ್ನು ಮರೆಮಾಡಿ"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"ಪೂರ್ವವೀಕ್ಷಣೆಯಲ್ಲಿ UI ಅನ್ನು ಪ್ರದರ್ಶಿಸಲಾಗಿದೆ. ಮರೆಮಾಡಲು ಡಬಲ್ ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"ವಾಲ್‌ಪೇಪರ್ ಬದಲಿಸಿ"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"ಲಾಕ್‌ಸ್ಕ್ರೀನ್ ವಾಲ್‌ಪೇಪರ್ ಪೂರ್ವವೀಕ್ಷಣೆ."</string>
@@ -115,10 +124,11 @@
<string name="settings_snackbar_description" msgid="890168814524778486">"ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಫೈಲ್‌ಗಳು ಮತ್ತು ಮಾಧ್ಯಮವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ."</string>
<string name="settings_snackbar_enable" msgid="5992112808061426068">"ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
<string name="open_my_photos" msgid="4107196465713868381">"ನನ್ನ ಫೋಟೋಗಳನ್ನು ತೆರೆಯಿರಿ"</string>
- <string name="lock_screen_tab" msgid="6672930765010407652">"ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಮಾಡಿ"</string>
+ <string name="lock_screen_tab" msgid="6672930765010407652">"ಲಾಕ್ ಸ್ಕ್ರೀನ್"</string>
<string name="home_screen_tab" msgid="1080445697837877526">"ಹೋಮ್ ಸ್ಕ್ರೀನ್"</string>
<string name="reset" msgid="4945445169532850631">"ರೀಸೆಟ್ ಮಾಡಿ"</string>
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"ಬದಲಾವಣೆಗಳನ್ನು ರೀಸೆಟ್ ಮಾಡಬೇಕೆ?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"ನಿಮ್ಮ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲಾಗುವುದಿಲ್ಲ"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"ಇನ್ನಷ್ಟು ವಾಲ್‌ಪೇಪರ್‌ಗಳು"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"ವಾಲ್‌ಪೇಪರ್ %1$s"</string>
</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index bc796ab0..3cdbf3b7 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"배경화면 카테고리"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"배경화면 설정"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"배경화면 설정"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"배경화면을 설정하는 중..."</string>
<string name="try_again" msgid="8278874823700921234">"다시 시도"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"배경화면을 설정할 수 없습니다."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"현재 설정"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"일일 배경화면"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"홈 및 잠금 화면"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"배경화면 선택하기"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"배경화면 만들기"</string>
<string name="home_screen_message" msgid="106444102822522813">"홈 화면"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"잠금 화면"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"홈 및 잠금"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"잠금 화면 배경화면 탐색"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"일일 홈 화면 배경화면 새로고침"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"일일 배경화면 새로고침"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"배경화면 미리보기 화면"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"일일 배경화면 새로고침 중..."</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"일일 배경화면을 새로고침할 수 없습니다. 네트워크 연결을 확인한 후 다시 시도해 주세요."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"기기 배경화면"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"삭제"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"수정"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"기기에서 이 배경화면을 삭제하시겠습니까?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"뒤로"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"위로 이동"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"수정"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"다운로드"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"배경화면 슬라이드쇼"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"이전"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"배경화면"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"배경화면 미리보기"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"잠금 화면 배경화면 미리보기"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"홈 화면 배경화면 미리보기"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"컬렉션이 없습니다."</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"화면 분할 모드를 나간 다음 다시 시도해 주세요."</string>
<string name="cancel" msgid="4970902691067201584">"취소"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"UI 미리보기 숨기기"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI를 미리보기에서 숨겼습니다. 숨기기 해제하려면 두 번 탭하세요."</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"UI 미리보기 표시"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"미리보기 컨트롤이 표시됩니다. 숨기려면 두 번 탭하세요."</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"미리보기 컨트롤 숨기기"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"미리보기 컨트롤이 숨겨졌습니다. 표시하려면 두 번 탭하세요."</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"미리보기 컨트롤 표시"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"배경화면 정보 숨기기"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI가 미리보기에서 표시됩니다. 숨기려면 두 번 탭하세요."</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"배경화면 변경"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"잠금 화면 배경화면 미리보기"</string>
@@ -120,7 +127,8 @@
<string name="lock_screen_tab" msgid="6672930765010407652">"잠금 화면"</string>
<string name="home_screen_tab" msgid="1080445697837877526">"홈 화면"</string>
<string name="reset" msgid="4945445169532850631">"초기화"</string>
- <string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"변경사항을 재설정하시겠습니까?"</string>
+ <string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"변경사항을 초기화하시겠습니까?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"변경사항이 저장되지 않습니다."</string>
<string name="more_wallpapers" msgid="8116268433411881705">"배경화면 더보기"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"배경화면 %1$s"</string>
</resources>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index 52aa5cc4..ad32de50 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Тушкагаз категориялары"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Тушкагаз коюу"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Тушкагаз орнотуу"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Тушкагаз орнотулууда…"</string>
<string name="try_again" msgid="8278874823700921234">"Кайталоо"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Тушкагаз орнотулбай жатат."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Учурда тушкагаз катары орнотулган"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Күнүмдүк тушкагаз"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Башкы жана кулпуланган экран"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Тушкагаз тандоо"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Тушкагаз түзүү"</string>
<string name="home_screen_message" msgid="106444102822522813">"Башкы экран"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Кулпуланган экран"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Башкы жана кулпуланган экран"</string>
@@ -42,7 +40,7 @@
<string name="set_wallpaper_both_destination" msgid="2536004558738350775">"Башкы экран жана кулпуланган экрандар"</string>
<string name="no_backup_image_wallpaper_label" msgid="6316627676107284851">"Алмаштырма тушкагаз сүрөтү"</string>
<string name="permission_needed_explanation" msgid="139166837541426823">"Учурдагы тушкагазды бул жерден көрсөтүү үчүн <xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосуна түзмөгүңүздүн сактагычын колдонуу мүмкүнчүлүгү керек."</string>
- <string name="permission_needed_explanation_go_to_settings" msgid="3923551582092599609">"Учурдагы тушкагазды бул жерден көрсөтүү үчүн Тушкагаздар колдонмосу түзмөгүңүздүн сактагычын колдонуу мүмкүнчүлүгүн алышы керек.\n\nБул жөндөөнү өзгөртүү үчүн Тушкагаздар колдонмосу жөнүндө маалыматтын \"Уруксаттар\" бөлүмүнө өтүңүз."</string>
+ <string name="permission_needed_explanation_go_to_settings" msgid="3923551582092599609">"Учурдагы тушкагазды бул жерден көрсөтүү үчүн Тушкагаздар колдонмосу түзмөгүңүздүн сактагычын колдонуу мүмкүнчүлүгүн алышы керек.\n\nБул параметрди өзгөртүү үчүн Тушкагаздар колдонмосу жөнүндө маалыматтын \"Уруксаттар\" бөлүмүнө өтүңүз."</string>
<string name="permission_needed_allow_access_button_label" msgid="1943133660612924306">"Мүмкүнчүлүк берүү"</string>
<string name="no_backup_image_wallpaper_description" msgid="8303268619408738057">"Жандуу тушкагаз кызматы тушкагаздарды алмаштырат"</string>
<string name="daily_refresh_tile_title" msgid="3270456074558525091">"Күнүмдүк тушкагаз"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Кулпуланган экрандын тушкагазын изилдөө"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Башкы экрандын күнүмдүк тушкагазын жаңыртуу"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Күнүмдүк тушкагазды жаңыртуу"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Тушкагазды карап көрүү экраны"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Күнүмдүк тушкагаз жаңыртылууда…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Күнүмдүк тушкагаз жаңыртылбай калды. Интернетке туташууңузду текшерип, дагы бир жолу аракет кылыңыз."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Түзмөктөгү тушкагаздар"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Жок кылуу"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Түзөтүү"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Бул тушкагаз түзмөгүңүздөн өчүрүлсүнбү?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Артка"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Мурунку экранга өтүү"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Түзөтүү"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Жүктөп алуу"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Тушкагазды слайдшоу катары көрсөтүү"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Мурунку"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Тушкагаз"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Тушкагазды алдын ала көрүү"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Кулпуланган экрандын тушкагазын карап көрүү"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Башкы экрандын тушкагазын карап көрүү"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Мындай жыйнак жок"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Экранды бөлүү режиминен чыгып, кайталап көрүңүз"</string>
<string name="cancel" msgid="4970902691067201584">"Кереги жок"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Алдын ала көрүү экранын жашыруу"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Эки жолу басып, интерфейсти алдын ала көрүңүз."</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Алдын ала көрүү экранын көрсөтүү"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Алдын ала көрүүнү башкаруу элементтери көрсөтүлдү. Жашыруу үчүн эки жолу басыңыз"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Алдын ала көрүүнү башкаруу элементтерин жашыруу"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Алдын ала көрүүнү башкаруу элементтери жашырылды. Көрсөтүү үчүн эки жолу басыңыз"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Алдын ала көрүүнү башкаруу элементтерин көрсөтүү"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Тушкагаз тууралуу маалыматты жашыруу"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Эки жолу басып, интерфейсти жашырыңыз."</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Тушкагазды өзгөртүү"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Кулпуланган экрандын тушкагазын көрүү"</string>
@@ -114,7 +121,7 @@
<string name="accessibility_customize_shown" msgid="590964727831547651">"Ыңгайлаштыруу тактасы көрсөтүлдү"</string>
<string name="accessibility_info_hidden" msgid="2288603712350168107">"Маалымат жашырылды"</string>
<string name="accessibility_info_shown" msgid="6626025722456105632">"Маалымат көрсөтүлдү"</string>
- <string name="settings_snackbar_description" msgid="890168814524778486">"Жөндөөлөрдөн файлдарды жана медианы иштетиңиз."</string>
+ <string name="settings_snackbar_description" msgid="890168814524778486">"Параметрлерден файлдарды жана медианы иштетиңиз."</string>
<string name="settings_snackbar_enable" msgid="5992112808061426068">"Иштетүү"</string>
<string name="open_my_photos" msgid="4107196465713868381">"Сүрөттөрүмдү ачуу"</string>
<string name="lock_screen_tab" msgid="6672930765010407652">"Экранды кулпулоо"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Өзгөртүүлөр жоюлсунбу?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Өзгөртүүлөрүңүз сакталбайт"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Дагы башка тушкагаздар"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Тушкагаздар %1$s"</string>
</resources>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 1f835150..0ed2c21b 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"ໝວດໝູ່ຮູບພື້ນຫຼັງ"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"ຕັ້ງເປັນຮູບພື້ນຫຼັງ"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"ຕັ້ງເປັນຮູບພື້ນຫຼັງ"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"ກຳລັງຕັ້ງຮູບພື້ນຫຼັງ..."</string>
<string name="try_again" msgid="8278874823700921234">"ລອງໃໝ່"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"ບໍ່ສາມາດຕັ້ງເປັນຮູບພື້ນຫຼັງໄດ້."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"ຕັ້ງຕອນນີ້"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"ຮູບພື້ນຫຼັງປະຈຳວັນ"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"ໜ້າຫຼັກ ແລະ ໜ້າຈໍລັອກ"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"ເລືອກຮູບພື້ນຫຼັງ"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"ສ້າງຮູບພື້ນຫຼັງ"</string>
<string name="home_screen_message" msgid="106444102822522813">"ໜ້າຈໍຫຼັກ"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"ໜ້າຈໍລັອກ"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"ໜ້າຈໍຫຼັກ ແລະ ການລັອກ"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"ສຳຫຼວດຮູບພື້ນຫຼັງໜ້າຈໍລັອກ"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"ໂຫຼດຂໍ້ມູນຮູບພື້ນຫຼັງໜ້າຈໍຫຼັກຄືນໃໝ່ທຸກມື້"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"ໂຫຼດຮູບພື້ນຫຼັງຄືນໃໝ່ທຸກມື້"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"ໜ້າຈໍຕົວຢ່າງຮູບພື້ນຫຼັງ"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"ກຳລັງໂຫຼດຂໍ້ມູນຮູບພື້ນຫຼັງປະຈຳວັນຄືນໃໝ່…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"ໂຫຼດຮູບພື້ນຫຼັງຄືນໃໝ່ທຸກມື້ບໍ່ສຳເລັດ. ກະລຸນາກວດສອບການເຊື່ອມຕໍ່ອິນເຕີເນັດຂອງທ່ານແລ້ວລອງໃໝ່ອີກຄັ້ງ."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"ຮູບພື້ນຫຼັງໃນເຄື່ອງ"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"ລຶບອອກ"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"ແກ້ໄຂ"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"ລຶບຮູບພື້ນຫຼັງນີ້ອອກຈາກອຸປະກອນຂອງທ່ານບໍ?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"ກັບຄືນ"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"ເລື່ອນຂຶ້ນ"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"ແກ້ໄຂ"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"ດາວໂຫຼດ"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"ຮູບພື້ນຫຼັງສະໄລ້ໂຊ"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"ກ່ອນໜ້າ"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"ຮູບພື້ນຫຼັງ"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"ຕົວຢ່າງຮູບພື້ນຫຼັງ"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"ຕົວຢ່າງຮູບພື້ນຫຼັງໜ້າຈໍລັອກ"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"ຕົວຢ່າງຮູບພື້ນຫຼັງໂຮມສະກຣີນ"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"ບໍ່ມິຄໍເລັກຊັນ"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"ກະລຸນາອອກຈາກໂໝດແບ່ງໜ້າຈໍແລ້ວລອງໃໝ່"</string>
<string name="cancel" msgid="4970902691067201584">"ຍົກເລີກ"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"ເຊື່ອງຕົວຢ່າງສ່ວນຕິດຕໍ່ຜູ້ໃຊ້"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"ເຊື່ອງສ່ວນຕິດຕໍ່ຜູ້ໃຊ້ໃນຕົວຢ່າງແລ້ວ. ແຕະສອງເທື່ອເພື່ອເຊົາເຊື່ອງ"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"ສະແດງຕົວຢ່າງສ່ວນຕິດຕໍ່ຜູ້ໃຊ້"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"ການຄວບຄຸມຕົວຢ່າງຖືກສະແດງແລ້ວ. ແຕະສອງເທື່ອເພື່ອເຊື່ອງ"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"ເຊື່ອງການຄວບຄຸມຕົວຢ່າງ"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"ການຄວບຄຸມຕົວຢ່າງຖືກເຊື່ອງໄວ້ແລ້ວ. ແຕະສອງເທື່ອເພື່ອສະແດງ"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"ສະແດງການຄວບຄຸມຕົວຢ່າງ"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"ເຊື່ອງຂໍ້ມູນຮູບພື້ນຫຼັງ"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"ສະແດງສ່ວນຕິດຕໍ່ຜູ້ໃຊ້ໃນຕົວຢ່າງແລ້ວ. ແຕະສອງເທື່ອເພື່ອເຊື່ອງ"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"ປ່ຽນຮູບພື້ນຫຼັງ"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"ຕົວຢ່າງຮູບພື້ນຫຼັງໜ້າຈໍລັອກ"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"ຣີເຊັດການປ່ຽນແປງບໍ?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"ການປ່ຽນ​ແປງ​ຂອງ​ທ່ານ​ຈະບໍ່​ຖືກບັນ​ທຶກ"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"ຮູບພື້ນຫຼັງເພີ່ມເຕີມ"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"ຮູບພື້ນຫຼັງ %1$s"</string>
</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 3fb22d6f..2b91da30 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Ekrano fonų kategorijos"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Nustatyti ekrano foną"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Nustatyti ekrano foną"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Nustatomas fonas…"</string>
<string name="try_again" msgid="8278874823700921234">"Bandyti dar kartą"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Nepavyko nustatyti ekrano fono."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Šiuo metu nustatytas"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Dienos ekrano fonas"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Pagrindinis ir užrakinimo ekranai"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Pasirinkite ekrano foną"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Sukurkite ekrano foną"</string>
<string name="home_screen_message" msgid="106444102822522813">"Pagrindinis ekranas"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Užrakinimo ekranas"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Pagrindinis ir užrakinimo ekr."</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Naršyti užrakinimo ekrano foną"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Atnaujinti dienos pagrindinio ekrano foną"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Atnaujinti dienos ekrano foną"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Ekrano fono peržiūra"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Atnaujinamas dienos ekrano fonas…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Nepavyko atnaujinti dienos ekrano fono. Patikrinkite tinklo ryšį ir bandykite dar kartą."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Ekrano fonai įrenginyje"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Ištrinti"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Redaguoti"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Ištrinti šį ekrano foną iš įrenginio?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Atgal"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Naršyti į viršų"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Redaguoti"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Atsisiųsti"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Ekrano fono skaidrių demonstr."</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Ankstesnis"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Ekrano fonas"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Ekrano fono peržiūra"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Užrakinimo ekrano fono peržiūra"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Pagrindinio ekrano fono peržiūra"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Rinkinio nėra"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Išeikite iš išskaidyto ekrano režimo ir bandykite dar kartą"</string>
<string name="cancel" msgid="4970902691067201584">"Atšaukti"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Slėpti NS peržiūrą"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"NS paslėpta peržiūroje. Dukart paliesd. parodykite"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Rodyti NS peržiūrą"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Peržiūros valdikliai rodomi. Dukart paliesdami paslėpkite"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Slėpti peržiūros valdiklius"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Peržiūros rodikliai paslėpti. Dukart paliesdami rodykite"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Rodyti peržiūros valdiklius"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Slėpti ekrano fono informaciją"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"NS rodoma peržiūroje. Dukart paliesdami paslėpkite"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Ekrano fono keitimas"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Užrakinimo ekrano fono peržiūra"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Nustatyti pakeitimus iš naujo?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Pakeitimai nebus išsaugoti"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Daugiau darbalaukio fonų"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Ekrano fonas %1$s"</string>
</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index f1e4a187..f9db8562 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Fona tapešu kategorijas"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Iestatīt fona tapeti"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Iestatīt fona tapeti"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Notiek fona tapetes iestatīšana..."</string>
<string name="try_again" msgid="8278874823700921234">"Mēģināt vēlreiz"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Nevar iestatīt fona tapeti."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Pašlaik iestatīta"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Dienas fona tapete"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Sākuma un bloķēšanas ekrāns"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Fona tapetes izvēle"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Fona tapetes izveide"</string>
<string name="home_screen_message" msgid="106444102822522813">"Sākuma ekrāns"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Bloķēšanas ekrāns"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Sākuma un bloķēšanas ekrāns"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Apskatīt bloķēšanas ekrāna fona tapeti"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Atsvaidzināt dienas fona tapeti sākuma ekrānā"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Atsvaidzināt dienas fona tapeti"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Fona tapetes priekšskatījuma ekrāns"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Notiek dienas fona tapetes atsvaidzināšana…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Neizdevās atsvaidzināt dienas fona tapeti. Lūdzu, pārbaudiet tīkla savienojumu un mēģiniet vēlreiz."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Fona tapetes ierīcē"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Dzēst"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Rediģēt"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Vai dzēst šo fona tapeti no jūsu ierīces?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Atpakaļ"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Pāriet augšup"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Rediģēt"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Lejupielādēt"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Fona tapešu slaidrāde"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Atpakaļ"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Fona tapete"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Fona tapetes priekšskatījums"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Bloķēšanas ekrāna fona tapetes priekšskatījums"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Sākuma ekrāna fona tapetes priekšskatījums"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Kolekcija nepastāv"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Izslēdziet ekrāna sadalīšanas režīmu un mēģiniet vēlreiz"</string>
<string name="cancel" msgid="4970902691067201584">"Atcelt"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Paslēpt saskarnes priekšskatījumu"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Priekšskatījumā saskarne ir paslēpta. Lai to rādītu, veiciet dubultskārienu."</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Rādīt saskarnes priekšskatījumu"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Priekšskatījuma vadīklas tiek rādītas. Veiciet dubultskārienu, lai tās paslēptu."</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Paslēpt priekšskatījuma vadīklas"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Priekšskatījuma vadīklas ir paslēptas. Veiciet dubultskārienu, lai tās tiktu rādītas."</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Rādīt priekšskatījuma vadīklas"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Paslēpt fona tapetes datus"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Priekšskatījumā saskarne tiek rādīta. Lai to paslēptu, veiciet dubultskārienu."</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Fona tapetes maiņa"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Bloķēšanas ekrāna fona tapetes priekšsk."</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Vai atiestatīt izmaiņas?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Jūsu veiktās izmaiņas netiks saglabātas."</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Citas fona tapetes"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Fona tapete: %1$s"</string>
</resources>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 01de4730..2fb11968 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Категории на тапети"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Постави го тапетот"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Поставете тапет"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Тапетот се поставува…"</string>
<string name="try_again" msgid="8278874823700921234">"Обиди се пак"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Тапетот не може да се постави."</string>
@@ -29,14 +29,12 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Моментално"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Дневен тапет"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Почетен и заклучен екран"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Изберете тапет"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Создајте тапет"</string>
<string name="home_screen_message" msgid="106444102822522813">"Почетен екран"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Заклучен екран"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Почетен и заклучен екран"</string>
- <string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"Постави тапет"</string>
+ <string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"Постави тапет на"</string>
<string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"Почетен екран"</string>
<string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"Заклучен екран"</string>
<string name="set_wallpaper_both_destination" msgid="2536004558738350775">"Почетен и заклучен екран"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Истражувајте го тапетот на заклучен екран"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Освежи го дневниот тапет за почетниот екран"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Освежи го дневниот тапет"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Екран за преглед на тапет"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Се освежува дневниот тапет…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Освежувањето на дневниот тапет не успеа. Проверете ја мрежната врска и обидете се повторно."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Тапети на уредот"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Избриши"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Изменете"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Да се избрише овој тапет од уредот?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Назад"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Движење нагоре"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Измени"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Преземи"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Тапет со приказ на слајдови"</string>
@@ -101,26 +100,35 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Претходна"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Тапет"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Преглед на тапет"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Преглед на тапетот за заклучен екран"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Преглед на тапетот на почетниот екран"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Збирката не постои"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Излезете од режимот на поделен екран и обидете се повторно"</string>
<string name="cancel" msgid="4970902691067201584">"Откажи"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Сокриј го прегледот на UI"</string>
+ <string name="hide_ui_preview_text" msgid="6766076482511252295">"Скриј го прегледот на UI"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI е скриен во прегледот. Допрете двапати за да се прикаже"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Прикажи го прегледот на UI"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Контролите за преглед се прикажани. Допрете двапати за да ги скриете"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Скриј ги контролите за преглед"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Контролите за преглед се скриени. Допрете двапати за да ги прикажете"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Прикажи ги контролите за преглед"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Скриј ги информациите за тапетот"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI е прикажан во прегледот. Допрете двапати за да се скрие"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Сменете го тапетот"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Преглед на тапетот за заклучен екран"</string>
<string name="apply_btn" msgid="5764555565943538528">"Примени"</string>
- <string name="accessibility_customize_hidden" msgid="6320568529768181691">"Приспособувањето е сокриено"</string>
+ <string name="accessibility_customize_hidden" msgid="6320568529768181691">"Приспособувањето е скриено"</string>
<string name="accessibility_customize_shown" msgid="590964727831547651">"Приспособувањето е прикажано"</string>
<string name="accessibility_info_hidden" msgid="2288603712350168107">"Скриени информации"</string>
<string name="accessibility_info_shown" msgid="6626025722456105632">"Прикажани информации"</string>
<string name="settings_snackbar_description" msgid="890168814524778486">"Овозможете „Датотеки и аудиовизуелни содржини“ во поставки."</string>
<string name="settings_snackbar_enable" msgid="5992112808061426068">"Овозможи"</string>
<string name="open_my_photos" msgid="4107196465713868381">"Отвори „Мои фотографии“"</string>
- <string name="lock_screen_tab" msgid="6672930765010407652">"Заклучување екран"</string>
+ <string name="lock_screen_tab" msgid="6672930765010407652">"Заклучен екран"</string>
<string name="home_screen_tab" msgid="1080445697837877526">"Почетен екран"</string>
<string name="reset" msgid="4945445169532850631">"Ресетирај"</string>
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Да се ресетираат промените?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Промените нема да се зачуваат"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Повеќе тапети"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Тапет %1$s"</string>
</resources>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 93c17ad5..7fc459b3 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"വാൾപേപ്പർ വിഭാഗങ്ങൾ"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"വാൾപേപ്പർ സജ്ജീകരിക്കൂ"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"വാൾപേപ്പർ സജ്ജീകരിക്കൂ"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"വാൾപേപ്പർ സജ്ജമാക്കുന്നു…"</string>
<string name="try_again" msgid="8278874823700921234">"വീണ്ടും ശ്രമിക്കുക"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"വാൾപേപ്പർ സജ്ജമാക്കാനാവുന്നില്ല."</string>
@@ -45,7 +45,7 @@
<string name="no_backup_image_wallpaper_description" msgid="8303268619408738057">"വാൾപേപ്പറുകൾ തിരിക്കുന്നതിനുള്ള സജീവ വാൾപേപ്പർ സേവനം"</string>
<string name="daily_refresh_tile_title" msgid="3270456074558525091">"പ്രതിദിന വാൾപേപ്പർ"</string>
<string name="daily_refresh_tile_subtitle" msgid="3976682014885446443">"ഓണാക്കാൻ ടാപ്പ് ചെയ്യുക"</string>
- <string name="start_rotation_dialog_body_live_wallpaper_needed" msgid="5132580257563846082">"എല്ലാ ദിവസവും വാൾപേപ്പർ സ്വമേധയാ മാറും. സജ്ജീകരണം പൂർത്തിയാക്കാൻ, അടുത്ത സ്ക്രീനിലെ &lt;strong&gt;വാൾപേപ്പർ സജ്ജീകരിക്കുക&lt;/strong&gt; എന്നതിൽ ടാപ്പ് ചെയ്യുക."</string>
+ <string name="start_rotation_dialog_body_live_wallpaper_needed" msgid="5132580257563846082">"എല്ലാ ദിവസവും വാൾപേപ്പർ സ്വയമേവ മാറും. സജ്ജീകരണം പൂർത്തിയാക്കാൻ, അടുത്ത സ്ക്രീനിലെ &lt;strong&gt;വാൾപേപ്പർ സജ്ജീകരിക്കുക&lt;/strong&gt; എന്നതിൽ ടാപ്പ് ചെയ്യുക."</string>
<string name="start_rotation_dialog_wifi_only_option_message" msgid="3126269859713666225">"ഭാവി വാൾപേപ്പറുകൾ വൈഫൈയിൽ മാത്രം ഡൗൺലോഡ് ചെയ്യുക"</string>
<string name="start_rotation_dialog_continue" msgid="276678987852274872">"തുടരുക"</string>
<string name="start_rotation_progress_message" msgid="7872623873682262083">"ആദ്യ വാൾപേപ്പർ ഡൗൺലോഡ് ചെയ്യുന്നു…"</string>
@@ -66,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"ലോക്ക് സ്ക്രീൻ വാൾപേപ്പർ അടുത്തറിയുക"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"പ്രതിദിന ഹോം സ്ക്രീൻ വാൾപേപ്പർ പുതുക്കുക"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"പ്രതിദിന വാൾപേപ്പർ പുതുക്കുക"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"വാൾപേപ്പർ പ്രിവ്യൂ സ്‌ക്രീൻ"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"പ്രതിദിന വാൾപേപ്പർ പുതുക്കുന്നു…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"പ്രതിദിന വാൾപേപ്പർ പുതുക്കിയെടുക്കുന്നത് പരാജയപ്പെട്ടു. നിങ്ങളുടെ നെറ്റ്‌വർക്ക് കണക്ഷൻ പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"ഉപകരണത്തിലെ വാൾപേപ്പറുകൾ"</string>
@@ -89,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"ഇല്ലാതാക്കുക"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"എഡിറ്റ് ചെയ്യുക"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"ഉപകരണത്തിൽ നിന്ന് ഈ വാൾപേപ്പർ ഇല്ലാതാക്കണോ?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"മടങ്ങുക"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"മുകളിലേക്ക് നാവിഗേറ്റ് ചെയ്യുക"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"എഡിറ്റ് ചെയ്യുക"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"ഡൗൺലോഡ് ചെയ്യുക"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"സ്ലൈഡ്‌ഷോ വാൾപേപ്പർ"</string>
@@ -99,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"മുമ്പത്തെ"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"വാൾപേപ്പർ"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"വാൾപേപ്പർ പ്രിവ്യൂ"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"ലോക്ക് സ്‌ക്രീൻ വാൾപേപ്പർ പ്രിവ്യൂ"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"ഹോം സ്‌ക്രീൻ വാൾപേപ്പർ പ്രിവ്യൂ"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"ശേഖരം നിലവിലില്ല"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"സ്പ്ലിറ്റ് സ്ക്രീൻ മോഡിൽ നിന്ന് പുറത്ത് കടന്ന് വീണ്ടും ശ്രമിക്കുക"</string>
<string name="cancel" msgid="4970902691067201584">"റദ്ദാക്കുക"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"UI പ്രിവ്യൂ മറയ്‌ക്കുക"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI പ്രിവ്യൂ മറച്ചു. മറച്ചത് മാറ്റാൻ ഡബിൾ ടാപ്പ് ചെയ്യൂ"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"UI പ്രിവ്യൂ കാണിക്കുക"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"പ്രിവ്യൂ നിയന്ത്രണങ്ങൾ പ്രദർശിപ്പിച്ചിരിക്കുന്നു. മറയ്ക്കാൻ ഡബിൾ ടാപ്പ് ചെയ്യൂ"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"പ്രിവ്യൂ നിയന്ത്രണങ്ങൾ മറയ്ക്കുക"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"പ്രിവ്യൂ നിയന്ത്രണങ്ങൾ മറച്ചിരിക്കുന്നു. കാണിക്കാൻ ഡബിൾ ടാപ്പ് ചെയ്യൂ"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"പ്രിവ്യൂ നിയന്ത്രണങ്ങൾ കാണിക്കുക"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"വാൾപേപ്പർ വിവരങ്ങൾ മറയ്‌ക്കുക"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI പ്രിവ്യൂ കാണിച്ചു. മറയ്ക്കാൻ ഡബിൾ ടാപ്പ് ചെയ്യൂ"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"വാൾപേപ്പർ മാറ്റുക"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"ലോക്ക്‌സ്ക്രീൻ വാൾപേപ്പറിന്റെ പ്രിവ്യൂ"</string>
@@ -115,10 +124,11 @@
<string name="settings_snackbar_description" msgid="890168814524778486">"ക്രമീകരണത്തിൽ ഫയലുകളും മീഡിയയും പ്രവർത്തനക്ഷമമാക്കുക."</string>
<string name="settings_snackbar_enable" msgid="5992112808061426068">"പ്രവർത്തനക്ഷമമാക്കുക"</string>
<string name="open_my_photos" msgid="4107196465713868381">"എന്റെ ഫോട്ടോകൾ തുറക്കുക"</string>
- <string name="lock_screen_tab" msgid="6672930765010407652">"സ്‌ക്രീൻ ലോക്ക് ചെയ്യുക"</string>
+ <string name="lock_screen_tab" msgid="6672930765010407652">"ലോക്ക് സ്ക്രീൻ"</string>
<string name="home_screen_tab" msgid="1080445697837877526">"ഹോം സ്‌ക്രീൻ"</string>
<string name="reset" msgid="4945445169532850631">"റീസെറ്റ് ചെയ്യൂ"</string>
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"മാറ്റങ്ങൾ റീസെറ്റ് ചെയ്യണോ?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"നിങ്ങളുടെ മാറ്റങ്ങൾ സംരക്ഷിക്കില്ല"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"കൂടുതൽ വാൾപേപ്പറുകൾ"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"വാൾപേപ്പർ %1$s"</string>
</resources>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 1b9e4894..26733938 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Дэлгэцийн зургийн ангилал"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Дэлгэцийн зураг тохируулах"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Дэлгэцийн зураг тохируулах"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Дэлгэцийн зургийг тохируулж байна…"</string>
<string name="try_again" msgid="8278874823700921234">"Дахин оролдох"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Дэлгэцийн зургийг тохируулах боломжгүй байна."</string>
@@ -29,12 +29,10 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Одоогоор тохируулсан дэлгэцийн зураг"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Өдөр тутмын дэлгэцийн зураг"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Нүүр болон түгжигдсэн дэлгэц"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Дэлгэцийн зураг сонгох"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Дэлгэцийн зураг үүсгэх"</string>
<string name="home_screen_message" msgid="106444102822522813">"Үндсэн нүүр"</string>
- <string name="lock_screen_message" msgid="1534506081955058013">"Түгжигдсэн дэлгэц"</string>
+ <string name="lock_screen_message" msgid="1534506081955058013">"Түгжээтэй дэлгэц"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Нүүр хуудас болон түгжээ"</string>
<string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"Дараахад дэлгэцийн зураг тохируулах"</string>
<string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"Үндсэн нүүр"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Түгжих дэлгэцийн дэлгэцийн зургийг судлах"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Үндсэн нүүрийн өдөр тутмын дэлгэцийн зургийг сэргээх"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Өдөр тутмын дэлгэцийн зургийг сэргээх"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Дэлгэцийн зургийг урьдчилан үзэх дэлгэц"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Өдөр тутмын дэлгэцийн зургийг сэргээж байна…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Өдөр тутмын дэлгэцийн зургийг сэргээж чадсангүй. Сүлжээний холболтоо шалгаад дахин оролдоно уу."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Төхөөрөмжийн дэлгэцийн зураг"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Устгах"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Засах"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Энэ дэлгэцийн зургийг төхөөрөмжөөсөө устгах уу?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Буцах"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Дээш шилжих"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Засах"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Татах"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Слайдаар харуулах дэлгэцийн зураг"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Өмнөх"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Дэлгэцийн зураг"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Дэлгэцийн зургийг урьдчилан үзэх"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Түгжээтэй дэлгэцийн зургийг урьдчилан үзэх"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Үндсэн нүүрний дэлгэцийн зургийг урьдчилан үзэх"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Ийм цуглуулга байхгүй"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Дэлгэц хуваах горимоос гараад дахин оролдоно уу"</string>
<string name="cancel" msgid="4970902691067201584">"Цуцлах"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"UI урьдчилан үзэлтийг нуух"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI-г урьдчилан үзэх дотор нуусан. Ил болгохын тулд хоёр товшино уу"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"UI урьдчилан үзэлтийг харуулах"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Урьдчилан үзэх тохиргоог үзүүлсэн. Нуухын тулд хоёр товшино уу"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Урьдчилан үзэх тохиргоог нуух"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Урьдчилан үзэх тохиргоог нуусан. Харуулахын тулд хоёр товшино уу"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Урьдчилан үзэх тохиргоог харуулах"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Дэлгэцийн зургийн мэдээллийг нуух"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI-г урьдчилан үзэх дотор үзүүлсэн. Нуухын тулд хоёр товшино уу"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Дэлгэцийн зургийг өөрчлөх"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Түгжигдсэн дэлгэцийн зургийг урьдчилан үзэх"</string>
@@ -117,10 +124,11 @@
<string name="settings_snackbar_description" msgid="890168814524778486">"Тохиргоо хэсгээс файл болон мeдиаг идэвхжүүлнэ үү."</string>
<string name="settings_snackbar_enable" msgid="5992112808061426068">"Идэвхжүүлэх"</string>
<string name="open_my_photos" msgid="4107196465713868381">"Миний Зургийг нээх"</string>
- <string name="lock_screen_tab" msgid="6672930765010407652">"Түгжигдсэн дэлгэц"</string>
+ <string name="lock_screen_tab" msgid="6672930765010407652">"Түгжээтэй дэлгэц"</string>
<string name="home_screen_tab" msgid="1080445697837877526">"Үндсэн нүүр"</string>
<string name="reset" msgid="4945445169532850631">"Шинэчлэх"</string>
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Өөрчлөлтийг шинэчлэх үү?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Таны өөрчлөлтийг хадгалахгүй"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Дэлгэцийн бусад зураг"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"%1$s-н дэлгэцийн зураг"</string>
</resources>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 7e50327a..ce0dd2b1 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"वॉलपेपर वर्गवाऱ्या"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"वॉलपेपर सेट करा"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"वॉलपेपर सेट करा"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"वॉलपेपर सेट करत आहे…"</string>
<string name="try_again" msgid="8278874823700921234">"पुन्हा प्रयत्न करा"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"वॉलपेपर सेट करू शकत नाही."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"सध्या सेट केलेला"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"दैनिक वॉलपेपर"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"होम आणि लॉक स्‍क्रीन"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"वॉलपेपर निवडा"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"वॉलपेपर तयार करा"</string>
<string name="home_screen_message" msgid="106444102822522813">"होम स्क्रीन"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"लॉक स्क्रीन"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"होम आणि लॉक"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"लॉक स्क्रीन वॉलपेपर एक्सप्लोर करा"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"दैनिक होम स्क्रीन वॉलपेपर रिफ्रेश करा"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"दैनिक वॉलपेपर रिफ्रेश करा"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"वॉलपेपर पूर्वावलोकन स्क्रीन"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"दैनिक वॉलपेपर रिफ्रेश करत आहे…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"दैनिक वॉलपेपर रिफ्रेश करता आला नाही. कृपया तुमचे नेटवर्क कनेक्शन तपासा आणि पुन्हा प्रयत्न करा."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"डिव्हाइसवरील वॉलपेपर"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"हटवा"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"संपादित करा"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"तुमच्या डिव्हाइसवरून हा वॉलपेपर हटवायचा आहे का?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"मागे जा"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"वर नेव्हिगेट करा"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"संपादित करा"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"डाउनलोड करा"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"स्लाइडशो वॉलपेपर"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"मागील"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"वॉलपेपर"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"वॉलपेपर पूर्वावलोकन"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"लॉक स्क्रीन वॉलपेपर पूर्वावलोकन"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"होम स्क्रीन वॉलपेपर पूर्वावलोकन"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"संग्रह अस्तित्वात नाही"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"कृपया स्प्लिट स्क्रीन मोडमधून बाहेर पडा आणि पुन्हा प्रयत्न करा"</string>
<string name="cancel" msgid="4970902691067201584">"रद्द करा"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"UI पूर्वावलोकन लपवा"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI पूर्वावलोकनात लपवले आहे. दाखवण्यासाठी डबल टॅप करा"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"UI पूर्वावलोकन दाखवा"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"पूर्वावलोकनाशी संबंधित नियंत्रणे दाखवली आहेत. लपवण्यासाठी दोनदा टॅप करा"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"पूर्वावलोकनाशी संबंधित नियंत्रणे लपवा"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"पूर्वावलोकनाशी संबंधित नियंत्रणे लपवली आहेत. दाखवण्यासाठी दोनदा टॅप करा"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"पूर्वावलोकनाशी संबंधित नियंत्रणे दाखवा"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"वॉलपेपरशी संबंधित माहिती लपवा"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI पूर्वावलोकनात दाखवले आहे. लपवण्यासाठी डबल टॅप करा"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"वॉलपेपर बदला"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"लॉकस्क्रीनच्या वॉलपेपरचे पूर्वावलोकन"</string>
@@ -118,9 +125,10 @@
<string name="settings_snackbar_enable" msgid="5992112808061426068">"परवानगी द्या"</string>
<string name="open_my_photos" msgid="4107196465713868381">"माझे फोटो उघडा"</string>
<string name="lock_screen_tab" msgid="6672930765010407652">"लॉक स्क्रीन"</string>
- <string name="home_screen_tab" msgid="1080445697837877526">"मुख्य स्क्रीन"</string>
+ <string name="home_screen_tab" msgid="1080445697837877526">"होम स्क्रीन"</string>
<string name="reset" msgid="4945445169532850631">"रीसेट करा"</string>
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"बदल रीसेट करायचे आहेत का?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"तुमचे बदल सेव्ह केले जाणार नाहीत"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"अधिक वॉलपेपर"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"वॉलपेपर %1$s"</string>
</resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index b13a12dc..a796b997 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Kategori kertas dinding"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Tetapkan Kertas Dinding"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Tetapkan hiasan latar"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Menetapkan kertas dinding…"</string>
<string name="try_again" msgid="8278874823700921234">"Cuba lagi"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Tidak dapat menetapkan kertas dinding."</string>
@@ -29,14 +29,12 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Ditetapkan pada masa ini"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Kertas dinding harian"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Skrin utama &amp; Skrin kunci"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Pilih Hiasan latar"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Buat Hiasan latar"</string>
<string name="home_screen_message" msgid="106444102822522813">"Skrin utama"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Kunci skrin"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Skrin Utama &amp; Kunci"</string>
- <string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"Tetapkan kertas dinding"</string>
+ <string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"Tetapkan hiasan latar"</string>
<string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"Skrin utama"</string>
<string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"Kunci skrin"</string>
<string name="set_wallpaper_both_destination" msgid="2536004558738350775">"Skrin utama dan skrin kunci"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Terokai kertas dinding kunci skrin"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Muat semula kertas dinding skrin utama harian"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Muat semula kertas dinding harian"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Skrin pratonton hiasan latar"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Memuat semula kertas dinding harian…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Gagal memuat semula kertas dinding harian. Sila semak sambungan rangkaian anda dan cuba lagi."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Kertas dinding pada peranti"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Padam"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Edit"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Padamkan hiasan latar ini daripada peranti anda?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Kembali"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Navigasi ke atas"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Edit"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Muat turun"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Kertas Dinding Tayangan Slaid"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Sebelumnya"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Kertas dinding"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Pratonton kertas dinding"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Pratonton hiasan latar skrin kunci"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Pratonton hiasan latar skrin utama"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Koleksi tersebut tidak wujud"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Sila keluar daripada mod skrin pisah dan cuba lagi"</string>
<string name="cancel" msgid="4970902691067201584">"Batal"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Sembunyikan Pratontotn UI"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Sembunyi UI dlm pratonton Dwiketik utk nyahsembunyi"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Tunjukkan Pratonton UI"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Kawalan pratonton dipaparkan. Dwiketik untuk sembunyikan"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Sembunyikan kawalan pratonton"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Kawalan pratonton disembunyikan. Dwiketik untuk tunjukkan"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Tunjukkan kawalan pratonton"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Sembunyikan maklumat hiasan latar"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Papar UI dlm pratonton. Dwiketik untuk sembunyikan"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Tukar kertas dinding"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Pratonton kertas dinding skrin kunci"</string>
@@ -122,5 +129,6 @@
<string name="reset" msgid="4945445169532850631">"Tetapkan semula"</string>
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Tetapkan semula perubahan?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Perubahan anda tidak akan disimpan"</string>
- <string name="more_wallpapers" msgid="8116268433411881705">"Lagi penghias latar"</string>
+ <string name="more_wallpapers" msgid="8116268433411881705">"Lagi hiasan latar"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Hiasan latar %1$s"</string>
</resources>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 12a9f33b..2a9dc7a8 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"နောက်ခံပုံ အမျိုးအစားများ"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"နောက်ခံ သတ်မှတ်ပါ"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"နောက်ခံ သတ်မှတ်ရန်"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"နောက်ခံ သတ်မှတ်နေသည်…"</string>
<string name="try_again" msgid="8278874823700921234">"ထပ်စမ်းကြည့်ရန်"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"နောက်ခံ သတ်မှတ်၍မရပါ"</string>
@@ -66,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"လော့ခ်ချထားချိန် မျက်နှာပြင် နောက်ခံကို လေ့လာရန်"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"နေ့စဉ်ပင်မစာမျက်နှာနောက်ခံကို ပြန်လည်စတင်ရန်"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"နေ့စဉ်နောက်ခံကို ပြန်လည် စတင်ရန်"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"နောက်ခံ အစမ်းကြည့်ရှုခြင်း ဖန်သားပြင်"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"နေ့စဉ်နောက်ခံကို ပြန်လည်စတင်နေသည်…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"နေ့စဉ် နောက်ခံကို ပြန်လည် စတင်ခြင်း မအောင်မြင်ပါ။ ကွန်ရက်ချိတ်ဆက်မှုကို စစ်ဆေးပြီး ထပ်စမ်းကြည့်ပါ။"</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"စက်ပေါ်ရှိ နောက်ခံများ"</string>
@@ -89,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"ဖျက်ရန်"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"တည်းဖြတ်ရန်"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"ဤနောက်ခံကို သင့်စက်မှ ဖျက်မလား။"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"နောက်သို့"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"အပေါ်သို့ သွားရန်"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"ပြင်ဆင်ရန်"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"ဒေါင်းလုဒ်လုပ်ရန်"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"နောက်ခံ စလိုက်ရှိုး"</string>
@@ -99,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"ယခင်"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"နောက်ခံ"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"နောက်ခံပုံ အစမ်းကြည့်ရှုခြင်း"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"လော့ခ်မျက်နှာပြင်နောက်ခံ အစမ်းကြည့်ခြင်း"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"ပင်မစာမျက်နှာနောက်ခံ အစမ်းကြည့်ရှုခြင်း"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"ဤစုစည်းမှု မရှိပါ"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"မျက်နှာပြင်ခွဲပြခြင်းမုဒ်ကို ထွက်၍ ထပ်စမ်းကြည့်ပါ"</string>
<string name="cancel" msgid="4970902691067201584">"မလုပ်တော့"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"UI အစမ်းကြည့်ခြင်းကို ဝှက်ရန်"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"အစမ်းကြည့်ရှုမှုတွင် UI ကို ဝှက်ထားသည်။ ပြန်ပြရန် နှစ်ချက်တို့ပါ"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"UI အစမ်းကြည့်ခြင်းကို ပြရန်"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"အစမ်းကြည့်ရှုခြင်း သတ်မှတ်ချက်များကို ပြထားသည်။ ဖျောက်ရန် နှစ်ချက်တို့ပါ"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"အစမ်းကြည့်ရှုခြင်း သတ်မှတ်ချက်များ ဖျောက်ရန်"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"အစမ်းကြည့်ရှုခြင်း သတ်မှတ်ချက်များ ဖျောက်ထားသည်။ ကြည့်ရန် နှစ်ချက်တို့ပါ"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"အစမ်းကြည့်ရှုခြင်း သတ်မှတ်ချက်များ ပြရန်"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"နောက်ခံပုံအချက်အလက် ဖျောက်ရန်"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"အစမ်းကြည့်ရှုမှုတွင် UI ကို ပြထားသည်။ ဝှက်ရန် နှစ်ချက်တို့ပါ"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"နောက်ခံပုံပြောင်းရန်"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"လော့ခ်မျက်နှာပြင်နောက်ခံ အစမ်းကြည့်ခြင်း"</string>
@@ -121,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"အပြောင်းအလဲများ ပြန်သတ်မှတ်မလား။"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"သင့်ပြောင်းလဲမှုများအား သိမ်းမည် မဟုတ်ပါ"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"နောက်ထပ် နောက်ခံပုံများ"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"နောက်ခံ %1$s"</string>
</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 5241f4af..c104086d 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Bakgrunnskategorier"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Angi bakgrunn"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Bruk som bakgrunn"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Angir bakgrunn …"</string>
<string name="try_again" msgid="8278874823700921234">"Prøv på nytt"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Kunne ikke angi bakgrunn."</string>
@@ -29,16 +29,14 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Nåværende bakgrunn"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Daglig bakgrunn"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Startskjermen og låseskjermen"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Velg en bakgrunn"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Opprett en bakgrunn"</string>
<string name="home_screen_message" msgid="106444102822522813">"Startskjerm"</string>
- <string name="lock_screen_message" msgid="1534506081955058013">"Låseskjermen"</string>
+ <string name="lock_screen_message" msgid="1534506081955058013">"Låseskjerm"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Startskjermen og låseskjermen"</string>
<string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"Angi bakgrunn på"</string>
<string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"Startskjerm"</string>
- <string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"Låseskjermen"</string>
+ <string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"Låseskjerm"</string>
<string name="set_wallpaper_both_destination" msgid="2536004558738350775">"Startskjermen og låseskjermen"</string>
<string name="no_backup_image_wallpaper_label" msgid="6316627676107284851">"Bakgrunn med skiftende bilder"</string>
<string name="permission_needed_explanation" msgid="139166837541426823">"For å vise gjeldende bakgrunn her må <xliff:g id="APP_NAME">%1$s</xliff:g> ha tilgang til lagring på enheten din."</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Utforsk bakgrunnen på låseskjermen"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Oppdater den daglige bakgrunnen på startskjermen"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Oppdater daglig bakgrunn"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Skjerm for forhåndsvisning av bakgrunn"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Oppdaterer daglig bakgrunn …"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Kunne ikke oppdatere den daglige bakgrunnen. Sjekk nettverkstilkoblingen din, og prøv igjen."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Bakgrunner på enheten"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Slett"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Rediger"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Vil du slette denne bakgrunnen fra enheten?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Tilbake"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Gå opp"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Endre"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Last ned"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Bakgrunn med lysbildevisning"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Forrige"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Bakgrunn"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Forhåndsvisning av bakgrunn"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Forhåndsvisning av bakgrunn for låseskjermen"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Forhåndsvisning av bakgrunn for startskjermen"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Samlingen eksisterer ikke"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Gå ut av modus for delt skjerm, og prøv igjen"</string>
<string name="cancel" msgid="4970902691067201584">"Avbryt"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Skjul UI-forhåndsvisning"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI skjult i forhåndsvisn. Dobbelttrykk for å vise"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Vis UI-forhåndsvisning"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Kontrollene for forhåndsvisning vises. Dobbelttrykk for å skjule"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Skjul kontrollene for forhåndsvisning"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Kontrollene for forhåndsvisning er skjult. Dobbelttrykk for å vise"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Vis kontrollene for forhåndsvisning"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Skjul bakgrunnsinformasjon"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI skjult i forhåndsvsn. Dobbelttrykk for å skjule"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Endre bakgrunn"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Forhåndsvisning av låseskjermbakgrunn"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Vil du tilbakestille endringene?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Endringene lagres ikke"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Flere bakgrunner"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Bakgrunn %1$s"</string>
</resources>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 427d9b12..4df1ff20 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -21,22 +21,20 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"वालपेपरका कोटीहरू"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"वालपेपर सेट गर्नुहोस्"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"वालपेपर राख्नुहोस्"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"वालपेपर सेट गर्दै…"</string>
<string name="try_again" msgid="8278874823700921234">"फेरि प्रयास गर्नुहोस्‌"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"वालपेपर सेट गर्न सकिएन।"</string>
<string name="load_wallpaper_error_message" msgid="7913278480467707374">"वालपेपर लोड गर्न सकिएन। छवि या त त्रुटिपूर्ण छ वा उपलब्ध छैन।"</string>
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"हाल सेट गरिएको"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"दैनिक वालपेपर"</string>
- <string name="wallpaper_destination_both" msgid="1124197176741944063">"गृह तथा लक स्क्रिन"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="wallpaper_destination_both" msgid="1124197176741944063">"होम तथा लक स्क्रिन"</string>
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"वालपेपर छान्नुहोस्"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"वालपेपर बनाउनुहोस्"</string>
<string name="home_screen_message" msgid="106444102822522813">"होम स्क्रिन"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"लक स्क्रिन"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"होम स्क्रिन &amp; लक स्क्रिन"</string>
- <string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"यहाँ वालपेपर सेट गर्नुहोस्"</string>
+ <string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"वालपेपर सेट गर्नुहोस्"</string>
<string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"होम स्क्रिन"</string>
<string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"लक स्क्रिन"</string>
<string name="set_wallpaper_both_destination" msgid="2536004558738350775">"होम र लक स्क्रिन"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"लक स्क्रिनको वालपेपरको अन्वेषण गर्नुहोस्"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"गृहपृष्ठको दैनिक वालपेपर पुनः ताजा गर्नुहोस्"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"दैनिक वालपेपर पुनः ताजा गर्नुहोस्"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"वालपेपरको प्रिभ्यू स्क्रिन"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"दैनिक वालपेपर पुनः ताजा गर्दै…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"दैनिक वालपेपर पुनः ताजा गर्न सकिएन। कृपया आफ्नो नेटवर्कको जडान जाँच गरी फेरि प्रयास गर्नुहोस्।"</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"यन्त्रमा रहेका वालपेपरहरू"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"मेट्नुहोस्"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"परिवर्तन गर्नुहोस्"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"आफ्नो डिभाइसबाट यो वालपेपर मेटाउने हो?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"पछाडि फर्कनुहोस्"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"माथि जानुहोस्"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"सम्पादन गर्नुहोस्"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"डाउनलोड गर्नुहोस्"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"स्लाइड सो वालपेपर"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"अघिल्लो"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"वालपेपर"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"वालपेपरको प्रिभ्यु"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"लकस्क्रिनमा देखिने वालपेपरको प्रिभ्यू"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"होम स्क्रिनमा देखिने वालपेपरको प्रिभ्यू"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"यो सङ्ग्रह छैन"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"कृपया विभाजित स्क्रिन मोडबाट बाहिरिनुहोस् र फेरि प्रयास गर्नुहोस्"</string>
<string name="cancel" msgid="4970902691067201584">"रद्द गर्नुहोस्"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"UI प्रिभ्यू लुकाइयोस्"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"प्रिभ्यूमा UI लुकाइएको छ। नलुकाउन डबल ट्याप गर्नुहोस्"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"UI प्रिभ्यू देखाइयोस्"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"प्रिभ्यूसम्बन्धी कन्ट्रोलहरू देखाइएका छन्। लुकाउन डबल ट्याप गर्नुहोस्"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"प्रिभ्यूसम्बन्धी कन्ट्रोलहरू लुकाइयून्"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"प्रिभ्यूसम्बन्धी कन्ट्रोलहरू लुकाइएका छन्। देखाउन डबल ट्याप गर्नुहोस्"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"प्रिभ्यूसम्बन्धी कन्ट्रोलहरू देखाइयून्"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"वालपेपरसम्बन्धी जानकारी लुकाइयोस्"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"प्रिभ्यूमा UI देखाइएको छ। लुकाउन डबल ट्याप गर्नुहोस्"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"वालपेपर बदल्नुहोस्"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"लकस्क्रिनमा देखिने वालपेपरको प्रिभ्यू"</string>
@@ -117,10 +124,11 @@
<string name="settings_snackbar_description" msgid="890168814524778486">"कृपया सेटिङहरूमा गई फाइल र मिडिया प्रयोग गर्न दिनुहोस्।"</string>
<string name="settings_snackbar_enable" msgid="5992112808061426068">"अन गर्नुहोस्"</string>
<string name="open_my_photos" msgid="4107196465713868381">"\"मेरा फोटोहरू\" खोल्नुहोस्"</string>
- <string name="lock_screen_tab" msgid="6672930765010407652">"स्क्रिन लक गर्नुहोस्"</string>
+ <string name="lock_screen_tab" msgid="6672930765010407652">"लक स्क्रिन"</string>
<string name="home_screen_tab" msgid="1080445697837877526">"होम स्क्रिन"</string>
<string name="reset" msgid="4945445169532850631">"रिसेट गर्नुहोस्"</string>
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"परिवर्तनहरू रिसेट गर्ने हो?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"तपाईंले गरेका परिवर्तनहरू सेभ गरिने छैनन्"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"थप वालपेपरहरू"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"वालपेपर %1$s"</string>
</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index cfd8de85..2d2f7a1c 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Achtergrondcategorieën"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Achtergrond instellen"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Achtergrond instellen"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Achtergrond instellen…"</string>
<string name="try_again" msgid="8278874823700921234">"Opnieuw"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Kan achtergrond niet instellen."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Momenteel ingesteld"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Dagelijkse achtergrond"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Start- en vergrendelscherm"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Een achtergrond kiezen"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Een achtergrond maken"</string>
<string name="home_screen_message" msgid="106444102822522813">"Startscherm"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Vergrendelscherm"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Home- en vergrendelscherm"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Achtergrond van vergrendelscherm verkennen"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Dagelijkse startschermachtergrond vernieuwen"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Dagelijkse achtergrond vernieuwen"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Voorbeeldscherm achtergrond"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Dagelijkse achtergrond vernieuwen…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Dagelijkse achtergrond kan niet worden vernieuwd. Controleer je netwerkverbinding en probeer het opnieuw."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Achtergronden op apparaat"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Verwijderen"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Bewerken"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Deze achtergrond verwijderen van je apparaat?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Terug"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Omhoog navigeren"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Bewerken"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Downloaden"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Diavoorstellingsachtergrond"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Vorige"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Achtergrond"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Achtergrondvoorbeeld"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Voorbeeld achtergrond vergrendelscherm"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Voorbeeld achtergrond startscherm"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"De collectie bestaat niet"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Sluit de modus voor gesplitst scherm af en probeer het opnieuw"</string>
<string name="cancel" msgid="4970902691067201584">"Annuleren"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Voorbeeld van UI verbergen"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI verborgen in voorbeeld. Dubbeltik om zichtbaar te maken"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Voorbeeld van UI tonen"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Bedieningselementen voor voorbeeld worden getoond. Dubbeltik om te verbergen."</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Bedieningselementen voor voorbeeld verbergen"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Bedieningselementen voor voorbeeld zijn verborgen. Dubbeltik om te tonen."</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Bedieningselementen voor voorbeeld tonen"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Achtergrondinformatie verbergen"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI getoond in voorbeeld. Dubbeltik om te verbergen"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Achtergrond wijzigen"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Voorbeeld achtergrond vergrendelscherm"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Wijzigingen resetten?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Je wijzigingen worden niet opgeslagen"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Meer achtergronden"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Achtergrond %1$s"</string>
</resources>
diff --git a/res/values-notnight-v27/styles.xml b/res/values-notnight-v27/styles.xml
index 95c5ee50..beeadac2 100755
--- a/res/values-notnight-v27/styles.xml
+++ b/res/values-notnight-v27/styles.xml
@@ -48,4 +48,11 @@
<item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
<item name="android:dialogCornerRadius">24dp</item>
</style>
+
+ <!-- SetWallpaperPreviewDialog -->
+ <style name="SetWallpaperPreviewDialogTheme" parent="@android:style/Theme.DeviceDefault.Light.Dialog.NoActionBar.MinWidth">
+ <item name="android:buttonBarPositiveButtonStyle">@style/SetWallpaperDialog.Button</item>
+ <item name="android:buttonBarNegativeButtonStyle">@style/SetWallpaperDialog.Button.OutlinedButton</item>
+ <item name="android:buttonBarNeutralButtonStyle">@style/SetWallpaperDialog.Button.TextButton</item>
+ </style>
</resources>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 489b8917..e8750eeb 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"ୱାଲ୍‌ପେପର୍ ବର୍ଗଗୁଡ଼ିକ"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"ୱାଲପେପର୍‍ ସେଟ୍ କରନ୍ତୁ"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"ୱାଲପେପର ସେଟ କରନ୍ତୁ"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"ୱାଲପେପର୍‌ ସେଟ୍ ହେଉଛି…"</string>
<string name="try_again" msgid="8278874823700921234">"ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"ୱାଲପେପର୍‌ ସେଟ୍ କରିବା ପାଇଁ ଅକ୍ଷମ।"</string>
@@ -29,14 +29,12 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"ଏହିକ୍ଷଣି ସେଟ୍ ହୋଇଛି"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"ଦୈନିକ ୱାଲପେପର୍"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"ହୋମ ଓ ଲକ ସ୍କ୍ରିନ"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"ଏକ ୱାଲପେପର ବାଛନ୍ତୁ"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"ଏକ ୱାଲପେପର ତିଆରି କରନ୍ତୁ"</string>
<string name="home_screen_message" msgid="106444102822522813">"ହୋମ ସ୍କ୍ରିନ"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"ଲକ୍‌ ସ୍କ୍ରୀନ୍‌"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"ହୋମ ଓ ଲକ"</string>
- <string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"ଏଥିରେ ୱାଲପେପର୍ ସେଟ୍ କରନ୍ତୁ"</string>
+ <string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"ଏଥିରେ ୱାଲପେପର ସେଟ କରନ୍ତୁ"</string>
<string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"ହୋମ ସ୍କ୍ରିନ"</string>
<string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"ଲକ୍‌ ସ୍କ୍ରୀନ୍‌"</string>
<string name="set_wallpaper_both_destination" msgid="2536004558738350775">"ହୋମ ଏବଂ ଲକ ସ୍କ୍ରିନ"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"ଲକ୍ ସ୍କ୍ରୀନ୍ ୱାଲପେପର୍‌କୁ ଏକ୍ସପ୍ଲୋର୍ କରନ୍ତୁ"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"ଦୈନିକ ହୋମ ସ୍କ୍ରିନ ୱାଲପେପର୍‌କୁ ରିଫ୍ରେସ କରନ୍ତୁ"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"ଦୈନିକ ୱାଲପେପର୍‌କୁ ରିଫ୍ରେଶ୍ କରନ୍ତୁ"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"ୱାଲପେପରର ପ୍ରିଭ୍ୟୁ ସ୍କ୍ରିନ"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"ଦୈନିକ ୱାଲପେପର୍ ରିଫ୍ରେଶ୍ ହେଉଛି…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"ଦୈନିକ ୱାଲପେପର୍‌କୁ ରିଫ୍ରେଶ କରିବାରେ ବିଫଳ ହୋଇଛି। ଦୟାକରି ଆପଣଙ୍କର ନେଟୱର୍କ କନେକ୍ସନ୍‍କୁ ଯାଞ୍ଚ କରିବା ସହିତ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"ଅନ୍-ଡିଭାଇସ୍ ୱାଲପେପର୍"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"ଡିଲିଟ୍ କରନ୍ତୁ"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"ଏଡିଟ କରନ୍ତୁ"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"ଆପଣଙ୍କ ଡିଭାଇସରୁ ଏହି ୱାଲପେପରକୁ ଡିଲିଟ କରିବେ?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"ପଛକୁ ଫେରନ୍ତୁ"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"ଉପରକୁ ନାଭିଗେଟ କରନ୍ତୁ"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"ଏଡିଟ କରନ୍ତୁ"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"ଡାଉନଲୋଡ୍ କରନ୍ତୁ"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"ୱାଲପେପରର ସ୍ଲାଇଡଶୋ"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"ପୂର୍ବବର୍ତ୍ତୀ"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"ୱାଲପେପର୍"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"ୱାଲପେପରର ପ୍ରିଭ୍ୟୁ"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"ଲକ ସ୍କ୍ରିନ ୱାଲପେପରର ପ୍ରିଭ୍ୟୁ"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"ହୋମ ସ୍କ୍ରିନ ୱାଲପେପରର ପ୍ରିଭ୍ୟୁ"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"ସଂଗ୍ରହ ଉପଲବ୍ଧ ନାହିଁ"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"ଦୟାକରି ସ୍ପ୍ଲିଟ ସ୍କ୍ରିନ ମୋଡରୁ ବାହାରି ଯାଇ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ"</string>
<string name="cancel" msgid="4970902691067201584">"ବାତିଲ କରନ୍ତୁ"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"UI ପ୍ରିଭ୍ୟୁକୁ ଲୁଚାନ୍ତୁ"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"ପ୍ରିଭ୍ୟୁରେ UI ଲୁଚାଯାଇଛି। ଦେଖାଇବାକୁ ଦୁଇଥର ଟାପ କର"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"UI ପ୍ରିଭ୍ୟୁ ଦେଖାନ୍ତୁ"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"ପ୍ରିଭ୍ୟୁ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ ଡିସପ୍ଲେ ହେଉଛି। ଲୁଚାଇବାକୁ ଦୁଇଥର ଟାପକର"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"ପ୍ରିଭ୍ୟୁ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ଲୁଚାନ୍ତୁ"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"ପ୍ରିଭ୍ୟୁ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ ଲୁକ୍କାୟିତ ଅଛି ଦେଖିବାକୁ ଦୁଇଥର ଟାପ କରନ୍ତୁ"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"ପ୍ରିଭ୍ୟୁ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ ଦେଖାନ୍ତୁ"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"ୱାଲପେପର ସୂଚନା ଲୁଚାନ୍ତୁ"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"ପ୍ରିଭ୍ୟୁରେ UI ଡିସପ୍ଲେ ହୋଇଛି। ଲୁଚାଇବାକୁ ଦୁଇଥର ଟାପକର"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"ୱାଲପେପର୍ ପରିବର୍ତ୍ତନ କରନ୍ତୁ"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"ଲକସ୍କ୍ରିନ୍ ୱାଲପେପର୍ ପ୍ରିଭ୍ୟୁ"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"ପରିବର୍ତ୍ତନଗୁଡ଼ିକୁ ରିସେଟ କରିବେ?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"ଆପଣଙ୍କର ପରିବର୍ତ୍ତନଗୁଡ଼ିକୁ ସେଭ କରାଯିବ ନାହିଁ"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"ଅଧିକ ୱାଲପେପର"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"ୱାଲପେପର %1$s"</string>
</resources>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index f8e7f716..c5436a56 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"ਵਾਲਪੇਪਰ ਸ਼੍ਰੇਣੀਆਂ"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"ਵਾਲਪੇਪਰ ਸੈੱਟ ਕਰੋ"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"ਵਾਲਪੇਪਰ ਸੈੱਟ ਕਰੋ"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"ਵਾਲਪੇਪਰ ਸੈੱਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
<string name="try_again" msgid="8278874823700921234">"ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"ਵਾਲਪੇਪਰ ਸੈੱਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।"</string>
@@ -29,14 +29,12 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"ਇਸ ਵੇਲੇ ਸੈੱਟ ਹੈ"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"ਰੋਜ਼ਾਨਾ ਵਾਲਪੇਪਰ"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"ਹੋਮ ਅਤੇ ਲਾਕ ਸਕ੍ਰੀਨ"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"ਕੋਈ ਵਾਲਪੇਪਰ ਚੁਣੋ"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"ਕੋਈ ਵਾਲਪੇਪਰ ਬਣਾਓ"</string>
<string name="home_screen_message" msgid="106444102822522813">"ਹੋਮ ਸਕ੍ਰੀਨ"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"ਲਾਕ ਸਕ੍ਰੀਨ"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"ਹੋਮ ਸਕ੍ਰੀਨ ਅਤੇ ਲਾਕ ਸਕ੍ਰੀਨ"</string>
- <string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"ਵਾਲਪੇਪਰ ਵਜੋਂ ਸੈੱਟ ਕਰੋ"</string>
+ <string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"ਵਾਲਪੇਪਰ ਲਈ ਸਕ੍ਰੀਨ ਚੁਣੋ"</string>
<string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"ਹੋਮ ਸਕ੍ਰੀਨ"</string>
<string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"ਲਾਕ ਸਕ੍ਰੀਨ"</string>
<string name="set_wallpaper_both_destination" msgid="2536004558738350775">"ਹੋਮ ਅਤੇ ਲਾਕ ਸਕ੍ਰੀਨਾਂ"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"ਲਾਕ ਸਕ੍ਰੀਨ ਵਾਲਪੇਪਰ ਦੀ ਪੜਚੋਲ ਕਰੋ"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"ਰੋਜ਼ਾਨਾ ਹੋਮ ਸਕ੍ਰੀਨ ਵਾਲਪੇਪਰ ਨੂੰ ਰਿਫ੍ਰੈਸ਼ ਕਰੋ"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"ਰੋਜ਼ਾਨਾ ਵਾਲਪੇਪਰ ਰਿਫ੍ਰੈਸ਼ ਕਰੋ"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"ਵਾਲਪੇਪਰ ਦੀ ਪੂਰਵ-ਝਲਕ ਸਕ੍ਰੀਨ"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"ਰੋਜ਼ਾਨਾ ਵਾਲਪੇਪਰ ਰਿਫ੍ਰੈਸ਼ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..."</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"ਰੋਜ਼ਾਨਾ ਵਾਲਪੇਪਰ ਰਿਫ੍ਰੈਸ਼ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ। ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ ਨੈੱਟਵਰਕ ਕਨੈਕਸ਼ਨ ਦੀ ਜਾਂਚ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"ਡੀਵਾਈਸ ਵਿੱਚ ਮੌਜੂਦ ਵਾਲਪੇਪਰ"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"ਮਿਟਾਓ"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"ਸੰਪਾਦਨ ਕਰੋ"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"ਕੀ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਤੋਂ ਇਸ ਵਾਲਪੇਪਰ ਨੂੰ ਮਿਟਾਉਣਾ ਹੈ?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"ਪਿੱਛੇ"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"ਉੱਪਰ ਵੱਲ ਨੈਵੀਗੇਟ ਕਰੋ"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"ਸੰਪਾਦਨ ਕਰੋ"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"ਡਾਊਨਲੋਡ ਕਰੋ"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"ਸਲਾਈਡਸ਼ੋਅ ਵਾਲਪੇਪਰ"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"ਪਿੱਛੇ ਜਾਓ"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"ਵਾਲਪੇਪਰ"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"ਵਾਲਪੇਪਰ ਦੀ ਪੂਰਵ-ਝਲਕ"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"ਲਾਕ ਸਕ੍ਰੀਨ ਵਾਲਪੇਪਰ ਦੀ ਪੂਰਵ-ਝਲਕ"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"ਹੋਮ ਸਕ੍ਰੀਨ ਵਾਲਪੇਪਰ ਦੀ ਪੂਰਵ-ਝਲਕ"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"ਸੰਗ੍ਰਹਿ ਮੌਜੂਦ ਨਹੀਂ ਹੈ"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"ਕਿਰਪਾ ਕਰਕੇ ਸਪਲਿਟ-ਸਕ੍ਰੀਨ ਮੋਡ ਤੋਂ ਬਾਹਰ ਜਾਓ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string>
<string name="cancel" msgid="4970902691067201584">"ਰੱਦ ਕਰੋ"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"UI ਦੀ ਪੂਰਵ-ਝਲਕ ਲੁਕਾਓ"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"ਪੂਰਵ-ਝਲਕ ਵਿੱਚ UI ਨੂੰ ਲੁਕਾਇਆ ਗਿਆ ਹੈ। ਦਿਖਾਉਣ ਲਈ ਡਬਲ ਟੈਪ ਕਰੋ"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"UI ਦੀ ਪੂਰਵ-ਝਲਕ ਦਿਖਾਓ"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"ਪੂਰਵ-ਝਲਕ ਕੰਟਰੋਲ ਦਿਖਾਏ ਗਏ ਹਨ। ਲੁਕਾਉਣ ਲਈ ਡਬਲ ਟੈਪ ਕਰੋ"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"ਪੂਰਵ-ਝਲਕ ਕੰਟਰੋਲ ਲੁਕਾਓ"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"ਪੂਰਵ-ਝਲਕ ਕੰਟਰੋਲ ਲੁਕੇ ਹੋਏ ਹਨ। ਦਿਖਾਉਣ ਲਈ ਡਬਲ ਟੈਪ ਕਰੋ"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"ਪੂਰਵ-ਝਲਕ ਕੰਟਰੋਲ ਦਿਖਾਓ"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"ਵਾਲਪੇਪਰ ਬਾਰੇ ਜਾਣਕਾਰੀ ਨੂੰ ਲੁਕਾਓ"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"ਪੂਰਵ-ਝਲਕ ਵਿੱਚ UI ਨੂੰ ਦਿਖਾਇਆ ਗਿਆ ਹੈ। ਲੁਕਾਉਣ ਲਈ ਡਬਲ ਟੈਪ ਕਰੋ"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"ਵਾਲਪੇਪਰ ਬਦਲੋ"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"ਲਾਕਸਕ੍ਰੀਨ ਵਾਲਪੇਪਰ ਦੀ ਪੂਰਵ-ਝਲਕ"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"ਕੀ ਤਬਦੀਲੀਆਂ ਨੂੰ ਰੀਸੈੱਟ ਕਰਨਾ ਹੈ?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"ਤੁਹਾਡੀਆਂ ਤਬਦੀਲੀਆਂ ਨੂੰ ਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ ਜਾਵੇਗਾ"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"ਹੋਰ ਵਾਲਪੇਪਰ"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"ਵਾਲਪੇਪਰ %1$s"</string>
</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 09ec4271..557d5a16 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Kategorie tapet"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Ustaw tapetę"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Ustaw tapetę"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Ustawiam tapetę…"</string>
<string name="try_again" msgid="8278874823700921234">"Spróbuj ponownie"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Nie można ustawić tapety."</string>
@@ -66,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Przeglądaj tapety ekranu blokady"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Odśwież codzienną tapetę na ekranie głównym"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Odśwież codzienną tapetę"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Ekran podglądu tapety"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Odświeżam codzienną tapetę…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Nie udało się odświeżyć codziennej tapety. Sprawdź połączenie sieciowe i spróbuj ponownie."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Tapety na urządzeniu"</string>
@@ -89,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Usuń"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Edytuj"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Usunąć tę tapetę z urządzenia?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Wstecz"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Przejdź wyżej"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Edytuj"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Pobierz"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Tapeta z pokazem slajdów"</string>
@@ -99,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Wstecz"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Tapeta"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Podgląd tapety"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Podgląd tapety na ekranie blokady"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Podgląd tapety na ekranie głównym"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Taka kolekcja nie istnieje"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Wyłącz tryb podzielonego ekranu i spróbuj jeszcze raz"</string>
<string name="cancel" msgid="4970902691067201584">"Anuluj"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Ukryj podgląd UI"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Interfejs jest ukryty na podglądzie. Kliknij dwukrotnie, aby go pokazać"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Pokaż podgląd UI"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Elementy sterujące podglądem są widoczne. Kliknij dwukrotnie, aby je ukryć"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Ukryj elementy sterujące podglądem"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Elementy sterujące podglądem są ukryte. Kliknij dwukrotnie, aby je pokazać"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Pokaż elementy sterujące podglądem"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Ukryj informacje o tapecie"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Interfejs jest widoczny na podglądzie. Kliknij dwukrotnie, aby go ukryć"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Zmień tapetę"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Podgląd tapety na ekranie blokady"</string>
@@ -121,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Zresetować zmiany?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Zmiany nie zostaną zapisane"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Więcej tapet"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Tapeta %1$s"</string>
</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 6a5de08e..6390028f 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Categorias de imagens de fundo"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Definir imagem de fundo"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Definir imagem de fundo"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"A definir a imagem de fundo…"</string>
<string name="try_again" msgid="8278874823700921234">"Tentar novamente"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Não foi possível definir a imagem de fundo."</string>
@@ -66,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Explorar a imagem de fundo do ecrã de bloqueio"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Atualizar a imagem de fundo do ecrã principal diária"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Atualizar a imagem de fundo diária"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Ecrã de pré-visualização da imagem de fundo"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"A atualizar a imagem de fundo diária…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Falha ao atualizar a imagem de fundo diária. Verifique a sua ligação de rede e tente novamente."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Imagens de fundo no disposit."</string>
@@ -89,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Eliminar"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Editar"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Apagar esta imagem de fundo do dispositivo?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Anterior"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Navegar para cima"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Editar"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Transferir"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Imag. de fundo da apres. diap."</string>
@@ -99,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Anterior"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Imagem de fundo"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Pré-visual. da imagem de fundo"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Pré-visualização da imagem de fundo do ecrã de bloqueio"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Pré-visualização da imagem de fundo do ecrã principal"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"A coleção não existe."</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Saia do modo de ecrã dividido e tente novamente"</string>
<string name="cancel" msgid="4970902691067201584">"Cancelar"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Ocultar pré-visualização da IU"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"IU oculta na pré-visualização. Toque 2x p/ mostrar"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Mostrar pré-visualização da IU"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Os controlos de pré-visualização estão a ser apresentados. Toque duas vezes para os ocultar"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Ocultar controlos de pré-visualização"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Os controlos de pré-visualização estão ocultos. Toque duas vezes para os mostrar"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Mostrar controlos de pré-visualização"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Ocultar informações da imagem de fundo"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"IU mostrada na pré-visualiz. Toque 2x p/ ocultar"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Alterar imagem de fundo"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Pré-vis. imag. de fundo do ecrã de bloq."</string>
@@ -121,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Repor alterações?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"As suas alterações não vão ser guardadas"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Mais imagens de fundo"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Imagem de fundo %1$s"</string>
</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 0f5ae28a..bbc987ee 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Categorias de plano de fundo"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Definir plano de fundo"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Definir plano de fundo"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Definindo plano de fundo…"</string>
<string name="try_again" msgid="8278874823700921234">"Tentar novamente"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Não foi possível definir o plano de fundo."</string>
@@ -34,7 +34,7 @@
<string name="home_screen_message" msgid="106444102822522813">"Tela inicial"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Tela de bloqueio"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Tela inicial e de bloqueio"</string>
- <string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"Definir como plano de fundo"</string>
+ <string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"Definir como plano de fundo para"</string>
<string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"Tela inicial"</string>
<string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"Tela de bloqueio"</string>
<string name="set_wallpaper_both_destination" msgid="2536004558738350775">"Tela inicial e de bloqueio"</string>
@@ -66,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Ver plano de fundo da tela de bloqueio"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Atualizar o plano de fundo diário da tela inicial"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Atualizar o plano de fundo diário"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Tela de prévia do plano de fundo"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Atualizando plano de fundo diário…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Falha na atualização do plano de fundo diário. Verifique sua conexão de rede e tente novamente."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Planos de fundo no dispositivo"</string>
@@ -89,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Excluir"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Editar"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Excluir esse plano de fundo do dispositivo?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Voltar"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Navegar para cima"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Editar"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Fazer o download"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Fundo da apresent. de slides"</string>
@@ -99,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Anterior"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Plano de fundo"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Visualização do plano de fundo"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Prévia do plano de fundo da tela de bloqueio"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Prévia do plano de fundo da tela inicial"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"A coleção não existe"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Saia do modo de tela dividida e tente de novo"</string>
<string name="cancel" msgid="4970902691067201584">"Cancelar"</string>
- <string name="hide_ui_preview_text" msgid="6766076482511252295">"Ocultar visualização da IU"</string>
+ <string name="hide_ui_preview_text" msgid="6766076482511252295">"Ocultar visualização da interface"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"IU ocultada na prévia. Toque 2 vezes para mostrar"</string>
- <string name="show_ui_preview_text" msgid="5993063062417070806">"Mostrar visualização da IU"</string>
+ <string name="show_ui_preview_text" msgid="5993063062417070806">"Mostrar visualização da interface"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Os controles de visualização estão sendo mostrados. Toque duas vezes para ocultar"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Ocultar controles de visualização"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Os controles de visualização estão ocultos. Toque duas vezes para mostrar"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Mostrar controles de visualização"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Ocultar informações do plano de fundo"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"IU mostrada na prévia. Toque 2 vezes para ocultar"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Mudar plano de fundo"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Plano de fundo da tela de bloqueio"</string>
@@ -121,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Redefinir mudanças?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"As mudanças não vão ser salvas"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Mais planos de fundo"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Plano de fundo %1$s"</string>
</resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index a4135fb1..6f2c1530 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Categorii de imagini de fundal"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Setează imaginea de fundal"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Setează imaginea de fundal"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Se setează imaginea de fundal…"</string>
<string name="try_again" msgid="8278874823700921234">"Încearcă din nou"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Nu s-a putut seta imaginea de fundal."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Setată în prezent"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Imaginea de fundal zilnică"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Ecran de pornire și de blocare"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Alege o imagine de fundal"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Creează o imagine de fundal"</string>
<string name="home_screen_message" msgid="106444102822522813">"Ecran de pornire"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Ecran de blocare"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"De pornire și de blocare"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Explorează imaginea de fundal a ecranului de blocare"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Actualizează imaginea de fundal zilnică a ecranului de pornire"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Actualizează imaginea de fundal zilnică"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Ecranul de previzualizare a imaginii de fundal"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Se actualizează imaginea de fundal zilnică…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Nu s-a putut actualiza imaginea de fundal zilnică. Verifică-ți conexiunea la rețea și încearcă din nou."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Imagini fundal pe dispozitiv"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Șterge"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Editează"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Ștergi imaginea de fundal de pe dispozitiv?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Înapoi"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Navighează în sus"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Editează"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Descarcă"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Imagine de fundal din slideshow"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Înapoi"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Imagine de fundal"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Previzualizarea imaginii de fundal"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Previzualizarea imaginii de fundal pentru ecranul de blocare"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Previzualizarea imaginii de fundal pentru ecranul de pornire"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Colecția nu există"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Ieși din modul ecran împărțit și încearcă din nou"</string>
<string name="cancel" msgid="4970902691067201584">"Anulează"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Ascunde previzualizarea IU"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"IU ascunsă în previzualizare. Atinge de 2 ori pentru a reafișa"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Afișează previzualizarea IU"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Se afișează comenzile de previzualizare. Atinge de două ori pentru a ascunde"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Ascunde comenzile de previzualizare"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Comenzile de previzualizare sunt ascunse. Atinge de două ori pentru a afișa"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Afișează comenzile de previzualizare"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Ascunde informațiile despre imaginea de fundal"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"IU afișată în previzualizare. Atinge de 2 ori pentru a ascunde"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Schimbă imaginea de fundal"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Fundal pentru ecranul de blocare"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Resetezi modificările?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Modificările nu se vor salva"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Mai multe imagini de fundal"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Imagine de fundal %1$s"</string>
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index e35418a8..abb7e39e 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Категории обоев"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Установить как обои"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Установить как обои"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Установка обоев…"</string>
<string name="try_again" msgid="8278874823700921234">"Повторить"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Не удалось установить обои."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Установлено как обои"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Обои на каждый день"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Главный экран и заблокированный экран"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Выбрать обои"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Создать обои"</string>
<string name="home_screen_message" msgid="106444102822522813">"Главный экран"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Заблокированный экран"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Оба экрана"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Узнать больше об обоях на заблокированном экране"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Обновить ежедневные обои на главном экране"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Обновить ежедневные обои"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Предварительный просмотр обоев"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Обновление ежедневных обоев…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Не удалось обновить обои. Проверьте подключение к Интернету и повторите попытку."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Сохраненные на устройстве"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Удалить"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Изменить"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Удалить эти обои с устройства?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Назад"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Перейти вверх"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Изменить"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Скачать"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Начать слайд-шоу обоев"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Предыдущая страница"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Обои"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Предварительный просмотр обоев"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Предварительный просмотр обоев для заблокированного экрана"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Предварительный просмотр обоев для главного экрана"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Такой подборки не существует."</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Выйдите из режима разделения экрана и повторите попытку."</string>
<string name="cancel" msgid="4970902691067201584">"Отмена"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Скрыть экран предпросмотра"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Нажмите дважды, чтобы показать интерфейс в режиме предпросмотра."</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Предпросмотр интерфейса"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Нажмите дважды, чтобы скрыть элементы управления в режиме предпросмотра"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Скрыть элементы управления"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Нажмите дважды, чтобы показать элементы управления в режиме предпросмотра"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Показать элементы управления"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Скрыть информацию об обоях"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Нажмите дважды, чтобы скрыть интерфейс в режиме предпросмотра."</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Сменить обои"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Предпросмотр обоев для заблок. экрана"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Сбросить изменения?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Изменения не будут сохранены."</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Ещё обои"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Обои: %1$s"</string>
</resources>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 1bdcd89a..8f1bd4c6 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"බිතුපත් ප්‍රවර්ග"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"වෝල්පේපරය සකසන්න"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"වෝල්පේපරය සකසන්න"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"වෝල්පේපරය සකසමින්…"</string>
<string name="try_again" msgid="8278874823700921234">"නැවත උත්සාහ කර."</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"වෝල්පේපරය සැකසීමට නොහැකිය."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"දැනට සකසා ඇත"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"දෛනික වෝල්පේපරය"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"මුල් පිටුව සහ අගුළු තිරය"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"වෝල්පේපරයක් තෝරා ගන්න"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"වෝල්පේපරයක් තනන්න"</string>
<string name="home_screen_message" msgid="106444102822522813">"මුල් පිටු තිරය"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"අගුලු තිරය"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"මුල් පිටුව සහ අගුල"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"අගුලු තිර වෝල්පේපරය ගවේෂණය කරන්න"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"දිනපතා මුල් පිටු තිර වෝල්පේපරය නැවුම් කරන්න"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"දිනපතා වෝල්පේපරය නැවුම් කරන්න"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"වෝල්පේපර පෙරදසුන් තිරය"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"දෛනික වෝල්පේපරය නැවුම් කරමින්…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"දෛනික වෝල්පේපරය යළි නැවුම් කිරීම අසාර්ථක විය. කරුණාකර ඔබගේ ජාල සම්බන්ධතාව පරික්ෂා කර නැවත උත්සාහ කරන්න."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"උපාංගය-මත වෝල්පේපර"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"මකන්න"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"සංස්කරණය කරන්න"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"ඔබේ උපාංගයෙන් මෙම බිතුපත මකන්න ද?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"ආපසු යන්න"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"ඉහළට සංචාලනය කරන්න"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"සංස්කරණය කරන්න"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"බාගන්න"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"වෝල්පේපර ස්ලයිඩ දර්ශනය"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"පෙර"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"වෝල්පේපරය"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"වෝල්පේපර පෙරදසුන"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"අගුළු තිර වෝල්පේපර පෙරදසුන"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"මුල් තිරයේ බිතුපත් පෙරදසුන"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"එකතුව නොපවතී"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"බෙදුම් තිර ප්‍රකාරයෙන් පිට වී නැවත උත්සාහ කරන්න"</string>
<string name="cancel" msgid="4970902691067201584">"අවලංගු කරන්න"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"UI පෙරදසුන සඟවන්න"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI පෙරදසුන තුළ සඟවා ඇත. නොසැඟවීමට දෙවරක් තට්ටු කරන්න"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"UI පෙරදසුන පෙන්වන්න"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"පෙරදසුන් පාලන සංදර්ශනය වේ. සැඟවීමට දෙවරක් තට්ටු කරන්න"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"පෙරදසුන් පාලන සඟවන්න"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"පෙරදසුන් පාලන සඟවා ඇත. පෙන්වීමට දෙවරක් තට්ටු කරන්න"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"පෙරදසුන් පාලන පෙන්වන්න"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"බිතුපත් තොරතුරු සඟවන්න"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI පෙරදසුන තුළ සංස්කරණය කර ඇත. සැඟවීමට දෙවරක් තට්ටු කරන්න"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"වෝල්පේපරය වෙනස් කරන්න"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"අගුලු තිර වෝල්පේපර පෙරදසුන"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"වෙනස්කම් යළි සකසන්න ද?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"ඔබේ වෙනස්කම් සුරැකෙන්නේ නැත"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"තවත් වෝල්පේපර"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"වෝල්පේපරය %1$s"</string>
</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 78b07f52..63fa1049 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Kategórie tapiet"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Nastaviť tapetu"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Nastaviť tapetu"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Nastavuje sa tapeta…"</string>
<string name="try_again" msgid="8278874823700921234">"Skúsiť znova"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Tapetu nie je možné nastaviť."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Práve nastavená"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Denná tapeta"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Plocha a uzamknutá obrazovka"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Vyberte tapetu"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Vytvorte tapetu"</string>
<string name="home_screen_message" msgid="106444102822522813">"Plocha"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Uzamknutá obrazovka"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Plocha a uzamknutá obrazovka"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Preskúmať tapetu na uzamknutej obrazovke"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Obnoviť dennú tapetu na ploche"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Obnoviť dennú tapetu"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Obrazovka ukážky tapety"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Obnovuje sa denná tapeta…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Dennú tapetu sa nepodarilo obnoviť. Skontrolujte pripojenie k sieti a skúste to znova."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Tapety v zariadení"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Odstrániť"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Upraviť"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Chcete zo zariadenia odstrániť túto tapetu?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Späť"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Prejsť hore"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Upraviť"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Stiahnuť"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Spustiť prezentáciu tapiet"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Späť"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Tapeta"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Ukážka tapety"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Ukážka tapety na uzamknutej obrazovke"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Ukážka tapety na ploche"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Zbierka neexistuje"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Ukončite režim rozdelenej obrazovky a skúste to znova"</string>
<string name="cancel" msgid="4970902691067201584">"Zrušiť"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Skryť ukážku použ. rozhrania"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Použ. rozhr. je v ukážke skryté. Zobrazíte dvoj. klepnutím."</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Zobr. ukážku použ. rozhrania"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Zobrazuje sa ovládanie ukážky. Skryjete ho dvojitým klepnutím."</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Skryť ovládanie ukážky"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Ovládanie ukážky je skryté. Zobrazíte ho dvojitým klepnutím."</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Zobraziť ovládanie ukážky"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Skryť informácie o tapete"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Použ. rozhr. je v ukážke zobrazené. Skryjete dvoj. klepnutím."</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Zmeniť tapetu"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Ukážka tapety na uzamknutej obrazovke"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Chcete resetovať zmeny?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Vaše zmeny nebudú uložené"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Ďalšie tapety"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Tapeta %1$s"</string>
</resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 05ed6aa9..f25a4902 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Kategorije ozadij"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Nastavi ozadje"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Nastavi kot zaslonsko ozadje"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Nastavljanje ozadja …"</string>
<string name="try_again" msgid="8278874823700921234">"Poskusi znova"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Ozadja ni bilo mogoče nastaviti."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Trenutno nastavljeno"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Dnevno ozadje"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Začetni in zaklenjeni zaslon"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Izberite zaslonsko ozadje"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Ustvarite zaslonsko ozadje"</string>
<string name="home_screen_message" msgid="106444102822522813">"Začetni zaslon"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Zaklenjen zaslon"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Začetni in zaklenjeni zaslon"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Raziskovanje ozadja za zaklenjen zaslon"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Osvežitev dnevnega ozadja za začetni zaslon"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Osvežitev dnevnega ozadja"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Zaslon s predogledom zaslonskega ozadja"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Osvežitev dnevnega ozadja …"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Dnevnega ozadja ni bilo mogoče osvežiti. Preverite omrežno povezavo in poskusite znova."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Ozadja v napravi"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Izbriši"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Uredi"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Ali želite to zaslonsko ozadje izbrisati iz naprave?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Nazaj"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Pomik navzgor"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Urejanje"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Prenos"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Diaprojekcija zaslonsk. ozadij"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Nazaj"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Zaslonsko ozadje"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Predogled zaslonskih ozadij"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Predogled zaslonskega ozadja zaklenjenega zaslona"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Predogled zaslonskega ozadja začetnega zaslona"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Zbirka ne obstaja"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Zapustite način razdeljenega zaslona in poskusite znova"</string>
<string name="cancel" msgid="4970902691067201584">"Prekliči"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Skrij predogled upor. vmesnika"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Upor. vm. je skrit. Dvakrat se dot. za razkritje."</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Pokaži predogled upo. vmesnika"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Kontrolniki za predogled so prikazani. Dvakrat se dotaknite, če jih želite skriti."</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Skrij kontrolnike za predogled"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Kontrolniki za predogled so skriti. Dvakrat se dotaknite, če jih želite prikazati."</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Prikaži kontrolnike za predogled"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Skrij podatke o zaslonskem ozadju"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Upor. vm. je prikazan. Dvakrat se dot. za skritje."</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Zamenjava zaslonskega ozadja"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Predogled zaslon. ozadja zaklen. zaslona"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Želite ponastaviti spremembe?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Spremembe ne bodo shranjene."</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Več zaslonskih ozadij"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Zaslonsko ozadje %1$s"</string>
</resources>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index f7ecbef7..8e6b87fc 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Kategoritë e imazheve të sfondit"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Caktoje si imazh sfondi"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Cakto imazhin e sfondit"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Po cakton imazhin e sfondit..."</string>
<string name="try_again" msgid="8278874823700921234">"Provo sërish"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Nuk mund të caktojë imazhin e sfondit"</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"E caktuar aktualisht"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Imazh sfondi i përditshëm"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"\"Ekrani bazë\" dhe \"Ekrani i kyçjes\""</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Zgjidh një imazh sfondi"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Krijo një imazh sfondi"</string>
<string name="home_screen_message" msgid="106444102822522813">"Ekrani bazë"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Ekrani i kyçjes"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"\"Ekrani bazë\" dhe \"Kyçja\""</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Eksploro imazhin të sfondit të ekranit të kyçjes"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Rifresko imazhin e përditshëm të sfondit të ekranit kryesor"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Rifresko imazhin e përditshëm të sfondit"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Ekrani i pamjes paraprake të imazhit të sfondit"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Po rifreskon imazhin e përditshëm të sfondit..."</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Rifreskimi i imazhit të përditshëm të sfondit dështoi. Kontrollo lidhjen e rrjetit dhe provo përsëri."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Imazhet e sfondit në pajisje"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Fshi"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Modifiko"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Të fshihet ky imazh sfondi nga pajisja jote?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Pas"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Navigo lart"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Modifiko"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Shkarko"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Imazhi i sfondit të diafilmit"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Pas"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Imazhi i sfondit"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Pamja paraprake e imazhit të sfondit"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Pamja paraprake e imazhit të sfondit të ekranit të kyçjes"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Pamja paraprake e imazhit të sfondit të ekranit bazë"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Koleksioni nuk ekziston"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Dil nga modaliteti i ekranit të ndarë dhe provo sërish"</string>
<string name="cancel" msgid="4970902691067201584">"Anulo"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Fshih pamjen paraprake të ndërfaqes së përdoruesit"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Pamja paraprake: UI fshehur. Shfaq me dy trokitje"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Shfaq pamjen paraprake të ndërfaqes së përdoruesit"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Shfaqen kontrollet e versionit paraprak. Fshih me dy trokitje"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Fshih kontrollet e versionit paraprak"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Kontrollet e versionit paraprak janë të fshehura. Trokit dy herë për të shfaqur"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Shfaq kontrollet e versionit paraprak"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Fshih informacionet e imazhit të sfondit"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Pamja paraprake: UI shfaqet. Fshih me dy trokitje"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Ndrysho imazhin e sfondit"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Pamja paraprake e imazhit të sfondit të ekranit të kyçjes"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Të rivendosen ndryshimet?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Ndryshimet e tua nuk do të ruhen"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Më shumë imazhe të sfondit"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Imazhi i sfondit %1$s"</string>
</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index a09db253..108f73a0 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Категорије позадина"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Подеси позадину"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Подеси позадину"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Подешава се позадина…"</string>
<string name="try_again" msgid="8278874823700921234">"Пробајте поново"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Подешавање позадине није успело."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Тренутно подешена"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Дневна позадина"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Почетни и закључани екран"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Одаберите позадину"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Направите позадину"</string>
<string name="home_screen_message" msgid="106444102822522813">"Почетни екран"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Закључан екран"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Почетни и закључани екран"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Истражите позадину за закључани екран"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Освежи дневну позадину за почетни екран"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Освежи дневну позадину"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Екран приказа позадине"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Дневна позадина се освежава…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Освежавање дневне позадине није успело. Проверите мрежну везу и пробајте поново."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Позадине на уређају"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Избриши"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Измени"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Желите да избришете ову позадину са уређаја?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Назад"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Иди нагоре"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Измени"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Преузми"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Пројекција слајдова у позадини"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Претходна"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Позадина"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Преглед позадине"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Приказ позадине закључаног екрана"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Приказ позадине почетног екрана"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Колекција не постоји"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Напустите режим подељеног екрана и пробајте поново"</string>
<string name="cancel" msgid="4970902691067201584">"Откажи"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Сакриј кориснички интерфејс"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Кријемо кориснич. интерфејс. Откријте у два додира"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Прикажи кориснички интерфејс"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Контроле прегледа се приказују. Сакријте у два додира"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Сакриј контроле прегледа"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Контроле прегледа су сакривене. Откријте у два додира"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Прикажи контроле прегледа"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Сакриј информације о позадини"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Приказујемо корисн. интерф. Сакријте у два додира"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Промените позадину"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Преглед позадине закључаног екрана"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Желите да ресетујете промене?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Промене неће бити сачуване"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Још позадина"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Позадина %1$s"</string>
</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index d63f9e30..aedb5a3d 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Bakgrundskategorier"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Använd som bakgrund"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Ange bakgrund"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Ställer in bakgrund …"</string>
<string name="try_again" msgid="8278874823700921234">"Försök igen"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Det gick inte att ställa in bakgrunden."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Nuvarande bakgrund"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Dagens bakgrund"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Start- och låsskärm"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Välj en bakgrund"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Skapa en bakgrund"</string>
<string name="home_screen_message" msgid="106444102822522813">"Startskärm"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Låsskärm"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Start- och låsskärm"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Visa information om låsskärmens bakgrund"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Uppdatera dagens bakgrund för startskärmen"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Uppdatera dagens bakgrund"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Förhandsgranskning av skärmens bakgrund"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Dagens bakgrund uppdateras …"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Det gick inte att uppdatera dagens bakgrund. Kontrollera nätverksanslutningen och försök igen."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Bakgrunder på enheten"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Radera"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Redigera"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Vill du radera den här bakgrunden från enheten?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Tillbaka"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Navigera uppåt"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Redigera"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Ladda ned"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Bakgrund med bildspel"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Föregående"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Bakgrund"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Förhandsgranska bakgrunden"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Förhandsgranskning av låsskärmens bakgrund"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Förhandsgranskning av startskärmens bakgrund"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Samlingen finns inte"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Avsluta läget för delad skärm och försök igen"</string>
<string name="cancel" msgid="4970902691067201584">"Avbryt"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Dölj förhandsgranskning av UI"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Döljer gränssnitt förhandsg. Dubbeltryck och visa"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Visa förhandsgranskning av UI"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Förhandsversioner av kontroller visas. Tryck snabbt två gånger för att dölja dem"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Dölj förhandsversioner av kontroller"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Förhandsversioner av kontroller är dolda. Tryck snabbt två gånger för att visa dem"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Visa förhandsversioner av kontroller"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Dölj bakgrundsinformation"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Visar gränssnitt förhandsg. Dubbeltryck och dölj"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Ändra bakgrund"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Förhandsgranskning av låsskärmsbakgrund"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Vill du återställa ändringarna?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Dina ändringar sparas inte"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Fler bakgrunder"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Bakgrunden %1$s"</string>
</resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index a3c08809..4e59a717 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Aina za mandhari"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Weka Mandhari"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Weka mandhari"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Inaweka mandhari..."</string>
<string name="try_again" msgid="8278874823700921234">"Jaribu tena"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Imeshindwa kuweka mandhari."</string>
@@ -29,17 +29,15 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Mandhari yaliyopo"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Mandhari ya kila siku"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Skrini ya Kwanza na Iliyofungwa"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Chagua Mandhari"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Unda Mandhari"</string>
<string name="home_screen_message" msgid="106444102822522813">"Skrini ya kwanza"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Skrini iliyofungwa"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Skrini ya Kwanza na Iliyofungwa"</string>
- <string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"Weka madhari"</string>
+ <string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"Weka mandhari"</string>
<string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"Skrini ya kwanza"</string>
<string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"Skrini iliyofungwa"</string>
- <string name="set_wallpaper_both_destination" msgid="2536004558738350775">"Skrini ya kwanza na skrini zilizofungwa"</string>
+ <string name="set_wallpaper_both_destination" msgid="2536004558738350775">"Skrini ya kwanza na skrini iliyofungwa"</string>
<string name="no_backup_image_wallpaper_label" msgid="6316627676107284851">"Mandhari ya Picha Yanayozunguka"</string>
<string name="permission_needed_explanation" msgid="139166837541426823">"Ili kuonyesha mandhari yanayotumika kwa sasa hapa, <xliff:g id="APP_NAME">%1$s</xliff:g> inahitaji idhini ya kufikia hifadhi ya kifaa chako."</string>
<string name="permission_needed_explanation_go_to_settings" msgid="3923551582092599609">"Ili kuonyesha hapa mandhari yaliyopo sasa, programu ya Mandhari inahitaji ruhusa ya kufikia hifadhi ya kifaa chako.\n\nIli kubadilisha mipangilio hii, nenda kwenye sehemu ya Ruhusa katika maelezo ya programu ya Mandhari."</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Gundua mandhari ya skrini iliyofungwa"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Onyesha upya mandhari ya skrini ya kwanza ya kila siku"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Onyesha upya mandhari ya kila siku"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Skrini ya kukagua mandhari"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Inaonyesha upya mandhari ya kila siku..."</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Imeshindwa kuonyesha upya mandhari ya kila siku. Tafadhali kagua muunganisho wako kisha ujaribu tena."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Mandhari yaliyo kwenye kifaa"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Futa"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Badilisha"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Ungependa kufuta mandhari haya kwenye kifaa chako?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Nyuma"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Sogeza juu"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Badilisha"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Pakua"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Mandhari ya Onyesho la Slaidi"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Uliotangulia"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Mandhari"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Onyesho la kukagua mandhari"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Onyesho la kukagua mandhari ya skrini iliyofungwa"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Onyesho la kukagua mandhari ya skrini ya kwanza"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Mkusanyiko huu haupo"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Tafadhali ondoka kwenye hali ya skrini iliyogawanywa na ujaribu tena"</string>
<string name="cancel" msgid="4970902691067201584">"Ghairi"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Ficha Onyesho la Kukagua Kiolesura"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Kiolesura kimefichwa katika onyesho la kukagua. Gusa mara mbili ukionyeshe"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Onyesha Onyesho la Kukagua Kiolesura"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Vidhibiti vya onyesho la kukagua vinaonyeshwa. Gusa mara mbili ili uvifiche"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Ficha vidhibiti vya onyesho la kukagua"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Vidhibiti vya onyesho la kukagua vimefichwa. Gusa mara mbili ili uvionyeshe"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Onyesha vidhibiti vya onyesho la kukagua"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Ficha maelezo ya mandhari"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Kiolesura kinaonyeshwa katika onyesho la kukagua. Gusa mara mbili ili ukifiche"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Badilisha mandhari"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Onyesho la kukagua mandhari kwenye skrini iliyofungwa"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Ungependa kuweka mabadiliko upya?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Mabadiliko yako hayatahifadhiwa"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Mandhari zaidi"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Mandhari %1$s"</string>
</resources>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index a3264cbb..e88c2955 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"வால்பேப்பர் வகைகள்"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"வால்பேப்பரை அமை"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"வால்பேப்பரை அமை"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"வால்பேப்பரை அமைக்கிறது…"</string>
<string name="try_again" msgid="8278874823700921234">"மீண்டும் முயல்க"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"வால்பேப்பரை அமைக்க முடியவில்லை."</string>
@@ -29,17 +29,15 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"தற்போது அமைத்துள்ள வால்பேப்பர்"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"தினசரி வால்பேப்பர்"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"முகப்பு &amp; பூட்டுத் திரை"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"வால்பேப்பரைத் தேர்வுசெய்யுங்கள்"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"வால்பேப்பரை உருவாக்குங்கள்"</string>
<string name="home_screen_message" msgid="106444102822522813">"முகப்புத் திரை"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"பூட்டுத் திரை"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"முகப்பு &amp; பூட்டு"</string>
<string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"வால்பேப்பரை அமையுங்கள்"</string>
<string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"முகப்புத் திரை"</string>
<string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"பூட்டுத் திரை"</string>
- <string name="set_wallpaper_both_destination" msgid="2536004558738350775">"முகப்புத் திரைகளும் பூட்டுத் திரைகளும்"</string>
+ <string name="set_wallpaper_both_destination" msgid="2536004558738350775">"முகப்பு &amp; பூட்டுத் திரை"</string>
<string name="no_backup_image_wallpaper_label" msgid="6316627676107284851">"சுழலும் பட வால்பேப்பர்"</string>
<string name="permission_needed_explanation" msgid="139166837541426823">"இந்த வால்பேப்பரை இங்கே காட்ட, <xliff:g id="APP_NAME">%1$s</xliff:g> பயன்பாட்டிற்கு உங்கள் சாதனத்தின் சேமிப்பகத்திற்கான அணுகல் தேவை."</string>
<string name="permission_needed_explanation_go_to_settings" msgid="3923551582092599609">"இந்த வால்பேப்பரை இங்கே காட்ட, வால்பேப்பர்களுக்கு உங்கள் சாதனத்தின் சேமிப்பகத்திற்கான அணுகல் தேவை.\n\nஇந்த அமைப்பை மாற்ற, வால்பேப்பர்களின் ஆப்ஸ் தகவல் பக்கத்தில் உள்ள அனுமதிகள் பகுதிக்குச் செல்லவும்."</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"பூட்டுத் திரை வால்பேப்பர் பற்றி மேலும் அறிவதற்கான பட்டன்"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"முகப்புத் திரையில் தினசரி வால்பேப்பரைப் புதுப்பிக்கும் பட்டன்"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"தினசரி வால்பேப்பரைப் புதுப்பிக்கும் பட்டன்"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"வால்பேப்பர் மாதிரிக்காட்சித் திரை"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"தினசரி வால்பேப்பரைப் புதுப்பிக்கிறது…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"தினசரி வால்பேப்பரைப் புதுப்பிக்க முடியவில்லை. நெட்வொர்க் இணைப்பைச் சரிபார்த்து, மீண்டும் முயலவும்."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"சாதனத்திலுள்ள வால்பேப்பர்கள்"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"நீக்கு"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"மாற்று"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"உங்கள் சாதனத்திலிருந்து இந்த வால்பேப்பரை நீக்கவா?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"பின்செல்வதற்கான பட்டன்"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"மேலே செல்லும்"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"திருத்துவதற்கான பட்டன்"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"பதிவிறக்குவதற்கான பட்டன்"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"ஸ்லைடுகாட்சி வால்பேப்பர்"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"முந்தைய பக்கத்திற்குச் செல்வதற்கான பட்டன்"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"வால்பேப்பர்"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"வால்பேப்பர் மாதிரிக்காட்சி"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"பூட்டுத் திரை வால்பேப்பரின் மாதிரிக்காட்சி"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"முகப்புத் திரை வால்பேப்பரின் மாதிரிக்காட்சி"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"இந்தத் தொகுப்பு இல்லை"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"திரைப் பிரிப்புப் பயன்முறையிலிருந்து வெளியேறி மீண்டும் முயலவும்"</string>
<string name="cancel" msgid="4970902691067201584">"வேண்டாம்"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"UI மாதிரிக்காட்சியை மறை"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"மாதிரிக்காட்சியில் UI மறைந்துள்ளது. காட்ட இருமுறை தட்டவும்"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"UI மாதிரிக்காட்சியைக் காட்டு"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"மாதிரிக்காட்சிக் கட்டுப்பாடுகள் காட்டப்படுகின்றன. மறைக்க இருமுறை தட்டவும்"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"மாதிரிக்காட்சிக் கட்டுப்பாடுகளை மறை"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"மாதிரிக்காட்சிக் கட்டுப்பாடுகள் மறைக்கப்பட்டுள்ளன. காட்ட இருமுறை தட்டவும்"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"மாதிரிக்காட்சிக் கட்டுப்பாடுகளைக் காட்டு"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"வால்பேப்பர் தகவல்களை மறை"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"மாதிரிக்காட்சியில் UI காட்டப்படுகிறது. மறைக்க இருமுறை தட்டவும்"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"வால்பேப்பரை மாற்றுதல்"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"லாக்ஸ்கிரீன் வால்பேப்பர் மாதிரிக்காட்சி"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"மாற்றங்களை மீட்டமைக்கவா?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"உங்கள் மாற்றங்கள் சேமிக்கப்படாது"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"மேலும் வால்பேப்பர்கள்"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"வால்பேப்பர் %1$s"</string>
</resources>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index cac31e78..73e42eb6 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"వాల్‌పేపర్ రకాలు"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"వాల్‌పేపర్‌ను సెట్ చేయండి"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"వాల్‌పేపర్‌ను సెట్ చేయండి"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"వాల్‌పేపర్‌ను సెట్ చేస్తోంది…"</string>
<string name="try_again" msgid="8278874823700921234">"మళ్లీ ప్రయత్నించు"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"వాల్‌పేపర్‌ను సెట్ చేయడం సాధ్యపడలేదు."</string>
@@ -31,13 +31,13 @@
<string name="wallpaper_destination_both" msgid="1124197176741944063">"హోమ్ &amp; లాక్ స్క్రీన్"</string>
<string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"వాల్‌పేపర్‌ను ఎంచుకోండి"</string>
<string name="creative_wallpaper_title" msgid="8459226435723103934">"వాల్‌పేపర్‌ను క్రియేట్ చేయండి"</string>
- <string name="home_screen_message" msgid="106444102822522813">"హోమ్ స్క్రీన్"</string>
+ <string name="home_screen_message" msgid="106444102822522813">"మొదటి స్క్రీన్"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"లాక్ స్క్రీన్"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"హోమ్ &amp; లాక్"</string>
<string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"వీటిలో వాల్‌పేపర్‌ను సెట్ చేయండి"</string>
- <string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"హోమ్ స్క్రీన్"</string>
+ <string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"మొదటి స్క్రీన్"</string>
<string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"లాక్ స్క్రీన్"</string>
- <string name="set_wallpaper_both_destination" msgid="2536004558738350775">"మొదటి ట్యాబ్, లాక్ స్క్రీన్"</string>
+ <string name="set_wallpaper_both_destination" msgid="2536004558738350775">"మొదటి స్క్రీన్, లాక్ స్క్రీన్"</string>
<string name="no_backup_image_wallpaper_label" msgid="6316627676107284851">"చిత్ర వాల్‌పేపర్‌ను వంతుల వారీగా మార్చడం"</string>
<string name="permission_needed_explanation" msgid="139166837541426823">"ప్రస్తుత వాల్‌పేపర్‌ని ఇక్కడ ప్రదర్శించడానికి, <xliff:g id="APP_NAME">%1$s</xliff:g>కి మీ పరికర స్టోరేజ్‌ యొక్క యాక్సెస్ అవసరమవుతుంది."</string>
<string name="permission_needed_explanation_go_to_settings" msgid="3923551582092599609">"ఇక్కడ ప్రస్తుత వాల్‌పేపర్‌ను ప్రదర్శించడానికి, వాల్‌పేపర్‌‌లకు మీ పరికర స్టోరేజ్‌ యాక్సెస్ అవసరం.\n\nఈ సెట్టింగ్‌ను మార్చడానికి, వాల్‌పేపర్‌ల యాప్ సమాచారం యొక్క అనుమతుల ప్రాంతానికి వెళ్లండి."</string>
@@ -49,7 +49,7 @@
<string name="start_rotation_dialog_wifi_only_option_message" msgid="3126269859713666225">"భవిష్యత్తులో వాల్‌పేపర్‌లను Wi-Fiలో ఉన్నప్పుడు మాత్రమే డౌన్‌లోడ్ చేయండి"</string>
<string name="start_rotation_dialog_continue" msgid="276678987852274872">"కొనసాగించండి"</string>
<string name="start_rotation_progress_message" msgid="7872623873682262083">"మొదటి వాల్‌పేపర్‌ను డౌన్‌లోడ్ చేస్తోంది…"</string>
- <string name="start_rotation_error_message" msgid="3053799836719618972">"మొదటి వాల్‌పేపర్‌ను డౌన్‌లోడ్ చేయలేకపోయింది. దయచేసి మీ నెట్‌వర్క్ సెట్టింగ్‌లను చెక్ చేసి, ఆపై మళ్లీ ప్రయత్నించండి."</string>
+ <string name="start_rotation_error_message" msgid="3053799836719618972">"మొదటి వాల్‌పేపర్‌ను డౌన్‌లోడ్ చేయలేకపోయింది. దయచేసి మీ నెట్‌వర్క్ సెట్టింగ్‌లను చెక్ చేసి, ఆపై మళ్లీ ట్రై చేయండి."</string>
<string name="start_rotation_dialog_body" msgid="7903554799046364916">"వాల్‌పేపర్ ప్రతి రోజు ఆటోమేటిక్‌గా మారుతుంది"</string>
<string name="settings_button_label" msgid="8724734130079207955">"సెట్టింగ్‌లు"</string>
<string name="explore" msgid="7468719504199497281">"అన్వేషించు"</string>
@@ -57,7 +57,7 @@
<string name="wallpaper_disabled_message" msgid="7309484130562148185">"ఈ పరికరంలో వాల్‌పేపర్‌ను సెట్ చేయడం నిలిపివేయబడింది"</string>
<string name="wallpaper_disabled_by_administrator_message" msgid="1551430406714747884">"మీ పరికర నిర్వాహకులు వాల్‌పేపర్‌ను సెట్ చేయడం నిలిపివేసారు"</string>
<string name="wallpaper_set_successfully_message" msgid="2958998799111688578">"వాల్‌పేపర్ విజయవంతంగా సెట్ చేయబడింది"</string>
- <string name="wallpapers_unavailable_offline_message" msgid="8136405438621689532">"వాల్‌పేపర్‌లను చూడాలంటే మీరు ఇంటర్నెట్ కనెక్షన్‌ని కలిగి ఉండాలి. దయచేసి కనెక్ట్ చేసి, మళ్లీ ప్రయత్నించండి."</string>
+ <string name="wallpapers_unavailable_offline_message" msgid="8136405438621689532">"వాల్‌పేపర్‌లను చూడాలంటే మీరు ఇంటర్నెట్ కనెక్షన్‌ని కలిగి ఉండాలి. దయచేసి కనెక్ట్ చేసి, మళ్లీ ట్రై చేయండి."</string>
<string name="currently_set_home_wallpaper_thumbnail" msgid="4022381436821898917">"ప్రస్తుతం సెట్ చేసిన హోమ్ స్క్రీన్ వాల్‌పేపర్ థంబ్‌నెయిల్‌"</string>
<string name="currently_set_lock_wallpaper_thumbnail" msgid="2094209303934569997">"ప్రస్తుతం సెట్ చేసిన లాక్ స్క్రీన్ వాల్‌పేపర్ థంబ్‌నెయిల్‌"</string>
<string name="currently_set_wallpaper_thumbnail" msgid="8651887838745545107">"ప్రస్తుతం సెట్ చేసిన వాల్‌పేపర్ థంబ్‌నెయిల్‌"</string>
@@ -66,8 +66,9 @@
<string name="explore_lock_screen" msgid="268938342103703665">"లాక్ స్క్రీన్ వాల్‌పేపర్‌ను అన్వేషిస్తుంది"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"రోజువారీ హోమ్ స్క్రీన్ వాల్‌పేపర్‌ను రిఫ్రెష్ చేస్తుంది"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"రోజువారీ వాల్‌పేపర్‌ను రిఫ్రెష్ చేస్తుంది"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"వాల్‌పేపర్ ప్రివ్యూ స్క్రీన్"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"రోజువారీ వాల్‌పేపర్‌ను రిఫ్రెష్ చేస్తోంది…"</string>
- <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"రోజువారీ వాల్‌పేపర్‌ను రిఫ్రెష్ చేయడంలో విఫలమైంది. దయచేసి మీ నెట్‌వర్క్ కనెక్షన్‌ను చెక్ చేసుకొని, ఆపై మళ్లీ ప్రయత్నించండి."</string>
+ <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"రోజువారీ వాల్‌పేపర్‌ను రిఫ్రెష్ చేయడంలో విఫలమైంది. దయచేసి మీ నెట్‌వర్క్ కనెక్షన్‌ను చెక్ చేసుకొని, ఆపై మళ్లీ ట్రై చేయండి."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"పరికరంలో వాల్‌పేపర్‌లు"</string>
<string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"పరికరంలో"</string>
<string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android వాల్‌పేపర్"</string>
@@ -89,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"తొలగించండి"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"ఎడిట్ చేయండి"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"మీ పరికరం నుండి ఈ వాల్‌పేపర్‌ను తొలగించాలా?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"వెనుకకు"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"పైకి నావిగేట్ చేయండి"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"ఎడిట్‌"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"డౌన్‌లోడ్"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"స్లయిడ్ షో వాల్‌పేపర్"</string>
@@ -99,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"మునుపటి"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"వాల్‌పేపర్"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"వాల్‌పేపర్ ప్రివ్యూ"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"లాక్‌స్క్రీన్ వాల్‌పేపర్ ప్రివ్యూ"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"మొదటి స్క్రీన్ వాల్‌పేపర్ ప్రివ్యూ"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"ఈ సేకరణ అందుబాటులో లేదు"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"దయచేసి స్ప్లిట్ స్క్రీన్ మోడ్ నుంచి ఎగ్జిట్ అయ్యి, మళ్లీ ట్రై చేయండి"</string>
<string name="cancel" msgid="4970902691067201584">"రద్దు చేయండి"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"UI ప్రివ్యూని దాచిపెట్టు"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"UI ప్రివ్యూలో దాచబడింది. రెండుసార్లు నొక్కి చూడండి"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"UI ప్రివ్యూని చూపించు"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"ప్రివ్యూ కంట్రోల్స్ డిస్‌ప్లే చేయబడ్డాయి. దాచడానికి డబుల్ ట్యాప్ చేయండి"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"ప్రివ్యూ కంట్రోల్స్‌ను దాచండి"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"ప్రివ్యూ కంట్రోల్స్ దాచబడ్డాయి. చూపించడానికి డబుల్ ట్యాప్ చేయండి"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"ప్రివ్యూ కంట్రోల్స్‌ను చూపించండి"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"వాల్‌పేపర్ సమాచారాన్ని దాచండి"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"UI ప్రివ్యూలో చూపబడింది. రెండుసార్లు నొక్కి దాచండి"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"వాల్‌పేపర్‌ను మార్చండి"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"లాక్‌స్క్రీన్ వాల్‌పేపర్ ప్రివ్యూ"</string>
@@ -117,8 +126,9 @@
<string name="open_my_photos" msgid="4107196465713868381">"నా ఫోటోలను తెరవండి"</string>
<string name="lock_screen_tab" msgid="6672930765010407652">"లాక్ స్క్రీన్"</string>
<string name="home_screen_tab" msgid="1080445697837877526">"మొదటి స్క్రీన్"</string>
- <string name="reset" msgid="4945445169532850631">"రీసెట్ చేయి"</string>
+ <string name="reset" msgid="4945445169532850631">"రీసెట్ చేయండి"</string>
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"మార్పులను రీసెట్ చేయాలా?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"మీ మార్పులు సేవ్ చేయబడవు"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"మరిన్ని వాల్‌పేపర్‌లు"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"వాల్‌పేపర్ %1$s"</string>
</resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 4e1bdb23..b38a8af8 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"หมวดหมู่วอลเปเปอร์"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"ตั้งค่าวอลเปเปอร์"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"ตั้งค่าวอลเปเปอร์"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"กำลังตั้งค่าวอลเปเปอร์…"</string>
<string name="try_again" msgid="8278874823700921234">"ลองอีกครั้ง"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"ตั้งค่าวอลเปเปอร์ไม่ได้"</string>
@@ -29,14 +29,12 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"วอลเปเปอร์ปัจจุบัน"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"วอลเปเปอร์รายวัน"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"หน้าจอหลักและหน้าจอล็อก"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"เลือกวอลเปเปอร์"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"สร้างวอลเปเปอร์"</string>
<string name="home_screen_message" msgid="106444102822522813">"หน้าจอหลัก"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"หน้าจอล็อก"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"หน้าแรกและหน้าจอล็อก"</string>
- <string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"ตั้งเปิดวอลเปเปอร์"</string>
+ <string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"ตั้งวอลเปเปอร์ใน"</string>
<string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"หน้าจอหลัก"</string>
<string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"หน้าจอล็อก"</string>
<string name="set_wallpaper_both_destination" msgid="2536004558738350775">"หน้าจอหลักและหน้าจอล็อก"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"สำรวจวอลเปเปอร์บนหน้าจอล็อก"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"รีเฟรชวอลเปเปอร์หน้าจอหลักรายวัน"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"รีเฟรชวอลเปเปอร์รายวัน"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"หน้าจอตัวอย่างวอลเปเปอร์"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"กำลังรีเฟรชวอลเปเปอร์รายวัน…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"รีเฟรชวอลเปเปอร์รายวันไม่ได้ โปรดตรวจสอบการเชื่อมต่อเครือข่าย แล้วลองใหม่อีกครั้ง"</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"วอลเปเปอร์บนอุปกรณ์"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"ลบ"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"แก้ไข"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"ลบวอลเปเปอร์นี้ออกจากอุปกรณ์ไหม"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"กลับ"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"ไปยังด้านบน"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"แก้ไข"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"ดาวน์โหลด"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"วอลเปเปอร์ภาพสไลด์"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"ก่อนหน้า"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"วอลเปเปอร์"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"พรีวิววอลเปเปอร์"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"ตัวอย่างวอลเปเปอร์หน้าจอล็อก"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"ตัวอย่างวอลเปเปอร์หน้าจอหลัก"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"ไม่มีคอลเล็กชัน"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"โปรดออกจากโหมดแยกหน้าจอและลองอีกครั้ง"</string>
<string name="cancel" msgid="4970902691067201584">"ยกเลิก"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"ซ่อนตัวอย่าง UI"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"ซ่อน UI ในตัวอย่าง แตะสองครั้งเพื่อเลิกซ่อน"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"แสดงตัวอย่าง UI"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"การควบคุมการแสดงตัวอย่างแสดงอยู่ แตะสองครั้งเพื่อซ่อน"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"ซ่อนการควบคุมการแสดงตัวอย่าง"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"การควบคุมการแสดงตัวอย่างซ่อนอยู่ แตะสองครั้งเพื่อแสดง"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"แสดงการควบคุมการแสดงตัวอย่าง"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"ซ่อนข้อมูลวอลเปเปอร์"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"แสดง UI ในตัวอย่าง แตะสองครั้งเพื่อซ่อน"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"เปลี่ยนวอลเปเปอร์"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"ตัวอย่างวอลเปเปอร์ของหน้าจอล็อก"</string>
@@ -117,10 +124,11 @@
<string name="settings_snackbar_description" msgid="890168814524778486">"โปรดเปิดใช้ไฟล์และสื่อในการตั้งค่า"</string>
<string name="settings_snackbar_enable" msgid="5992112808061426068">"เปิดใช้"</string>
<string name="open_my_photos" msgid="4107196465713868381">"เปิดรูปภาพของฉัน"</string>
- <string name="lock_screen_tab" msgid="6672930765010407652">"ล็อกหน้าจอ"</string>
+ <string name="lock_screen_tab" msgid="6672930765010407652">"หน้าจอล็อก"</string>
<string name="home_screen_tab" msgid="1080445697837877526">"หน้าจอหลัก"</string>
<string name="reset" msgid="4945445169532850631">"รีเซ็ต"</string>
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"รีเซ็ตการเปลี่ยนแปลงไหม"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"ระบบจะไม่บันทึกการเปลี่ยนแปลงของคุณ"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"วอลเปเปอร์เพิ่มเติม"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"วอลเปเปอร์ %1$s"</string>
</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index bc899d83..3c6996aa 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Mga kategorya ng wallpaper"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Itakda na Wallpaper"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Itakda ang wallpaper"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Itinatakda ang wallpaper…"</string>
<string name="try_again" msgid="8278874823700921234">"Subukang muli"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Hindi maitakda ang wallpaper."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Kasalukuyang nakatakda"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Pang-araw-araw na wallpaper"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Home &amp; Lock screen"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Pumili ng Wallpaper"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Gumawa ng Wallpaper"</string>
<string name="home_screen_message" msgid="106444102822522813">"Home screen"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Lock screen"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Home at Lock"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"I-explore ang wallpaper ng lock screen"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"I-refresh ang pang-araw-araw na wallpaper ng home screen"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"I-refresh ang pang-araw-araw na wallpaper"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Screen ng preview ng wallpaper"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Nire-refresh ang pang-araw-araw na wallpaper…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Hindi na-refresh ang pang-araw-araw na wallpaper. Pakitingnan ang iyong koneksyon sa network at subukan ulit."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Mga nasa device na wallpaper"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"I-delete"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"I-edit"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"I-delete ang wallpaper na ito mula sa iyong device?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Bumalik"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Mag-navigate pataas"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"I-edit"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"I-download"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Slideshow na Wallpaper"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Nauna"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Wallpaper"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Preview ng wallpaper"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Preview ng wallpaper ng lock screen"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Preview ng wallpaper ng home screen"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Wala ang koleksyon"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Lumabas sa split screen mode at subukan ulit"</string>
<string name="cancel" msgid="4970902691067201584">"Kanselahin"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Itago ang Preview ng UI"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Hidden ang UI sa preview. Double tap para i-unhide"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Ipakita ang Preview ng UI"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Ipinapakita ang mga kontrol ng preview. I-double tap para itago"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Itago ang mga kontrol ng preview"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Nakatago ang mga kontrol ng preview. I-double tap para ipakita"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Ipakita ang mga kontrol ng preview"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Itago ang impormasyon ng wallpaper"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Displayed ang UI sa preview. Double tap para itago"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Palitan ang wallpaper"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Preview ng wallpaper ng lockscreen"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"I-reset ang mga pagbabago?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Hindi mase-save ang iyong mga pagbabago"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Higuit pang wallpaper"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Wallpaper %1$s"</string>
</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 1744510e..5f834560 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Duvar kağıdı kategorileri"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Duvar Kağıdını Ayarla"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Duvar kağıdını ayarla"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Duvar kağıdı ayarlanıyor…"</string>
<string name="try_again" msgid="8278874823700921234">"Tekrar dene"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Duvar kağıdı ayarlanamadı."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Şu anda ayarlı"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Günlük duvar kağıdı"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Ana Sayfa ve Kilit ekranı"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Duvar kağıdı seçin"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Duvar kağıdı oluşturun"</string>
<string name="home_screen_message" msgid="106444102822522813">"Ana ekran"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Kilit ekranı"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Ana Ekran ve Kilit Ekranı"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Kilit ekranı duvar kağıdını keşfet"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Günlük ana ekran duvar kağıdını yenile"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Günlük duvar kağıdını yenile"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Duvar kağıdı önizleme ekranı"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Günlük duvar kağıdı yenileniyor…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Günlük duvar kağıdı yenilenemedi. Lütfen ağ bağlantınızı kontrol edip tekrar deneyin."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Cihazdaki duvar kağıtları"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Sil"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Düzenle"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Bu duvar kağıdı cihazınızdan silinsin mi?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Geri"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Yukarı git"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Düzenle"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"İndir"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Duvar Kağıdı Slayt Gösterisi"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Önceki"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Duvar kağıdı"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Duvar kağıdı ön izleme"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Kilit ekranı duvar kağıdı önizlemesi"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Ana ekran duvar kağıdı önizlemesi"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Koleksiyon mevcut değil"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Lütfen bölünmüş ekran modundan çıkıp tekrar deneyin"</string>
<string name="cancel" msgid="4970902691067201584">"İptal"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Arayüz Önizlemesini Gizle"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Kullanıcı arayüzü önizlemesi gizlenmiş. Göstermek için iki kez dokunun"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Arayüz Önizlemesini Göster"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Önizleme denetimleri gösteriliyor. Gizlemek için iki kez dokunun"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Önizleme denetimlerini gizle"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Önizleme denetimleri gizlendi. Göstermek için iki kez dokunun"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Önizleme denetimlerini göster"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Duvar kağıdı bilgisini gizle"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Kullanıcı arayüzü önizlemesi gösteriliyor. Gizlemek için iki kez dokunun"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Duvar kağıdını değiştir"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Kilit ekranı duvar kağıdı önizlemesi"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Değişiklikler sıfırlansın mı?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Değişiklikleriniz kaydedilmeyecek"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Diğer duvar kağıtları"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Duvar kağıdı %1$s"</string>
</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 0012301d..d9dc2d1c 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Категорії фонових малюнків"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Зробити фоновим малюнком"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Зробити фоном"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Налаштування фонового малюнка…"</string>
<string name="try_again" msgid="8278874823700921234">"Повторити"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Не вдалося налаштувати фоновий малюнок."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Вибрано зараз"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Щоденний фоновий малюнок"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Головний і заблокований екрани"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Виберіть фоновий малюнок"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Створіть фоновий малюнок"</string>
<string name="home_screen_message" msgid="106444102822522813">"Головний екран"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Заблокований екран"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Головний і заблокований екрани"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Докладніше про фоновий малюнок на заблокованому екрані"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Оновити щоденний фоновий малюнок на головному екрані"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Оновити щоденний фоновий малюнок"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Екран попереднього перегляду фонового малюнка"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Оновлення щоденного фонового малюнка…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Не вдалось оновити щоденний фоновий малюнок. Перевірте з’єднання з мережею й повторіть спробу."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Фонові малюнки на пристрої"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Видалити"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Редагувати"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Видалити цей фоновий малюнок із пристрою?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Назад"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Назад"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Змінити"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Завантажити"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Фоновий малюнок слайд-шоу"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Назад"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Фоновий малюнок"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Перегляд фонового малюнка"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Попередній перегляд фонового малюнка заблокованого екрана"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Попередній перегляд фонового малюнка головного екрана"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Колекція не існує"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Вимкніть режим розділення екрана й повторіть спробу"</string>
<string name="cancel" msgid="4970902691067201584">"Скасувати"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Сховати інтерфейс перегляду"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Попередній перегляд інтерфейсу приховано. Двічі торкніться, щоб показати."</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Показати інтерфейс перегляду"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Елементи керування попереднім переглядом відображаються. Двічі торкніться, щоб їх приховати."</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Приховати елементи керування попереднім переглядом"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Елементи керування попереднім переглядом приховано. Двічі торкніться, щоб їх відобразити."</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Показувати елементи керування попереднім переглядом"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Сховати інформацію про фоновий малюнок"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Попередній перегляд інтерфейсу показано. Двічі торкніться, щоб приховати."</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Змінити фоновий малюнок"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Перегляд фону екрана блокування"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Скинути зміни?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Зміни не буде збережено"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Більше фонових малюнків"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Фоновий малюнок %1$s"</string>
</resources>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index d6591526..8787b1ad 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"وال پیپر کے زمرے"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"وال پیپر سیٹ کریں"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"وال پیپر سیٹ کریں"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"وال پیپر سیٹ ہو رہا ہے…"</string>
<string name="try_again" msgid="8278874823700921234">"دوبارہ کوشش کریں"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"وال پیپر سیٹ کرنے سے قاصر۔"</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"فی الحال سیٹ کردہ"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"روزانہ وال پیپر"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"ہوم اور مقفل اسکرین"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"وال پیپر منتخب کریں"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"وال پیپر تخلیق کریں"</string>
<string name="home_screen_message" msgid="106444102822522813">"ہوم اسکرین"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"مقفل اسکرین"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"ہوم اور لاک"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"مقفل اسکرین وال پیپر دریافت کریں"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"روزانہ ہوم اسکرین کا وال پیپر ریفریش کریں"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"روزانہ وال پیپر ریفریش کریں"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"وال پیپر پیش منظر اسکرین"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"روزانہ وال پیپر ریفریش ہو رہا ہے…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"روزانہ وال پیپر ریفریش کرنے میں ناکام۔ براہ کرم اپنا نیٹ ورک کنکشن چیک کر کے دوبارہ کوشش کریں۔"</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"آلہ میں اسٹور کردہ وال پیپرز"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"حذف کریں"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"ترمیم کریں"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"اپنے آلے سے اس وال پیپر کو حذف کریں؟"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"واپس جائیں"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"اوپر نیویگیٹ کریں"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"ترمیم کریں"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"ڈاؤن لوڈ کریں"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"سلائیڈ شو وال پیپر"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"گزشتہ"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"وال پیپر"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"وال پیپر کا پیش منظر"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"مقفل اسکرین وال پیپر کا پیش منظر"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"ہوم اسکرین وال پیپر کا پیش منظر"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"مجموعہ موجود نہیں ہے"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"براہ کرم سپلٹ اسکرین موڈ سے باہر نکلیں اور دوبارہ کوشش کریں"</string>
<string name="cancel" msgid="4970902691067201584">"منسوخ کریں"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"‏UI کا پیش منظر چھپائیں"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"‏پیش منظر میں UI مخفی ہے۔ پوشیدگی ختم کرنے کیلئے دوبار تھپتھپائیں"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"‏UI کا پیش منظر دکھائیں"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"پیش منظر کنٹرولز ڈسپلے کئے جاتے ہیں۔ چھپانے کیلئے دو بار تھپتھپائیں"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"پیش منظر کنٹرولز چھپائیں"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"پیش منظر کنٹرولز پوشیدہ ہیں۔ دکھانے کیلئے دوبار تھپتھپائیں"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"پیش منظر کنٹرولز دکھائیں"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"وال پیپر کی معلومات چھپائیں"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"‏پیش منظر میں UI ڈسپلے کیا جاتا ہے۔ چھپانے کے لیے دو بار تھپتھپائیں"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"وال پیپر تبدیل کریں"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"لاک اسکرین وال پیپر کا پیش منظر"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"تبدیلیوں کو ری سیٹ کریں؟"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"آپ کی تبدیلیاں محفوظ نہیں ہوں گی"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"مزید وال پیپرز"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"‏وال پیپرز ‏%1$s"</string>
</resources>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 989b5b22..bb965c61 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Fon rasmi turkumlari"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Fon rasmi qilish"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Fonga rasm tanlash"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Fonga rasm o‘rnatilmoqda…"</string>
<string name="try_again" msgid="8278874823700921234">"Qaytadan"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Fonga rasm o‘rnatib bo‘lmadi."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Hozirda tanlangan"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Kunlik fon rasmi"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Bosh ekran va ekran qulfi"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Fon rasmini tanlang"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Fon rasmi yarating"</string>
<string name="home_screen_message" msgid="106444102822522813">"Bosh ekran"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Ekran qulfi"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Bosh ekran va ekran qulfi"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Ekran qulfi fon rasmi haqida batafsil"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Kunlik bosh ekran fon rasmini yangilash"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Kunlik fon rasmini yangilash"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Fon rasmiga razm solish ekrani"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Kunlik fon rasmi yangilanmoqda…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Kunlik fon rasmi yangilanmadi. Internet aloqasini tekshiring va qaytadan urining."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Qurilmadagi fon rasmlari"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Oʻchirish"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Tahrirlash"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Bu fon rasmi qurilmangizdan oʻchirib tashlansinmi?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Orqaga"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Tepaga"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Tahrirlash"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Yuklab olish"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Fon rasmlaridan slayd-shou"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Avvalgisi"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Fon rasmi"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Fon rasmiga razm solish"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Ekran qulfi fon rasmiga razm solish"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Bosh ekran fon rasmiga razm solish"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Bunday terma mavjud emas"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Ajratilgan ekran rejimidan chiqib, qayta urining"</string>
<string name="cancel" msgid="4970902691067201584">"Bekor qilish"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Interfeys namunasini berkitish"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Interfeys razm solishda berkitilgan. Chiqarish uchun ikki marta bosing."</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Interfeys namunasini chiqarish"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Razm solish parametrlari ochildi. Berkitish uchun ikki marta bosing."</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Razm solish parametrlarini berkitish"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Razm solish parametrlari berkitildi. Ochish uchun ikki marta bosing"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Razm solish parametrlarini ochish"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Fon rasmiga oid axborotni berkitish"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Interfeys razm solishda chiqarilgan. Berkitish uchun ikki marta bosing."</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Fon rasmini almashtirish"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Ekran qulfida fon rasmini koʻrish"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Oʻzgarishlar asliga qaytarilsinmi?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Oʻzgarishlar saqlanmaydi"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Boshqa fon rasmlari"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Fon rasmlari: %1$s"</string>
</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index f78ffee3..81f9d963 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Danh mục hình nền"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Đặt hình nền"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Đặt làm hình nền"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Đang đặt hình nền..."</string>
<string name="try_again" msgid="8278874823700921234">"Thử lại"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Không thể đặt hình nền."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Hình nền hiện tại"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Hình nền hàng ngày"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Màn hình chính và màn hình khóa"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Chọn hình nền"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Tạo hình nền"</string>
<string name="home_screen_message" msgid="106444102822522813">"Màn hình chính"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Màn hình khóa"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Màn hình chính và khóa"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Khám phá hình nền màn hình khóa"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Làm mới hình nền màn hình chính hàng ngày"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Làm mới hình nền hàng ngày"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Màn hình xem trước hình nền"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Đang làm mới hình nền hàng ngày…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Không thể làm mới hình nền hàng ngày. Vui lòng kiểm tra kết nối mạng của bạn và thử lại."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Hình nền trên thiết bị"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Xóa"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Chỉnh sửa"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Xoá hình nền này khỏi thiết bị của bạn?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Quay lại"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Di chuyển lên trên"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Chỉnh sửa"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Tải xuống"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Hình nền theo kiểu trình chiếu"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Trước"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Hình nền"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Xem trước hình nền"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Xem trước hình nền trên màn hình khoá"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Xem trước hình nền trên màn hình chính"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Bộ sưu tập không tồn tại"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Vui lòng thoát chế độ chia đôi màn hình rồi thử lại"</string>
<string name="cancel" msgid="4970902691067201584">"Huỷ"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Ẩn giao diện người dùng xem trước"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"Chế độ xem trước giao diện người dùng hiện đang ẩn. Nhấn đúp để bỏ ẩn"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Hiện giao diện người dùng xem trước"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Các tuỳ chọn điều khiển bản xem trước đang hiển thị. Nhấn đúp để ẩn"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Ẩn các tuỳ chọn điều khiển bản xem trước"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Các tuỳ chọn điều khiển bản xem trước đang ẩn. Nhấn đúp để hiện"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Hiện các tuỳ chọn điều khiển bản xem trước"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Ẩn thông tin hình nền"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"Chế độ xem trước giao diện người dùng đang hiển thị. Nhấn đúp để ẩn"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Thay đổi hình nền"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Xem trước hình nền trên màn hình khóa"</string>
@@ -120,7 +127,8 @@
<string name="lock_screen_tab" msgid="6672930765010407652">"Màn hình khoá"</string>
<string name="home_screen_tab" msgid="1080445697837877526">"Màn hình chính"</string>
<string name="reset" msgid="4945445169532850631">"Đặt lại"</string>
- <string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Đặt lại nội dung thay đổi?"</string>
+ <string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Đặt lại các thay đổi?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Thay đổi của bạn sẽ không được lưu"</string>
- <string name="more_wallpapers" msgid="8116268433411881705">"Xem thêm hình nền Khác"</string>
+ <string name="more_wallpapers" msgid="8116268433411881705">"Hình nền khác"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Hình nền %1$s"</string>
</resources>
diff --git a/res/values-w600dp/dimens.xml b/res/values-w600dp/dimens.xml
index a16f8dfd..1b73bd1e 100644
--- a/res/values-w600dp/dimens.xml
+++ b/res/values-w600dp/dimens.xml
@@ -14,10 +14,15 @@
~ See the License for the specific language governing permissions and
~ limitations under the License
-->
+
+<!-- Used for foldable unfolded portrait and unfolded landscape.-->
<resources>
<!--
Width of the screen preview. The height will be determined based on the aspect ratio of the
display.
-->
<dimen name="screen_preview_width">450dp</dimen>
+
+ <!-- Dimensions for small "dual" previews screen. -->
+ <dimen name="small_dual_preview_edge_space">94dp</dimen>
</resources> \ No newline at end of file
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index adf71761..983232cd 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"壁纸类别"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"设置壁纸"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"设为壁纸"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"正在设置壁纸…"</string>
<string name="try_again" msgid="8278874823700921234">"重试"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"无法设置壁纸。"</string>
@@ -29,17 +29,15 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"当前设置的壁纸"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"每日壁纸"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"主屏幕和锁定屏幕"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"选择一张壁纸"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"制作一张壁纸"</string>
<string name="home_screen_message" msgid="106444102822522813">"主屏幕"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"锁定屏幕"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"主屏幕和锁定屏幕"</string>
<string name="set_wallpaper_dialog_message" msgid="2110475703996853076">"为以下屏幕设置壁纸:"</string>
<string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"主屏幕"</string>
<string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"锁定屏幕"</string>
- <string name="set_wallpaper_both_destination" msgid="2536004558738350775">"主屏幕和锁定的屏幕"</string>
+ <string name="set_wallpaper_both_destination" msgid="2536004558738350775">"主屏幕和锁屏"</string>
<string name="no_backup_image_wallpaper_label" msgid="6316627676107284851">"轮换展示图片壁纸"</string>
<string name="permission_needed_explanation" msgid="139166837541426823">"要在这里显示当前壁纸,<xliff:g id="APP_NAME">%1$s</xliff:g>需要访问您设备的存储空间。"</string>
<string name="permission_needed_explanation_go_to_settings" msgid="3923551582092599609">"要在这里显示当前壁纸,壁纸应用需要访问您设备的存储空间。\n\n要更改此设置,请转到壁纸应用的应用信息的“权限”部分。"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"探索锁定屏幕壁纸"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"刷新每日主屏幕壁纸"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"刷新每日壁纸"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"壁纸预览画面"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"正在刷新每日壁纸…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"无法刷新每日壁纸。请检查您的网络连接状况,然后重试。"</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"设备上的壁纸"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"删除"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"修改"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"要从您的设备中删除此壁纸吗?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"返回"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"返回"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"修改"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"下载"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"幻灯片壁纸"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"上一页"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"壁纸"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"壁纸预览"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"锁定屏幕壁纸预览"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"主屏幕壁纸预览"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"该集合不存在"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"请退出分屏模式并重试"</string>
<string name="cancel" msgid="4970902691067201584">"取消"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"隐藏界面预览"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"界面在预览中处于隐藏状态。点按两次即可取消隐藏"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"显示界面预览"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"预览控件已显示。点按两次即可隐藏"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"隐藏预览控件"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"预览控件已隐藏。点按两次即可显示"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"显示预览控件"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"隐藏壁纸信息"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"界面在预览中处于显示状态。点按两次即可隐藏"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"更换壁纸"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"锁定屏幕壁纸预览"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"要重置更改吗?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"您所做的更改将不会保存"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"更多壁纸"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"壁纸“%1$s”"</string>
</resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 4a3cd990..2b87cf73 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"桌布類別"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"設定桌布"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"設定桌布"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"正在設定桌布…"</string>
<string name="try_again" msgid="8278874823700921234">"再試一次"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"無法設定桌布。"</string>
@@ -39,8 +39,8 @@
<string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"上鎖畫面"</string>
<string name="set_wallpaper_both_destination" msgid="2536004558738350775">"主畫面和上鎖畫面"</string>
<string name="no_backup_image_wallpaper_label" msgid="6316627676107284851">"正在輪替顯示圖片桌布"</string>
- <string name="permission_needed_explanation" msgid="139166837541426823">"如要在此顯示目前的桌布,「<xliff:g id="APP_NAME">%1$s</xliff:g>」需要存取您裝置的儲存空間。"</string>
- <string name="permission_needed_explanation_go_to_settings" msgid="3923551582092599609">"如要在此顯示目前的桌布,「桌布」需要存取您裝置的儲存空間。\n\n如要變更此設定,請前往「桌布」應用程式資訊的「權限」部分。"</string>
+ <string name="permission_needed_explanation" msgid="139166837541426823">"如要在此顯示目前的桌布,「<xliff:g id="APP_NAME">%1$s</xliff:g>」需要存取你裝置的儲存空間。"</string>
+ <string name="permission_needed_explanation_go_to_settings" msgid="3923551582092599609">"如要在此顯示目前的桌布,「桌布」需要存取你裝置的儲存空間。\n\n如要變更此設定,請前往「桌布」應用程式資訊的「權限」部分。"</string>
<string name="permission_needed_allow_access_button_label" msgid="1943133660612924306">"允許存取"</string>
<string name="no_backup_image_wallpaper_description" msgid="8303268619408738057">"動態桌布服務可輪替顯示桌布"</string>
<string name="daily_refresh_tile_title" msgid="3270456074558525091">"每日桌布"</string>
@@ -49,15 +49,15 @@
<string name="start_rotation_dialog_wifi_only_option_message" msgid="3126269859713666225">"日後只透過 Wi-Fi 下載桌布"</string>
<string name="start_rotation_dialog_continue" msgid="276678987852274872">"繼續"</string>
<string name="start_rotation_progress_message" msgid="7872623873682262083">"正在下載首張桌布…"</string>
- <string name="start_rotation_error_message" msgid="3053799836719618972">"無法下載首張桌布。請檢查您的網絡設定,然後再試一次。"</string>
+ <string name="start_rotation_error_message" msgid="3053799836719618972">"無法下載首張桌布。請檢查你的網絡設定,然後再試一次。"</string>
<string name="start_rotation_dialog_body" msgid="7903554799046364916">"系統將會每日自動變更桌布"</string>
<string name="settings_button_label" msgid="8724734130079207955">"設定"</string>
<string name="explore" msgid="7468719504199497281">"探索"</string>
<string name="next_wallpaper" msgid="3911873152952596232">"下一張桌布"</string>
<string name="wallpaper_disabled_message" msgid="7309484130562148185">"此裝置已停用桌布設定功能"</string>
- <string name="wallpaper_disabled_by_administrator_message" msgid="1551430406714747884">"您的裝置管理員已停用桌布設定功能"</string>
+ <string name="wallpaper_disabled_by_administrator_message" msgid="1551430406714747884">"你的裝置管理員已停用桌布設定功能"</string>
<string name="wallpaper_set_successfully_message" msgid="2958998799111688578">"成功設定桌布"</string>
- <string name="wallpapers_unavailable_offline_message" msgid="8136405438621689532">"您需要連線至互聯網才能查看桌布。請連線並再試一次。"</string>
+ <string name="wallpapers_unavailable_offline_message" msgid="8136405438621689532">"你需要連線至互聯網才能查看桌布。請連線並再試一次。"</string>
<string name="currently_set_home_wallpaper_thumbnail" msgid="4022381436821898917">"目前已設定為主畫面桌布的縮圖"</string>
<string name="currently_set_lock_wallpaper_thumbnail" msgid="2094209303934569997">"目前已設定為上鎖畫面桌布的縮圖"</string>
<string name="currently_set_wallpaper_thumbnail" msgid="8651887838745545107">"目前已設定為桌布的縮圖"</string>
@@ -66,8 +66,9 @@
<string name="explore_lock_screen" msgid="268938342103703665">"探索上鎖畫面桌布"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"重新整理主畫面的每日桌布"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"重新整理每日桌布"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"桌布預覽畫面"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"正在重新整理每日桌布…"</string>
- <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"無法重新整理每日桌布。請檢查您的網絡連線,然後再試一次。"</string>
+ <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"無法重新整理每日桌布。請檢查你的網絡連線,然後再試一次。"</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"裝置上的桌布"</string>
<string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"在裝置上"</string>
<string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android 桌布"</string>
@@ -88,8 +89,8 @@
<string name="configure_wallpaper" msgid="849882179182976621">"設定…"</string>
<string name="delete_live_wallpaper" msgid="589212696102662329">"刪除"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"編輯"</string>
- <string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"要從您的裝置刪除此桌布嗎?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"返回"</string>
+ <string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"要從你的裝置刪除此桌布嗎?"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"向上導覽"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"編輯"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"下載"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"幻燈片放映桌布"</string>
@@ -99,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"返回"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"桌布"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"預覽桌布"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"上鎖畫面桌布預覽"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"主畫面桌布預覽"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"桌布集不存在"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"請退出分割螢幕模式,然後再試一次"</string>
<string name="cancel" msgid="4970902691067201584">"取消"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"隱藏使用者介面預覽"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"預覽入面隱藏咗使用者介面。㩒兩下就可以取消隱藏"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"顯示使用者介面預覽"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"顯示咗預覽控制項。㩒兩下就可以隱藏"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"隱藏預覽控制項"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"隱藏咗預覽控制項。㩒兩下就可以顯示"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"顯示預覽控制項"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"隱藏桌布資料"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"預覽入面顯示緊使用者介面。㩒兩下就可以隱藏"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"變更桌布"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"上鎖畫面桌布預覽"</string>
@@ -119,6 +128,7 @@
<string name="home_screen_tab" msgid="1080445697837877526">"主畫面"</string>
<string name="reset" msgid="4945445169532850631">"重設"</string>
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"要重設變更嗎?"</string>
- <string name="reset_confirmation_dialog_message" msgid="888669268626289603">"您的變更不會儲存"</string>
+ <string name="reset_confirmation_dialog_message" msgid="888669268626289603">"你的變更不會儲存"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"更多桌布"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"桌布 %1$s"</string>
</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 53bb9767..eaf72522 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"桌布類別"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"設定桌布"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"設為桌布"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"正在設定桌布…"</string>
<string name="try_again" msgid="8278874823700921234">"再試一次"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"無法設定桌布。"</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"目前設定的桌布"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"每日桌布"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"主畫面和螢幕鎖定"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"選擇桌布"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"建立桌布"</string>
<string name="home_screen_message" msgid="106444102822522813">"主畫面"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"螢幕鎖定"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"主畫面和螢幕鎖定"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"探索螢幕鎖定桌布"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"重新整理主畫面每日桌布"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"重新整理每日桌布"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"桌布預覽畫面"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"正在重新整理每日桌布…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"無法重新整理每日桌布。請檢查你的網路連線,然後再試一次。"</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"裝置桌布"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"刪除"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"編輯"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"要將這張桌布從裝置中刪除嗎?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"返回"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"前往頂端"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"編輯"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"下載"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"投影播放桌布"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"上一頁"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"桌布"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"桌布預覽"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"螢幕鎖定畫面桌布預覽"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"主畫面桌布預覽"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"這個系列不存在"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"請退出分割畫面模式,然後再試一次"</string>
<string name="cancel" msgid="4970902691067201584">"取消"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"隱藏使用者介面預覽畫面"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"預覽畫面隱藏了使用者介面,輕觸兩下即可取消隱藏"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"顯示使用者介面預覽畫面"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"預覽控制選項已顯示在畫面上。輕觸兩下即可隱藏"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"隱藏預覽控制選項"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"預覽控制選項已隱藏。輕觸兩下即可顯示"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"顯示預覽控制選項"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"隱藏桌布資訊"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"預覽畫面顯示了使用者介面,輕觸兩下即可隱藏"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"變更桌布"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"螢幕鎖定畫面桌布預覽"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"要重設變更嗎?"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"系統不會儲存你的變更"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"更多桌布"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"「%1$s」桌布"</string>
</resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 2b09256b..cefcfdff 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -21,7 +21,7 @@
<!-- no translation found for app_name (8773648973927541493) -->
<skip />
<string name="select_wallpaper_label" msgid="6989581259339646085">"Izigaba zesithombe sangemuva"</string>
- <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Setha isithombe sangemuva"</string>
+ <string name="set_wallpaper_button_text" msgid="5445978864530156290">"Hlela isithombe sangemuva"</string>
<string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Isetha isithombe sangemuva..."</string>
<string name="try_again" msgid="8278874823700921234">"Zama futhi"</string>
<string name="set_wallpaper_error_message" msgid="6819986999041085130">"Ayikwazi ukusetha isithombe sangemuva."</string>
@@ -29,10 +29,8 @@
<string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Manje isethiwe"</string>
<string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Isithombe sangemuva sansuku zonke"</string>
<string name="wallpaper_destination_both" msgid="1124197176741944063">"Ikhaya nesikrini sokukhiya"</string>
- <!-- no translation found for choose_a_wallpaper_section_title (1009823506890453891) -->
- <skip />
- <!-- no translation found for creative_wallpaper_title (8459226435723103934) -->
- <skip />
+ <string name="choose_a_wallpaper_section_title" msgid="1009823506890453891">"Khetha Isithombe Sangemuva"</string>
+ <string name="creative_wallpaper_title" msgid="8459226435723103934">"Sungula Isithombe Sangemuva"</string>
<string name="home_screen_message" msgid="106444102822522813">"Isikrini sasekhaya"</string>
<string name="lock_screen_message" msgid="1534506081955058013">"Khiya isikrini"</string>
<string name="home_and_lock_short_label" msgid="2937922943541927983">"Ikhaya nokukhiya"</string>
@@ -68,6 +66,7 @@
<string name="explore_lock_screen" msgid="268938342103703665">"Hlola isithombe sangemuva sokukhiya isikrini"</string>
<string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Vuselela isithombe sangemuva sasekhaya sansuku zonke"</string>
<string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Vuselela isithombe sangemuva sansuku zonke"</string>
+ <string name="preview_screen_description" msgid="3386387053327775919">"Isikrini sokubuka kuqala sangemuva"</string>
<string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Ivuselela isithombe sangemuva sansuku zonke…"</string>
<string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Yehlulekile ukuvuselela isithombe sangemuva sansuku zonke. Sicela uhlole ukuxhumeka kwakho kwenethiwekhi uphinde uzame futhi."</string>
<string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Izithombe zangemuva ezikudivayisi"</string>
@@ -91,7 +90,7 @@
<string name="delete_live_wallpaper" msgid="589212696102662329">"Susa"</string>
<string name="edit_live_wallpaper" msgid="3132060073690558045">"Hlela"</string>
<string name="delete_wallpaper_confirmation" msgid="1905114562243802354">"Sula lesi sithombe sangemuva kudivayisi yakho?"</string>
- <string name="bottom_action_bar_back" msgid="8237013112999946725">"Emuva"</string>
+ <string name="bottom_action_bar_back" msgid="2620581414970740784">"Funela phezulu"</string>
<string name="bottom_action_bar_edit" msgid="1214742990893082138">"Hlela"</string>
<string name="bottom_action_bar_download" msgid="3983122338076389421">"Landa"</string>
<string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Isithombe sangemuva sombukiso wesilayidi"</string>
@@ -101,11 +100,19 @@
<string name="previous_page_content_description" msgid="1138597031571078429">"Okwangaphambilini"</string>
<string name="wallpaper_title" msgid="6754214682228331092">"Isithombe sangemuva"</string>
<string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Ukubuka kuqala kwesithombe sangemuva"</string>
+ <string name="lock_wallpaper_preview_card_content_description" msgid="5236839857695985498">"Ukubuka kuqala kwesithombe sangemuva sokukhiya isikrini"</string>
+ <string name="home_wallpaper_preview_card_content_description" msgid="4059418716070821630">"Ukuhlola kuqala isithombe sangemuva sesikrini sasekhaya"</string>
<string name="collection_not_exist_msg" msgid="3504852962885064842">"Uqoqo alutholakali"</string>
+ <string name="wallpaper_exit_split_screen" msgid="1928870664619591636">"Sicela uphume kumodi yokuhlukanisa isikrini bese uzama futhi"</string>
<string name="cancel" msgid="4970902691067201584">"Khansela"</string>
<string name="hide_ui_preview_text" msgid="6766076482511252295">"Fihla ukuhlola kuqala kwe-UI"</string>
<string name="hint_hide_ui_preview" msgid="4527603797714586070">"I-UI ifihliwe ekuhloleni kuqala. Thepha kabili ukuze ungafihli"</string>
<string name="show_ui_preview_text" msgid="5993063062417070806">"Bonisa ukuhlola kuqala kwe-UI"</string>
+ <string name="hide_preview_controls_content_description" msgid="894958599274977655">"Izilawuli zokubuka kuqala ziyaboniswa. Thepha kabili ukuze ufihle"</string>
+ <string name="hide_preview_controls_action" msgid="3419260118386783295">"Fihla izilawuli zokubuka kuqala"</string>
+ <string name="show_preview_controls_content_description" msgid="908147864005440602">"Izilawuli zokubuka kuqala zifihliwe. Thepha kabili ukuze ubonise"</string>
+ <string name="show_preview_controls_action" msgid="7700775001986890400">"Bonisa izilawuli zokubuka kuqala"</string>
+ <string name="hide_wallpaper_info_action" msgid="6572492484253895374">"Fihla ulwazi lwesithombe sangemuva"</string>
<string name="hint_show_ui_preview" msgid="2744155435325318349">"I-UI ibonisiwe ekuhloleni kuqala. Thepha kabili ukuze ufihle"</string>
<string name="wallpaper_picker_entry_title" msgid="5185793991582084891">"Shintsha isithombe sangemuva"</string>
<string name="lockscreen_wallpaper_preview_card_content_description" msgid="2244890820627302245">"Ukubuka kuqala kwesithombe sangemuva sokukhiya isikrini"</string>
@@ -123,4 +130,5 @@
<string name="reset_confirmation_dialog_title" msgid="3391905685838213712">"Setha kabusha izinguquko"</string>
<string name="reset_confirmation_dialog_message" msgid="888669268626289603">"Izinguquko zakho ngeke zilondolozwe"</string>
<string name="more_wallpapers" msgid="8116268433411881705">"Izithombe zangemuva ezengeziwe"</string>
+ <string name="recent_wallpaper_label" msgid="3996353584371118367">"Izithombe zangemuva ze-%1$s"</string>
</resources>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 5b169960..6770937b 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -34,4 +34,12 @@
<attr name="non_selected_tab_drawable" format="reference" />
<attr name="non_selected_tab_text_color" format="color" />
</declare-styleable>
+
+ <declare-styleable name="WallpaperControlButtonGroup">
+ <attr name="orientation">
+ <enum name="horizontal" value="0" />
+ <enum name="vertical" value="1" />
+ </attr>
+ </declare-styleable>
+
</resources> \ No newline at end of file
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 64799567..8ba305be 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -290,6 +290,20 @@
-->
<dimen name="screen_preview_height">380dp</dimen>
+ <!-- The space in between previews in the small preview screen on handheld -->
+ <dimen name="small_preview_space_between_previews_hh">10dp</dimen>
+
+ <!-- The padding on top of the previews in the small preview screen-->
+ <dimen name="small_preview_preview_top_padding">20dp</dimen>
+
+ <!-- The padding on bottom of the previews in the small preview screen-->
+ <dimen name="small_preview_preview_bottom_padding">20dp</dimen>
+
+ <!--
+ Space between the folded and unfolded previews on the small preview screen
+ -->
+ <dimen name="small_preview_inter_preview_margin">5dp</dimen>
+
<!--
Width of the screen preview. The height will be determined based on the aspect ratio of the
display.
@@ -332,4 +346,14 @@
<dimen name="touch_target_min_height">48dp</dimen>
<dimen name="touch_target_min_width">48dp</dimen>
+ <!-- Dimensions for small "dual" previews screen. -->
+ <dimen name="small_dual_preview_edge_space">18dp</dimen>
+
+ <!-- Dimensions for small preview screens -->
+ <dimen name="small_preview_button_padding_vertical">10dp</dimen>
+ <dimen name="small_preview_button_padding_horizontal">16dp</dimen>
+ <dimen name="small_preview_button_radius">15dp</dimen>
+
+
+
</resources>
diff --git a/res/values/ids.xml b/res/values/ids.xml
index 8db206d7..bfc04a99 100644
--- a/res/values/ids.xml
+++ b/res/values/ids.xml
@@ -20,4 +20,11 @@
<item name="foreground" type="id" />
<item name="text" type="id" />
<item name="selection_border" type="id" />
+
+ <!-- View id for the folded preview view in the small preview screen -->
+ <item name="small_preview_folded_preview" type="id" />
+
+ <!-- View id for the unfolded preview view in the small preview screen -->
+ <item name="small_preview_unfolded_preview" type="id" />
+
</resources> \ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 560edc32..3e0a6d06 100755
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -333,7 +333,7 @@
<string name="delete_wallpaper_confirmation">Delete this wallpaper from your device?</string>
<!-- Content description of back button on the bottom action bar. [CHAR LIMIT=30] -->
- <string name="bottom_action_bar_back">Back</string>
+ <string name="bottom_action_bar_back">Navigate up</string>
<!-- Content description of edit button on the bottom action bar. [CHAR LIMIT=30] -->
<string name="bottom_action_bar_edit">Edit</string>
@@ -496,4 +496,12 @@
[CHAR LIMIT=128].
-->
<string name="more_wallpapers">More wallpapers</string>
+
+ <!--
+ Accessibility label for recent wallpaper collection items
+
+ [CHAR LIMIT=128].
+ -->
+ <string name="recent_wallpaper_label">Wallpaper %1$s</string>
+
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index cabd900b..8112e3a7 100755
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -257,4 +257,35 @@
<item name="android:textColor">@color/system_on_surface</item>
<item name="android:background">@drawable/secondary_dialog_button_background</item>
</style>
+
+ <!-- SetWallpaperPreviewDialog -->
+ <style name="SetWallpaperPreviewDialogTheme" parent="@android:style/Theme.DeviceDefault.Dialog.NoActionBar.MinWidth">
+ <item name="android:buttonBarPositiveButtonStyle">@style/SetWallpaperDialog.Button</item>
+ <item name="android:buttonBarNegativeButtonStyle">@style/SetWallpaperDialog.Button.OutlinedButton</item>
+ <item name="android:buttonBarNeutralButtonStyle">@style/SetWallpaperDialog.Button.TextButton</item>
+ </style>
+
+ <style name="SetWallpaperDialog"/>
+ <style name="SetWallpaperDialog.Button">
+ <item name="android:textColor">@color/system_on_primary</item>
+ <item name="android:background">@drawable/set_wallpaper_dialog_button</item>
+ </style>
+
+ <style name="SetWallpaperDialog.Button.OutlinedButton">
+ <item name="android:textColor">@color/system_on_surface</item>
+ <item name="android:background">@drawable/set_wallpaper_dialog_outlined_button</item>
+ </style>
+
+ <style name="SetWallpaperDialog.Button.TextButton">
+ <item name="android:textColor">@color/system_secondary</item>
+ <item name="android:background">@drawable/set_wallpaper_dialog_text_button</item>
+ </style>
+
+ <style name="TextAppearance.SetWallpaperDialog.Title" parent="@android:style/TextAppearance.DeviceDefault.Large">
+ <item name="android:textColor">@color/system_on_surface</item>
+ <item name="android:textSize">24sp</item>
+ <item name="android:lineHeight">32sp</item>
+ <item name="android:gravity">center</item>
+ <item name="android:textAlignment">center</item>
+ </style>
</resources>
diff --git a/src/com/android/customization/model/color/WallpaperColorResources.java b/src/com/android/customization/model/color/WallpaperColorResources.java
deleted file mode 100644
index dc3b9033..00000000
--- a/src/com/android/customization/model/color/WallpaperColorResources.java
+++ /dev/null
@@ -1,52 +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.app.WallpaperColors;
-import android.content.Context;
-import android.util.SparseIntArray;
-import android.widget.RemoteViews.ColorResources;
-
-import com.android.systemui.monet.ColorScheme;
-import com.android.systemui.monet.TonalPalette;
-
-/** A class to override colors in a {@link Context} with wallpaper colors. */
-public class WallpaperColorResources {
-
- private final SparseIntArray mColorOverlay = new SparseIntArray();
-
- public WallpaperColorResources(WallpaperColors wallpaperColors) {
- ColorScheme wallpaperColorScheme = new ColorScheme(wallpaperColors, /* darkTheme= */ false);
- addOverlayColor(wallpaperColorScheme.getNeutral1(), android.R.color.system_neutral1_10);
- addOverlayColor(wallpaperColorScheme.getNeutral2(), android.R.color.system_neutral2_10);
- addOverlayColor(wallpaperColorScheme.getAccent1(), android.R.color.system_accent1_10);
- addOverlayColor(wallpaperColorScheme.getAccent2(), android.R.color.system_accent2_10);
- addOverlayColor(wallpaperColorScheme.getAccent3(), android.R.color.system_accent3_10);
- }
-
- /** Applies the wallpaper color resources to the {@code context}. */
- public void apply(Context context) {
- ColorResources.create(context, mColorOverlay).apply(context);
- }
-
- private void addOverlayColor(TonalPalette colorSchemehue, int firstResourceColorId) {
- int resourceColorId = firstResourceColorId;
- for (int color : colorSchemehue.getAllShades()) {
- mColorOverlay.put(resourceColorId, color);
- resourceColorId++;
- }
- }
-}
diff --git a/src/com/android/customization/model/color/WallpaperColorResources.kt b/src/com/android/customization/model/color/WallpaperColorResources.kt
new file mode 100644
index 00000000..6a7b7edd
--- /dev/null
+++ b/src/com/android/customization/model/color/WallpaperColorResources.kt
@@ -0,0 +1,51 @@
+/*
+ * 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.R
+import android.app.WallpaperColors
+import android.content.Context
+import android.util.SparseIntArray
+import android.widget.RemoteViews.ColorResources
+import com.android.systemui.monet.ColorScheme
+import com.android.systemui.monet.TonalPalette
+
+/** A class to override colors in a [Context] with wallpaper colors. */
+open class WallpaperColorResources(wallpaperColors: WallpaperColors) {
+ private val colorOverlay = SparseIntArray()
+
+ init {
+ val wallpaperColorScheme = ColorScheme(wallpaperColors = wallpaperColors, darkTheme = false)
+ with(wallpaperColorScheme) {
+ addOverlayColor(neutral1, R.color.system_neutral1_10)
+ addOverlayColor(neutral2, R.color.system_neutral2_10)
+ addOverlayColor(accent1, R.color.system_accent1_10)
+ addOverlayColor(accent2, R.color.system_accent2_10)
+ addOverlayColor(accent3, R.color.system_accent3_10)
+ }
+ }
+
+ /** Applies the wallpaper color resources to the `context`. */
+ fun apply(context: Context) {
+ ColorResources.create(context, colorOverlay)?.apply(context)
+ }
+
+ fun addOverlayColor(colorSchemeHue: TonalPalette, firstResourceColorId: Int) {
+ colorSchemeHue.allShades.forEachIndexed { index, color ->
+ colorOverlay.put(firstResourceColorId + index, color)
+ }
+ }
+}
diff --git a/src/com/android/wallpaper/asset/CurrentWallpaperAssetVN.java b/src/com/android/wallpaper/asset/CurrentWallpaperAsset.java
index 0327436f..22a9e6c0 100755
--- a/src/com/android/wallpaper/asset/CurrentWallpaperAssetVN.java
+++ b/src/com/android/wallpaper/asset/CurrentWallpaperAsset.java
@@ -46,19 +46,19 @@ import java.security.MessageDigest;
import java.util.concurrent.ExecutionException;
/**
- * Asset representing the currently-set image wallpaper on N+ devices, including when daily rotation
+ * Asset representing the currently-set image wallpaper, including when daily rotation
* is set with a static wallpaper (but not when daily rotation uses a live wallpaper).
*/
-public class CurrentWallpaperAssetVN extends StreamableAsset {
+public class CurrentWallpaperAsset extends StreamableAsset {
- private static final String TAG = "CurrentWallpaperAssetVN";
+ private static final String TAG = "CurrentWallpaperAsset";
int mWallpaperId;
private final WallpaperManager mWallpaperManager;
@SetWallpaperFlags
private final int mWallpaperManagerFlag;
- public CurrentWallpaperAssetVN(Context context, @SetWallpaperFlags int wallpaperManagerFlag) {
- mWallpaperManager = WallpaperManager.getInstance(context);
+ public CurrentWallpaperAsset(Context context, @SetWallpaperFlags int wallpaperManagerFlag) {
+ mWallpaperManager = WallpaperManager.getInstance(context.getApplicationContext());
mWallpaperManagerFlag = wallpaperManagerFlag;
mWallpaperId = mWallpaperManager.getWallpaperId(mWallpaperManagerFlag);
}
@@ -68,8 +68,8 @@ public class CurrentWallpaperAssetVN extends StreamableAsset {
ParcelFileDescriptor pfd = getWallpaperPfd();
if (pfd == null) {
- Log.e(TAG, "ParcelFileDescriptor for wallpaper " + mWallpaperManagerFlag + " is null, unable "
- + "to open InputStream.");
+ Log.e(TAG, "ParcelFileDescriptor for wallpaper " + mWallpaperManagerFlag
+ + " is null, unable to open InputStream.");
return null;
}
@@ -86,8 +86,8 @@ public class CurrentWallpaperAssetVN extends StreamableAsset {
@Override
public boolean equals(Object object) {
- if (object instanceof CurrentWallpaperAssetVN) {
- CurrentWallpaperAssetVN otherAsset = (CurrentWallpaperAssetVN) object;
+ if (object instanceof CurrentWallpaperAsset) {
+ CurrentWallpaperAsset otherAsset = (CurrentWallpaperAsset) object;
return otherAsset.mWallpaperManagerFlag == mWallpaperManagerFlag
&& otherAsset.mWallpaperId == mWallpaperId;
@@ -129,7 +129,7 @@ public class CurrentWallpaperAssetVN extends StreamableAsset {
int unusedPlaceholderColor) {
Glide.with(context)
.asDrawable()
- .load(CurrentWallpaperAssetVN.this)
+ .load(CurrentWallpaperAsset.this)
.apply(RequestOptions.centerCropTransform())
.transition(DrawableTransitionOptions.withCrossFade())
.into(imageView);
@@ -145,7 +145,7 @@ public class CurrentWallpaperAssetVN extends StreamableAsset {
}
public Key getKey() {
- return new CurrentWallpaperVNKey(mWallpaperManager, mWallpaperManagerFlag);
+ return new CurrentWallpaperKey(mWallpaperManager, mWallpaperManagerFlag);
}
ParcelFileDescriptor getWallpaperPfd() {
@@ -153,15 +153,15 @@ public class CurrentWallpaperAssetVN extends StreamableAsset {
}
/**
- * Glide caching key for currently-set wallpapers on Android N or later using wallpaper IDs
- * provided by WallpaperManager.
+ * Glide caching key for currently-set wallpapers using wallpaper IDs provided by
+ * WallpaperManager.
*/
- private static final class CurrentWallpaperVNKey implements Key {
+ private static final class CurrentWallpaperKey implements Key {
private final WallpaperManager mWallpaperManager;
@SetWallpaperFlags
private final int mWallpaperFlag;
- CurrentWallpaperVNKey(WallpaperManager wallpaperManager,
+ CurrentWallpaperKey(WallpaperManager wallpaperManager,
@SetWallpaperFlags int wallpaperFlag) {
mWallpaperManager = wallpaperManager;
mWallpaperFlag = wallpaperFlag;
@@ -179,8 +179,8 @@ public class CurrentWallpaperAssetVN extends StreamableAsset {
@Override
public boolean equals(Object object) {
- if (object instanceof CurrentWallpaperVNKey) {
- CurrentWallpaperVNKey otherKey = (CurrentWallpaperVNKey) object;
+ if (object instanceof CurrentWallpaperKey) {
+ CurrentWallpaperKey otherKey = (CurrentWallpaperKey) object;
return getCacheKey().equals(otherKey.getCacheKey());
}
@@ -196,7 +196,7 @@ public class CurrentWallpaperAssetVN extends StreamableAsset {
* Returns an inexpensively calculated {@link String} suitable for use as a disk cache key.
*/
private String getCacheKey() {
- return "CurrentWallpaperVNKey{"
+ return "CurrentWallpaperKey{"
+ "flag=" + mWallpaperFlag
+ ",id=" + mWallpaperManager.getWallpaperId(mWallpaperFlag)
+ '}';
diff --git a/src/com/android/wallpaper/asset/CurrentWallpaperAssetVNLoader.java b/src/com/android/wallpaper/asset/CurrentWallpaperAssetLoader.java
index b8a76861..05838c5d 100755
--- a/src/com/android/wallpaper/asset/CurrentWallpaperAssetVNLoader.java
+++ b/src/com/android/wallpaper/asset/CurrentWallpaperAssetLoader.java
@@ -18,6 +18,8 @@ package com.android.wallpaper.asset;
import android.os.ParcelFileDescriptor;
import android.os.ParcelFileDescriptor.AutoCloseInputStream;
+import androidx.annotation.Nullable;
+
import com.bumptech.glide.Priority;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.Options;
@@ -28,39 +30,37 @@ import com.bumptech.glide.load.model.MultiModelLoaderFactory;
import java.io.InputStream;
-import androidx.annotation.Nullable;
-
/**
- * Glide custom model loader for {@link CurrentWallpaperAssetVN}.
+ * Glide custom model loader for {@link CurrentWallpaperAsset}.
*/
-public class CurrentWallpaperAssetVNLoader implements
- ModelLoader<CurrentWallpaperAssetVN, InputStream> {
+public class CurrentWallpaperAssetLoader implements
+ ModelLoader<CurrentWallpaperAsset, InputStream> {
@Override
- public boolean handles(CurrentWallpaperAssetVN currentWallpaperAssetVN) {
+ public boolean handles(CurrentWallpaperAsset currentWallpaperAsset) {
return true;
}
@Nullable
@Override
- public LoadData<InputStream> buildLoadData(CurrentWallpaperAssetVN currentWallpaperAssetVN,
+ public LoadData<InputStream> buildLoadData(CurrentWallpaperAsset currentWallpaperAsset,
int width, int height, Options options) {
- return new LoadData<>(currentWallpaperAssetVN.getKey(),
- new CurrentWallpaperAssetVNDataFetcher(currentWallpaperAssetVN));
+ return new LoadData<>(currentWallpaperAsset.getKey(),
+ new CurrentWallpaperAssetDataFetcher(currentWallpaperAsset));
}
/**
* Factory that constructs {@link ResourceAssetLoader} instances.
*/
- public static class CurrentWallpaperAssetVNLoaderFactory
- implements ModelLoaderFactory<CurrentWallpaperAssetVN, InputStream> {
- public CurrentWallpaperAssetVNLoaderFactory() {
+ public static class CurrentWallpaperAssetLoaderFactory
+ implements ModelLoaderFactory<CurrentWallpaperAsset, InputStream> {
+ public CurrentWallpaperAssetLoaderFactory() {
}
@Override
- public ModelLoader<CurrentWallpaperAssetVN, InputStream> build(
+ public ModelLoader<CurrentWallpaperAsset, InputStream> build(
MultiModelLoaderFactory multiFactory) {
- return new CurrentWallpaperAssetVNLoader();
+ return new CurrentWallpaperAssetLoader();
}
@Override
@@ -69,11 +69,11 @@ public class CurrentWallpaperAssetVNLoader implements
}
}
- private static class CurrentWallpaperAssetVNDataFetcher implements DataFetcher<InputStream> {
+ private static class CurrentWallpaperAssetDataFetcher implements DataFetcher<InputStream> {
- private CurrentWallpaperAssetVN mAsset;
+ private CurrentWallpaperAsset mAsset;
- public CurrentWallpaperAssetVNDataFetcher(CurrentWallpaperAssetVN asset) {
+ CurrentWallpaperAssetDataFetcher(CurrentWallpaperAsset asset) {
mAsset = asset;
}
@@ -82,8 +82,8 @@ public class CurrentWallpaperAssetVNLoader implements
ParcelFileDescriptor pfd = mAsset.getWallpaperPfd();
if (pfd == null) {
- callback.onLoadFailed(new Exception("ParcelFileDescriptor for wallpaper is null, unable "
- + "to open InputStream."));
+ callback.onLoadFailed(new Exception("ParcelFileDescriptor for wallpaper is null, "
+ + "unable to open InputStream."));
return;
}
diff --git a/src/com/android/wallpaper/asset/WallpaperGlideModule.java b/src/com/android/wallpaper/asset/WallpaperGlideModule.java
index 26f64c67..721da0ee 100755
--- a/src/com/android/wallpaper/asset/WallpaperGlideModule.java
+++ b/src/com/android/wallpaper/asset/WallpaperGlideModule.java
@@ -3,7 +3,7 @@ package com.android.wallpaper.asset;
import android.content.Context;
import android.graphics.drawable.Drawable;
-import com.android.wallpaper.asset.CurrentWallpaperAssetVNLoader.CurrentWallpaperAssetVNLoaderFactory;
+import com.android.wallpaper.asset.CurrentWallpaperAssetLoader.CurrentWallpaperAssetLoaderFactory;
import com.android.wallpaper.asset.LiveWallpaperThumbAssetLoader.LiveWallpaperThumbAssetLoaderFactory;
import com.android.wallpaper.asset.ResourceAssetLoader.ResourceAssetLoaderFactory;
import com.android.wallpaper.asset.SystemStaticAssetLoader.SystemStaticAssetLoaderFactory;
@@ -55,8 +55,8 @@ public class WallpaperGlideModule implements GlideModule {
new SystemStaticAssetLoaderFactory());
registry.append(LiveWallpaperThumbAsset.class, Drawable.class,
new LiveWallpaperThumbAssetLoaderFactory());
- registry.append(CurrentWallpaperAssetVN.class, InputStream.class,
- new CurrentWallpaperAssetVNLoaderFactory());
+ registry.append(CurrentWallpaperAsset.class, InputStream.class,
+ new CurrentWallpaperAssetLoaderFactory());
registry.append(Drawable.class, Drawable.class, new DrawableResourceDecoder());
}
}
diff --git a/src/com/android/wallpaper/config/BaseFlags.kt b/src/com/android/wallpaper/config/BaseFlags.kt
index e59e5159..6c713c6d 100644
--- a/src/com/android/wallpaper/config/BaseFlags.kt
+++ b/src/com/android/wallpaper/config/BaseFlags.kt
@@ -20,37 +20,37 @@ import android.content.Context
import com.android.systemui.shared.customization.data.content.CustomizationProviderClient
import com.android.systemui.shared.customization.data.content.CustomizationProviderClientImpl
import com.android.systemui.shared.customization.data.content.CustomizationProviderContract as Contract
+import com.android.wallpaper.Flags.multiCropPreviewUiFlag
+import com.android.wallpaper.Flags.refactorWallpaperCategoryFlag
+import com.android.wallpaper.Flags.wallpaperRestorerFlag
import com.android.wallpaper.module.InjectorProvider
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runBlocking
abstract class BaseFlags {
- var customizationProviderClient: CustomizationProviderClient? = null
+ private var customizationProviderClient: CustomizationProviderClient? = null
private var cachedFlags: List<CustomizationProviderClient.Flag>? = null
open fun isStagingBackdropContentEnabled() = false
open fun isWallpaperEffectEnabled() = false
open fun isWallpaperEffectModelDownloadEnabled() = true
open fun isInterruptModelDownloadEnabled() = false
+ open fun isWallpaperRestorerEnabled() = wallpaperRestorerFlag()
+ open fun isWallpaperCategoryRefactoringEnabled() = refactorWallpaperCategoryFlag()
- // TODO(b/285047815): Remove flag after adding wallpaper id for default static wallpaper
- open fun isWallpaperRestorerEnabled() = false
-
- /**
- * Enables new preview UI if both [isMultiCropEnabled] and this flag are true.
- *
- * TODO(b/291761856): Create SysUI flag for new preview UI
- */
- open fun isMultiCropPreviewUiEnabled() = false
+ /** Enables new preview UI if both [isMultiCropEnabled] and this flag are true. */
+ open fun isMultiCropPreviewUiEnabled() = multiCropPreviewUiFlag()
open fun isMultiCropEnabled() = WallpaperManager.isMultiCropEnabled()
- open fun isUseRevampedUiEnabled(context: Context): Boolean {
+ open fun isKeyguardQuickAffordanceEnabled(context: Context): Boolean {
return getCachedFlags(context)
.firstOrNull { flag ->
- flag.name == Contract.FlagsTable.FLAG_NAME_REVAMPED_WALLPAPER_UI
+ flag.name ==
+ Contract.FlagsTable.FLAG_NAME_CUSTOM_LOCK_SCREEN_QUICK_AFFORDANCES_ENABLED
}
?.value == true
}
+
open fun isCustomClocksEnabled(context: Context): Boolean {
return getCachedFlags(context)
.firstOrNull { flag ->
@@ -58,6 +58,7 @@ abstract class BaseFlags {
}
?.value == true
}
+
open fun isMonochromaticThemeEnabled(context: Context): Boolean {
return getCachedFlags(context)
.firstOrNull { flag -> flag.name == Contract.FlagsTable.FLAG_NAME_MONOCHROMATIC_THEME }
diff --git a/src/com/android/wallpaper/model/CreativeWallpaperInfo.java b/src/com/android/wallpaper/model/CreativeWallpaperInfo.java
index 717723e4..0fa61b1f 100644
--- a/src/com/android/wallpaper/model/CreativeWallpaperInfo.java
+++ b/src/com/android/wallpaper/model/CreativeWallpaperInfo.java
@@ -280,8 +280,9 @@ public class CreativeWallpaperInfo extends LiveWallpaperInfo {
}
@Override
- public boolean isApplied(WallpaperInfo currentWallpaper) {
- return super.isApplied(currentWallpaper) && mIsCurrent;
+ public boolean isApplied(@Nullable WallpaperInfo currentHomeWallpaper,
+ @Nullable WallpaperInfo currentLockWallpaper) {
+ return super.isApplied(currentHomeWallpaper, currentLockWallpaper) && mIsCurrent;
}
/**
@@ -408,8 +409,8 @@ public class CreativeWallpaperInfo extends LiveWallpaperInfo {
* @return an object of type CreativeWallpaperInfo
*/
@NonNull
- public static CreativeWallpaperInfo buildFromCursor(
- android.app.WallpaperInfo wallpaperInfo, Cursor cursor) {
+ public static CreativeWallpaperInfo buildFromCursor(WallpaperInfo wallpaperInfo,
+ Cursor cursor) {
String wallpaperTitle = cursor.getString(
cursor.getColumnIndex(WallpaperInfoContract.WALLPAPER_TITLE));
String wallpaperAuthor = null;
@@ -472,4 +473,48 @@ public class CreativeWallpaperInfo extends LiveWallpaperInfo {
return CreativeCategory.saveCreativeCategoryWallpaper(
context, this, saveWallpaperUri, destination);
}
+
+ public Uri getConfigPreviewUri() {
+ return mConfigPreviewUri;
+ }
+
+ public Uri getCleanPreviewUri() {
+ return mCleanPreviewUri;
+ }
+
+ public Uri getDeleteUri() {
+ return mDeleteUri;
+ }
+
+ public Uri getThumbnailUri() {
+ return mThumbnailUri;
+ }
+
+ public Uri getShareUri() {
+ return mShareUri;
+ }
+
+ public String getTitle() {
+ return mTitle;
+ }
+
+ public String getAuthor() {
+ return mAuthor;
+ }
+
+ public String getDescription() {
+ return mDescription;
+ }
+
+ public String getContentDescription() {
+ return mContentDescription;
+ }
+
+ public boolean isCurrent() {
+ return mIsCurrent;
+ }
+
+ public String getGroupName() {
+ return mGroupName;
+ }
}
diff --git a/src/com/android/wallpaper/model/CurrentWallpaperInfo.java b/src/com/android/wallpaper/model/CurrentWallpaperInfo.java
index 9671cab7..1f22310f 100755
--- a/src/com/android/wallpaper/model/CurrentWallpaperInfo.java
+++ b/src/com/android/wallpaper/model/CurrentWallpaperInfo.java
@@ -22,15 +22,13 @@ import android.app.WallpaperManager;
import android.content.Context;
import android.os.Parcel;
-import androidx.annotation.DrawableRes;
-import androidx.annotation.StringRes;
-
import com.android.wallpaper.asset.Asset;
import com.android.wallpaper.asset.BuiltInWallpaperAsset;
-import com.android.wallpaper.asset.CurrentWallpaperAssetVN;
+import com.android.wallpaper.asset.CurrentWallpaperAsset;
import com.android.wallpaper.module.InjectorProvider;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
/**
@@ -54,10 +52,6 @@ public class CurrentWallpaperInfo extends WallpaperInfo {
private final List<String> mAttributions;
private Asset mAsset;
private final String mActionUrl;
- @StringRes
- private int mActionLabelRes;
- @DrawableRes
- private int mActionIconRes;
private final String mCollectionId;
@SetWallpaperFlags
private final int mWallpaperManagerFlag;
@@ -69,15 +63,11 @@ public class CurrentWallpaperInfo extends WallpaperInfo {
* @param wallpaperManagerFlag Either SYSTEM or LOCK--the source of image data which this object
* represents.
*/
- public CurrentWallpaperInfo(List<String> attributions, String actionUrl,
- @StringRes int actionLabelRes, @DrawableRes int actionIconRes,
- String collectionId,
- @SetWallpaperFlags int wallpaperManagerFlag) {
+ public CurrentWallpaperInfo(List<String> attributions, String actionUrl, String collectionId,
+ @SetWallpaperFlags int wallpaperManagerFlag) {
mAttributions = attributions;
mWallpaperManagerFlag = wallpaperManagerFlag;
mActionUrl = actionUrl;
- mActionLabelRes = actionLabelRes;
- mActionIconRes = actionIconRes;
mCollectionId = collectionId;
}
@@ -89,8 +79,7 @@ public class CurrentWallpaperInfo extends WallpaperInfo {
mWallpaperManagerFlag = in.readInt();
mActionUrl = in.readString();
mCollectionId = in.readString();
- mActionLabelRes = in.readInt();
- mActionIconRes = in.readInt();
+ mCropHints.putAll(in.readSerializable(HashMap.class.getClassLoader(), HashMap.class));
}
@Override
@@ -126,16 +115,6 @@ public class CurrentWallpaperInfo extends WallpaperInfo {
return mCollectionId;
}
- @Override
- public int getActionIconRes(Context unused) {
- return mActionIconRes != 0 ? mActionIconRes : WallpaperInfo.getDefaultActionIcon();
- }
-
- @Override
- public int getActionLabelRes(Context unused) {
- return mActionLabelRes != 0 ? mActionLabelRes : WallpaperInfo.getDefaultActionLabel();
- }
-
/**
* Constructs and returns an Asset instance representing the currently-set wallpaper asset.
*/
@@ -147,7 +126,7 @@ public class CurrentWallpaperInfo extends WallpaperInfo {
return (isSystemBuiltIn)
? new BuiltInWallpaperAsset(context)
- : new CurrentWallpaperAssetVN(context, mWallpaperManagerFlag);
+ : new CurrentWallpaperAsset(context, mWallpaperManagerFlag);
}
@Override
@@ -157,8 +136,7 @@ public class CurrentWallpaperInfo extends WallpaperInfo {
parcel.writeInt(mWallpaperManagerFlag);
parcel.writeString(mActionUrl);
parcel.writeString(mCollectionId);
- parcel.writeInt(mActionLabelRes);
- parcel.writeInt(mActionIconRes);
+ parcel.writeSerializable(mCropHints);
}
@Override
@@ -172,4 +150,8 @@ public class CurrentWallpaperInfo extends WallpaperInfo {
public String getStoredWallpaperId(Context context) {
return null;
}
+
+ public int getWallpaperManagerFlag() {
+ return mWallpaperManagerFlag;
+ }
}
diff --git a/src/com/android/wallpaper/model/LiveWallpaperInfo.java b/src/com/android/wallpaper/model/LiveWallpaperInfo.java
index d7d0bda6..3c4a3a36 100755
--- a/src/com/android/wallpaper/model/LiveWallpaperInfo.java
+++ b/src/com/android/wallpaper/model/LiveWallpaperInfo.java
@@ -138,6 +138,23 @@ public class LiveWallpaperInfo extends WallpaperInfo {
return new LiveWallpaperInfo(wallpaperInfo, false, categoryId);
}
+ public android.app.WallpaperInfo getInfo() {
+ return mInfo;
+ }
+
+ public LiveWallpaperThumbAsset getThumbAsset() {
+ return mThumbAsset;
+ }
+
+ public boolean isVisibleTitle() {
+ return mVisibleTitle;
+ }
+
+ @Nullable
+ public String getCollectionId() {
+ return mCollectionId;
+ }
+
protected android.app.WallpaperInfo mInfo;
protected LiveWallpaperThumbAsset mThumbAsset;
protected boolean mVisibleTitle;
@@ -446,13 +463,20 @@ public class LiveWallpaperInfo extends WallpaperInfo {
}
/**
- * Returns true if this wallpaper is currently applied.
+ * Returns true if this wallpaper is currently applied to either home or lock screen.
*/
- public boolean isApplied(android.app.WallpaperInfo currentWallpaper) {
- return getWallpaperComponent() != null
- && currentWallpaper != null
- && TextUtils.equals(getWallpaperComponent().getServiceName(),
- currentWallpaper.getServiceName());
+ public boolean isApplied(@Nullable android.app.WallpaperInfo currentHomeWallpaper,
+ @Nullable android.app.WallpaperInfo currentLockWallpaper) {
+ android.app.WallpaperInfo component = getWallpaperComponent();
+ if (component == null) {
+ return false;
+ }
+ String serviceName = component.getServiceName();
+ boolean isAppliedToHome = currentHomeWallpaper != null
+ && TextUtils.equals(currentHomeWallpaper.getServiceName(), serviceName);
+ boolean isAppliedToLock = currentLockWallpaper != null
+ && TextUtils.equals(currentLockWallpaper.getServiceName(), serviceName);
+ return isAppliedToHome || isAppliedToLock;
}
/**
diff --git a/src/com/android/wallpaper/model/LiveWallpaperMetadata.java b/src/com/android/wallpaper/model/LiveWallpaperMetadata.java
index 6b0dd3a8..26ed9fc8 100644
--- a/src/com/android/wallpaper/model/LiveWallpaperMetadata.java
+++ b/src/com/android/wallpaper/model/LiveWallpaperMetadata.java
@@ -16,17 +16,21 @@
package com.android.wallpaper.model;
import android.app.WallpaperInfo;
+import android.graphics.Rect;
import androidx.annotation.Nullable;
+import com.android.wallpaper.model.wallpaper.ScreenOrientation;
+
import java.util.List;
+import java.util.Map;
/**
* Live wallpaper-specific wrapper for user-facing wallpaper metadata.
*/
public class LiveWallpaperMetadata extends WallpaperMetadata {
public LiveWallpaperMetadata(android.app.WallpaperInfo wallpaperComponent) {
- super(null, null, 0, 0, null, null, wallpaperComponent);
+ super(null, null, null, wallpaperComponent, null);
}
@Override
@@ -40,28 +44,18 @@ public class LiveWallpaperMetadata extends WallpaperMetadata {
}
@Override
- public int getActionLabelRes() {
- throw new UnsupportedOperationException("Not implemented for live wallpapers");
- }
-
- @Override
- public int getActionIconRes() {
+ public String getCollectionId() {
throw new UnsupportedOperationException("Not implemented for live wallpapers");
}
@Override
- public String getCollectionId() {
- throw new UnsupportedOperationException("Not implemented for live wallpapers");
+ public WallpaperInfo getWallpaperComponent() {
+ return mWallpaperComponent;
}
@Nullable
@Override
- public String getBackingFileName() {
+ public Map<ScreenOrientation, Rect> getWallpaperCropHints() {
throw new UnsupportedOperationException("Not implemented for live wallpapers");
}
-
- @Override
- public WallpaperInfo getWallpaperComponent() {
- return mWallpaperComponent;
- }
}
diff --git a/src/com/android/wallpaper/model/StaticWallpaperMetadata.kt b/src/com/android/wallpaper/model/StaticWallpaperMetadata.kt
index 293f99a1..d30479e5 100755
--- a/src/com/android/wallpaper/model/StaticWallpaperMetadata.kt
+++ b/src/com/android/wallpaper/model/StaticWallpaperMetadata.kt
@@ -15,17 +15,16 @@
*/
package com.android.wallpaper.model
-import androidx.annotation.DrawableRes
-import androidx.annotation.StringRes
+import android.graphics.Rect
+import com.android.wallpaper.model.wallpaper.ScreenOrientation
/** Metadata for the static image wallpaper to be saved to the system preferences. */
data class StaticWallpaperMetadata(
- val attributions: List<String>?,
+ val attributions: List<String?>?,
val actionUrl: String?,
- @StringRes val actionLabelRes: Int,
- @DrawableRes val actionIconRes: Int,
val collectionId: String?,
val hashCode: Long?,
val managerId: Int,
val remoteId: String,
+ val cropHints: Map<ScreenOrientation, Rect>?,
)
diff --git a/src/com/android/wallpaper/model/SystemStaticWallpaperInfo.java b/src/com/android/wallpaper/model/SystemStaticWallpaperInfo.java
index 35f3d079..90d2e3ba 100755
--- a/src/com/android/wallpaper/model/SystemStaticWallpaperInfo.java
+++ b/src/com/android/wallpaper/model/SystemStaticWallpaperInfo.java
@@ -257,16 +257,6 @@ public class SystemStaticWallpaperInfo extends WallpaperInfo {
}
@Override
- public int getActionLabelRes(Context context) {
- return WallpaperInfo.getDefaultActionLabel();
- }
-
- @Override
- public int getActionIconRes(Context context) {
- return WallpaperInfo.getDefaultActionIcon();
- }
-
- @Override
public void showPreview(Activity srcActivity, InlinePreviewIntentFactory factory,
int requestCode, boolean isAssetIdPresent) {
srcActivity.startActivityForResult(factory.newIntent(srcActivity, this,
diff --git a/src/com/android/wallpaper/model/WallpaperInfo.java b/src/com/android/wallpaper/model/WallpaperInfo.java
index 638dba6f..31cb3678 100755
--- a/src/com/android/wallpaper/model/WallpaperInfo.java
+++ b/src/com/android/wallpaper/model/WallpaperInfo.java
@@ -21,6 +21,7 @@ import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Color;
+import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Parcel;
@@ -28,13 +29,14 @@ import android.os.Parcelable;
import androidx.annotation.DrawableRes;
import androidx.annotation.IntDef;
-import androidx.annotation.StringRes;
-import com.android.wallpaper.R;
import com.android.wallpaper.asset.Asset;
+import com.android.wallpaper.model.wallpaper.ScreenOrientation;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.PriorityQueue;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
@@ -51,6 +53,8 @@ public abstract class WallpaperInfo implements Parcelable {
private PriorityQueue<String> mEffectNames = new PriorityQueue<>();
+ protected final HashMap<Integer, String> mCropHints = new HashMap<>();
+
public WallpaperInfo() {
}
@@ -65,16 +69,6 @@ public abstract class WallpaperInfo implements Parcelable {
parcel.writeInt(mColorInfo.getPlaceholderColor());
}
- @DrawableRes
- public static int getDefaultActionIcon() {
- return R.drawable.ic_explore_24px;
- }
-
- @StringRes
- public static int getDefaultActionLabel() {
- return R.string.explore;
- }
-
public static final int BACKUP_NOT_ALLOWED = 0;
public static final int BACKUP_ALLOWED = 1;
@@ -124,19 +118,6 @@ public abstract class WallpaperInfo implements Parcelable {
* Returns the icon to use to represent the action link corresponding to
* {@link #getActionUrl(Context)}
*/
- @DrawableRes
- public int getActionIconRes(Context context) {
- return getDefaultActionIcon();
- }
-
- /**
- * Returns the label to use for the action link corresponding to
- * {@link #getActionUrl(Context)}
- */
- @StringRes
- public int getActionLabelRes(Context context) {
- return getDefaultActionLabel();
- }
/**
* @param context
@@ -320,6 +301,30 @@ public abstract class WallpaperInfo implements Parcelable {
return Resources.ID_NULL;
}
+ /** Sets the crop {@link Rect} of each {@link ScreenOrientation} for this wallpaper. */
+ public void setWallpaperCropHints(Map<ScreenOrientation, Rect> cropHints) {
+ if (cropHints == null) {
+ return;
+ }
+
+ cropHints.forEach((orientation, rect) -> {
+ if (rect != null) {
+ mCropHints.put(orientation.ordinal(),
+ rect.flattenToString());
+ }
+ });
+ }
+
+ /** Returns the crop {@link Rect} of each {@link ScreenOrientation} for this wallpaper. */
+ public Map<ScreenOrientation, Rect> getWallpaperCropHints() {
+ Map<ScreenOrientation, Rect> cropHints = new HashMap<>();
+ mCropHints.forEach(
+ (orientation, rect) -> cropHints.put(
+ ScreenOrientation.getEntries().get(orientation),
+ Rect.unflattenFromString(rect)));
+ return cropHints;
+ }
+
/**
* Inner class to keep wallpaper colors and placeholder color.
*/
@@ -350,4 +355,8 @@ public abstract class WallpaperInfo implements Parcelable {
return mPlaceholderColor;
}
}
+
+ public ColorInfo getColorInfo() {
+ return mColorInfo;
+ }
}
diff --git a/src/com/android/wallpaper/model/WallpaperMetadata.java b/src/com/android/wallpaper/model/WallpaperMetadata.java
index 2e6b2734..2ac7c491 100755
--- a/src/com/android/wallpaper/model/WallpaperMetadata.java
+++ b/src/com/android/wallpaper/model/WallpaperMetadata.java
@@ -16,12 +16,14 @@
package com.android.wallpaper.model;
import android.app.WallpaperInfo;
+import android.graphics.Rect;
-import androidx.annotation.DrawableRes;
import androidx.annotation.Nullable;
-import androidx.annotation.StringRes;
+
+import com.android.wallpaper.model.wallpaper.ScreenOrientation;
import java.util.List;
+import java.util.Map;
/**
* Lightweight wrapper for user-facing wallpaper metadata.
@@ -31,23 +33,16 @@ public class WallpaperMetadata {
private final List<String> mAttributions;
private final String mActionUrl;
private final String mCollectionId;
- private final String mBackingFileName;
+ @Nullable private final Map<ScreenOrientation, Rect> mCropHints;
protected final android.app.WallpaperInfo mWallpaperComponent;
- @StringRes private final int mActionLabelRes;
- @DrawableRes private final int mActionIconRes;
- public WallpaperMetadata(List<String> attributions, String actionUrl,
- @StringRes int actionLabelRes,
- @DrawableRes int actionIconRes, String collectionId,
- String backingFileName,
- android.app.WallpaperInfo wallpaperComponent) {
+ public WallpaperMetadata(List<String> attributions, String actionUrl, String collectionId,
+ android.app.WallpaperInfo wallpaperComponent, Map<ScreenOrientation, Rect> cropHints) {
mAttributions = attributions;
mActionUrl = actionUrl;
- mActionLabelRes = actionLabelRes;
- mActionIconRes = actionIconRes;
mCollectionId = collectionId;
- mBackingFileName = backingFileName;
mWallpaperComponent = wallpaperComponent;
+ mCropHints = cropHints;
}
/**
@@ -65,22 +60,6 @@ public class WallpaperMetadata {
}
/**
- * Returns the wallpaper's action label.
- */
- @StringRes
- public int getActionLabelRes() {
- return mActionLabelRes;
- }
-
- /**
- * Returns the wallpaper's action icon.
- */
- @DrawableRes
- public int getActionIconRes() {
- return mActionIconRes;
- }
-
- /**
* Returns the wallpaper's collection ID or null if there is none.
*/
public String getCollectionId() {
@@ -88,19 +67,20 @@ public class WallpaperMetadata {
}
/**
- * Returns the name of a private file corresponding to a copy of the full image used as
- * wallpaper if this is a static wallpaper.
- */
- @Nullable
- public String getBackingFileName() {
- return mBackingFileName;
- }
-
- /**
* Returns the {@link android.app.WallpaperInfo} if a live wallpaper, or null if the metadata
* describes an image wallpaper.
*/
public WallpaperInfo getWallpaperComponent() {
throw new UnsupportedOperationException("Not implemented for static wallpapers");
}
+
+ /**
+ * Returns the crop {@link Rect} of each {@link ScreenOrientation} for this wallpaper.
+ *
+ * <p>Live wallpaper metadata should return null.
+ */
+ @Nullable
+ public Map<ScreenOrientation, Rect> getWallpaperCropHints() {
+ return mCropHints;
+ }
}
diff --git a/src/com/android/wallpaper/model/category /CollectionCategoryData.kt b/src/com/android/wallpaper/model/category /CollectionCategoryData.kt
new file mode 100644
index 00000000..8069d1bb
--- /dev/null
+++ b/src/com/android/wallpaper/model/category /CollectionCategoryData.kt
@@ -0,0 +1,29 @@
+/*
+ * Copyright 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.model.category
+
+import com.android.wallpaper.asset.Asset
+import com.android.wallpaper.model.wallpaper.WallpaperModel
+
+/** Represents set of attributes that depict a collection of wallpapers. */
+data class CollectionCategoryData(
+ val wallpaperModels: List<WallpaperModel>,
+ val thumbAsset: Asset,
+ val collectionName: String,
+ val rotationEnabled: Boolean,
+ val isSingleWallpaperCategory: Boolean
+)
diff --git a/src/com/android/wallpaper/model/category /CommonCategoryData.kt b/src/com/android/wallpaper/model/category /CommonCategoryData.kt
new file mode 100644
index 00000000..bf28bb61
--- /dev/null
+++ b/src/com/android/wallpaper/model/category /CommonCategoryData.kt
@@ -0,0 +1,20 @@
+/*
+ * Copyright 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.model.category
+
+/** Represents set of attributes that are common for all categories. */
+data class CommonCategoryData(val title: String, val collectionId: String, val priority: Int)
diff --git a/src/com/android/wallpaper/model/category /ImageCategoryData.kt b/src/com/android/wallpaper/model/category /ImageCategoryData.kt
new file mode 100644
index 00000000..4d2b7cb6
--- /dev/null
+++ b/src/com/android/wallpaper/model/category /ImageCategoryData.kt
@@ -0,0 +1,23 @@
+/*
+ * Copyright 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.model.category
+
+/**
+ * Represents set of attributes for depicting the block used for accessing personal photos on
+ * device.
+ */
+data class ImageCategoryData(val overlayIconResId: Int)
diff --git a/src/com/android/wallpaper/model/category /ThirdPartyCategoryData.kt b/src/com/android/wallpaper/model/category /ThirdPartyCategoryData.kt
new file mode 100644
index 00000000..0db67661
--- /dev/null
+++ b/src/com/android/wallpaper/model/category /ThirdPartyCategoryData.kt
@@ -0,0 +1,25 @@
+/*
+ * Copyright 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.model.category
+
+import android.content.pm.ResolveInfo
+
+/**
+ * Represents set of attributes required for displaying a 3rd party wallpaper app installed on
+ * device.
+ */
+data class ThirdPartyCategoryData(val resolveInfo: ResolveInfo)
diff --git a/src/com/android/wallpaper/model/wallpaper/CommonWallpaperData.kt b/src/com/android/wallpaper/model/wallpaper/CommonWallpaperData.kt
index 0ee37d1a..306e729f 100644
--- a/src/com/android/wallpaper/model/wallpaper/CommonWallpaperData.kt
+++ b/src/com/android/wallpaper/model/wallpaper/CommonWallpaperData.kt
@@ -21,10 +21,10 @@ import com.android.wallpaper.asset.Asset
/** Represents set of attributes that are common for all wallpapers. */
data class CommonWallpaperData(
val id: WallpaperId,
- val title: String,
- val collectionId: String,
- val attributions: List<Pair<String, String>>,
+ val title: String?,
+ val attributions: List<String?>?,
+ val exploreActionUrl: String?,
val thumbAsset: Asset,
val placeholderColorInfo: ColorInfo,
- var destination: Destination
+ var destination: Destination,
)
diff --git a/src/com/android/wallpaper/model/wallpaper/CreativeWallpaperData.kt b/src/com/android/wallpaper/model/wallpaper/CreativeWallpaperData.kt
index 1719c88a..ea1158b7 100644
--- a/src/com/android/wallpaper/model/wallpaper/CreativeWallpaperData.kt
+++ b/src/com/android/wallpaper/model/wallpaper/CreativeWallpaperData.kt
@@ -29,5 +29,4 @@ data class CreativeWallpaperData(
val description: String,
val contentDescription: String,
val isCurrent: String,
- val groupName: String
)
diff --git a/src/com/android/wallpaper/model/wallpaper/DownloadableWallpaperData.kt b/src/com/android/wallpaper/model/wallpaper/DownloadableWallpaperData.kt
new file mode 100644
index 00000000..04ff8c60
--- /dev/null
+++ b/src/com/android/wallpaper/model/wallpaper/DownloadableWallpaperData.kt
@@ -0,0 +1,28 @@
+/*
+ * Copyright 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.model.wallpaper
+
+import android.app.WallpaperInfo
+
+/** Represents set of attributes that are needed for a wallpaper that is downloadable. */
+data class DownloadableWallpaperData(
+ val groupName: String,
+ val systemWallpaperInfo: WallpaperInfo,
+ val isTitleVisible: Boolean,
+ val isApplied: Boolean,
+ val effectNames: String?,
+)
diff --git a/src/com/android/wallpaper/model/wallpaper/FoldableDisplay.kt b/src/com/android/wallpaper/model/wallpaper/FoldableDisplay.kt
new file mode 100644
index 00000000..4001f835
--- /dev/null
+++ b/src/com/android/wallpaper/model/wallpaper/FoldableDisplay.kt
@@ -0,0 +1,21 @@
+/*
+ * Copyright 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.model.wallpaper
+
+enum class FoldableDisplay {
+ FOLDED,
+ UNFOLDED,
+}
diff --git a/src/com/android/wallpaper/model/wallpaper/ImageWallpaperData.kt b/src/com/android/wallpaper/model/wallpaper/ImageWallpaperData.kt
index 158266f9..b53b7a7c 100644
--- a/src/com/android/wallpaper/model/wallpaper/ImageWallpaperData.kt
+++ b/src/com/android/wallpaper/model/wallpaper/ImageWallpaperData.kt
@@ -22,4 +22,4 @@ import android.net.Uri
* Represents data that is specific only for image wallpapers (i.e. wallpapers that are fetched from
* local storage through the MyPhotos block in WallpaperPicker)
*/
-data class ImageWallpaperData(val mUri: Uri)
+data class ImageWallpaperData(val uri: Uri)
diff --git a/src/com/android/wallpaper/model/wallpaper/LiveWallpaperData.kt b/src/com/android/wallpaper/model/wallpaper/LiveWallpaperData.kt
index e3332058..5a3e7d5a 100644
--- a/src/com/android/wallpaper/model/wallpaper/LiveWallpaperData.kt
+++ b/src/com/android/wallpaper/model/wallpaper/LiveWallpaperData.kt
@@ -21,9 +21,8 @@ import android.app.WallpaperInfo
/** Represents set of attributes that are specific to live wallpapers. */
data class LiveWallpaperData(
val groupName: String,
- val isDownloadable: Boolean,
val systemWallpaperInfo: WallpaperInfo,
val isTitleVisible: Boolean,
- val isSystemApp: Boolean,
val isApplied: Boolean,
+ val effectNames: String?
)
diff --git a/src/com/android/wallpaper/model/wallpaper/PreviewPagerPage.kt b/src/com/android/wallpaper/model/wallpaper/PreviewPagerPage.kt
new file mode 100644
index 00000000..3a9cea7b
--- /dev/null
+++ b/src/com/android/wallpaper/model/wallpaper/PreviewPagerPage.kt
@@ -0,0 +1,9 @@
+package com.android.wallpaper.model.wallpaper
+
+import com.android.wallpaper.module.CustomizationSections.Screen
+
+/** Pages on the small preview pager and their page position as ordinal. */
+enum class PreviewPagerPage(val screen: Screen) {
+ LOCK_PREVIEW(Screen.LOCK_SCREEN),
+ HOME_PREVIEW(Screen.HOME_SCREEN),
+}
diff --git a/src/com/android/wallpaper/model/wallpaper/ScreenOrientation.kt b/src/com/android/wallpaper/model/wallpaper/ScreenOrientation.kt
new file mode 100644
index 00000000..c7ed0389
--- /dev/null
+++ b/src/com/android/wallpaper/model/wallpaper/ScreenOrientation.kt
@@ -0,0 +1,50 @@
+/*
+ * Copyright 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.model.wallpaper
+
+import android.graphics.Point
+
+/** Orientation of the screen. */
+enum class ScreenOrientation {
+ /** For screen of handheld, tablet, and outer screen of foldable, in portrait mode */
+ PORTRAIT,
+ /** For screen of handheld, tablet, and outer screen of foldable, in landscape mode */
+ LANDSCAPE,
+ /** For inner screen of foldable, in portrait mode */
+ UNFOLDED_PORTRAIT,
+ /** For inner screen of foldable, in landscape mode */
+ UNFOLDED_LANDSCAPE,
+}
+
+/**
+ * Gets the [ScreenOrientation] based on the display and its size.
+ *
+ * @param displaySize size of the display.
+ * @param foldableDisplay the display of [displaySize] on foldable devices, null for single display
+ * devices.
+ */
+fun getScreenOrientation(
+ displaySize: Point,
+ foldableDisplay: FoldableDisplay? = null,
+): ScreenOrientation {
+ return if (foldableDisplay == null || foldableDisplay == FoldableDisplay.FOLDED) {
+ if (displaySize.y >= displaySize.x) ScreenOrientation.PORTRAIT
+ else ScreenOrientation.LANDSCAPE
+ } else {
+ if (displaySize.y >= displaySize.x) ScreenOrientation.UNFOLDED_PORTRAIT
+ else ScreenOrientation.UNFOLDED_LANDSCAPE
+ }
+}
diff --git a/src/com/android/wallpaper/model/wallpaper/StaticWallpaperData.kt b/src/com/android/wallpaper/model/wallpaper/StaticWallpaperData.kt
index d4cb3045..0eca60f0 100644
--- a/src/com/android/wallpaper/model/wallpaper/StaticWallpaperData.kt
+++ b/src/com/android/wallpaper/model/wallpaper/StaticWallpaperData.kt
@@ -16,7 +16,11 @@
package com.android.wallpaper.model.wallpaper
+import android.graphics.Rect
import com.android.wallpaper.asset.Asset
/** Represents set of attributes that are needed for a static wallpaper. */
-data class StaticWallpaperData(val asset: Asset)
+data class StaticWallpaperData(
+ val asset: Asset,
+ val cropHints: Map<ScreenOrientation, Rect>? = null,
+)
diff --git a/src/com/android/wallpaper/model/wallpaper/WallpaperDestination.kt b/src/com/android/wallpaper/model/wallpaper/WallpaperDestination.kt
index f8f7cb3d..f27cec61 100644
--- a/src/com/android/wallpaper/model/wallpaper/WallpaperDestination.kt
+++ b/src/com/android/wallpaper/model/wallpaper/WallpaperDestination.kt
@@ -23,5 +23,5 @@ enum class Destination(val value: Int) {
* Depicts when the current wallpaperModel object is equivalent to FLAG_LOCK+FLAG_SYSTEM and
* wallpapermodel describes a wallpaper that's applied on both lockscreen and homescreen
*/
- APPLIED_TO_SYSTEM_LOCK(FLAG_SYSTEM + FLAG_LOCK)
+ APPLIED_TO_SYSTEM_LOCK(FLAG_SYSTEM or FLAG_LOCK)
}
diff --git a/src/com/android/wallpaper/model/wallpaper/WallpaperId.kt b/src/com/android/wallpaper/model/wallpaper/WallpaperId.kt
index 97fa57f7..2715b45a 100644
--- a/src/com/android/wallpaper/model/wallpaper/WallpaperId.kt
+++ b/src/com/android/wallpaper/model/wallpaper/WallpaperId.kt
@@ -22,5 +22,5 @@ import android.content.ComponentName
data class WallpaperId(
val componentName: ComponentName,
val uniqueId: String,
- val collectionId: String
+ val collectionId: String,
)
diff --git a/src/com/android/wallpaper/model/wallpaper/WallpaperModel.kt b/src/com/android/wallpaper/model/wallpaper/WallpaperModel.kt
index b3b0e647..ac33dd74 100644
--- a/src/com/android/wallpaper/model/wallpaper/WallpaperModel.kt
+++ b/src/com/android/wallpaper/model/wallpaper/WallpaperModel.kt
@@ -22,17 +22,25 @@ package com.android.wallpaper.model.wallpaper
* the specific type of wallpaper, the individual fields could be null or not null.
*/
sealed class WallpaperModel {
+
+ /**
+ * All [WallpaperModel] data classes contain commonWallpaperData property which contains common
+ * data amongst all [WallpaperModel] classes.
+ */
+ abstract val commonWallpaperData: CommonWallpaperData
+
data class LiveWallpaperModel(
- val commonWallpaperData: CommonWallpaperData,
- val liveWallpaperData: LiveWallpaperData?,
+ override val commonWallpaperData: CommonWallpaperData,
+ val liveWallpaperData: LiveWallpaperData,
val creativeWallpaperData: CreativeWallpaperData?,
val internalLiveWallpaperData: InternalLiveWallpaperData?
) : WallpaperModel()
data class StaticWallpaperModel(
- val commonWallpaperData: CommonWallpaperData,
- val staticWallpaperData: StaticWallpaperData?,
+ override val commonWallpaperData: CommonWallpaperData,
+ val staticWallpaperData: StaticWallpaperData,
val imageWallpaperData: ImageWallpaperData?,
- val networkWallpaperData: NetworkWallpaperData?
+ val networkWallpaperData: NetworkWallpaperData?,
+ val downloadableWallpaperData: DownloadableWallpaperData?,
) : WallpaperModel()
}
diff --git a/src/com/android/wallpaper/module/CurrentWallpaperInfoFactory.java b/src/com/android/wallpaper/module/CurrentWallpaperInfoFactory.java
index 07364cd0..e678faa3 100755
--- a/src/com/android/wallpaper/module/CurrentWallpaperInfoFactory.java
+++ b/src/com/android/wallpaper/module/CurrentWallpaperInfoFactory.java
@@ -15,6 +15,8 @@
*/
package com.android.wallpaper.module;
+import android.content.Context;
+
import androidx.annotation.Nullable;
import com.android.wallpaper.model.WallpaperInfo;
@@ -34,7 +36,8 @@ public interface CurrentWallpaperInfoFactory {
* @param forceRefresh Whether the factory should ignore cached copies of the WallpaperInfo(s) and
* presentation mode that represent the currently-set wallpaper.
*/
- void createCurrentWallpaperInfos(WallpaperInfoCallback callback, boolean forceRefresh);
+ void createCurrentWallpaperInfos(Context context, boolean forceRefresh,
+ WallpaperInfoCallback callback);
/**
* Clears cached wallpaper copies to let refresher load the latest wallpaper.
diff --git a/src/com/android/wallpaper/module/CustomizationSections.java b/src/com/android/wallpaper/module/CustomizationSections.java
index 01396f4d..bbd2e0f1 100644
--- a/src/com/android/wallpaper/module/CustomizationSections.java
+++ b/src/com/android/wallpaper/module/CustomizationSections.java
@@ -10,8 +10,8 @@ import androidx.lifecycle.LifecycleOwner;
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.picker.customization.data.repository.WallpaperColorsRepository;
import com.android.wallpaper.picker.customization.domain.interactor.WallpaperInteractor;
import com.android.wallpaper.picker.customization.ui.viewmodel.CustomizationPickerViewModel;
import com.android.wallpaper.util.DisplayUtils;
@@ -48,7 +48,7 @@ public interface CustomizationSections {
Screen screen,
FragmentActivity activity,
LifecycleOwner lifecycleOwner,
- WallpaperColorsViewModel wallpaperColorsViewModel,
+ WallpaperColorsRepository wallpaperColorsRepository,
PermissionRequester permissionRequester,
WallpaperPreviewNavigator wallpaperPreviewNavigator,
CustomizationSectionNavigationController sectionNavigationController,
diff --git a/src/com/android/wallpaper/module/DailyLoggingAlarmReceiver.java b/src/com/android/wallpaper/module/DailyLoggingAlarmReceiver.java
index fb1ba31a..aa78b980 100755
--- a/src/com/android/wallpaper/module/DailyLoggingAlarmReceiver.java
+++ b/src/com/android/wallpaper/module/DailyLoggingAlarmReceiver.java
@@ -18,36 +18,15 @@ package com.android.wallpaper.module;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
-import android.os.PowerManager;
-import android.os.PowerManager.WakeLock;
-import android.util.Log;
-import androidx.annotation.Nullable;
-
-import com.android.wallpaper.model.WallpaperMetadata;
-import com.android.wallpaper.module.WallpaperPreferences.PresentationMode;
-import com.android.wallpaper.module.WallpaperRefresher.RefreshListener;
+import com.android.wallpaper.module.logging.UserEventLogger;
import com.android.wallpaper.util.DiskBasedLogger;
-import java.util.Calendar;
-
/**
* Performs daily logging operations when alarm is received.
*/
public class DailyLoggingAlarmReceiver extends BroadcastReceiver {
- private static final String TAG = "DailyLoggingAlarm";
-
- /**
- * Releases the provided WakeLock if and only if it's currently held as to avoid throwing a
- * "WakeLock under-locked" RuntimeException.
- */
- private static void releaseWakeLock(WakeLock wakeLock) {
- if (wakeLock.isHeld()) {
- wakeLock.release();
- }
- }
-
@Override
public void onReceive(Context context, Intent intent) {
Context appContext = context.getApplicationContext();
@@ -55,120 +34,11 @@ public class DailyLoggingAlarmReceiver extends BroadcastReceiver {
UserEventLogger logger = injector.getUserEventLogger(appContext);
WallpaperPreferences preferences = injector.getPreferences(appContext);
- logger.logNumDailyWallpaperRotationsInLastWeek();
- logger.logNumDailyWallpaperRotationsPreviousDay();
- logger.logWallpaperPresentationMode();
logger.logSnapshot();
preferences.setLastDailyLogTimestamp(System.currentTimeMillis());
- logDailyWallpaperRotationStatus(appContext);
-
// Clear disk-based logs older than 7 days if they exist.
DiskBasedLogger.clearOldLogs(appContext);
}
-
- /**
- * If daily wallpapers are currently in effect and were enabled more than 24 hours ago, then log
- * the last-known rotation status as reported by the periodic background rotation components
- * (BackdropAlarmReceiver and BackdropRotationTask), or if there wasn't any status update in the
- * last 24 hours then log a "not attempted" status to the UserEventLogger.
- */
- private void logDailyWallpaperRotationStatus(Context appContext) {
- // Acquire a partial wakelock because logging the daily rotation requires doing some work
- // on another thread (via AsyncTask) after #onReceive returns, after which the kernel may
- // power down and prevent our daily rotation log from being sent.
- PowerManager powerManager = appContext.getSystemService(PowerManager.class);
- final WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
- wakeLock.acquire(10000 /* timeout */);
-
- final Injector injector = InjectorProvider.getInjector();
-
- // First check if rotation is still in effect.
- injector.getWallpaperRefresher(appContext).refresh(new RefreshListener() {
- @Override
- public void onRefreshed(WallpaperMetadata homeWallpaperMetadata,
- @Nullable WallpaperMetadata lockWallpaperMetadata,
- @PresentationMode int presentationMode) {
- // Don't log or do anything else if presentation mode is not rotating.
- if (presentationMode != WallpaperPreferences.PRESENTATION_MODE_ROTATING) {
- releaseWakeLock(wakeLock);
- return;
- }
-
- WallpaperPreferences preferences = injector.getPreferences(appContext);
-
- long dailyWallpaperEnabledTimestamp =
- preferences.getDailyWallpaperEnabledTimestamp();
- // Validate the daily wallpaper enabled timestamp.
- if (dailyWallpaperEnabledTimestamp < 0) {
- Log.e(TAG, "There's no valid daily wallpaper enabled timestamp");
- releaseWakeLock(wakeLock);
- return;
- }
-
- Calendar midnightYesterday = Calendar.getInstance();
- midnightYesterday.add(Calendar.DAY_OF_MONTH, -1);
- midnightYesterday.set(Calendar.HOUR_OF_DAY, 0);
- midnightYesterday.set(Calendar.MINUTE, 0);
-
- // Exclude rotations that were put into affect later than midnight yesterday
- // because the background task may not have had a chance to execute yet.
- if (dailyWallpaperEnabledTimestamp > midnightYesterday.getTimeInMillis()) {
- releaseWakeLock(wakeLock);
- return;
- }
-
- try {
- long lastRotationStatusTimestamp =
- preferences.getDailyWallpaperLastRotationStatusTimestamp();
-
- UserEventLogger logger = injector.getUserEventLogger(appContext);
-
- // If a rotation status was reported more recently than midnight yesterday,
- // then log it. Otherwise, log a "not attempted" rotation status.
- if (lastRotationStatusTimestamp > midnightYesterday.getTimeInMillis()) {
- int lastDailyWallpaperRotationStatus =
- preferences.getDailyWallpaperLastRotationStatus();
-
- logger.logDailyWallpaperRotationStatus(lastDailyWallpaperRotationStatus);
-
- // If the daily rotation status is "failed", increment the num days
- // failed in SharedPreferences and log it, otherwise reset the counter in
- // SharedPreferences to 0.
- if (UserEventLogger.ROTATION_STATUS_FAILED
- == lastDailyWallpaperRotationStatus) {
- preferences.incrementNumDaysDailyRotationFailed();
- logger.logNumDaysDailyRotationFailed(
- preferences.getNumDaysDailyRotationFailed());
- } else {
- preferences.resetNumDaysDailyRotationFailed();
- }
-
- // If there was a valid rotation status reported since midnight
- // yesterday, then reset the counter for consecutive days of "not
- // attempted".
- preferences.resetNumDaysDailyRotationNotAttempted();
- } else {
- logger.logDailyWallpaperRotationStatus(
- UserEventLogger.ROTATION_STATUS_NOT_ATTEMPTED);
-
- // Increment and log the consecutive # days in a row that daily rotation
- // was not attempted.
- preferences.incrementNumDaysDailyRotationNotAttempted();
- logger.logNumDaysDailyRotationNotAttempted(
- preferences.getNumDaysDailyRotationNotAttempted());
-
- // Reset the disk-based counter for number of consecutive days daily
- // rotation failed because if rotation was not attempted but restarts
- // tomorrow after a boot and fails then, we want to report that as 1 day
- // of failure instead of 3 consecutive days.
- preferences.resetNumDaysDailyRotationFailed();
- }
- } finally {
- releaseWakeLock(wakeLock);
- }
- }
- });
- }
}
diff --git a/src/com/android/wallpaper/module/DefaultCurrentWallpaperInfoFactory.java b/src/com/android/wallpaper/module/DefaultCurrentWallpaperInfoFactory.java
index f0b592e4..3a877f4c 100755
--- a/src/com/android/wallpaper/module/DefaultCurrentWallpaperInfoFactory.java
+++ b/src/com/android/wallpaper/module/DefaultCurrentWallpaperInfoFactory.java
@@ -16,9 +16,12 @@
package com.android.wallpaper.module;
import android.app.WallpaperManager;
+import android.content.ComponentName;
+import android.content.Context;
import androidx.annotation.Nullable;
+import com.android.wallpaper.config.BaseFlags;
import com.android.wallpaper.model.CurrentWallpaperInfo;
import com.android.wallpaper.model.LiveWallpaperMetadata;
import com.android.wallpaper.model.WallpaperInfo;
@@ -47,9 +50,11 @@ public class DefaultCurrentWallpaperInfoFactory implements CurrentWallpaperInfoF
}
@Override
- public synchronized void createCurrentWallpaperInfos(final WallpaperInfoCallback callback,
- boolean forceRefresh) {
- if (!forceRefresh && mHomeWallpaper != null
+ public synchronized void createCurrentWallpaperInfos(Context context, boolean forceRefresh,
+ WallpaperInfoCallback callback) {
+ boolean isHomeWallpaperSynced = homeWallpaperSynced(context);
+ boolean isLockWallpaperSynced = lockWallpaperSynced(context);
+ if (!forceRefresh && isHomeWallpaperSynced && isLockWallpaperSynced
&& mPresentationMode != WallpaperPreferences.PRESENTATION_MODE_ROTATING) {
callback.onWallpaperInfoCreated(mHomeWallpaper, mLockWallpaper, mPresentationMode);
return;
@@ -64,6 +69,9 @@ public class DefaultCurrentWallpaperInfoFactory implements CurrentWallpaperInfoF
mWallpaperRefresher.refresh(
(homeWallpaperMetadata, lockWallpaperMetadata, presentationMode) -> {
+ BaseFlags flags = InjectorProvider.getInjector().getFlags();
+ final boolean multiCropEnabled =
+ flags.isMultiCropEnabled() && flags.isMultiCropPreviewUiEnabled();
WallpaperInfo homeWallpaper;
if (homeWallpaperMetadata instanceof LiveWallpaperMetadata) {
homeWallpaper = mLiveWallpaperInfoFactory.getLiveWallpaperInfo(
@@ -72,10 +80,12 @@ public class DefaultCurrentWallpaperInfoFactory implements CurrentWallpaperInfoF
homeWallpaper = new CurrentWallpaperInfo(
homeWallpaperMetadata.getAttributions(),
homeWallpaperMetadata.getActionUrl(),
- homeWallpaperMetadata.getActionLabelRes(),
- homeWallpaperMetadata.getActionIconRes(),
homeWallpaperMetadata.getCollectionId(),
WallpaperManager.FLAG_SYSTEM);
+ if (multiCropEnabled) {
+ homeWallpaper.setWallpaperCropHints(
+ homeWallpaperMetadata.getWallpaperCropHints());
+ }
}
WallpaperInfo lockWallpaper = null;
@@ -89,10 +99,13 @@ public class DefaultCurrentWallpaperInfoFactory implements CurrentWallpaperInfoF
lockWallpaper = new CurrentWallpaperInfo(
lockWallpaperMetadata.getAttributions(),
lockWallpaperMetadata.getActionUrl(),
- lockWallpaperMetadata.getActionLabelRes(),
- lockWallpaperMetadata.getActionIconRes(),
lockWallpaperMetadata.getCollectionId(),
WallpaperManager.FLAG_LOCK);
+
+ if (multiCropEnabled) {
+ lockWallpaper.setWallpaperCropHints(
+ lockWallpaperMetadata.getWallpaperCropHints());
+ }
}
}
@@ -104,6 +117,57 @@ public class DefaultCurrentWallpaperInfoFactory implements CurrentWallpaperInfoF
});
}
+ /**
+ * We check 2 things in this function:
+ * 1. If mHomeWallpaper is null, the wallpaper is not initialized. Return false.
+ * 2. In the case when mHomeWallpaper is not null, we check if mHomeWallpaper is synced with the
+ * one from the wallpaper manager.
+ */
+ private boolean homeWallpaperSynced(Context context) {
+ if (mHomeWallpaper == null) {
+ return false;
+ }
+ return wallpaperSynced(context, mHomeWallpaper, WallpaperManager.FLAG_SYSTEM);
+ }
+
+ /**
+ * mLockWallpaper can be null even after initialization. We only check the case if the
+ * lockscreen wallpaper is synced.
+ */
+ private boolean lockWallpaperSynced(Context context) {
+ return wallpaperSynced(context, mLockWallpaper, WallpaperManager.FLAG_LOCK);
+ }
+
+ /**
+ * Check if the given wallpaper info is synced with the one from the wallpaper manager. We only
+ * try to get the underlying ComponentName from both sides.
+ * If both are null, it means both are static image wallpapers, or both are not set,
+ * which we consider synced and return true.
+ * If only of the them is null, it means one is static image wallpaper and another is live
+ * wallpaper. We should return false.
+ * If both are not null, we check if the two ComponentName(s) are equal.
+ */
+ private boolean wallpaperSynced(Context context, @Nullable WallpaperInfo wallpaperInfo,
+ int which) {
+ android.app.WallpaperInfo currentWallpaperInfo = WallpaperManager.getInstance(context)
+ .getWallpaperInfo(which);
+ ComponentName currentComponentName = currentWallpaperInfo != null
+ ? currentWallpaperInfo.getComponent() : null;
+ android.app.WallpaperInfo info = wallpaperInfo != null
+ ? wallpaperInfo.getWallpaperComponent() : null;
+ ComponentName homeComponentName = info != null
+ ? info.getComponent() : null;
+ if (currentComponentName == null) {
+ // If both are null, it's synced.
+ return homeComponentName == null;
+ } else if (homeComponentName == null) {
+ // currentComponentName not null and homeComponentName null. It's not synced.
+ return false;
+ } else {
+ return currentComponentName.equals(homeComponentName);
+ }
+ }
+
@Override
public void clearCurrentWallpaperInfos() {
mHomeWallpaper = null;
diff --git a/src/com/android/wallpaper/module/DefaultWallpaperPersister.java b/src/com/android/wallpaper/module/DefaultWallpaperPersister.java
index 4cf68430..2eeba49b 100755
--- a/src/com/android/wallpaper/module/DefaultWallpaperPersister.java
+++ b/src/com/android/wallpaper/module/DefaultWallpaperPersister.java
@@ -37,6 +37,7 @@ import android.util.Log;
import android.view.Display;
import android.view.WindowManager;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.android.wallpaper.asset.Asset;
@@ -75,6 +76,7 @@ public class DefaultWallpaperPersister implements WallpaperPersister {
private final DisplayUtils mDisplayUtils;
private final BitmapCropper mBitmapCropper;
private final WallpaperStatusChecker mWallpaperStatusChecker;
+ private final CurrentWallpaperInfoFactory mCurrentWallpaperInfoFactory;
private final boolean mIsRefactorSettingWallpaper;
private WallpaperInfo mWallpaperInfoInPreview;
@@ -88,6 +90,7 @@ public class DefaultWallpaperPersister implements WallpaperPersister {
DisplayUtils displayUtils,
BitmapCropper bitmapCropper,
WallpaperStatusChecker wallpaperStatusChecker,
+ CurrentWallpaperInfoFactory wallpaperInfoFactory,
boolean isRefactorSettingWallpaper
) {
mAppContext = context.getApplicationContext();
@@ -97,6 +100,7 @@ public class DefaultWallpaperPersister implements WallpaperPersister {
mDisplayUtils = displayUtils;
mBitmapCropper = bitmapCropper;
mWallpaperStatusChecker = wallpaperStatusChecker;
+ mCurrentWallpaperInfoFactory = wallpaperInfoFactory;
mIsRefactorSettingWallpaper = isRefactorSettingWallpaper;
}
@@ -204,51 +208,40 @@ public class DefaultWallpaperPersister implements WallpaperPersister {
@Override
public boolean setWallpaperInRotation(Bitmap wallpaperBitmap, List<String> attributions,
- int actionLabelRes, int actionIconRes, String actionUrl, String collectionId,
- String remoteId) {
+ String actionUrl, String collectionId, String remoteId) {
+ final int wallpaperId = cropAndSetWallpaperBitmapInRotationStatic(wallpaperBitmap,
+ attributions, actionUrl, collectionId, getDefaultWhichWallpaper());
+
+ if (wallpaperId == 0) {
+ return false;
+ }
- return setWallpaperInRotationStatic(wallpaperBitmap, attributions, actionUrl,
- actionLabelRes, actionIconRes, collectionId, remoteId);
+ return saveStaticWallpaperMetadata(attributions, actionUrl, collectionId, wallpaperId,
+ remoteId, DEST_HOME_SCREEN);
}
@Override
public int setWallpaperBitmapInNextRotation(Bitmap wallpaperBitmap, List<String> attributions,
String actionUrl, String collectionId) {
- return cropAndSetWallpaperBitmapInRotationStatic(wallpaperBitmap,
- attributions, actionUrl, collectionId);
+ // The very first time setting the rotation wallpaper, make sure we set for both so that:
+ // 1. The lock and home screen wallpaper become the same
+ // 2. Lock screen wallpaper becomes "unset" until the next time user set wallpaper solely
+ // for the lock screen
+ int whichWallpaper = WallpaperManager.FLAG_SYSTEM | WallpaperManager.FLAG_LOCK;
+ return cropAndSetWallpaperBitmapInRotationStatic(wallpaperBitmap, attributions, actionUrl,
+ collectionId, whichWallpaper);
}
@Override
public boolean finalizeWallpaperForNextRotation(List<String> attributions, String actionUrl,
- int actionLabelRes, int actionIconRes, String collectionId, int wallpaperId,
- String remoteId) {
- return saveStaticWallpaperMetadata(attributions, actionUrl, actionLabelRes,
- actionIconRes, collectionId, wallpaperId, remoteId, DEST_HOME_SCREEN);
- }
-
- /**
- * Sets wallpaper image and attributions when a static wallpaper is responsible for presenting
- * the current "daily wallpaper".
- */
- private boolean setWallpaperInRotationStatic(Bitmap wallpaperBitmap, List<String> attributions,
- String actionUrl, int actionLabelRes, int actionIconRes, String collectionId,
- String remoteId) {
- final int wallpaperId = cropAndSetWallpaperBitmapInRotationStatic(wallpaperBitmap,
- attributions, actionUrl, collectionId);
-
- if (wallpaperId == 0) {
- return false;
- }
-
- return saveStaticWallpaperMetadata(attributions, actionUrl, actionLabelRes, actionIconRes,
- collectionId, wallpaperId, remoteId, DEST_HOME_SCREEN);
+ String collectionId, int wallpaperId, String remoteId) {
+ return saveStaticWallpaperMetadata(attributions, actionUrl, collectionId, wallpaperId,
+ remoteId, DEST_HOME_SCREEN);
}
@Override
public boolean saveStaticWallpaperMetadata(List<String> attributions,
String actionUrl,
- int actionLabelRes,
- int actionIconRes,
String collectionId,
int wallpaperId,
String remoteId,
@@ -264,10 +257,6 @@ public class DefaultWallpaperPersister implements WallpaperPersister {
mWallpaperPreferences.setHomeWallpaperAttributions(attributions);
mWallpaperPreferences.setHomeWallpaperActionUrl(actionUrl);
- mWallpaperPreferences.setHomeWallpaperActionLabelRes(actionLabelRes);
- mWallpaperPreferences.setHomeWallpaperActionIconRes(actionIconRes);
- // Only set base image URL for static Backdrop images, not for rotation.
- mWallpaperPreferences.setHomeWallpaperBaseImageUrl(null);
mWallpaperPreferences.setHomeWallpaperCollectionId(collectionId);
mWallpaperPreferences.setHomeWallpaperRemoteId(remoteId);
}
@@ -280,8 +269,6 @@ public class DefaultWallpaperPersister implements WallpaperPersister {
mWallpaperPreferences.setLockWallpaperManagerId(wallpaperId);
mWallpaperPreferences.setLockWallpaperAttributions(attributions);
mWallpaperPreferences.setLockWallpaperActionUrl(actionUrl);
- mWallpaperPreferences.setLockWallpaperActionLabelRes(actionLabelRes);
- mWallpaperPreferences.setLockWallpaperActionIconRes(actionIconRes);
mWallpaperPreferences.setLockWallpaperCollectionId(collectionId);
mWallpaperPreferences.setLockWallpaperRemoteId(remoteId);
}
@@ -291,7 +278,7 @@ public class DefaultWallpaperPersister implements WallpaperPersister {
@Override
public boolean saveStaticWallpaperToPreferences(@Destination int destination,
- StaticWallpaperMetadata metadata) {
+ @NonNull StaticWallpaperMetadata metadata) {
if (destination == DEST_HOME_SCREEN || destination == DEST_BOTH) {
mWallpaperPreferences.clearHomeWallpaperMetadata();
mWallpaperPreferences.setHomeStaticImageWallpaperMetadata(metadata);
@@ -311,7 +298,8 @@ public class DefaultWallpaperPersister implements WallpaperPersister {
* @return wallpaper ID for the wallpaper bitmap.
*/
private int cropAndSetWallpaperBitmapInRotationStatic(Bitmap wallpaperBitmap,
- List<String> attributions, String actionUrl, String collectionId) {
+ List<String> attributions, String actionUrl, String collectionId,
+ int whichWallpaper) {
// Calculate crop and scale of the wallpaper to match the default one used in preview
Point wallpaperSize = new Point(wallpaperBitmap.getWidth(), wallpaperBitmap.getHeight());
Resources resources = mAppContext.getResources();
@@ -351,7 +339,6 @@ public class DefaultWallpaperPersister implements WallpaperPersister {
scaledCropRect.width(),
scaledCropRect.height());
}
- int whichWallpaper = getDefaultWhichWallpaper();
scaledCropRect = mWallpaperManager.isMultiCropEnabled() ? scaledCropRect : null;
int wallpaperId = setBitmapToWallpaperManager(wallpaperBitmap, scaledCropRect,
@@ -361,6 +348,7 @@ public class DefaultWallpaperPersister implements WallpaperPersister {
String.valueOf(wallpaperId), attributions, actionUrl, collectionId,
wallpaperBitmap, WallpaperColors.fromBitmap(wallpaperBitmap));
}
+ mCurrentWallpaperInfoFactory.clearCurrentWallpaperInfos();
return wallpaperId;
}
@@ -643,10 +631,6 @@ public class DefaultWallpaperPersister implements WallpaperPersister {
mWallpaperPreferences.getHomeWallpaperAttributions());
mWallpaperPreferences.setLockWallpaperActionUrl(
mWallpaperPreferences.getHomeWallpaperActionUrl());
- mWallpaperPreferences.setLockWallpaperActionLabelRes(
- mWallpaperPreferences.getHomeWallpaperActionLabelRes());
- mWallpaperPreferences.setLockWallpaperActionIconRes(
- mWallpaperPreferences.getHomeWallpaperActionIconRes());
mWallpaperPreferences.setLockWallpaperCollectionId(
mWallpaperPreferences.getHomeWallpaperCollectionId());
@@ -704,12 +688,7 @@ public class DefaultWallpaperPersister implements WallpaperPersister {
mWallpaperPreferences.setHomeWallpaperAttributions(
mWallpaper.getAttributions(mAppContext));
- mWallpaperPreferences.setHomeWallpaperBaseImageUrl(mWallpaper.getBaseImageUrl());
mWallpaperPreferences.setHomeWallpaperActionUrl(mWallpaper.getActionUrl(mAppContext));
- mWallpaperPreferences.setHomeWallpaperActionLabelRes(
- mWallpaper.getActionLabelRes(mAppContext));
- mWallpaperPreferences.setHomeWallpaperActionIconRes(
- mWallpaper.getActionIconRes(mAppContext));
mWallpaperPreferences.setHomeWallpaperCollectionId(
mWallpaper.getCollectionId(mAppContext));
mWallpaperPreferences.setHomeWallpaperRemoteId(mWallpaper.getWallpaperId());
@@ -725,10 +704,6 @@ public class DefaultWallpaperPersister implements WallpaperPersister {
mWallpaperPreferences.setLockWallpaperAttributions(
mWallpaper.getAttributions(mAppContext));
mWallpaperPreferences.setLockWallpaperActionUrl(mWallpaper.getActionUrl(mAppContext));
- mWallpaperPreferences.setLockWallpaperActionLabelRes(
- mWallpaper.getActionLabelRes(mAppContext));
- mWallpaperPreferences.setLockWallpaperActionIconRes(
- mWallpaper.getActionIconRes(mAppContext));
mWallpaperPreferences.setLockWallpaperCollectionId(
mWallpaper.getCollectionId(mAppContext));
mWallpaperPreferences.setLockWallpaperRemoteId(mWallpaper.getWallpaperId());
@@ -767,12 +742,12 @@ public class DefaultWallpaperPersister implements WallpaperPersister {
new StaticWallpaperMetadata(
mWallpaper.getAttributions(mAppContext),
mWallpaper.getActionUrl(mAppContext),
- mWallpaper.getActionLabelRes(mAppContext),
- mWallpaper.getActionIconRes(mAppContext),
mWallpaper.getCollectionId(mAppContext),
bitmapHash,
wallpaperId,
- mWallpaper.getWallpaperId()));
+ mWallpaper.getWallpaperId(),
+ // Always null cropHints as this path doesn't support multi-crop
+ /* cropHints= */ null));
if (destination == DEST_HOME_SCREEN || destination == DEST_BOTH) {
mWallpaperPreferences.storeLatestWallpaper(
diff --git a/src/com/android/wallpaper/module/DefaultWallpaperPreferences.java b/src/com/android/wallpaper/module/DefaultWallpaperPreferences.java
deleted file mode 100755
index 7393a85b..00000000
--- a/src/com/android/wallpaper/module/DefaultWallpaperPreferences.java
+++ /dev/null
@@ -1,1073 +0,0 @@
-/*
- * Copyright (C) 2017 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.module;
-
-import android.app.WallpaperColors;
-import android.app.backup.BackupManager;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
-import android.graphics.Color;
-import android.text.TextUtils;
-import android.util.Log;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import com.android.wallpaper.model.StaticWallpaperMetadata;
-import com.android.wallpaper.module.WallpaperPersister.Destination;
-import com.android.wallpaper.module.WallpaperPreferenceKeys.NoBackupKeys;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-
-import java.io.File;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-import java.util.Locale;
-import java.util.TimeZone;
-
-/**
- * Default implementation that writes to and reads from SharedPreferences.
- */
-public class DefaultWallpaperPreferences implements WallpaperPreferences {
-
- public static final String PREFS_NAME = "wallpaper";
- public static final String NO_BACKUP_PREFS_NAME = "wallpaper-nobackup";
-
- private static final String TAG = "DefaultWPPreferences";
-
- protected SharedPreferences mSharedPrefs;
- protected SharedPreferences mNoBackupPrefs;
- protected Context mContext;
-
- // Keep a strong reference to this OnSharedPreferenceChangeListener to prevent the listener from
- // being garbage collected because SharedPreferences only holds a weak reference.
- private OnSharedPreferenceChangeListener mSharedPrefsChangedListener;
-
- public DefaultWallpaperPreferences(Context context) {
- mSharedPrefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
- mNoBackupPrefs = context.getSharedPreferences(NO_BACKUP_PREFS_NAME, Context.MODE_PRIVATE);
- if (mNoBackupPrefs.getAll().isEmpty() && !mSharedPrefs.getAll().isEmpty()) {
- upgradePrefs();
- }
- mContext = context.getApplicationContext();
-
- // Register a prefs changed listener so that all prefs changes trigger a backup event.
- final BackupManager backupManager = new BackupManager(context);
- mSharedPrefsChangedListener = (sharedPreferences, key) -> backupManager.dataChanged();
- mSharedPrefs.registerOnSharedPreferenceChangeListener(mSharedPrefsChangedListener);
- }
-
- /**
- * Move {@link NoBackupKeys} preferences that might have been in mSharedPrefs from previous
- * versions of the app into mNoBackupPrefs.
- */
- private void upgradePrefs() {
- SharedPreferences.Editor editor = mNoBackupPrefs.edit();
- if (mSharedPrefs.contains(
- NoBackupKeys.KEY_HOME_WALLPAPER_BASE_IMAGE_URL)) {
- editor.putString(NoBackupKeys.KEY_HOME_WALLPAPER_BASE_IMAGE_URL,
- mSharedPrefs.getString(NoBackupKeys.KEY_HOME_WALLPAPER_BASE_IMAGE_URL, null));
- }
- if (mSharedPrefs.contains(NoBackupKeys.KEY_HOME_WALLPAPER_MANAGER_ID)) {
- editor.putInt(NoBackupKeys.KEY_HOME_WALLPAPER_MANAGER_ID,
- mSharedPrefs.getInt(NoBackupKeys.KEY_HOME_WALLPAPER_MANAGER_ID, 0));
- }
- if (mSharedPrefs.contains(NoBackupKeys.KEY_HOME_WALLPAPER_REMOTE_ID)) {
- editor.putString(NoBackupKeys.KEY_HOME_WALLPAPER_REMOTE_ID,
- mSharedPrefs.getString(NoBackupKeys.KEY_HOME_WALLPAPER_REMOTE_ID, null));
- }
- if (mSharedPrefs.contains(
- NoBackupKeys.KEY_HOME_WALLPAPER_BACKING_FILE)) {
- editor.putString(NoBackupKeys.KEY_HOME_WALLPAPER_BACKING_FILE,
- mSharedPrefs.getString(NoBackupKeys.KEY_HOME_WALLPAPER_BACKING_FILE, null));
- }
- if (mSharedPrefs.contains(NoBackupKeys.KEY_LOCK_WALLPAPER_MANAGER_ID)) {
- editor.putInt(NoBackupKeys.KEY_LOCK_WALLPAPER_MANAGER_ID,
- mSharedPrefs.getInt(NoBackupKeys.KEY_LOCK_WALLPAPER_MANAGER_ID, 0));
- }
- if (mSharedPrefs.contains(
- NoBackupKeys.KEY_LOCK_WALLPAPER_BACKING_FILE)) {
- editor.putString(NoBackupKeys.KEY_LOCK_WALLPAPER_BACKING_FILE,
- mSharedPrefs.getString(NoBackupKeys.KEY_LOCK_WALLPAPER_BACKING_FILE, null));
- }
- if (mSharedPrefs.contains(NoBackupKeys.KEY_DAILY_ROTATION_TIMESTAMPS)) {
- editor.putString(NoBackupKeys.KEY_DAILY_ROTATION_TIMESTAMPS,
- mSharedPrefs.getString(NoBackupKeys.KEY_DAILY_ROTATION_TIMESTAMPS, null));
- }
- if (mSharedPrefs.contains(
- NoBackupKeys.KEY_DAILY_WALLPAPER_ENABLED_TIMESTAMP)) {
- editor.putLong(NoBackupKeys.KEY_DAILY_WALLPAPER_ENABLED_TIMESTAMP,
- mSharedPrefs.getLong(NoBackupKeys.KEY_DAILY_WALLPAPER_ENABLED_TIMESTAMP, -1));
- }
- if (mSharedPrefs.contains(NoBackupKeys.KEY_LAST_DAILY_LOG_TIMESTAMP)) {
- editor.putLong(NoBackupKeys.KEY_LAST_DAILY_LOG_TIMESTAMP,
- mSharedPrefs.getLong(NoBackupKeys.KEY_LAST_DAILY_LOG_TIMESTAMP, 0));
- }
- if (mSharedPrefs.contains(NoBackupKeys.KEY_LAST_APP_ACTIVE_TIMESTAMP)) {
- editor.putLong(NoBackupKeys.KEY_LAST_APP_ACTIVE_TIMESTAMP,
- mSharedPrefs.getLong(NoBackupKeys.KEY_LAST_APP_ACTIVE_TIMESTAMP, 0));
- }
- if (mSharedPrefs.contains(NoBackupKeys.KEY_LAST_ROTATION_STATUS)) {
- editor.putInt(NoBackupKeys.KEY_LAST_ROTATION_STATUS,
- mSharedPrefs.getInt(NoBackupKeys.KEY_LAST_ROTATION_STATUS, -1));
- }
- if (mSharedPrefs.contains(NoBackupKeys.KEY_LAST_ROTATION_STATUS_TIMESTAMP)) {
- editor.putLong(NoBackupKeys.KEY_LAST_ROTATION_STATUS_TIMESTAMP,
- mSharedPrefs.getLong(NoBackupKeys.KEY_LAST_ROTATION_STATUS_TIMESTAMP, 0));
- }
- if (mSharedPrefs.contains(NoBackupKeys.KEY_LAST_SYNC_TIMESTAMP)) {
- editor.putLong(NoBackupKeys.KEY_LAST_SYNC_TIMESTAMP,
- mSharedPrefs.getLong(NoBackupKeys.KEY_LAST_SYNC_TIMESTAMP, 0));
- }
- if (mSharedPrefs.contains(NoBackupKeys.KEY_PENDING_WALLPAPER_SET_STATUS)) {
- editor.putInt(NoBackupKeys.KEY_PENDING_WALLPAPER_SET_STATUS,
- mSharedPrefs.getInt(NoBackupKeys.KEY_PENDING_WALLPAPER_SET_STATUS,
- WALLPAPER_SET_NOT_PENDING));
- }
- if (mSharedPrefs.contains(NoBackupKeys.KEY_PENDING_DAILY_WALLPAPER_UPDATE_STATUS)) {
- editor.putInt(NoBackupKeys.KEY_PENDING_DAILY_WALLPAPER_UPDATE_STATUS,
- mSharedPrefs.getInt(NoBackupKeys.KEY_PENDING_DAILY_WALLPAPER_UPDATE_STATUS,
- DAILY_WALLPAPER_UPDATE_NOT_PENDING));
- }
- if (mSharedPrefs.contains(NoBackupKeys.KEY_NUM_DAYS_DAILY_ROTATION_FAILED)) {
- editor.putInt(NoBackupKeys.KEY_NUM_DAYS_DAILY_ROTATION_FAILED,
- mSharedPrefs.getInt(NoBackupKeys.KEY_NUM_DAYS_DAILY_ROTATION_FAILED, 0));
- }
- if (mSharedPrefs.contains(NoBackupKeys.KEY_NUM_DAYS_DAILY_ROTATION_NOT_ATTEMPTED)) {
- editor.putInt(NoBackupKeys.KEY_NUM_DAYS_DAILY_ROTATION_NOT_ATTEMPTED,
- mSharedPrefs.getInt(NoBackupKeys.KEY_NUM_DAYS_DAILY_ROTATION_NOT_ATTEMPTED, 0));
- }
- if (mSharedPrefs.contains(NoBackupKeys.KEY_HOME_WALLPAPER_SERVICE_NAME)) {
- editor.putString(NoBackupKeys.KEY_HOME_WALLPAPER_SERVICE_NAME,
- mSharedPrefs.getString(NoBackupKeys.KEY_HOME_WALLPAPER_SERVICE_NAME, null));
- }
-
- editor.apply();
- }
-
- private int getResIdPersistedByName(String key, String type) {
- String resName = mSharedPrefs.getString(key, null);
- if (resName == null) {
- return 0;
- }
- return mContext.getResources().getIdentifier(resName, type,
- mContext.getPackageName());
- }
-
- private void persistResIdByName(String key, int resId) {
- mSharedPrefs.edit().putString(key, getResName(resId)).apply();
- }
-
- private String getResName(int resId) {
- return mContext.getResources().getResourceName(resId);
- }
-
- @Override
- public int getWallpaperPresentationMode() {
- @PresentationMode
- int homeWallpaperPresentationMode = mSharedPrefs.getInt(
- WallpaperPreferenceKeys.KEY_WALLPAPER_PRESENTATION_MODE,
- WallpaperPreferences.PRESENTATION_MODE_STATIC);
- return homeWallpaperPresentationMode;
- }
-
- @Override
- public void setWallpaperPresentationMode(@PresentationMode int presentationMode) {
- mSharedPrefs.edit().putInt(
- WallpaperPreferenceKeys.KEY_WALLPAPER_PRESENTATION_MODE, presentationMode).apply();
- }
-
- @Override
- public List<String> getHomeWallpaperAttributions() {
- return Arrays.asList(
- mSharedPrefs.getString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_1, null),
- mSharedPrefs.getString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_2, null),
- mSharedPrefs.getString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_3, null));
-
- }
-
- @Override
- public void setHomeWallpaperAttributions(List<String> attributions) {
- SharedPreferences.Editor editor = mSharedPrefs.edit();
- if (attributions.size() > 0) {
- editor.putString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_1,
- attributions.get(0));
- }
- if (attributions.size() > 1) {
- editor.putString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_2,
- attributions.get(1));
- }
- if (attributions.size() > 2) {
- editor.putString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_3,
- attributions.get(2));
- }
- editor.apply();
- }
-
- @Override
- @Nullable
- public String getHomeWallpaperActionUrl() {
- return mSharedPrefs.getString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ACTION_URL, null);
- }
-
- @Override
- public void setHomeWallpaperActionUrl(String actionUrl) {
- mSharedPrefs.edit().putString(
- WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ACTION_URL, actionUrl).apply();
- }
-
- @Override
- public int getHomeWallpaperActionLabelRes() {
- // We need to store and read the resource names as their ids could change from build to
- // build and we might end up reading the wrong id
- return getResIdPersistedByName(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ACTION_LABEL_RES,
- "string");
- }
-
- @Override
- public void setHomeWallpaperActionLabelRes(int resId) {
- persistResIdByName(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ACTION_LABEL_RES, resId);
- }
-
- @Override
- public int getHomeWallpaperActionIconRes() {
- return getResIdPersistedByName(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ACTION_ICON_RES,
- "drawable");
- }
-
- @Override
- public void setHomeWallpaperActionIconRes(int resId) {
- persistResIdByName(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ACTION_ICON_RES, resId);
- }
-
- @Override
- public String getHomeWallpaperBaseImageUrl() {
- return mNoBackupPrefs.getString(
- NoBackupKeys.KEY_HOME_WALLPAPER_BASE_IMAGE_URL, null);
- }
-
- @Override
- public void setHomeWallpaperBaseImageUrl(String baseImageUrl) {
- mNoBackupPrefs.edit().putString(
- NoBackupKeys.KEY_HOME_WALLPAPER_BASE_IMAGE_URL, baseImageUrl)
- .apply();
- }
-
- @Override
- @Nullable
- public String getHomeWallpaperCollectionId() {
- return mSharedPrefs.getString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_COLLECTION_ID,
- null);
- }
-
- @Override
- public void setHomeWallpaperCollectionId(String collectionId) {
- mSharedPrefs.edit().putString(
- WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_COLLECTION_ID, collectionId).apply();
- }
-
- @Override
- @Nullable
- public String getHomeWallpaperBackingFileName() {
- return mNoBackupPrefs.getString(
- NoBackupKeys.KEY_HOME_WALLPAPER_BACKING_FILE, null);
- }
-
- @Override
- public void setHomeWallpaperBackingFileName(String fileName) {
- mNoBackupPrefs.edit().putString(
- NoBackupKeys.KEY_HOME_WALLPAPER_BACKING_FILE, fileName).apply();
- }
-
- @Override
- public long getHomeWallpaperHashCode() {
- return mSharedPrefs.getLong(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_HASH_CODE, 0);
- }
-
- @Override
- public void setHomeWallpaperHashCode(long hashCode) {
- mSharedPrefs.edit().putLong(
- WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_HASH_CODE, hashCode).apply();
- }
-
- @Override
- public void clearHomeWallpaperMetadata() {
- String homeWallpaperBackingFileName = getHomeWallpaperBackingFileName();
- if (!TextUtils.isEmpty(homeWallpaperBackingFileName)) {
- new File(homeWallpaperBackingFileName).delete();
- }
- mSharedPrefs.edit()
- .remove(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_1)
- .remove(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_2)
- .remove(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_3)
- .remove(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ACTION_URL)
- .remove(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ACTION_LABEL_RES)
- .remove(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ACTION_ICON_RES)
- .remove(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_COLLECTION_ID)
- .remove(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_HASH_CODE)
- .apply();
-
- mNoBackupPrefs.edit()
- .remove(NoBackupKeys.KEY_HOME_WALLPAPER_SERVICE_NAME)
- .remove(NoBackupKeys.KEY_HOME_WALLPAPER_EFFECTS)
- .remove(NoBackupKeys.KEY_HOME_WALLPAPER_MANAGER_ID)
- .remove(NoBackupKeys.KEY_HOME_WALLPAPER_REMOTE_ID)
- .remove(NoBackupKeys.KEY_HOME_WALLPAPER_BASE_IMAGE_URL)
- .remove(NoBackupKeys.KEY_HOME_WALLPAPER_BACKING_FILE)
- .apply();
- }
-
- @Override
- public void setHomeStaticImageWallpaperMetadata(StaticWallpaperMetadata metadata) {
- // Shared prefs
- SharedPreferences.Editor editor = mSharedPrefs.edit();
- String[] attrKeys = {WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_1,
- WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_2,
- WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_3};
- for (int i = 0; i < Math.min(metadata.getAttributions().size(), attrKeys.length); i++) {
- editor.putString(attrKeys[i], metadata.getAttributions().get(i));
- }
- editor.putString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ACTION_URL,
- metadata.getActionUrl());
- editor.putString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ACTION_LABEL_RES,
- getResName(metadata.getActionLabelRes()));
- editor.putString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ACTION_ICON_RES,
- getResName(metadata.getActionIconRes()));
- editor.putString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_COLLECTION_ID,
- metadata.getCollectionId());
- @Nullable Long hashCode = metadata.getHashCode();
- if (hashCode != null) {
- editor.putLong(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_HASH_CODE, hashCode);
- }
- // No back-up prefs
- editor.putInt(
- NoBackupKeys.KEY_HOME_WALLPAPER_MANAGER_ID, metadata.getManagerId());
- editor.putString(
- NoBackupKeys.KEY_HOME_WALLPAPER_REMOTE_ID, metadata.getRemoteId());
- editor.apply();
- }
-
- @Override
- public String getHomeWallpaperServiceName() {
- return mNoBackupPrefs.getString(
- NoBackupKeys.KEY_HOME_WALLPAPER_SERVICE_NAME, null);
- }
-
- @Override
- public void setHomeWallpaperServiceName(@NonNull String serviceName) {
- mNoBackupPrefs.edit().putString(
- NoBackupKeys.KEY_HOME_WALLPAPER_SERVICE_NAME, serviceName)
- .apply();
- setFirstWallpaperApplyDateIfNeeded();
- }
-
- @Override
- public int getHomeWallpaperManagerId() {
- return mNoBackupPrefs.getInt(
- NoBackupKeys.KEY_HOME_WALLPAPER_MANAGER_ID, 0);
- }
-
- @Override
- public void setHomeWallpaperManagerId(int homeWallpaperId) {
- mNoBackupPrefs.edit().putInt(
- NoBackupKeys.KEY_HOME_WALLPAPER_MANAGER_ID, homeWallpaperId)
- .apply();
- }
-
- @Override
- @Nullable
- public String getHomeWallpaperRecentsKey() {
- return mNoBackupPrefs.getString(
- NoBackupKeys.KEY_HOME_WALLPAPER_RECENTS_KEY,
- WallpaperPreferences.generateRecentsKey(getHomeWallpaperRemoteId(),
- getHomeWallpaperHashCode()));
- }
-
- @Override
- public void setHomeWallpaperRecentsKey(String recentsKey) {
- mNoBackupPrefs.edit().putString(
- NoBackupKeys.KEY_HOME_WALLPAPER_RECENTS_KEY, recentsKey)
- .apply();
- }
-
- @Nullable
- @Override
- public String getHomeWallpaperRemoteId() {
- return mNoBackupPrefs.getString(
- NoBackupKeys.KEY_HOME_WALLPAPER_REMOTE_ID, null);
- }
-
- @Override
- public void setHomeWallpaperRemoteId(@Nullable String wallpaperRemoteId) {
- mNoBackupPrefs.edit().putString(
- NoBackupKeys.KEY_HOME_WALLPAPER_REMOTE_ID, wallpaperRemoteId)
- .apply();
- setFirstWallpaperApplyDateIfNeeded();
- }
-
- @Override
- public List<String> getLockWallpaperAttributions() {
- return Arrays.asList(
- mSharedPrefs.getString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_1, null),
- mSharedPrefs.getString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_2, null),
- mSharedPrefs.getString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_3, null));
-
- }
-
- @Override
- public void setLockWallpaperAttributions(List<String> attributions) {
- SharedPreferences.Editor editor = mSharedPrefs.edit();
- if (attributions.size() > 0) {
- editor.putString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_1,
- attributions.get(0));
- }
- if (attributions.size() > 1) {
- editor.putString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_2,
- attributions.get(1));
- }
- if (attributions.size() > 2) {
- editor.putString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_3,
- attributions.get(2));
- }
- editor.apply();
- }
-
- @Override
- @Nullable
- public String getLockWallpaperActionUrl() {
- return mSharedPrefs.getString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ACTION_URL, null);
- }
-
- @Override
- public void setLockWallpaperActionUrl(String actionUrl) {
- mSharedPrefs.edit().putString(
- WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ACTION_URL, actionUrl).apply();
- }
-
- @Override
- public int getLockWallpaperActionLabelRes() {
- // We need to store and read the resource names as their ids could change from build to
- // build and we might end up reading the wrong id
- return getResIdPersistedByName(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ACTION_LABEL_RES,
- "string");
- }
-
- @Override
- public void setLockWallpaperActionLabelRes(int resId) {
- persistResIdByName(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ACTION_LABEL_RES, resId);
- }
-
- @Override
- public int getLockWallpaperActionIconRes() {
- return getResIdPersistedByName(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ACTION_ICON_RES,
- "drawable");
- }
-
- @Override
- public void setLockWallpaperActionIconRes(int resId) {
- persistResIdByName(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ACTION_ICON_RES, resId);
- }
-
- @Override
- @Nullable
- public String getLockWallpaperCollectionId() {
- return mSharedPrefs.getString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_COLLECTION_ID,
- null);
- }
-
- @Override
- public void setLockWallpaperCollectionId(String collectionId) {
- mSharedPrefs.edit().putString(
- WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_COLLECTION_ID, collectionId).apply();
- }
-
- @Override
- @Nullable
- public String getLockWallpaperBackingFileName() {
- return mNoBackupPrefs.getString(
- NoBackupKeys.KEY_LOCK_WALLPAPER_BACKING_FILE, null);
- }
-
- @Override
- public void setLockWallpaperBackingFileName(String fileName) {
- mNoBackupPrefs.edit().putString(
- NoBackupKeys.KEY_LOCK_WALLPAPER_BACKING_FILE, fileName).apply();
- }
-
- @Override
- public int getLockWallpaperManagerId() {
- return mNoBackupPrefs.getInt(
- NoBackupKeys.KEY_LOCK_WALLPAPER_MANAGER_ID, 0);
- }
-
- @Override
- public void setLockWallpaperManagerId(int lockWallpaperId) {
- mNoBackupPrefs.edit().putInt(
- NoBackupKeys.KEY_LOCK_WALLPAPER_MANAGER_ID, lockWallpaperId)
- .apply();
- }
-
- @Override
- @Nullable
- public String getLockWallpaperRecentsKey() {
- return mNoBackupPrefs.getString(
- NoBackupKeys.KEY_LOCK_WALLPAPER_RECENTS_KEY,
- WallpaperPreferences.generateRecentsKey(getLockWallpaperRemoteId(),
- getLockWallpaperHashCode()));
- }
-
- @Override
- public void setLockWallpaperRecentsKey(String recentsKey) {
- mNoBackupPrefs.edit().putString(
- NoBackupKeys.KEY_LOCK_WALLPAPER_RECENTS_KEY, recentsKey)
- .apply();
- }
-
- @Override
- public String getLockWallpaperRemoteId() {
- return mNoBackupPrefs.getString(
- NoBackupKeys.KEY_LOCK_WALLPAPER_REMOTE_ID, null);
- }
-
- @Override
- public void setLockWallpaperRemoteId(String wallpaperRemoteId) {
- mNoBackupPrefs.edit().putString(
- NoBackupKeys.KEY_LOCK_WALLPAPER_REMOTE_ID, wallpaperRemoteId)
- .apply();
- setFirstWallpaperApplyDateIfNeeded();
- }
-
- @Override
- public long getLockWallpaperHashCode() {
- return mSharedPrefs.getLong(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_HASH_CODE, 0);
- }
-
- @Override
- public void setLockWallpaperHashCode(long hashCode) {
- mSharedPrefs.edit()
- .putLong(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_HASH_CODE, hashCode)
- .apply();
- }
-
- @Override
- public void clearLockWallpaperMetadata() {
- String lockWallpaperBackingFileName = getLockWallpaperBackingFileName();
- if (!TextUtils.isEmpty(lockWallpaperBackingFileName)) {
- new File(lockWallpaperBackingFileName).delete();
- }
- mSharedPrefs.edit()
- .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_1)
- .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_2)
- .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_3)
- .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ACTION_URL)
- .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ACTION_LABEL_RES)
- .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ACTION_ICON_RES)
- .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_COLLECTION_ID)
- .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_HASH_CODE)
- .apply();
-
- mNoBackupPrefs.edit()
- .remove(NoBackupKeys.KEY_LOCK_WALLPAPER_SERVICE_NAME)
- .remove(NoBackupKeys.KEY_LOCK_WALLPAPER_EFFECTS)
- .remove(NoBackupKeys.KEY_LOCK_WALLPAPER_MANAGER_ID)
- .remove(NoBackupKeys.KEY_LOCK_WALLPAPER_REMOTE_ID)
- .remove(NoBackupKeys.KEY_LOCK_WALLPAPER_BACKING_FILE)
- .apply();
- }
-
- @Override
- public void setLockStaticImageWallpaperMetadata(StaticWallpaperMetadata metadata) {
- // Shared prefs
- SharedPreferences.Editor editor = mSharedPrefs.edit();
- String[] attrKeys = {WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_1,
- WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_2,
- WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_3};
- for (int i = 0; i < Math.min(metadata.getAttributions().size(), attrKeys.length); i++) {
- editor.putString(attrKeys[i], metadata.getAttributions().get(i));
- }
- editor.putString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ACTION_URL,
- metadata.getActionUrl());
- editor.putString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ACTION_LABEL_RES,
- getResName(metadata.getActionLabelRes()));
- editor.putString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ACTION_ICON_RES,
- getResName(metadata.getActionIconRes()));
- editor.putString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_COLLECTION_ID,
- metadata.getCollectionId());
- @Nullable Long hashCode = metadata.getHashCode();
- if (hashCode != null) {
- editor.putLong(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_HASH_CODE, hashCode);
- }
- editor.putInt(
- NoBackupKeys.KEY_LOCK_WALLPAPER_MANAGER_ID, metadata.getManagerId());
- // No back-up prefs
- editor.putString(
- NoBackupKeys.KEY_LOCK_WALLPAPER_REMOTE_ID, metadata.getRemoteId());
- editor.apply();
- }
-
- @Override
- public String getLockWallpaperServiceName() {
- return mNoBackupPrefs.getString(NoBackupKeys.KEY_LOCK_WALLPAPER_SERVICE_NAME, null);
- }
-
- @Override
- public void setLockWallpaperServiceName(String serviceName) {
- mNoBackupPrefs.edit().putString(NoBackupKeys.KEY_LOCK_WALLPAPER_SERVICE_NAME, serviceName)
- .apply();
- }
-
- @Override
- public void addDailyRotation(long timestamp) {
- String jsonString = mNoBackupPrefs.getString(
- NoBackupKeys.KEY_DAILY_ROTATION_TIMESTAMPS, "[]");
- try {
- JSONArray jsonArray = new JSONArray(jsonString);
- jsonArray.put(timestamp);
-
- mNoBackupPrefs.edit()
- .putString(NoBackupKeys.KEY_DAILY_ROTATION_TIMESTAMPS,
- jsonArray.toString())
- .apply();
- } catch (JSONException e) {
- Log.e(TAG, "Failed to add a daily rotation timestamp due to a JSON parse exception");
- }
- }
-
- @Override
- public long getLastDailyRotationTimestamp() {
- String jsonString = mNoBackupPrefs.getString(
- NoBackupKeys.KEY_DAILY_ROTATION_TIMESTAMPS, "[]");
-
- try {
- JSONArray jsonArray = new JSONArray(jsonString);
-
- if (jsonArray.length() == 0) {
- return -1;
- }
-
- return jsonArray.getLong(jsonArray.length() - 1);
- } catch (JSONException e) {
- Log.e(TAG, "Failed to find a daily rotation timestamp due to a JSON parse exception");
- return -1;
- }
- }
-
- @Override
- @Nullable
- public List<Long> getDailyRotationsInLastWeek() {
- long enabledTimestamp = getDailyWallpaperEnabledTimestamp();
-
- Calendar oneWeekAgo = Calendar.getInstance();
- oneWeekAgo.setTime(new Date());
- oneWeekAgo.add(Calendar.WEEK_OF_YEAR, -1);
- long oneWeekAgoTimestamp = oneWeekAgo.getTimeInMillis();
-
- // Return null if daily rotation wasn't enabled (timestamp value of -1) or was enabled
- // less than one week ago.
- if (enabledTimestamp == -1 || enabledTimestamp > oneWeekAgoTimestamp) {
- return null;
- }
-
- List<Long> timestamps = new ArrayList<>();
- String jsonString = mNoBackupPrefs.getString(
- NoBackupKeys.KEY_DAILY_ROTATION_TIMESTAMPS, "[]");
-
- try {
- JSONArray jsonArray = new JSONArray(jsonString);
-
- // Before recording the new daily rotation timestamp, filter out any that are older than
- // 1 week old.
- for (int i = 0; i < jsonArray.length(); i++) {
- long existingTimestamp = jsonArray.getLong(i);
- if (existingTimestamp >= oneWeekAgoTimestamp) {
- timestamps.add(existingTimestamp);
- }
- }
-
- jsonArray = new JSONArray(timestamps);
- mNoBackupPrefs.edit()
- .putString(NoBackupKeys.KEY_DAILY_ROTATION_TIMESTAMPS,
- jsonArray.toString())
- .apply();
- } catch (JSONException e) {
- Log.e(TAG, "Failed to get daily rotation timestamps due to a JSON parse exception");
- }
-
- return timestamps;
- }
-
- @Nullable
- @Override
- public List<Long> getDailyRotationsPreviousDay() {
- long enabledTimestamp = getDailyWallpaperEnabledTimestamp();
-
- Calendar midnightYesterday = Calendar.getInstance();
- midnightYesterday.set(Calendar.AM_PM, Calendar.AM);
- midnightYesterday.set(Calendar.HOUR, 0);
- midnightYesterday.set(Calendar.MINUTE, 0);
- midnightYesterday.add(Calendar.DATE, -1);
- long midnightYesterdayTimestamp = midnightYesterday.getTimeInMillis();
-
- Calendar midnightToday = Calendar.getInstance();
- midnightToday.set(Calendar.AM_PM, Calendar.AM);
- midnightToday.set(Calendar.HOUR, 0);
- midnightToday.set(Calendar.MINUTE, 0);
- long midnightTodayTimestamp = midnightToday.getTimeInMillis();
-
- // Return null if daily rotation wasn't enabled (timestamp value of -1) or was enabled
- // less than midnight yesterday.
- if (enabledTimestamp == -1 || enabledTimestamp > midnightYesterdayTimestamp) {
- return null;
- }
-
- List<Long> timestamps = new ArrayList<>();
- String jsonString = mNoBackupPrefs.getString(
- NoBackupKeys.KEY_DAILY_ROTATION_TIMESTAMPS, "[]");
-
- try {
- JSONArray jsonArray = new JSONArray(jsonString);
-
- // Filter the timestamps (which cover up to one week of data) to only include those
- // between midnight yesterday and midnight today.
- for (int i = 0; i < jsonArray.length(); i++) {
- long timestamp = jsonArray.getLong(i);
- if (timestamp >= midnightYesterdayTimestamp && timestamp < midnightTodayTimestamp) {
- timestamps.add(timestamp);
- }
- }
-
- } catch (JSONException e) {
- Log.e(TAG, "Failed to get daily rotation timestamps due to a JSON parse exception");
- }
-
- return timestamps;
- }
-
- @Override
- public long getDailyWallpaperEnabledTimestamp() {
- return mNoBackupPrefs.getLong(
- NoBackupKeys.KEY_DAILY_WALLPAPER_ENABLED_TIMESTAMP, -1);
- }
-
- @Override
- public void setDailyWallpaperEnabledTimestamp(long timestamp) {
- mNoBackupPrefs.edit()
- .putLong(NoBackupKeys.KEY_DAILY_WALLPAPER_ENABLED_TIMESTAMP,
- timestamp)
- .apply();
- }
-
- @Override
- public void clearDailyRotations() {
- mNoBackupPrefs.edit()
- .remove(NoBackupKeys.KEY_DAILY_ROTATION_TIMESTAMPS)
- .remove(NoBackupKeys.KEY_DAILY_WALLPAPER_ENABLED_TIMESTAMP)
- .apply();
- }
-
- @Override
- public long getLastDailyLogTimestamp() {
- return mNoBackupPrefs.getLong(
- NoBackupKeys.KEY_LAST_DAILY_LOG_TIMESTAMP, 0);
- }
-
- @Override
- public void setLastDailyLogTimestamp(long timestamp) {
- mNoBackupPrefs.edit()
- .putLong(NoBackupKeys.KEY_LAST_DAILY_LOG_TIMESTAMP, timestamp)
- .apply();
- }
-
- @Override
- public long getLastAppActiveTimestamp() {
- return mNoBackupPrefs.getLong(
- NoBackupKeys.KEY_LAST_APP_ACTIVE_TIMESTAMP, 0);
- }
-
- @Override
- public void setLastAppActiveTimestamp(long timestamp) {
- mNoBackupPrefs.edit()
- .putLong(NoBackupKeys.KEY_LAST_APP_ACTIVE_TIMESTAMP, timestamp)
- .apply();
- }
-
- @Override
- public void setDailyWallpaperRotationStatus(int status, long timestamp) {
- mNoBackupPrefs.edit()
- .putInt(NoBackupKeys.KEY_LAST_ROTATION_STATUS, status)
- .putLong(NoBackupKeys.KEY_LAST_ROTATION_STATUS_TIMESTAMP,
- timestamp)
- .apply();
- }
-
- @Override
- public int getDailyWallpaperLastRotationStatus() {
- return mNoBackupPrefs.getInt(NoBackupKeys.KEY_LAST_ROTATION_STATUS, -1);
- }
-
- @Override
- public long getDailyWallpaperLastRotationStatusTimestamp() {
- return mNoBackupPrefs.getLong(
- NoBackupKeys.KEY_LAST_ROTATION_STATUS_TIMESTAMP, 0);
- }
-
- @Override
- public long getLastSyncTimestamp() {
- return mNoBackupPrefs.getLong(NoBackupKeys.KEY_LAST_SYNC_TIMESTAMP, 0);
- }
-
- @Override
- public void setLastSyncTimestamp(long timestamp) {
- // Write synchronously via commit() to ensure this timetsamp gets written to disk
- // immediately.
- mNoBackupPrefs.edit()
- .putLong(NoBackupKeys.KEY_LAST_SYNC_TIMESTAMP, timestamp)
- .commit();
- }
-
- @Override
- public void setPendingWallpaperSetStatusSync(@PendingWallpaperSetStatus int setStatus) {
- mNoBackupPrefs.edit()
- .putInt(NoBackupKeys.KEY_PENDING_WALLPAPER_SET_STATUS,
- setStatus)
- .commit();
- }
-
- @Override
- public int getPendingWallpaperSetStatus() {
- //noinspection ResourceType
- return mNoBackupPrefs.getInt(
- NoBackupKeys.KEY_PENDING_WALLPAPER_SET_STATUS,
- WALLPAPER_SET_NOT_PENDING);
- }
-
- @Override
- public void setPendingWallpaperSetStatus(@PendingWallpaperSetStatus int setStatus) {
- mNoBackupPrefs.edit()
- .putInt(NoBackupKeys.KEY_PENDING_WALLPAPER_SET_STATUS,
- setStatus)
- .apply();
- }
-
- @Override
- public void setPendingDailyWallpaperUpdateStatusSync(
- @PendingDailyWallpaperUpdateStatus int updateStatus) {
- mNoBackupPrefs.edit()
- .putInt(NoBackupKeys.KEY_PENDING_DAILY_WALLPAPER_UPDATE_STATUS,
- updateStatus)
- .commit();
- }
-
- @Override
- public int getPendingDailyWallpaperUpdateStatus() {
- //noinspection ResourceType
- return mNoBackupPrefs.getInt(
- NoBackupKeys.KEY_PENDING_DAILY_WALLPAPER_UPDATE_STATUS,
- DAILY_WALLPAPER_UPDATE_NOT_PENDING);
- }
-
- @Override
- public void setPendingDailyWallpaperUpdateStatus(
- @PendingDailyWallpaperUpdateStatus int updateStatus) {
- mNoBackupPrefs.edit()
- .putInt(NoBackupKeys.KEY_PENDING_DAILY_WALLPAPER_UPDATE_STATUS,
- updateStatus)
- .apply();
- }
-
- @Override
- public void incrementNumDaysDailyRotationFailed() {
- mNoBackupPrefs.edit()
- .putInt(NoBackupKeys.KEY_NUM_DAYS_DAILY_ROTATION_FAILED,
- getNumDaysDailyRotationFailed() + 1)
- .apply();
- }
-
- @Override
- public int getNumDaysDailyRotationFailed() {
- return mNoBackupPrefs.getInt(
- NoBackupKeys.KEY_NUM_DAYS_DAILY_ROTATION_FAILED, 0);
- }
-
- @Override
- public void resetNumDaysDailyRotationFailed() {
- mNoBackupPrefs.edit()
- .putInt(NoBackupKeys.KEY_NUM_DAYS_DAILY_ROTATION_FAILED, 0)
- .apply();
- }
-
- @Override
- public void incrementNumDaysDailyRotationNotAttempted() {
- mNoBackupPrefs.edit()
- .putInt(NoBackupKeys.KEY_NUM_DAYS_DAILY_ROTATION_NOT_ATTEMPTED,
- getNumDaysDailyRotationNotAttempted() + 1)
- .apply();
- }
-
- @Override
- public int getNumDaysDailyRotationNotAttempted() {
- return mNoBackupPrefs.getInt(
- NoBackupKeys.KEY_NUM_DAYS_DAILY_ROTATION_NOT_ATTEMPTED, 0);
- }
-
- @Override
- public void resetNumDaysDailyRotationNotAttempted() {
- mNoBackupPrefs.edit()
- .putInt(NoBackupKeys.KEY_NUM_DAYS_DAILY_ROTATION_NOT_ATTEMPTED, 0)
- .apply();
- }
-
- @Override
- public int getAppLaunchCount() {
- return mNoBackupPrefs.getInt(NoBackupKeys.KEY_APP_LAUNCH_COUNT, 0);
- }
-
- private void setAppLaunchCount(int count) {
- mNoBackupPrefs.edit().putInt(NoBackupKeys.KEY_APP_LAUNCH_COUNT, count).apply();
- }
-
- @Override
- public int getFirstLaunchDateSinceSetup() {
- return mNoBackupPrefs.getInt(NoBackupKeys.KEY_FIRST_LAUNCH_DATE_SINCE_SETUP, 0);
- }
-
- private void setFirstLaunchDateSinceSetup(int firstLaunchDate) {
- mNoBackupPrefs.edit().putInt(NoBackupKeys.KEY_FIRST_LAUNCH_DATE_SINCE_SETUP,
- firstLaunchDate).apply();
- }
-
- @Override
- public int getFirstWallpaperApplyDateSinceSetup() {
- return mNoBackupPrefs.getInt(NoBackupKeys.KEY_FIRST_WALLPAPER_APPLY_DATE_SINCE_SETUP, 0);
- }
-
- @Override
- public void storeWallpaperColors(String storedWallpaperId, WallpaperColors wallpaperColors) {
- Color primaryColor = wallpaperColors.getPrimaryColor();
- String value = new String(String.valueOf(primaryColor.toArgb()));
- Color secondaryColor = wallpaperColors.getSecondaryColor();
- if (secondaryColor != null) {
- value += "," + secondaryColor.toArgb();
- }
- Color tertiaryColor = wallpaperColors.getTertiaryColor();
- if (tertiaryColor != null) {
- value += "," + tertiaryColor.toArgb();
- }
- mNoBackupPrefs.edit().putString(
- NoBackupKeys.KEY_PREVIEW_WALLPAPER_COLOR_ID + storedWallpaperId, value).apply();
- }
-
- @Override
- public WallpaperColors getWallpaperColors(String storedWallpaperId) {
- String value = mNoBackupPrefs.getString(
- NoBackupKeys.KEY_PREVIEW_WALLPAPER_COLOR_ID + storedWallpaperId, "");
- if (value.equals("")) {
- return null;
- }
- String[] colorStrings = value.split(",");
- Color colorPrimary = Color.valueOf(Integer.parseInt(colorStrings[0]));
- Color colorSecondary = null;
- if (colorStrings.length >= 2) {
- colorSecondary = Color.valueOf(Integer.parseInt(colorStrings[1]));
- }
- Color colorTerTiary = null;
- if (colorStrings.length >= 3) {
- colorTerTiary = Color.valueOf(Integer.parseInt(colorStrings[2]));
- }
- return new WallpaperColors(colorPrimary, colorSecondary, colorTerTiary,
- WallpaperColors.HINT_FROM_BITMAP);
- }
-
- private void setFirstWallpaperApplyDateSinceSetup(int firstApplyDate) {
- mNoBackupPrefs.edit().putInt(NoBackupKeys.KEY_FIRST_WALLPAPER_APPLY_DATE_SINCE_SETUP,
- firstApplyDate).apply();
- }
-
- @Override
- public void incrementAppLaunched() {
- if (getFirstLaunchDateSinceSetup() == 0) {
- setFirstLaunchDateSinceSetup(getCurrentDate());
- }
-
- int appLaunchCount = getAppLaunchCount();
- if (appLaunchCount < Integer.MAX_VALUE) {
- setAppLaunchCount(appLaunchCount + 1);
- }
- }
-
- private void setFirstWallpaperApplyDateIfNeeded() {
- if (getFirstWallpaperApplyDateSinceSetup() == 0) {
- setFirstWallpaperApplyDateSinceSetup(getCurrentDate());
- }
- }
-
- @Override
- public void updateDailyWallpaperSet(@Destination int destination, String collectionId,
- String wallpaperId) {
- // Assign wallpaper info by destination.
- if (destination == WallpaperPersister.DEST_HOME_SCREEN) {
- setHomeWallpaperCollectionId(collectionId);
- setHomeWallpaperRemoteId(wallpaperId);
- } else if (destination == WallpaperPersister.DEST_LOCK_SCREEN) {
- setLockWallpaperCollectionId(collectionId);
- setLockWallpaperRemoteId(wallpaperId);
- } else if (destination == WallpaperPersister.DEST_BOTH) {
- setHomeWallpaperCollectionId(collectionId);
- setHomeWallpaperRemoteId(wallpaperId);
- setLockWallpaperCollectionId(collectionId);
- setLockWallpaperRemoteId(wallpaperId);
- }
- setHomeWallpaperEffects(null);
- }
-
- @Override
- public String getHomeWallpaperEffects() {
- return mNoBackupPrefs.getString(
- NoBackupKeys.KEY_HOME_WALLPAPER_EFFECTS, null);
- }
-
- @Override
- public void setHomeWallpaperEffects(String effects) {
- mNoBackupPrefs.edit().putString(
- NoBackupKeys.KEY_HOME_WALLPAPER_EFFECTS, effects)
- .apply();
- }
-
- @Override
- public String getLockWallpaperEffects() {
- return mNoBackupPrefs.getString(
- NoBackupKeys.KEY_LOCK_WALLPAPER_EFFECTS, null);
- }
-
- @Override
- public void setLockWallpaperEffects(String effects) {
- mNoBackupPrefs.edit().putString(
- NoBackupKeys.KEY_LOCK_WALLPAPER_EFFECTS, effects)
- .apply();
- }
-
- private int getCurrentDate() {
- Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
- SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd", Locale.US);
- return Integer.parseInt(format.format(calendar.getTime()));
- }
-}
diff --git a/src/com/android/wallpaper/module/DefaultWallpaperPreferences.kt b/src/com/android/wallpaper/module/DefaultWallpaperPreferences.kt
new file mode 100755
index 00000000..7592f7ba
--- /dev/null
+++ b/src/com/android/wallpaper/module/DefaultWallpaperPreferences.kt
@@ -0,0 +1,894 @@
+/*
+ * Copyright (C) 2017 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.module
+
+import android.app.WallpaperColors
+import android.app.WallpaperManager.SetWallpaperFlags
+import android.app.backup.BackupManager
+import android.content.Context
+import android.content.SharedPreferences
+import android.content.SharedPreferences.OnSharedPreferenceChangeListener
+import android.graphics.Bitmap
+import android.graphics.Color
+import android.graphics.Rect
+import android.util.Log
+import androidx.core.content.edit
+import com.android.wallpaper.model.LiveWallpaperInfo
+import com.android.wallpaper.model.StaticWallpaperMetadata
+import com.android.wallpaper.model.WallpaperInfo
+import com.android.wallpaper.model.wallpaper.ScreenOrientation
+import com.android.wallpaper.model.wallpaper.WallpaperModel
+import com.android.wallpaper.module.WallpaperPreferenceKeys.NoBackupKeys
+import com.android.wallpaper.module.WallpaperPreferences.Companion.generateRecentsKey
+import com.android.wallpaper.module.WallpaperPreferences.PendingDailyWallpaperUpdateStatus
+import com.android.wallpaper.module.WallpaperPreferences.PendingWallpaperSetStatus
+import com.android.wallpaper.module.WallpaperPreferences.PresentationMode
+import com.android.wallpaper.picker.customization.shared.model.WallpaperDestination
+import java.text.SimpleDateFormat
+import java.util.Calendar
+import java.util.Locale
+import java.util.TimeZone
+import org.json.JSONArray
+import org.json.JSONException
+
+/** Default implementation that writes to and reads from SharedPreferences. */
+open class DefaultWallpaperPreferences(private val context: Context) : WallpaperPreferences {
+ protected val sharedPrefs: SharedPreferences =
+ context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
+ protected val noBackupPrefs: SharedPreferences =
+ context.getSharedPreferences(NO_BACKUP_PREFS_NAME, Context.MODE_PRIVATE)
+
+ private val backupManager = BackupManager(context)
+ private val sharedPrefsChangedListener = OnSharedPreferenceChangeListener { _, _ ->
+ backupManager.dataChanged()
+ }
+
+ init {
+ if (noBackupPrefs.all.isEmpty() && sharedPrefs.all.isNotEmpty()) {
+ upgradePrefs()
+ }
+ // Register a prefs changed listener so that all prefs changes trigger a backup event.
+ sharedPrefs.registerOnSharedPreferenceChangeListener(sharedPrefsChangedListener)
+ }
+
+ /**
+ * Move [NoBackupKeys] preferences that might have been in mSharedPrefs from previous versions
+ * of the app into mNoBackupPrefs.
+ */
+ private fun upgradePrefs() {
+ val noBackupEditor = noBackupPrefs.edit()
+ if (sharedPrefs.contains(NoBackupKeys.KEY_HOME_WALLPAPER_BASE_IMAGE_URL)) {
+ noBackupEditor.putString(
+ NoBackupKeys.KEY_HOME_WALLPAPER_BASE_IMAGE_URL,
+ sharedPrefs.getString(NoBackupKeys.KEY_HOME_WALLPAPER_BASE_IMAGE_URL, null)
+ )
+ }
+ if (sharedPrefs.contains(NoBackupKeys.KEY_HOME_WALLPAPER_MANAGER_ID)) {
+ noBackupEditor.putInt(
+ NoBackupKeys.KEY_HOME_WALLPAPER_MANAGER_ID,
+ sharedPrefs.getInt(NoBackupKeys.KEY_HOME_WALLPAPER_MANAGER_ID, 0)
+ )
+ }
+ if (sharedPrefs.contains(NoBackupKeys.KEY_HOME_WALLPAPER_REMOTE_ID)) {
+ noBackupEditor.putString(
+ NoBackupKeys.KEY_HOME_WALLPAPER_REMOTE_ID,
+ sharedPrefs.getString(NoBackupKeys.KEY_HOME_WALLPAPER_REMOTE_ID, null)
+ )
+ }
+ if (sharedPrefs.contains(NoBackupKeys.KEY_HOME_WALLPAPER_BACKING_FILE)) {
+ noBackupEditor.putString(
+ NoBackupKeys.KEY_HOME_WALLPAPER_BACKING_FILE,
+ sharedPrefs.getString(NoBackupKeys.KEY_HOME_WALLPAPER_BACKING_FILE, null)
+ )
+ }
+ if (sharedPrefs.contains(NoBackupKeys.KEY_LOCK_WALLPAPER_MANAGER_ID)) {
+ noBackupEditor.putInt(
+ NoBackupKeys.KEY_LOCK_WALLPAPER_MANAGER_ID,
+ sharedPrefs.getInt(NoBackupKeys.KEY_LOCK_WALLPAPER_MANAGER_ID, 0)
+ )
+ }
+ if (sharedPrefs.contains(NoBackupKeys.KEY_LOCK_WALLPAPER_BACKING_FILE)) {
+ noBackupEditor.putString(
+ NoBackupKeys.KEY_LOCK_WALLPAPER_BACKING_FILE,
+ sharedPrefs.getString(NoBackupKeys.KEY_LOCK_WALLPAPER_BACKING_FILE, null)
+ )
+ }
+ if (sharedPrefs.contains(NoBackupKeys.KEY_DAILY_ROTATION_TIMESTAMPS)) {
+ noBackupEditor.putString(
+ NoBackupKeys.KEY_DAILY_ROTATION_TIMESTAMPS,
+ sharedPrefs.getString(NoBackupKeys.KEY_DAILY_ROTATION_TIMESTAMPS, null)
+ )
+ }
+ if (sharedPrefs.contains(NoBackupKeys.KEY_DAILY_WALLPAPER_ENABLED_TIMESTAMP)) {
+ noBackupEditor.putLong(
+ NoBackupKeys.KEY_DAILY_WALLPAPER_ENABLED_TIMESTAMP,
+ sharedPrefs.getLong(NoBackupKeys.KEY_DAILY_WALLPAPER_ENABLED_TIMESTAMP, -1)
+ )
+ }
+ if (sharedPrefs.contains(NoBackupKeys.KEY_LAST_DAILY_LOG_TIMESTAMP)) {
+ noBackupEditor.putLong(
+ NoBackupKeys.KEY_LAST_DAILY_LOG_TIMESTAMP,
+ sharedPrefs.getLong(NoBackupKeys.KEY_LAST_DAILY_LOG_TIMESTAMP, 0)
+ )
+ }
+ if (sharedPrefs.contains(NoBackupKeys.KEY_LAST_APP_ACTIVE_TIMESTAMP)) {
+ noBackupEditor.putLong(
+ NoBackupKeys.KEY_LAST_APP_ACTIVE_TIMESTAMP,
+ sharedPrefs.getLong(NoBackupKeys.KEY_LAST_APP_ACTIVE_TIMESTAMP, 0)
+ )
+ }
+ if (sharedPrefs.contains(NoBackupKeys.KEY_LAST_ROTATION_STATUS)) {
+ noBackupEditor.putInt(
+ NoBackupKeys.KEY_LAST_ROTATION_STATUS,
+ sharedPrefs.getInt(NoBackupKeys.KEY_LAST_ROTATION_STATUS, -1)
+ )
+ }
+ if (sharedPrefs.contains(NoBackupKeys.KEY_LAST_ROTATION_STATUS_TIMESTAMP)) {
+ noBackupEditor.putLong(
+ NoBackupKeys.KEY_LAST_ROTATION_STATUS_TIMESTAMP,
+ sharedPrefs.getLong(NoBackupKeys.KEY_LAST_ROTATION_STATUS_TIMESTAMP, 0)
+ )
+ }
+ if (sharedPrefs.contains(NoBackupKeys.KEY_LAST_SYNC_TIMESTAMP)) {
+ noBackupEditor.putLong(
+ NoBackupKeys.KEY_LAST_SYNC_TIMESTAMP,
+ sharedPrefs.getLong(NoBackupKeys.KEY_LAST_SYNC_TIMESTAMP, 0)
+ )
+ }
+ if (sharedPrefs.contains(NoBackupKeys.KEY_PENDING_WALLPAPER_SET_STATUS)) {
+ noBackupEditor.putInt(
+ NoBackupKeys.KEY_PENDING_WALLPAPER_SET_STATUS,
+ sharedPrefs.getInt(
+ NoBackupKeys.KEY_PENDING_WALLPAPER_SET_STATUS,
+ WallpaperPreferences.WALLPAPER_SET_NOT_PENDING
+ )
+ )
+ }
+ if (sharedPrefs.contains(NoBackupKeys.KEY_PENDING_DAILY_WALLPAPER_UPDATE_STATUS)) {
+ noBackupEditor.putInt(
+ NoBackupKeys.KEY_PENDING_DAILY_WALLPAPER_UPDATE_STATUS,
+ sharedPrefs.getInt(
+ NoBackupKeys.KEY_PENDING_DAILY_WALLPAPER_UPDATE_STATUS,
+ WallpaperPreferences.DAILY_WALLPAPER_UPDATE_NOT_PENDING
+ )
+ )
+ }
+ if (sharedPrefs.contains(NoBackupKeys.KEY_NUM_DAYS_DAILY_ROTATION_FAILED)) {
+ noBackupEditor.putInt(
+ NoBackupKeys.KEY_NUM_DAYS_DAILY_ROTATION_FAILED,
+ sharedPrefs.getInt(NoBackupKeys.KEY_NUM_DAYS_DAILY_ROTATION_FAILED, 0)
+ )
+ }
+ if (sharedPrefs.contains(NoBackupKeys.KEY_NUM_DAYS_DAILY_ROTATION_NOT_ATTEMPTED)) {
+ noBackupEditor.putInt(
+ NoBackupKeys.KEY_NUM_DAYS_DAILY_ROTATION_NOT_ATTEMPTED,
+ sharedPrefs.getInt(NoBackupKeys.KEY_NUM_DAYS_DAILY_ROTATION_NOT_ATTEMPTED, 0)
+ )
+ }
+ if (sharedPrefs.contains(NoBackupKeys.KEY_HOME_WALLPAPER_SERVICE_NAME)) {
+ noBackupEditor.putString(
+ NoBackupKeys.KEY_HOME_WALLPAPER_SERVICE_NAME,
+ sharedPrefs.getString(NoBackupKeys.KEY_HOME_WALLPAPER_SERVICE_NAME, null)
+ )
+ }
+ noBackupEditor.apply()
+ }
+
+ private fun getResIdPersistedByName(key: String, type: String): Int {
+ val resName = sharedPrefs.getString(key, null) ?: return 0
+ return context.resources.getIdentifier(resName, type, context.packageName)
+ }
+
+ private fun persistResIdByName(key: String, resId: Int) {
+ sharedPrefs.edit().putString(key, getResName(resId)).apply()
+ }
+
+ private fun getResName(resId: Int): String {
+ return context.resources.getResourceName(resId)
+ }
+
+ override fun getWallpaperPresentationMode(): Int {
+ @PresentationMode
+ val homeWallpaperPresentationMode =
+ sharedPrefs.getInt(
+ WallpaperPreferenceKeys.KEY_WALLPAPER_PRESENTATION_MODE,
+ WallpaperPreferences.PRESENTATION_MODE_STATIC
+ )
+ return homeWallpaperPresentationMode
+ }
+
+ override fun setWallpaperPresentationMode(@PresentationMode presentationMode: Int) {
+ sharedPrefs
+ .edit()
+ .putInt(WallpaperPreferenceKeys.KEY_WALLPAPER_PRESENTATION_MODE, presentationMode)
+ .apply()
+ }
+
+ override fun getHomeWallpaperAttributions(): List<String?>? {
+ return listOf(
+ sharedPrefs.getString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_1, null),
+ sharedPrefs.getString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_2, null),
+ sharedPrefs.getString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_3, null)
+ )
+ }
+
+ override fun setHomeWallpaperAttributions(attributions: List<String?>?) {
+ if (attributions.isNullOrEmpty()) {
+ return
+ }
+ val editor = sharedPrefs.edit()
+ attributions.take(3).forEachIndexed { index, attr ->
+ when (index) {
+ 0 -> editor.putString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_1, attr)
+ 1 -> editor.putString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_2, attr)
+ 2 -> editor.putString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_3, attr)
+ }
+ }
+ editor.apply()
+ }
+
+ override fun getHomeWallpaperActionUrl(): String? {
+ return sharedPrefs.getString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ACTION_URL, null)
+ }
+
+ override fun setHomeWallpaperActionUrl(actionUrl: String?) {
+ sharedPrefs
+ .edit()
+ .putString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ACTION_URL, actionUrl)
+ .apply()
+ }
+
+ override fun getHomeWallpaperCollectionId(): String? {
+ return sharedPrefs.getString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_COLLECTION_ID, null)
+ }
+
+ override fun setHomeWallpaperCollectionId(collectionId: String?) {
+ sharedPrefs
+ .edit()
+ .putString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_COLLECTION_ID, collectionId)
+ .apply()
+ }
+
+ override fun clearHomeWallpaperMetadata() {
+ sharedPrefs
+ .edit()
+ .remove(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_1)
+ .remove(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_2)
+ .remove(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_3)
+ .remove(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ACTION_URL)
+ .remove(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_COLLECTION_ID)
+ .remove(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_HASH_CODE)
+ .apply()
+ noBackupPrefs
+ .edit()
+ .remove(NoBackupKeys.KEY_HOME_WALLPAPER_SERVICE_NAME)
+ .remove(NoBackupKeys.KEY_HOME_WALLPAPER_EFFECTS)
+ .remove(NoBackupKeys.KEY_HOME_WALLPAPER_MANAGER_ID)
+ .remove(NoBackupKeys.KEY_HOME_WALLPAPER_REMOTE_ID)
+ .remove(NoBackupKeys.KEY_HOME_WALLPAPER_BASE_IMAGE_URL)
+ .remove(NoBackupKeys.KEY_HOME_WALLPAPER_BACKING_FILE)
+ .remove(NoBackupKeys.KEY_CROP_HINT_PORTRAIT)
+ .remove(NoBackupKeys.KEY_CROP_HINT_LANDSCAPE)
+ .remove(NoBackupKeys.KEY_CROP_HINT_UNFOLDED_PORTRAIT)
+ .remove(NoBackupKeys.KEY_CROP_HINT_UNFOLDED_LANDSCAPE)
+ .apply()
+ }
+
+ override fun setHomeStaticImageWallpaperMetadata(metadata: StaticWallpaperMetadata) {
+ val sharedEditor = sharedPrefs.edit()
+ val attributions = metadata.attributions
+ if (!attributions.isNullOrEmpty()) {
+ attributions.take(3).forEachIndexed { index, attr ->
+ when (index) {
+ 0 ->
+ sharedEditor.putString(
+ WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_1,
+ attr
+ )
+ 1 ->
+ sharedEditor.putString(
+ WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_2,
+ attr
+ )
+ 2 ->
+ sharedEditor.putString(
+ WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_3,
+ attr
+ )
+ }
+ }
+ }
+ sharedEditor.putString(
+ WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ACTION_URL,
+ metadata.actionUrl
+ )
+ sharedEditor.putString(
+ WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_COLLECTION_ID,
+ metadata.collectionId
+ )
+ val hashCode = metadata.hashCode
+ if (hashCode != null) {
+ sharedEditor.putLong(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_HASH_CODE, hashCode)
+ }
+ sharedEditor.apply()
+
+ val noBackupEditor = noBackupPrefs.edit()
+ noBackupEditor.putInt(NoBackupKeys.KEY_HOME_WALLPAPER_MANAGER_ID, metadata.managerId)
+ noBackupEditor.putString(NoBackupKeys.KEY_HOME_WALLPAPER_REMOTE_ID, metadata.remoteId)
+ noBackupEditor.apply()
+ }
+
+ override fun getHomeWallpaperHashCode(): Long {
+ return sharedPrefs.getLong(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_HASH_CODE, 0)
+ }
+
+ override fun setHomeWallpaperHashCode(hashCode: Long) {
+ sharedPrefs
+ .edit()
+ .putLong(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_HASH_CODE, hashCode)
+ .apply()
+ }
+
+ override fun getHomeWallpaperServiceName(): String? {
+ return noBackupPrefs.getString(NoBackupKeys.KEY_HOME_WALLPAPER_SERVICE_NAME, null)
+ }
+
+ override fun setHomeWallpaperServiceName(serviceName: String?) {
+ noBackupPrefs
+ .edit()
+ .putString(NoBackupKeys.KEY_HOME_WALLPAPER_SERVICE_NAME, serviceName)
+ .apply()
+ setFirstWallpaperApplyDateIfNeeded()
+ }
+
+ override fun getHomeWallpaperManagerId(): Int {
+ return noBackupPrefs.getInt(NoBackupKeys.KEY_HOME_WALLPAPER_MANAGER_ID, 0)
+ }
+
+ override fun setHomeWallpaperManagerId(homeWallpaperId: Int) {
+ noBackupPrefs
+ .edit()
+ .putInt(NoBackupKeys.KEY_HOME_WALLPAPER_MANAGER_ID, homeWallpaperId)
+ .apply()
+ }
+
+ override fun getHomeWallpaperRemoteId(): String? {
+ return noBackupPrefs.getString(NoBackupKeys.KEY_HOME_WALLPAPER_REMOTE_ID, null)
+ }
+
+ override fun setHomeWallpaperRemoteId(wallpaperRemoteId: String?) {
+ noBackupPrefs
+ .edit()
+ .putString(NoBackupKeys.KEY_HOME_WALLPAPER_REMOTE_ID, wallpaperRemoteId)
+ .apply()
+ setFirstWallpaperApplyDateIfNeeded()
+ }
+
+ override fun getHomeWallpaperRecentsKey(): String? {
+ return noBackupPrefs.getString(
+ NoBackupKeys.KEY_HOME_WALLPAPER_RECENTS_KEY,
+ generateRecentsKey(getHomeWallpaperRemoteId(), getHomeWallpaperHashCode())
+ )
+ }
+
+ override fun setHomeWallpaperRecentsKey(recentsKey: String?) {
+ noBackupPrefs
+ .edit()
+ .putString(NoBackupKeys.KEY_HOME_WALLPAPER_RECENTS_KEY, recentsKey)
+ .apply()
+ }
+
+ override fun getHomeWallpaperEffects(): String? {
+ return noBackupPrefs.getString(NoBackupKeys.KEY_HOME_WALLPAPER_EFFECTS, null)
+ }
+
+ override fun setHomeWallpaperEffects(wallpaperEffects: String?) {
+ noBackupPrefs
+ .edit()
+ .putString(NoBackupKeys.KEY_HOME_WALLPAPER_EFFECTS, wallpaperEffects)
+ .apply()
+ }
+
+ override fun getLockWallpaperAttributions(): List<String?>? {
+ return listOf(
+ sharedPrefs.getString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_1, null),
+ sharedPrefs.getString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_2, null),
+ sharedPrefs.getString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_3, null)
+ )
+ }
+
+ override fun setLockWallpaperAttributions(attributions: List<String?>?) {
+ if (attributions.isNullOrEmpty()) {
+ return
+ }
+ val editor = sharedPrefs.edit()
+ attributions.take(3).forEachIndexed { index, attr ->
+ when (index) {
+ 0 -> editor.putString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_1, attr)
+ 1 -> editor.putString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_2, attr)
+ 2 -> editor.putString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_3, attr)
+ }
+ }
+ editor.apply()
+ }
+
+ override fun getLockWallpaperActionUrl(): String? {
+ return sharedPrefs.getString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ACTION_URL, null)
+ }
+
+ override fun setLockWallpaperActionUrl(actionUrl: String?) {
+ sharedPrefs
+ .edit()
+ .putString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ACTION_URL, actionUrl)
+ .apply()
+ }
+
+ override fun getLockWallpaperCollectionId(): String? {
+ return sharedPrefs.getString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_COLLECTION_ID, null)
+ }
+
+ override fun setLockWallpaperCollectionId(collectionId: String?) {
+ sharedPrefs
+ .edit()
+ .putString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_COLLECTION_ID, collectionId)
+ .apply()
+ }
+
+ override fun clearLockWallpaperMetadata() {
+ sharedPrefs
+ .edit()
+ .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_1)
+ .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_2)
+ .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_3)
+ .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ACTION_URL)
+ .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_COLLECTION_ID)
+ .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_HASH_CODE)
+ .apply()
+ noBackupPrefs
+ .edit()
+ .remove(NoBackupKeys.KEY_LOCK_WALLPAPER_SERVICE_NAME)
+ .remove(NoBackupKeys.KEY_LOCK_WALLPAPER_EFFECTS)
+ .remove(NoBackupKeys.KEY_LOCK_WALLPAPER_MANAGER_ID)
+ .remove(NoBackupKeys.KEY_LOCK_WALLPAPER_REMOTE_ID)
+ .remove(NoBackupKeys.KEY_LOCK_WALLPAPER_BACKING_FILE)
+ .remove(NoBackupKeys.KEY_CROP_HINT_PORTRAIT)
+ .remove(NoBackupKeys.KEY_CROP_HINT_LANDSCAPE)
+ .remove(NoBackupKeys.KEY_CROP_HINT_UNFOLDED_PORTRAIT)
+ .remove(NoBackupKeys.KEY_CROP_HINT_UNFOLDED_LANDSCAPE)
+ .apply()
+ }
+
+ override fun setLockStaticImageWallpaperMetadata(metadata: StaticWallpaperMetadata) {
+ val sharedEditor = sharedPrefs.edit()
+ val attributions = metadata.attributions
+ if (!attributions.isNullOrEmpty()) {
+ attributions.take(3).forEachIndexed { index, attr ->
+ when (index) {
+ 0 ->
+ sharedEditor.putString(
+ WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_1,
+ attr
+ )
+ 1 ->
+ sharedEditor.putString(
+ WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_2,
+ attr
+ )
+ 2 ->
+ sharedEditor.putString(
+ WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_3,
+ attr
+ )
+ }
+ }
+ }
+ sharedEditor.putString(
+ WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ACTION_URL,
+ metadata.actionUrl
+ )
+ sharedEditor.putString(
+ WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_COLLECTION_ID,
+ metadata.collectionId
+ )
+ val hashCode = metadata.hashCode
+ if (hashCode != null) {
+ sharedEditor.putLong(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_HASH_CODE, hashCode)
+ }
+ sharedEditor.apply()
+
+ val noBackupEditor = noBackupPrefs.edit()
+ noBackupEditor.putInt(NoBackupKeys.KEY_LOCK_WALLPAPER_MANAGER_ID, metadata.managerId)
+ noBackupEditor.putString(NoBackupKeys.KEY_LOCK_WALLPAPER_REMOTE_ID, metadata.remoteId)
+ noBackupEditor.apply()
+ }
+
+ override fun getLockWallpaperHashCode(): Long {
+ return sharedPrefs.getLong(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_HASH_CODE, 0)
+ }
+
+ override fun setLockWallpaperHashCode(hashCode: Long) {
+ sharedPrefs
+ .edit()
+ .putLong(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_HASH_CODE, hashCode)
+ .apply()
+ }
+
+ override fun getLockWallpaperServiceName(): String? {
+ return noBackupPrefs.getString(NoBackupKeys.KEY_LOCK_WALLPAPER_SERVICE_NAME, null)
+ }
+
+ override fun setLockWallpaperServiceName(serviceName: String?) {
+ noBackupPrefs
+ .edit()
+ .putString(NoBackupKeys.KEY_LOCK_WALLPAPER_SERVICE_NAME, serviceName)
+ .apply()
+ }
+
+ override fun getLockWallpaperManagerId(): Int {
+ return noBackupPrefs.getInt(NoBackupKeys.KEY_LOCK_WALLPAPER_MANAGER_ID, 0)
+ }
+
+ override fun setLockWallpaperManagerId(lockWallpaperId: Int) {
+ noBackupPrefs
+ .edit()
+ .putInt(NoBackupKeys.KEY_LOCK_WALLPAPER_MANAGER_ID, lockWallpaperId)
+ .apply()
+ }
+
+ override fun getLockWallpaperRemoteId(): String? {
+ return noBackupPrefs.getString(NoBackupKeys.KEY_LOCK_WALLPAPER_REMOTE_ID, null)
+ }
+
+ override fun setLockWallpaperRemoteId(wallpaperRemoteId: String?) {
+ noBackupPrefs
+ .edit()
+ .putString(NoBackupKeys.KEY_LOCK_WALLPAPER_REMOTE_ID, wallpaperRemoteId)
+ .apply()
+ setFirstWallpaperApplyDateIfNeeded()
+ }
+
+ override fun getLockWallpaperRecentsKey(): String? {
+ return noBackupPrefs.getString(
+ NoBackupKeys.KEY_LOCK_WALLPAPER_RECENTS_KEY,
+ generateRecentsKey(getLockWallpaperRemoteId(), getLockWallpaperHashCode())
+ )
+ }
+
+ override fun setLockWallpaperRecentsKey(recentsKey: String?) {
+ noBackupPrefs
+ .edit()
+ .putString(NoBackupKeys.KEY_LOCK_WALLPAPER_RECENTS_KEY, recentsKey)
+ .apply()
+ }
+
+ override fun getLockWallpaperEffects(): String? {
+ return noBackupPrefs.getString(NoBackupKeys.KEY_LOCK_WALLPAPER_EFFECTS, null)
+ }
+
+ override fun setLockWallpaperEffects(wallpaperEffects: String?) {
+ noBackupPrefs
+ .edit()
+ .putString(NoBackupKeys.KEY_LOCK_WALLPAPER_EFFECTS, wallpaperEffects)
+ .apply()
+ }
+
+ override fun addDailyRotation(timestamp: Long) {
+ val jsonString = noBackupPrefs.getString(NoBackupKeys.KEY_DAILY_ROTATION_TIMESTAMPS, "[]")
+ try {
+ val jsonArray = JSONArray(jsonString)
+ jsonArray.put(timestamp)
+ noBackupPrefs
+ .edit()
+ .putString(NoBackupKeys.KEY_DAILY_ROTATION_TIMESTAMPS, jsonArray.toString())
+ .apply()
+ } catch (e: JSONException) {
+ Log.e(TAG, "Failed to add a daily rotation timestamp due to a JSON parse exception")
+ }
+ }
+
+ override fun getLastDailyRotationTimestamp(): Long {
+ val jsonString = noBackupPrefs.getString(NoBackupKeys.KEY_DAILY_ROTATION_TIMESTAMPS, "[]")
+ return try {
+ val jsonArray = JSONArray(jsonString)
+ if (jsonArray.length() == 0) {
+ -1
+ } else jsonArray.getLong(jsonArray.length() - 1)
+ } catch (e: JSONException) {
+ Log.e(TAG, "Failed to find a daily rotation timestamp due to a JSON parse exception")
+ -1
+ }
+ }
+
+ override fun getDailyWallpaperEnabledTimestamp(): Long {
+ return noBackupPrefs.getLong(NoBackupKeys.KEY_DAILY_WALLPAPER_ENABLED_TIMESTAMP, -1)
+ }
+
+ override fun setDailyWallpaperEnabledTimestamp(timestamp: Long) {
+ noBackupPrefs
+ .edit()
+ .putLong(NoBackupKeys.KEY_DAILY_WALLPAPER_ENABLED_TIMESTAMP, timestamp)
+ .apply()
+ }
+
+ override fun clearDailyRotations() {
+ noBackupPrefs
+ .edit()
+ .remove(NoBackupKeys.KEY_DAILY_ROTATION_TIMESTAMPS)
+ .remove(NoBackupKeys.KEY_DAILY_WALLPAPER_ENABLED_TIMESTAMP)
+ .apply()
+ }
+
+ override fun getLastDailyLogTimestamp(): Long {
+ return noBackupPrefs.getLong(NoBackupKeys.KEY_LAST_DAILY_LOG_TIMESTAMP, 0)
+ }
+
+ override fun setLastDailyLogTimestamp(timestamp: Long) {
+ noBackupPrefs.edit().putLong(NoBackupKeys.KEY_LAST_DAILY_LOG_TIMESTAMP, timestamp).apply()
+ }
+
+ override fun getLastAppActiveTimestamp(): Long {
+ return noBackupPrefs.getLong(NoBackupKeys.KEY_LAST_APP_ACTIVE_TIMESTAMP, 0)
+ }
+
+ override fun setLastAppActiveTimestamp(timestamp: Long) {
+ noBackupPrefs.edit().putLong(NoBackupKeys.KEY_LAST_APP_ACTIVE_TIMESTAMP, timestamp).apply()
+ }
+
+ override fun setDailyWallpaperRotationStatus(status: Int, timestamp: Long) {
+ noBackupPrefs
+ .edit()
+ .putInt(NoBackupKeys.KEY_LAST_ROTATION_STATUS, status)
+ .putLong(NoBackupKeys.KEY_LAST_ROTATION_STATUS_TIMESTAMP, timestamp)
+ .apply()
+ }
+
+ override fun setPendingWallpaperSetStatusSync(@PendingWallpaperSetStatus setStatus: Int) {
+ noBackupPrefs
+ .edit()
+ .putInt(NoBackupKeys.KEY_PENDING_WALLPAPER_SET_STATUS, setStatus)
+ .commit()
+ }
+
+ @PendingWallpaperSetStatus
+ override fun getPendingWallpaperSetStatus(): Int {
+ return noBackupPrefs.getInt(
+ NoBackupKeys.KEY_PENDING_WALLPAPER_SET_STATUS,
+ WallpaperPreferences.WALLPAPER_SET_NOT_PENDING
+ )
+ }
+
+ override fun setPendingWallpaperSetStatus(@PendingWallpaperSetStatus setStatus: Int) {
+ noBackupPrefs
+ .edit()
+ .putInt(NoBackupKeys.KEY_PENDING_WALLPAPER_SET_STATUS, setStatus)
+ .apply()
+ }
+
+ override fun setPendingDailyWallpaperUpdateStatusSync(
+ @PendingDailyWallpaperUpdateStatus updateStatus: Int
+ ) {
+ noBackupPrefs
+ .edit()
+ .putInt(NoBackupKeys.KEY_PENDING_DAILY_WALLPAPER_UPDATE_STATUS, updateStatus)
+ .commit()
+ }
+
+ @PendingDailyWallpaperUpdateStatus
+ override fun getPendingDailyWallpaperUpdateStatus(): Int {
+ return noBackupPrefs.getInt(
+ NoBackupKeys.KEY_PENDING_DAILY_WALLPAPER_UPDATE_STATUS,
+ WallpaperPreferences.DAILY_WALLPAPER_UPDATE_NOT_PENDING
+ )
+ }
+
+ override fun setPendingDailyWallpaperUpdateStatus(
+ @PendingDailyWallpaperUpdateStatus updateStatus: Int
+ ) {
+ noBackupPrefs
+ .edit()
+ .putInt(NoBackupKeys.KEY_PENDING_DAILY_WALLPAPER_UPDATE_STATUS, updateStatus)
+ .apply()
+ }
+
+ override fun getAppLaunchCount(): Int {
+ return noBackupPrefs.getInt(NoBackupKeys.KEY_APP_LAUNCH_COUNT, 0)
+ }
+
+ override fun getFirstLaunchDateSinceSetup(): Int {
+ return noBackupPrefs.getInt(NoBackupKeys.KEY_FIRST_LAUNCH_DATE_SINCE_SETUP, 0)
+ }
+
+ override fun incrementAppLaunched() {
+ if (getFirstLaunchDateSinceSetup() == 0) {
+ setFirstLaunchDateSinceSetup(getCurrentDate())
+ }
+
+ val appLaunchCount = getAppLaunchCount()
+ if (appLaunchCount < Int.MAX_VALUE) {
+ setAppLaunchCount(appLaunchCount + 1)
+ }
+ }
+
+ override fun getFirstWallpaperApplyDateSinceSetup(): Int {
+ return noBackupPrefs.getInt(NoBackupKeys.KEY_FIRST_WALLPAPER_APPLY_DATE_SINCE_SETUP, 0)
+ }
+
+ override fun storeWallpaperColors(
+ storedWallpaperId: String?,
+ wallpaperColors: WallpaperColors?
+ ) {
+ if (storedWallpaperId == null || wallpaperColors == null) {
+ return
+ }
+ val primaryColor = wallpaperColors.primaryColor
+ var value = java.lang.String(primaryColor.toArgb().toString()) as String
+ val secondaryColor = wallpaperColors.secondaryColor
+ if (secondaryColor != null) {
+ value += "," + secondaryColor.toArgb()
+ }
+ val tertiaryColor = wallpaperColors.tertiaryColor
+ if (tertiaryColor != null) {
+ value += "," + tertiaryColor.toArgb()
+ }
+ noBackupPrefs
+ .edit()
+ .putString(NoBackupKeys.KEY_PREVIEW_WALLPAPER_COLOR_ID + storedWallpaperId, value)
+ .apply()
+ }
+
+ override fun getWallpaperColors(storedWallpaperId: String): WallpaperColors? {
+ val value =
+ noBackupPrefs.getString(
+ NoBackupKeys.KEY_PREVIEW_WALLPAPER_COLOR_ID + storedWallpaperId,
+ null
+ )
+ if (value == null || value.isEmpty()) {
+ return null
+ }
+ val colorStrings = value.split(",")
+ val colorPrimary = Color.valueOf(colorStrings[0].toInt())
+ var colorSecondary: Color? = null
+ if (colorStrings.size >= 2) {
+ colorSecondary = Color.valueOf(colorStrings[1].toInt())
+ }
+ var colorTerTiary: Color? = null
+ if (colorStrings.size >= 3) {
+ colorTerTiary = Color.valueOf(colorStrings[2].toInt())
+ }
+ return WallpaperColors(
+ colorPrimary,
+ colorSecondary,
+ colorTerTiary,
+ WallpaperColors.HINT_FROM_BITMAP
+ )
+ }
+
+ override fun updateDailyWallpaperSet(
+ @WallpaperPersister.Destination destination: Int,
+ collectionId: String?,
+ wallpaperId: String?,
+ ) {
+ // Assign wallpaper info by destination.
+ when (destination) {
+ WallpaperPersister.DEST_HOME_SCREEN -> {
+ setHomeWallpaperCollectionId(collectionId!!)
+ setHomeWallpaperRemoteId(wallpaperId)
+ }
+ WallpaperPersister.DEST_LOCK_SCREEN -> {
+ setLockWallpaperCollectionId(collectionId!!)
+ setLockWallpaperRemoteId(wallpaperId!!)
+ }
+ WallpaperPersister.DEST_BOTH -> {
+ setHomeWallpaperCollectionId(collectionId!!)
+ setHomeWallpaperRemoteId(wallpaperId)
+ setLockWallpaperCollectionId(collectionId)
+ setLockWallpaperRemoteId(wallpaperId!!)
+ }
+ }
+ setHomeWallpaperEffects(null)
+ }
+
+ override fun storeLatestWallpaper(
+ @SetWallpaperFlags which: Int,
+ wallpaperId: String,
+ wallpaper: LiveWallpaperInfo,
+ colors: WallpaperColors,
+ ) {}
+
+ override fun storeLatestWallpaper(
+ @SetWallpaperFlags which: Int,
+ wallpaperId: String,
+ wallpaper: WallpaperInfo,
+ croppedWallpaperBitmap: Bitmap,
+ colors: WallpaperColors,
+ ) {}
+
+ override fun storeLatestWallpaper(
+ @SetWallpaperFlags which: Int,
+ wallpaperId: String,
+ attributions: List<String>?,
+ actionUrl: String?,
+ collectionId: String?,
+ croppedWallpaperBitmap: Bitmap,
+ colors: WallpaperColors,
+ ) {}
+
+ override suspend fun addStaticWallpaperToRecentWallpapers(
+ destination: WallpaperDestination,
+ wallpaperModel: WallpaperModel.StaticWallpaperModel,
+ bitmap: Bitmap,
+ cropHints: Map<ScreenOrientation, Rect?>,
+ ) {}
+
+ override fun storeWallpaperCropHints(cropHints: Map<ScreenOrientation, Rect?>) {
+ noBackupPrefs.edit {
+ cropHints.forEach { (orientation, rect) ->
+ putString(getScreenOrientationPrefKey(orientation), rect?.flattenToString())
+ }
+ }
+ }
+
+ override fun getWallpaperCropHints(): Map<ScreenOrientation, Rect?> {
+ return ScreenOrientation.entries.associateWith {
+ Rect.unflattenFromString(noBackupPrefs.getString(getScreenOrientationPrefKey(it), null))
+ }
+ }
+
+ private fun getScreenOrientationPrefKey(orientation: ScreenOrientation): String {
+ return when (orientation) {
+ ScreenOrientation.PORTRAIT -> NoBackupKeys.KEY_CROP_HINT_PORTRAIT
+ ScreenOrientation.LANDSCAPE -> NoBackupKeys.KEY_CROP_HINT_LANDSCAPE
+ ScreenOrientation.UNFOLDED_LANDSCAPE -> NoBackupKeys.KEY_CROP_HINT_UNFOLDED_LANDSCAPE
+ ScreenOrientation.UNFOLDED_PORTRAIT -> NoBackupKeys.KEY_CROP_HINT_UNFOLDED_PORTRAIT
+ }
+ }
+
+ private fun setFirstLaunchDateSinceSetup(firstLaunchDate: Int) {
+ noBackupPrefs
+ .edit()
+ .putInt(NoBackupKeys.KEY_FIRST_LAUNCH_DATE_SINCE_SETUP, firstLaunchDate)
+ .apply()
+ }
+
+ private fun setAppLaunchCount(count: Int) {
+ noBackupPrefs.edit().putInt(NoBackupKeys.KEY_APP_LAUNCH_COUNT, count).apply()
+ }
+
+ private fun setFirstWallpaperApplyDateSinceSetup(firstApplyDate: Int) {
+ noBackupPrefs
+ .edit()
+ .putInt(NoBackupKeys.KEY_FIRST_WALLPAPER_APPLY_DATE_SINCE_SETUP, firstApplyDate)
+ .apply()
+ }
+
+ private fun setFirstWallpaperApplyDateIfNeeded() {
+ if (getFirstWallpaperApplyDateSinceSetup() == 0) {
+ setFirstWallpaperApplyDateSinceSetup(getCurrentDate())
+ }
+ }
+
+ private fun getCurrentDate(): Int {
+ val calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"))
+ val format = SimpleDateFormat("yyyyMMdd", Locale.US)
+ return format.format(calendar.time).toInt()
+ }
+
+ companion object {
+ const val PREFS_NAME = "wallpaper"
+ const val NO_BACKUP_PREFS_NAME = "wallpaper-nobackup"
+ private const val TAG = "DefaultWallpaperPreferences"
+ }
+}
diff --git a/src/com/android/wallpaper/module/DefaultWallpaperRefresher.java b/src/com/android/wallpaper/module/DefaultWallpaperRefresher.java
index 7bebddd1..1d308271 100755
--- a/src/com/android/wallpaper/module/DefaultWallpaperRefresher.java
+++ b/src/com/android/wallpaper/module/DefaultWallpaperRefresher.java
@@ -23,6 +23,7 @@ import android.app.WallpaperManager;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
+import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.os.AsyncTask;
import android.os.ParcelFileDescriptor;
@@ -32,13 +33,16 @@ import com.android.wallpaper.R;
import com.android.wallpaper.asset.BitmapUtils;
import com.android.wallpaper.model.LiveWallpaperMetadata;
import com.android.wallpaper.model.WallpaperMetadata;
+import com.android.wallpaper.model.wallpaper.ScreenOrientation;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
/**
* Default implementation of {@link WallpaperRefresher} which refreshes wallpaper metadata
@@ -112,11 +116,9 @@ public class DefaultWallpaperRefresher implements WallpaperRefresher {
wallpaperMetadatas.add(new WallpaperMetadata(
mWallpaperPreferences.getHomeWallpaperAttributions(),
mWallpaperPreferences.getHomeWallpaperActionUrl(),
- mWallpaperPreferences.getHomeWallpaperActionLabelRes(),
- mWallpaperPreferences.getHomeWallpaperActionIconRes(),
mWallpaperPreferences.getHomeWallpaperCollectionId(),
- mWallpaperPreferences.getHomeWallpaperBackingFileName(),
- null));
+ /* wallpaperComponent= */ null,
+ getCurrentWallpaperCropHints(FLAG_SYSTEM)));
} else {
wallpaperMetadatas.add(
new LiveWallpaperMetadata(mWallpaperManager.getWallpaperInfo()));
@@ -135,16 +137,13 @@ public class DefaultWallpaperRefresher implements WallpaperRefresher {
setFallbackLockScreenWallpaperMetadata();
}
- if (mWallpaperManager.getWallpaperInfo(FLAG_LOCK) == null
- || !mWallpaperManager.isLockscreenLiveWallpaperEnabled()) {
+ if (mWallpaperManager.getWallpaperInfo(FLAG_LOCK) == null) {
wallpaperMetadatas.add(new WallpaperMetadata(
mWallpaperPreferences.getLockWallpaperAttributions(),
mWallpaperPreferences.getLockWallpaperActionUrl(),
- mWallpaperPreferences.getLockWallpaperActionLabelRes(),
- mWallpaperPreferences.getLockWallpaperActionIconRes(),
mWallpaperPreferences.getLockWallpaperCollectionId(),
- mWallpaperPreferences.getLockWallpaperBackingFileName(),
- null));
+ /* wallpaperComponent= */ null,
+ getCurrentWallpaperCropHints(FLAG_LOCK)));
} else {
wallpaperMetadatas.add(new LiveWallpaperMetadata(
mWallpaperManager.getWallpaperInfo(FLAG_LOCK)));
@@ -360,5 +359,11 @@ public class DefaultWallpaperRefresher implements WallpaperRefresher {
&& attributions.get(1) == null
&& attributions.get(2) == null;
}
+
+ private Map<ScreenOrientation, Rect> getCurrentWallpaperCropHints(
+ @WallpaperManager.SetWallpaperFlags int which) {
+ // TODO(b/303317694): Get cropHints from interactor.
+ return new HashMap<ScreenOrientation, Rect>();
+ }
}
}
diff --git a/src/com/android/wallpaper/module/Injector.kt b/src/com/android/wallpaper/module/Injector.kt
index bd8782d6..97443cc3 100755
--- a/src/com/android/wallpaper/module/Injector.kt
+++ b/src/com/android/wallpaper/module/Injector.kt
@@ -15,21 +15,24 @@
*/
package com.android.wallpaper.module
+import android.app.WallpaperColors
import android.content.Context
import android.content.Intent
import android.net.Uri
import androidx.activity.ComponentActivity
import androidx.fragment.app.Fragment
import androidx.lifecycle.LifecycleOwner
+import com.android.customization.model.color.WallpaperColorResources
import com.android.wallpaper.config.BaseFlags
import com.android.wallpaper.effects.EffectsController
import com.android.wallpaper.model.CategoryProvider
import com.android.wallpaper.model.InlinePreviewIntentFactory
-import com.android.wallpaper.model.WallpaperColorsViewModel
import com.android.wallpaper.model.WallpaperInfo
+import com.android.wallpaper.module.logging.UserEventLogger
import com.android.wallpaper.monitor.PerformanceMonitor
import com.android.wallpaper.network.Requester
import com.android.wallpaper.picker.MyPhotosStarter.MyPhotosIntentProvider
+import com.android.wallpaper.picker.customization.data.repository.WallpaperColorsRepository
import com.android.wallpaper.picker.customization.domain.interactor.WallpaperInteractor
import com.android.wallpaper.picker.customization.domain.interactor.WallpaperSnapshotRestorer
import com.android.wallpaper.picker.undo.domain.interactor.SnapshotRestorer
@@ -104,8 +107,6 @@ interface Injector {
fun getWallpaperRefresher(context: Context): WallpaperRefresher
- fun getWallpaperRotationRefresher(): WallpaperRotationRefresher
-
fun getWallpaperStatusChecker(context: Context): WallpaperStatusChecker
fun getFragmentFactory(): FragmentFactory? {
@@ -127,7 +128,12 @@ interface Injector {
fun getWallpaperSnapshotRestorer(context: Context): WallpaperSnapshotRestorer
- fun getWallpaperColorsViewModel(): WallpaperColorsViewModel
+ fun getWallpaperColorsRepository(): WallpaperColorsRepository
+
+ fun getWallpaperColorResources(
+ wallpaperColors: WallpaperColors,
+ context: Context
+ ): WallpaperColorResources
fun getMyPhotosIntentProvider(): MyPhotosIntentProvider
diff --git a/src/com/android/wallpaper/module/NoOpUserEventLogger.java b/src/com/android/wallpaper/module/NoOpUserEventLogger.java
deleted file mode 100755
index 36f4f7f8..00000000
--- a/src/com/android/wallpaper/module/NoOpUserEventLogger.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Copyright (C) 2017 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.module;
-
-import android.content.Intent;
-
-/**
- * {@link UserEventLogger} which does not do anything.
- */
-public class NoOpUserEventLogger implements UserEventLogger {
-
- @Override
- public void logResumed(boolean provisioned, boolean wallpaper) {
-
- }
-
- @Override
- public void logStopped() {
-
- }
-
- @Override
- public void logAppLaunched(Intent launchSource) {
- }
-
- @Override
- public void logDailyRefreshTurnedOn() {
- }
-
- @Override
- public void logCurrentWallpaperPreviewed() {
- }
-
- @Override
- public void logActionClicked(String collectionId, int actionLabelResId) {
- }
-
- @Override
- public void logIndividualWallpaperSelected(String collectionId) {
- }
-
- @Override
- public void logCategorySelected(String collectionId) {
- }
-
- @Override
- public void logSnapshot() {
- }
-
- @Override
- public void logWallpaperSet(String collectionId, String wallpaperId, String effects){
-
- }
-
- @Override
- public void logWallpaperSetResult(@WallpaperSetResult int result) {
- }
-
- @Override
- public void logWallpaperSetFailureReason(@WallpaperSetFailureReason int reason) {
- }
-
- @Override
- public void logNumDailyWallpaperRotationsInLastWeek() {
- }
-
- @Override
- public void logNumDailyWallpaperRotationsPreviousDay() {
- }
-
- @Override
- public void logDailyWallpaperRotationHour(int hour) {
- }
-
- @Override
- public void logDailyWallpaperDecodes(boolean decodes) {
- }
-
- @Override
- public void logRefreshDailyWallpaperButtonClicked() {
- }
-
- @Override
- public void logDailyWallpaperRotationStatus(int status) {
- }
-
- @Override
- public void logDailyWallpaperSetNextWallpaperResult(
- @DailyWallpaperUpdateResult int result) {
- }
-
- @Override
- public void logDailyWallpaperSetNextWallpaperCrash(@DailyWallpaperUpdateCrash int crash) {
- }
-
- @Override
- public void logNumDaysDailyRotationFailed(int days) {
- }
-
- @Override
- public void logDailyWallpaperMetadataRequestFailure(
- @DailyWallpaperMetadataFailureReason int reason) {
- }
-
- @Override
- public void logNumDaysDailyRotationNotAttempted(int days) {
- }
-
- @Override
- public void logStandalonePreviewLaunched() {
- }
-
- @Override
- public void logStandalonePreviewImageUriHasReadPermission(boolean isReadPermissionGranted) {
- }
-
- @Override
- public void logStandalonePreviewStorageDialogApproved(boolean isApproved) {
- }
-
- @Override
- public void logWallpaperPresentationMode() {
- }
-
- @Override
- public void logRestored() {
- }
-
- @Override
- public void logEffectApply(String effect, int status, long timeElapsedMillis, int resultCode) {
-
- }
-
- @Override
- public void logEffectProbe(String effect, int status) {
-
- }
-
- @Override
- public void logEffectForegroundDownload(String effect, int status, long timeElapsedMillis) {
-
- }
-}
diff --git a/src/com/android/wallpaper/module/RotationWallpaperUpdateReceiver.java b/src/com/android/wallpaper/module/RotationWallpaperUpdateReceiver.java
index 246b31e9..4a314755 100644
--- a/src/com/android/wallpaper/module/RotationWallpaperUpdateReceiver.java
+++ b/src/com/android/wallpaper/module/RotationWallpaperUpdateReceiver.java
@@ -96,8 +96,6 @@ public class RotationWallpaperUpdateReceiver extends BroadcastReceiver {
injector.getWallpaperPersister(appContext).setWallpaperInRotation(bitmap,
wallpaperPreferences.getHomeWallpaperAttributions(),
- wallpaperPreferences.getHomeWallpaperActionLabelRes(),
- wallpaperPreferences.getHomeWallpaperActionIconRes(),
wallpaperPreferences.getHomeWallpaperActionUrl(),
wallpaperPreferences.getHomeWallpaperCollectionId(),
wallpaperPreferences.getHomeWallpaperRemoteId());
diff --git a/src/com/android/wallpaper/module/UserEventLogger.java b/src/com/android/wallpaper/module/UserEventLogger.java
deleted file mode 100755
index 7c562ad0..00000000
--- a/src/com/android/wallpaper/module/UserEventLogger.java
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * Copyright (C) 2017 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.module;
-
-import static android.stats.style.StyleEnums.EFFECT_APPLIED_ABORTED;
-import static android.stats.style.StyleEnums.EFFECT_APPLIED_OFF;
-import static android.stats.style.StyleEnums.EFFECT_APPLIED_ON_FAILED;
-import static android.stats.style.StyleEnums.EFFECT_APPLIED_ON_SUCCESS;
-import static android.stats.style.StyleEnums.EFFECT_APPLIED_STARTED;
-import static android.stats.style.StyleEnums.EFFECT_PREFERENCE_UNSPECIFIED;
-
-import android.content.Intent;
-
-import androidx.annotation.IntDef;
-
-/**
- * Interface for logging user events in the wallpaper picker.
- */
-public interface UserEventLogger {
-
- int ROTATION_STATUS_NOT_ATTEMPTED = 0;
- int ROTATION_STATUS_FAILED = 5;
-
- int WALLPAPER_SET_RESULT_SUCCESS = 0;
- int WALLPAPER_SET_RESULT_FAILURE = 1;
- int DAILY_WALLPAPER_UPDATE_RESULT_SUCCESS = 0;
- int DAILY_WALLPAPER_UPDATE_RESULT_FAILURE_LOAD_METADATA = 1;
- int DAILY_WALLPAPER_UPDATE_RESULT_FAILURE_LOAD_BITMAP = 2;
- int DAILY_WALLPAPER_UPDATE_RESULT_FAILURE_SET_WALLPAPER = 3;
- int DAILY_WALLPAPER_UPDATE_RESULT_FAILURE_CRASH = 4;
- int WALLPAPER_SET_FAILURE_REASON_OTHER = 0;
- int WALLPAPER_SET_FAILURE_REASON_OOM = 1;
- int DAILY_WALLPAPER_UPDATE_CRASH_GENERIC = 0;
- int DAILY_WALLPAPER_UPDATE_CRASH_OOM = 1;
- int DAILY_WALLPAPER_METADATA_FAILURE_UNKNOWN = 0;
- int DAILY_WALLPAPER_METADATA_FAILURE_NO_CONNECTION = 1;
- int DAILY_WALLPAPER_METADATA_FAILURE_PARSE_ERROR = 2;
- int DAILY_WALLPAPER_METADATA_FAILURE_SERVER_ERROR = 3;
- int DAILY_WALLPAPER_METADATA_FAILURE_TIMEOUT = 4;
-
- void logResumed(boolean provisioned, boolean wallpaper);
-
- void logStopped();
-
- void logAppLaunched(Intent launchSource);
-
- void logDailyRefreshTurnedOn();
-
- void logCurrentWallpaperPreviewed();
-
- void logActionClicked(String collectionId, int actionLabelResId);
-
- void logIndividualWallpaperSelected(String collectionId);
-
- void logCategorySelected(String collectionId);
-
- /**
- * Log current existing snapshot data.
- */
- void logSnapshot();
-
- /**
- * Logs the behavior when applying wallpaper.
- *
- * @param collectionId wallpaper category.
- * @param wallpaperId wallpaper id.
- * @param effects effects set with wallpaper.
- */
- void logWallpaperSet(String collectionId, String wallpaperId, String effects);
-
- void logWallpaperSetResult(@WallpaperSetResult int result);
-
- /**
- * Logs that a particular failure to set an individual wallpaper occurred for the given reason.
- */
- void logWallpaperSetFailureReason(@WallpaperSetFailureReason int reason);
-
- /**
- * Logs the number of daily rotations that occurred in the last week if daily rotation has
- * been enabled for at least a week.
- */
- void logNumDailyWallpaperRotationsInLastWeek();
-
- /**
- * Logs the number of daily rotations that occurred during the previous day (24 hour period
- * midnight to midnight) if daily rotation has been enabled at least since midnight yesterday.
- */
- void logNumDailyWallpaperRotationsPreviousDay();
-
- /**
- * Logs given the hour of day that a successful "daily wallpaper" rotation occurred.
- *
- * @param hour An hour from 0 to 23.
- */
- void logDailyWallpaperRotationHour(int hour);
-
- /**
- * Logs whether the image file for the daily wallpaper "rotating image wallpaper" is successfully
- * decoded as a bitmap.
- *
- * @param decodes Whether the decode succeeded.
- */
- void logDailyWallpaperDecodes(boolean decodes);
-
- /**
- * Logs the last-known status of daily wallpapers on the device.
- */
- void logDailyWallpaperRotationStatus(int status);
-
- /**
- * Logs the result of an operation to update the daily wallpaper.
- */
- void logDailyWallpaperSetNextWallpaperResult(@DailyWallpaperUpdateResult int result);
-
- /**
- * Logs that a particular crash occurred when trying to set the next wallpaper in a daily
- * rotation.
- */
- void logDailyWallpaperSetNextWallpaperCrash(@DailyWallpaperUpdateCrash int crash);
-
- /**
- * Logs that the request for metadata for the next wallpaper in a daily rotation failed for the
- * given reason.
- */
- void logDailyWallpaperMetadataRequestFailure(@DailyWallpaperMetadataFailureReason int reason);
-
- /**
- * Logs that the "refresh daily wallpaper" button was clicked.
- */
- void logRefreshDailyWallpaperButtonClicked();
-
- /**
- * Logs the number of consecutive days that daily rotation was attempted but failed.
- */
- void logNumDaysDailyRotationFailed(int days);
-
- /**
- * Logs the number of consecutive days that daily rotation was not attempted but should have been
- * attempted ("network conditions not met" doesn't count).
- */
- void logNumDaysDailyRotationNotAttempted(int days);
-
- /**
- * Logs that the StandalonePreviewActivity was launched.
- */
- void logStandalonePreviewLaunched();
-
- /**
- * Logs whether the image URI passed to StandalonePreviewActivity came properly preconfigured with
- * read permissions.
- */
- void logStandalonePreviewImageUriHasReadPermission(boolean isReadPermissionGranted);
-
- /**
- * Logs whether the user approved the runtime dialog to grant this app READ_MEDIA_IMAGES
- * permission in order to open an image URI.
- */
- void logStandalonePreviewStorageDialogApproved(boolean isApproved);
-
- /**
- * Logs the presentation mode of the current wallpaper.
- */
- void logWallpaperPresentationMode();
-
- /**
- * Logs that the app was restored from a backup set.
- */
- void logRestored();
-
- /**
- * Logs the action related to effect.
- */
- void logEffectApply(String effect, @EffectStatus int status, long timeElapsedMillis,
- int resultCode);
-
- /**
- * Logs the effect probe result.
- */
- void logEffectProbe(String effect, @EffectStatus int status);
-
- /**
- * Logs the effect foreground download event.
- */
- void logEffectForegroundDownload(String effect, @EffectStatus int status,
- long timeElapsedMillis);
-
- /**
- * Possible results of a "set wallpaper" operation.
- */
- @IntDef({
- WALLPAPER_SET_RESULT_SUCCESS,
- WALLPAPER_SET_RESULT_FAILURE})
- @interface WallpaperSetResult {
- }
-
- /**
- * Possible results of an operation to set the next wallpaper in a daily rotation.
- */
- @IntDef({
- DAILY_WALLPAPER_UPDATE_RESULT_SUCCESS,
- DAILY_WALLPAPER_UPDATE_RESULT_FAILURE_LOAD_METADATA,
- DAILY_WALLPAPER_UPDATE_RESULT_FAILURE_LOAD_BITMAP,
- DAILY_WALLPAPER_UPDATE_RESULT_FAILURE_SET_WALLPAPER,
- DAILY_WALLPAPER_UPDATE_RESULT_FAILURE_CRASH})
- @interface DailyWallpaperUpdateResult {
- }
-
- /**
- * Possible reasons setting an individual wallpaper failed.
- */
- @IntDef({
- WALLPAPER_SET_FAILURE_REASON_OTHER,
- WALLPAPER_SET_FAILURE_REASON_OOM})
- @interface WallpaperSetFailureReason {
- }
-
- /**
- * Possible crash types of a crashing failed "set next wallpaper" operation when daily rotation
- * is enabled and trying to set the next wallpaper.
- */
- @IntDef({
- DAILY_WALLPAPER_UPDATE_CRASH_GENERIC,
- DAILY_WALLPAPER_UPDATE_CRASH_OOM})
- @interface DailyWallpaperUpdateCrash {
- }
-
- /**
- * Possible reasons for a request for "next wallpaper" metadata in a daily rotation to fail.
- */
- @IntDef({
- DAILY_WALLPAPER_METADATA_FAILURE_UNKNOWN,
- DAILY_WALLPAPER_METADATA_FAILURE_NO_CONNECTION,
- DAILY_WALLPAPER_METADATA_FAILURE_PARSE_ERROR,
- DAILY_WALLPAPER_METADATA_FAILURE_SERVER_ERROR,
- DAILY_WALLPAPER_METADATA_FAILURE_TIMEOUT})
- @interface DailyWallpaperMetadataFailureReason {
- }
-
- /**
- * Possible actions for cinematic effect. These actions would be used for effect apply,
- * effect probe, effect download.
- */
- @IntDef({
- EFFECT_PREFERENCE_UNSPECIFIED,
- EFFECT_APPLIED_ON_SUCCESS,
- EFFECT_APPLIED_ON_FAILED,
- EFFECT_APPLIED_OFF,
- EFFECT_APPLIED_ABORTED,
- EFFECT_APPLIED_STARTED
- })
- @interface EffectStatus {
- }
-}
diff --git a/src/com/android/wallpaper/module/WallpaperPersister.java b/src/com/android/wallpaper/module/WallpaperPersister.java
index b6f92fb2..00e0143a 100755
--- a/src/com/android/wallpaper/module/WallpaperPersister.java
+++ b/src/com/android/wallpaper/module/WallpaperPersister.java
@@ -73,12 +73,13 @@ public interface WallpaperPersister {
* @return Whether the set wallpaper operation was successful.
*/
boolean setWallpaperInRotation(Bitmap wallpaperBitmap, List<String> attributions,
- int actionLabelRes, int actionIconRes,
- String actionUrl, String collectionId, String remoteId);
+ String actionUrl, String collectionId, String remoteId);
/**
* Sets only the bitmap of a rotating wallpaper of the next rotation to the system and stores
* the given static wallpaper data in the recent wallpapers list (and not metadata).
+ * This function is used for the very first time setting the rotation wallpaper. It is called
+ * after the user initiates rotation wallpaper and the first wallpaper is downloaded.
*
* @param wallpaperBitmap The rotating wallpaper's bitmap.
* @param attributions List of attribution items.
@@ -104,8 +105,7 @@ public interface WallpaperPersister {
* @return Whether the operation succeeded.
*/
boolean finalizeWallpaperForNextRotation(List<String> attributions, String actionUrl,
- int actionLabelRes, int actionIconRes,
- String collectionId, int wallpaperId, String remoteId);
+ String collectionId, int wallpaperId, String remoteId);
/**
* Finalizes wallpaper metadata by persisting them to SharedPreferences and finalizes the
@@ -114,8 +114,6 @@ public interface WallpaperPersister {
*
* @param attributions List of attribution items.
* @param actionUrl The action or "explore" URL for the wallpaper.
- * @param actionLabelRes Resource ID of the action label
- * @param actionIconRes Resource ID of the action icon
* @param collectionId ID of this wallpaper's collection.
* @param wallpaperId ID that uniquely identifies a wallpaper set to the
* {@link android.app.WallpaperManager}.
@@ -125,8 +123,6 @@ public interface WallpaperPersister {
*/
boolean saveStaticWallpaperMetadata(List<String> attributions,
String actionUrl,
- int actionLabelRes,
- int actionIconRes,
String collectionId,
int wallpaperId,
String remoteId,
diff --git a/src/com/android/wallpaper/module/WallpaperPicker2Injector.kt b/src/com/android/wallpaper/module/WallpaperPicker2Injector.kt
index ddacf7b9..d1350204 100755
--- a/src/com/android/wallpaper/module/WallpaperPicker2Injector.kt
+++ b/src/com/android/wallpaper/module/WallpaperPicker2Injector.kt
@@ -15,6 +15,7 @@
*/
package com.android.wallpaper.module
+import android.app.WallpaperColors
import android.app.WallpaperManager
import android.content.Context
import android.content.Intent
@@ -23,15 +24,14 @@ import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.fragment.app.Fragment
import androidx.lifecycle.LifecycleOwner
+import com.android.customization.model.color.WallpaperColorResources
import com.android.wallpaper.config.BaseFlags
-import com.android.wallpaper.dispatchers.BackgroundDispatcher
-import com.android.wallpaper.dispatchers.MainDispatcher
import com.android.wallpaper.effects.EffectsController
import com.android.wallpaper.model.CategoryProvider
import com.android.wallpaper.model.InlinePreviewIntentFactory
import com.android.wallpaper.model.LiveWallpaperInfo
-import com.android.wallpaper.model.WallpaperColorsViewModel
import com.android.wallpaper.model.WallpaperInfo
+import com.android.wallpaper.module.logging.UserEventLogger
import com.android.wallpaper.monitor.PerformanceMonitor
import com.android.wallpaper.network.Requester
import com.android.wallpaper.network.WallpaperRequester
@@ -43,9 +43,12 @@ import com.android.wallpaper.picker.PreviewActivity
import com.android.wallpaper.picker.PreviewFragment
import com.android.wallpaper.picker.ViewOnlyPreviewActivity
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.customization.domain.interactor.WallpaperSnapshotRestorer
+import com.android.wallpaper.picker.di.modules.BackgroundDispatcher
+import com.android.wallpaper.picker.di.modules.MainDispatcher
import com.android.wallpaper.picker.individual.IndividualPickerFragment
import com.android.wallpaper.picker.undo.data.repository.UndoRepository
import com.android.wallpaper.picker.undo.domain.interactor.UndoInteractor
@@ -63,6 +66,7 @@ open class WallpaperPicker2Injector
internal constructor(
@MainDispatcher private val mainScope: CoroutineScope,
@BackgroundDispatcher private val bgDispatcher: CoroutineDispatcher,
+ private val userEventLogger: UserEventLogger,
) : Injector {
private var alarmManagerWrapper: AlarmManagerWrapper? = null
private var bitmapCropper: BitmapCropper? = null
@@ -79,18 +83,17 @@ internal constructor(
private var performanceMonitor: PerformanceMonitor? = null
private var requester: Requester? = null
private var systemFeatureChecker: SystemFeatureChecker? = null
- private var userEventLogger: UserEventLogger? = null
private var wallpaperPersister: WallpaperPersister? = null
@Inject lateinit var prefs: WallpaperPreferences
private var wallpaperRefresher: WallpaperRefresher? = null
- private var wallpaperRotationRefresher: WallpaperRotationRefresher? = null
private var wallpaperStatusChecker: WallpaperStatusChecker? = null
private var flags: BaseFlags? = null
private var undoInteractor: UndoInteractor? = null
private var wallpaperInteractor: WallpaperInteractor? = null
+ @Inject lateinit var injectedWallpaperInteractor: WallpaperInteractor
private var wallpaperSnapshotRestorer: WallpaperSnapshotRestorer? = null
private var secureSettingsRepository: SecureSettingsRepository? = null
- private var wallpaperColorsViewModel: WallpaperColorsViewModel? = null
+ private var wallpaperColorsRepository: WallpaperColorsRepository? = null
private var previewActivityIntentFactory: InlinePreviewIntentFactory? = null
private var viewOnlyPreviewActivityIntentFactory: InlinePreviewIntentFactory? = null
@@ -238,7 +241,7 @@ internal constructor(
}
override fun getUserEventLogger(context: Context): UserEventLogger {
- return userEventLogger ?: NoOpUserEventLogger().also { userEventLogger = it }
+ return userEventLogger
}
@Synchronized
@@ -246,12 +249,13 @@ internal constructor(
return wallpaperPersister
?: DefaultWallpaperPersister(
context.applicationContext,
- WallpaperManager.getInstance(context),
+ WallpaperManager.getInstance(context.applicationContext),
getPreferences(context),
WallpaperChangedNotifier.getInstance(),
getDisplayUtils(context),
getBitmapCropper(),
getWallpaperStatusChecker(context),
+ getCurrentWallpaperInfoFactory(context),
getFlags().isRefactorSettingWallpaper(),
)
.also { wallpaperPersister = it }
@@ -270,16 +274,6 @@ internal constructor(
}
}
- @Synchronized
- override fun getWallpaperRotationRefresher(): WallpaperRotationRefresher {
- return wallpaperRotationRefresher
- ?: WallpaperRotationRefresher { _, listener ->
- // Not implemented
- listener.onError()
- }
- .also { wallpaperRotationRefresher = it }
- }
-
override fun getWallpaperStatusChecker(context: Context): WallpaperStatusChecker {
return wallpaperStatusChecker
?: DefaultWallpaperStatusChecker(
@@ -306,6 +300,10 @@ internal constructor(
}
override fun getWallpaperInteractor(context: Context): WallpaperInteractor {
+ if (getFlags().isMultiCropEnabled() && getFlags().isMultiCropPreviewUiEnabled()) {
+ return injectedWallpaperInteractor
+ }
+
val appContext = context.applicationContext
return wallpaperInteractor
?: WallpaperInteractor(
@@ -315,8 +313,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,
@@ -343,9 +341,16 @@ internal constructor(
.also { secureSettingsRepository = it }
}
- override fun getWallpaperColorsViewModel(): WallpaperColorsViewModel {
- return wallpaperColorsViewModel
- ?: WallpaperColorsViewModel().also { wallpaperColorsViewModel = it }
+ override fun getWallpaperColorsRepository(): WallpaperColorsRepository {
+ return wallpaperColorsRepository
+ ?: WallpaperColorsRepository().also { wallpaperColorsRepository = it }
+ }
+
+ override fun getWallpaperColorResources(
+ wallpaperColors: WallpaperColors,
+ context: Context
+ ): WallpaperColorResources {
+ return WallpaperColorResources(wallpaperColors)
}
override fun getMyPhotosIntentProvider(): MyPhotosStarter.MyPhotosIntentProvider {
diff --git a/src/com/android/wallpaper/module/WallpaperPickerSections.java b/src/com/android/wallpaper/module/WallpaperPickerSections.java
index 7fce88c5..6c800a67 100644
--- a/src/com/android/wallpaper/module/WallpaperPickerSections.java
+++ b/src/com/android/wallpaper/module/WallpaperPickerSections.java
@@ -10,8 +10,8 @@ import androidx.lifecycle.LifecycleOwner;
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.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.section.WallpaperQuickSwitchSectionController;
@@ -29,7 +29,7 @@ public final class WallpaperPickerSections implements CustomizationSections {
Screen screen,
FragmentActivity activity,
LifecycleOwner lifecycleOwner,
- WallpaperColorsViewModel wallpaperColorsViewModel,
+ WallpaperColorsRepository wallpaperColorsRepository,
PermissionRequester permissionRequester,
WallpaperPreviewNavigator wallpaperPreviewNavigator,
CustomizationSectionNavigationController sectionNavigationController,
@@ -48,7 +48,7 @@ public final class WallpaperPickerSections implements CustomizationSections {
lifecycleOwner,
screen,
wallpaperInfoFactory,
- wallpaperColorsViewModel,
+ wallpaperColorsRepository,
displayUtils,
wallpaperPreviewNavigator,
wallpaperInteractor,
diff --git a/src/com/android/wallpaper/module/WallpaperPreferenceKeys.java b/src/com/android/wallpaper/module/WallpaperPreferenceKeys.java
index 0f4364b8..09828786 100755
--- a/src/com/android/wallpaper/module/WallpaperPreferenceKeys.java
+++ b/src/com/android/wallpaper/module/WallpaperPreferenceKeys.java
@@ -25,8 +25,6 @@ public class WallpaperPreferenceKeys {
public static final String KEY_HOME_WALLPAPER_ATTRIB_2 = "home_wallpaper_attribution_line_2";
public static final String KEY_HOME_WALLPAPER_ATTRIB_3 = "home_wallpaper_attribution_line_3";
public static final String KEY_HOME_WALLPAPER_ACTION_URL = "home_wallpaper_action_url";
- public static final String KEY_HOME_WALLPAPER_ACTION_LABEL_RES = "home_wallpaper_action_label";
- public static final String KEY_HOME_WALLPAPER_ACTION_ICON_RES = "home_wallpaper_action_icon";
public static final String KEY_HOME_WALLPAPER_COLLECTION_ID = "home_wallpaper_collection_id";
public static final String KEY_HOME_WALLPAPER_HASH_CODE = "home_wallpaper_hash_code";
@@ -34,8 +32,6 @@ public class WallpaperPreferenceKeys {
public static final String KEY_LOCK_WALLPAPER_ATTRIB_2 = "lock_wallpaper_attribution_line_2";
public static final String KEY_LOCK_WALLPAPER_ATTRIB_3 = "lock_wallpaper_attribution_line_3";
public static final String KEY_LOCK_WALLPAPER_ACTION_URL = "lock_wallpaper_action_url";
- public static final String KEY_LOCK_WALLPAPER_ACTION_LABEL_RES = "lock_wallpaper_action_label";
- public static final String KEY_LOCK_WALLPAPER_ACTION_ICON_RES = "lock_wallpaper_action_icon";
public static final String KEY_LOCK_WALLPAPER_HASH_CODE = "lock_wallpaper_hash_code";
public static final String KEY_LOCK_WALLPAPER_COLLECTION_ID = "lock_wallpaper_collection_id";
@@ -80,5 +76,9 @@ public class WallpaperPreferenceKeys {
String KEY_PREVIEW_WALLPAPER_COLOR_ID = "preview_wallpaper_color_id";
String KEY_HOME_WALLPAPER_EFFECTS = "home_wallpaper_effects";
String KEY_LOCK_WALLPAPER_EFFECTS = "lock_wallpaper_effects";
+ String KEY_CROP_HINT_PORTRAIT = "crop_hint_portrait";
+ String KEY_CROP_HINT_LANDSCAPE = "crop_hint_landscape";
+ String KEY_CROP_HINT_UNFOLDED_PORTRAIT = "crop_hint_unfolded_portrait";
+ String KEY_CROP_HINT_UNFOLDED_LANDSCAPE = "crop_hint_unfolded_landscape";
}
}
diff --git a/src/com/android/wallpaper/module/WallpaperPreferences.java b/src/com/android/wallpaper/module/WallpaperPreferences.java
deleted file mode 100755
index ea3a4213..00000000
--- a/src/com/android/wallpaper/module/WallpaperPreferences.java
+++ /dev/null
@@ -1,650 +0,0 @@
-/*
- * Copyright (C) 2017 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.module;
-
-import android.app.WallpaperColors;
-import android.app.WallpaperManager.SetWallpaperFlags;
-import android.graphics.Bitmap;
-import android.text.TextUtils;
-
-import androidx.annotation.IntDef;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import com.android.wallpaper.model.LiveWallpaperInfo;
-import com.android.wallpaper.model.StaticWallpaperMetadata;
-import com.android.wallpaper.model.WallpaperInfo;
-import com.android.wallpaper.module.WallpaperPersister.Destination;
-
-import java.util.List;
-
-/**
- * Interface for persisting and retrieving wallpaper specific preferences.
- */
-public interface WallpaperPreferences {
-
- int PRESENTATION_MODE_STATIC = 1;
- int PRESENTATION_MODE_ROTATING = 2;
- int WALLPAPER_SET_NOT_PENDING = 0;
- int WALLPAPER_SET_PENDING = 1;
- int DAILY_WALLPAPER_UPDATE_NOT_PENDING = 0;
- int DAILY_WALLPAPER_UPDATE_PENDING = 1;
-
- /**
- * Returns the wallpaper presentation mode.
- */
- @PresentationMode
- int getWallpaperPresentationMode();
-
- /**
- * Sets the presentation mode of the current wallpaper.
- */
- void setWallpaperPresentationMode(@PresentationMode int presentationMode);
-
- /**
- * Returns the home attributions as a list.
- */
- List<String> getHomeWallpaperAttributions();
-
- /**
- * Sets the attributions for the current home wallpaper. Clears existing attributions if any
- * exist.
- */
- void setHomeWallpaperAttributions(List<String> attributions);
-
- /**
- * Returns the home wallpaper's action URL or null if there is none.
- */
- String getHomeWallpaperActionUrl();
-
- /**
- * Sets the home wallpaper's action URL.
- */
- void setHomeWallpaperActionUrl(String actionUrl);
-
- /**
- * Returns the resource id for the home wallpaper's action label.
- */
- int getHomeWallpaperActionLabelRes();
-
- /**
- * Sets the resource id for the home wallpaper's action label.
- */
- void setHomeWallpaperActionLabelRes(int resId);
-
- /**
- * Returns the resource id for the home wallpaper's action icon.
- */
- int getHomeWallpaperActionIconRes();
-
- /**
- * Sets the resource id for the home wallpaper's action icon.
- */
- void setHomeWallpaperActionIconRes(int resId);
-
- /**
- * Returns the home wallpaper's base image URL or if there is none.
- */
- String getHomeWallpaperBaseImageUrl();
-
- /**
- * Sets the home wallpaper's base image URL.
- */
- void setHomeWallpaperBaseImageUrl(String baseImageUrl);
-
- /**
- * Returns the home wallpaper's collection ID or null if there is none.
- */
- String getHomeWallpaperCollectionId();
-
- /**
- * Sets the home wallpaper's collection ID.
- */
- void setHomeWallpaperCollectionId(String collectionId);
-
- /**
- * Returns the home wallpaper's backing file name if there's one or null.
- */
- String getHomeWallpaperBackingFileName();
-
- /**
- * Sets the home wallpaper's backing file name
- */
- void setHomeWallpaperBackingFileName(String fileName);
-
- /**
- * Removes all home metadata from SharedPreferences.
- */
- void clearHomeWallpaperMetadata();
-
- /**
- * Set homescreen static image wallpaper metadata to SharedPreferences.
- */
- void setHomeStaticImageWallpaperMetadata(StaticWallpaperMetadata metadata);
-
- /**
- * Returns the home wallpaper's bitmap hash code or 0 if there is none.
- */
- long getHomeWallpaperHashCode();
-
- /**
- * Sets the home wallpaper's bitmap hash code if it is an individual image.
- */
- void setHomeWallpaperHashCode(long hashCode);
-
- /**
- * Gets the home wallpaper's service name, which is present for live wallpapers.
- */
- String getHomeWallpaperServiceName();
-
- /**
- * Sets the home wallpaper's service name, which is present for live wallpapers.
- */
- void setHomeWallpaperServiceName(String serviceName);
-
- /**
- * Gets the home wallpaper's ID, which is provided by WallpaperManager for static wallpapers.
- */
- int getHomeWallpaperManagerId();
-
- /**
- * Sets the home wallpaper's ID, which is provided by WallpaperManager for static wallpapers.
- */
- void setHomeWallpaperManagerId(int homeWallpaperId);
-
- /**
- * Gets the home wallpaper's remote identifier.
- */
- String getHomeWallpaperRemoteId();
-
- /**
- * Sets the home wallpaper's remote identifier to SharedPreferences. This should be a string
- * which uniquely identifies the currently set home wallpaper in the context of a remote wallpaper
- * collection.
- */
- void setHomeWallpaperRemoteId(String wallpaperRemoteId);
-
- /**
- * Gets the home wallpaper's identifier used to index into the list of recent wallpapers.
- */
- @Nullable
- String getHomeWallpaperRecentsKey();
-
- /**
- * Sets the home wallpaper's identifier used to index into the list of recent wallpapers.
- */
- void setHomeWallpaperRecentsKey(String recentsKey);
-
- /**
- * Gets the home wallpaper's effects.
- */
- String getHomeWallpaperEffects();
-
- /**
- * Sets the home wallpaper's effects to SharedPreferences.
- *
- * @param wallpaperEffects The wallpaper effects.
- */
- void setHomeWallpaperEffects(String wallpaperEffects);
-
- /**
- * Returns the lock wallpaper's action URL or null if there is none.
- */
- String getLockWallpaperActionUrl();
-
- /**
- * Sets the lock wallpaper's action URL.
- */
- void setLockWallpaperActionUrl(String actionUrl);
-
- /**
- * Returns the resource id for the lock wallpaper's action label.
- */
- int getLockWallpaperActionLabelRes();
-
- /**
- * Sets the resource id for the lock wallpaper's action label.
- */
- void setLockWallpaperActionLabelRes(int resId);
-
- /**
- * Returns the resource id for the lock wallpaper's action icon.
- */
- int getLockWallpaperActionIconRes();
-
- /**
- * Sets the resource id for the lock wallpaper's action icon.
- */
- void setLockWallpaperActionIconRes(int resId);
-
- /**
- * Returns the lock wallpaper's collection ID or null if there is none.
- */
- String getLockWallpaperCollectionId();
-
- /**
- * Sets the lock wallpaper's collection ID.
- */
- void setLockWallpaperCollectionId(String collectionId);
-
- /**
- * Returns the home wallpaper's backing file name if there's one or null.
- */
- String getLockWallpaperBackingFileName();
-
- /**
- * Sets the home wallpaper's backing file name
- */
- void setLockWallpaperBackingFileName(String fileName);
-
- /**
- * Returns the lock screen attributions as a list.
- */
- List<String> getLockWallpaperAttributions();
-
- /**
- * Sets the attributions for the current lock screen wallpaper. Clears existing attributions if
- * any exist.
- *
- * @param attributions
- */
- void setLockWallpaperAttributions(List<String> attributions);
-
- /**
- * Removes all lock screen metadata from SharedPreferences.
- */
- void clearLockWallpaperMetadata();
-
- /**
- * Set lockscreen static image wallpaper metadata to SharedPreferences.
- */
- void setLockStaticImageWallpaperMetadata(StaticWallpaperMetadata metadata);
-
- /**
- * Returns the lock screen wallpaper's bitmap hash code or 0 if there is none.
- */
- long getLockWallpaperHashCode();
-
- /**
- * Sets the lock screen wallpaper's bitmap hash code if it is an individual image.
- */
- void setLockWallpaperHashCode(long hashCode);
-
- /**
- * Gets the lock wallpaper's service name, which is present for live wallpapers.
- */
- String getLockWallpaperServiceName();
-
- /**
- * Sets the lock wallpaper's service name, which is present for live wallpapers.
- */
- void setLockWallpaperServiceName(String serviceName);
-
- /**
- * Gets the lock wallpaper's ID, which is provided by WallpaperManager for static wallpapers.
- */
- int getLockWallpaperManagerId();
-
- /**
- * Sets the lock wallpaper's ID, which is provided by WallpaperManager for static wallpapers.
- */
- void setLockWallpaperManagerId(int lockWallpaperId);
-
- /**
- * Gets the lock wallpaper's remote identifier.
- */
- String getLockWallpaperRemoteId();
-
- /**
- * Sets the lock wallpaper's remote identifier to SharedPreferences. This should be a string
- * which uniquely identifies the currently set lock wallpaper in the context of a remote
- * wallpaper collection.
- */
- void setLockWallpaperRemoteId(String wallpaperRemoteId);
-
- /**
- * Gets lock home wallpaper's identifier used to index into the list of recent wallpapers.
- */
- @Nullable
- String getLockWallpaperRecentsKey();
-
- /**
- * Sets lock home wallpaper's identifier used to index into the list of recent wallpapers.
- */
- void setLockWallpaperRecentsKey(String recentsKey);
-
- /**
- * Gets the lock wallpaper's effects.
- */
- String getLockWallpaperEffects();
-
- /**
- * Sets the lock wallpaper's effects to SharedPreferences.
- *
- * @param wallpaperEffects The wallpaper effects.
- */
- void setLockWallpaperEffects(String wallpaperEffects);
-
- /**
- * Persists the timestamp of a daily wallpaper rotation that just occurred.
- */
- void addDailyRotation(long timestamp);
-
- /**
- * Returns the timestamp of the last wallpaper daily rotation or -1 if there has never been a
- * daily wallpaper rotation on the user's device.
- */
- long getLastDailyRotationTimestamp();
-
- /**
- * Gets a list of the daily rotation timestamps that occurred in the last week, from least
- * recent at the start of the list to most recent at the end of the list.
- * The timestamps are in milliseconds since Unix epoch.
- * If daily rotation has been enabled for less than one week, returns null instead.
- */
- @Nullable
- List<Long> getDailyRotationsInLastWeek();
-
- /**
- * Gets a list of the daily rotation timestamps that occurred the previous day (midnight to
- * midnight in the user's timezone). Timestamps are in milliseconds since Unix epoch. Returns null
- * if daily rotation was enabled earlier than midnight yesterday.
- */
- @Nullable
- List<Long> getDailyRotationsPreviousDay();
-
- /**
- * Returns the daily wallpaper enabled timestamp in milliseconds since Unix epoch, or -1 if
- * daily wallpaper is not currently enabled.
- */
- long getDailyWallpaperEnabledTimestamp();
-
- /**
- * Persists the timestamp when daily wallpaper feature was last enabled.
- *
- * @param timestamp Milliseconds since Unix epoch.
- */
- void setDailyWallpaperEnabledTimestamp(long timestamp);
-
- /**
- * Clears the persisted daily rotation timestamps and the "daily wallpaper enabled" timestamp.
- * Called if daily rotation is disabled.
- */
- void clearDailyRotations();
-
- /**
- * Returns the timestamp of the most recent daily logging event, in milliseconds since Unix
- * epoch. Returns -1 if the very first daily logging event has not occurred yet.
- */
- long getLastDailyLogTimestamp();
-
- /**
- * Sets the timestamp of the most recent daily logging event.
- *
- * @param timestamp Milliseconds since Unix epoch.
- */
- void setLastDailyLogTimestamp(long timestamp);
-
- /**
- * Returns the timestamp of the last time the app was noted to be active; i.e. the last time an
- * activity entered the foreground (milliseconds since Unix epoch).
- */
- long getLastAppActiveTimestamp();
-
- /**
- * Sets the timestamp of the last time the app was noted to be active; i.e. the last time an
- * activity entered the foreground.
- *
- * @param timestamp Milliseconds since Unix epoch.
- */
- void setLastAppActiveTimestamp(long timestamp);
-
- /**
- * Sets the last rotation status for daily wallpapers with a timestamp.
- *
- * @param status Last status code of daily rotation.
- * @param timestamp Milliseconds since Unix epoch.
- */
- void setDailyWallpaperRotationStatus(int status, long timestamp);
-
- /**
- * Gets the last daily wallpapers rotation status or -1 if no rotation status has ever been
- * persisted to preferences.
- */
- int getDailyWallpaperLastRotationStatus();
-
- /**
- * Gets the timestamp of the last set daily wallpapers rotation status in milliseconds since the
- * Unix epoch or 0 if no rotation status has ever been persisted to preferences.
- */
- long getDailyWallpaperLastRotationStatusTimestamp();
-
- /**
- * Gets the timestamp of the last time a sync occurred of wallpaper data to or from this device.
- * Returns 0 if a sync has never occurred before.
- */
- long getLastSyncTimestamp();
-
- /**
- * Sets the timestamp of the latest sync received or sent.
- */
- void setLastSyncTimestamp(long timestamp);
-
- /**
- * Sets the status of whether a wallpaper is currently pending being set (i.e., user tapped the
- * UI to set a wallpaper but it has not yet been actually set on the device). Does so in a
- * synchronous manner so a caller may be assured that the underlying store has been updated when
- * this method returns.
- */
- void setPendingWallpaperSetStatusSync(@PendingWallpaperSetStatus int setStatus);
-
- /**
- * Gets the status of whether a wallpaper is currently pending being set.
- */
- @PendingWallpaperSetStatus
- int getPendingWallpaperSetStatus();
-
- /**
- * Sets the status of whether a wallpaper is currently pending being set (i.e., user tapped the
- * UI to set a wallpaper but it has not yet been actually set on the device). Does so in an
- * asynchronous manner so writing the preference to the underlying store doesn't block the calling
- * thread.
- */
- void setPendingWallpaperSetStatus(@PendingWallpaperSetStatus int setStatus);
-
- /**
- * Sets whether a daily wallpaper update is pending. Writes status to memory and also to disk
- * before returning.
- */
- void setPendingDailyWallpaperUpdateStatusSync(
- @PendingDailyWallpaperUpdateStatus int updateStatus);
-
- /**
- * Returns whether a daily wallpaper update is pending.
- */
- @PendingDailyWallpaperUpdateStatus
- int getPendingDailyWallpaperUpdateStatus();
-
- /**
- * Sets whether a daily wallpaper update is pending. Writes status to memory immediately and to
- * disk after returning.
- */
- void setPendingDailyWallpaperUpdateStatus(@PendingDailyWallpaperUpdateStatus int updateStatus);
-
- /**
- * Increments the number of consecutive days daily rotation has failed.
- */
- void incrementNumDaysDailyRotationFailed();
-
- /**
- * Gets the number of days daily rotation failed.
- */
- int getNumDaysDailyRotationFailed();
-
- /**
- * Resets the consecutive number of days daily rotation failed to 0.
- */
- void resetNumDaysDailyRotationFailed();
-
- /**
- * Increments the number of consecutive days daily rotation was not attempted.
- */
- void incrementNumDaysDailyRotationNotAttempted();
-
- /**
- * Gets the number ofconsecutive days daily rotation was not attempted.
- */
- int getNumDaysDailyRotationNotAttempted();
-
- /**
- * Resets the consecutive number of days daily rotation was not attempted to 0.
- */
- void resetNumDaysDailyRotationNotAttempted();
-
- /**
- * Return the count of wallpaper picker launch.
- */
- int getAppLaunchCount();
-
- /**
- * Return the date for the first time to launch wallpaper picker.
- */
- int getFirstLaunchDateSinceSetup();
-
- /**
- * Increments the number of wallpaper picker launch.
- */
- void incrementAppLaunched();
-
- /**
- * Returns the date for the first time to apply a wallpaper.
- */
- int getFirstWallpaperApplyDateSinceSetup();
-
- /**
- * Sets wallpapers colors of wallpaper's id.
- * @param storedWallpaperId wallpaper id.
- * @param wallpaperColors Colors extracted from an image via quantization.
- */
- void storeWallpaperColors(String storedWallpaperId, WallpaperColors wallpaperColors);
-
- /**
- * Returns the wallpaper colors from wallpaper's id.
- * @param storedWallpaperId wallpaper id.
- */
- WallpaperColors getWallpaperColors(String storedWallpaperId);
-
- /**
- * Update currently set daily wallpaper info.
- *
- * @param destination The wallpaper destination, 1: home, 2: lockscreen, 3: both.
- * @param collectionId wallpaper category.
- * @param wallpaperId wallpaper id.
- */
- void updateDailyWallpaperSet(@Destination int destination, String collectionId,
- String wallpaperId);
-
- /**
- * The possible wallpaper presentation modes, i.e., either "static" or "rotating".
- */
- @IntDef({
- PRESENTATION_MODE_STATIC,
- PRESENTATION_MODE_ROTATING})
- @interface PresentationMode {
- }
-
- /**
- * Possible status of whether a wallpaper set operation is pending or not.
- */
- @IntDef({
- WALLPAPER_SET_NOT_PENDING,
- WALLPAPER_SET_PENDING})
- @interface PendingWallpaperSetStatus {
- }
-
- /**
- * Possible status of whether a wallpaper set operation is pending or not.
- */
- @IntDef({
- DAILY_WALLPAPER_UPDATE_NOT_PENDING,
- DAILY_WALLPAPER_UPDATE_PENDING})
- @interface PendingDailyWallpaperUpdateStatus {
- }
-
- /**
- * Stores the given live wallpaper in the recent wallpapers list
- * @param which flag indicating the wallpaper destination
- * @param wallpaperId unique identifier for this wallpaper
- * @param wallpaper {@link LiveWallpaperInfo} for the applied wallpaper
- * @param colors WallpaperColors to be used as placeholder for quickswitching
- */
- default void storeLatestWallpaper(@SetWallpaperFlags int which, String wallpaperId,
- @NonNull LiveWallpaperInfo wallpaper, WallpaperColors colors) {
- // Do nothing in the default case.
- }
-
- /**
- * Stores the given static wallpaper data in the recent wallpapers list.
- * @param which flag indicating the wallpaper destination
- * @param wallpaperId unique identifier for this wallpaper
- * @param wallpaper {@link WallpaperInfo} for the applied wallpaper
- * @param croppedWallpaperBitmap wallpaper bitmap exactly as applied to WallaperManager
- * @param colors WallpaperColors to be used as placeholder for quickswitching
- */
- default void storeLatestWallpaper(@SetWallpaperFlags int which, String wallpaperId,
- @NonNull WallpaperInfo wallpaper,
- @NonNull Bitmap croppedWallpaperBitmap, WallpaperColors colors) {
- // Do nothing in the default case.
- }
-
- /**
- * Stores the given static wallpaper data in the recent wallpapers list.
- * @param which flag indicating the wallpaper destination
- * @param wallpaperId unique identifier for this wallpaper
- * @param attributions List of attribution items.
- * @param actionUrl The action or "explore" URL for the wallpaper.
- * @param collectionId identifier of this wallpaper's collection.
- * @param croppedWallpaperBitmap wallpaper bitmap exactly as applied to WallaperManager
- * @param colors {@link WallpaperColors} to be used as placeholder for quickswitching
- */
- default void storeLatestWallpaper(
- @SetWallpaperFlags int which,
- String wallpaperId, List<String> attributions,
- String actionUrl, String collectionId,
- @NonNull Bitmap croppedWallpaperBitmap, WallpaperColors colors) {
- // Do nothing in the default case.
- }
-
- /**
- * Generates a default key to look up a wallpaper in the list of recent wallpapers.
- *
- * <p>This key can be used as a fallback when {@link #getHomeWallpaperRecentsKey()} or
- * {@link #getLockWallpaperRecentsKey()} return null.
- * @param remoteId wallpaper's remote id
- * @param hashCode wallpaper's hash code
- * @return the recents key
- */
- @Nullable
- static String generateRecentsKey(@Nullable String remoteId, long hashCode) {
- if (!TextUtils.isEmpty(remoteId)) {
- return remoteId;
- } else if (hashCode > 0) {
- return String.valueOf(hashCode);
- } else {
- return null;
- }
- }
-}
diff --git a/src/com/android/wallpaper/module/WallpaperPreferences.kt b/src/com/android/wallpaper/module/WallpaperPreferences.kt
new file mode 100755
index 00000000..b878c72c
--- /dev/null
+++ b/src/com/android/wallpaper/module/WallpaperPreferences.kt
@@ -0,0 +1,435 @@
+/*
+ * Copyright (C) 2017 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.module
+
+import android.app.WallpaperColors
+import android.app.WallpaperManager.SetWallpaperFlags
+import android.graphics.Bitmap
+import android.graphics.Rect
+import android.text.TextUtils
+import androidx.annotation.IntDef
+import com.android.wallpaper.model.LiveWallpaperInfo
+import com.android.wallpaper.model.StaticWallpaperMetadata
+import com.android.wallpaper.model.WallpaperInfo
+import com.android.wallpaper.model.wallpaper.ScreenOrientation
+import com.android.wallpaper.model.wallpaper.WallpaperModel
+import com.android.wallpaper.picker.customization.shared.model.WallpaperDestination
+
+/** Interface for persisting and retrieving wallpaper specific preferences. */
+interface WallpaperPreferences {
+
+ /** Returns the wallpaper presentation mode. */
+ @PresentationMode fun getWallpaperPresentationMode(): Int
+
+ /** Sets the presentation mode of the current wallpaper. */
+ fun setWallpaperPresentationMode(@PresentationMode presentationMode: Int)
+
+ /** Returns the home attributions as a list. */
+ fun getHomeWallpaperAttributions(): List<String?>?
+
+ /**
+ * Sets the attributions for the current home wallpaper. Clears existing attributions if any
+ * exist.
+ */
+ fun setHomeWallpaperAttributions(attributions: List<String?>?)
+
+ /** Returns the home wallpaper's action URL or null if there is none. */
+ fun getHomeWallpaperActionUrl(): String?
+
+ /** Sets the home wallpaper's action URL. */
+ fun setHomeWallpaperActionUrl(actionUrl: String?)
+
+ /** Returns the home wallpaper's collection ID or null if there is none. */
+ fun getHomeWallpaperCollectionId(): String?
+
+ /** Sets the home wallpaper's collection ID. */
+ fun setHomeWallpaperCollectionId(collectionId: String?)
+
+ /** Removes all home metadata from SharedPreferences. */
+ fun clearHomeWallpaperMetadata()
+
+ /** Set homescreen static image wallpaper metadata to SharedPreferences. */
+ fun setHomeStaticImageWallpaperMetadata(metadata: StaticWallpaperMetadata)
+
+ /** Returns the home wallpaper's bitmap hash code or 0 if there is none. */
+ fun getHomeWallpaperHashCode(): Long
+
+ /** Sets the home wallpaper's bitmap hash code if it is an individual image. */
+ fun setHomeWallpaperHashCode(hashCode: Long)
+
+ /** Gets the home wallpaper's service name, which is present for live wallpapers. */
+ fun getHomeWallpaperServiceName(): String?
+
+ /** Sets the home wallpaper's service name, which is present for live wallpapers. */
+ fun setHomeWallpaperServiceName(serviceName: String?)
+
+ /**
+ * Gets the home wallpaper's ID, which is provided by WallpaperManager for static wallpapers.
+ */
+ fun getHomeWallpaperManagerId(): Int
+
+ /**
+ * Sets the home wallpaper's ID, which is provided by WallpaperManager for static wallpapers.
+ */
+ fun setHomeWallpaperManagerId(homeWallpaperId: Int)
+
+ /** Gets the home wallpaper's remote identifier. */
+ fun getHomeWallpaperRemoteId(): String?
+
+ /**
+ * Sets the home wallpaper's remote identifier to SharedPreferences. This should be a string
+ * which uniquely identifies the currently set home wallpaper in the context of a remote
+ * wallpaper collection.
+ */
+ fun setHomeWallpaperRemoteId(wallpaperRemoteId: String?)
+
+ /** Gets the home wallpaper's identifier used to index into the list of recent wallpapers. */
+ fun getHomeWallpaperRecentsKey(): String?
+
+ /** Sets the home wallpaper's identifier used to index into the list of recent wallpapers. */
+ fun setHomeWallpaperRecentsKey(recentsKey: String?)
+
+ /** Gets the home wallpaper's effects. */
+ fun getHomeWallpaperEffects(): String?
+
+ /** Sets the home wallpaper's effects to SharedPreferences. */
+ fun setHomeWallpaperEffects(wallpaperEffects: String?)
+
+ /** Returns the lock screen attributions as a list. */
+ fun getLockWallpaperAttributions(): List<String?>?
+
+ /**
+ * Sets the attributions for the current lock screen wallpaper. Clears existing attributions if
+ * any exist.
+ */
+ fun setLockWallpaperAttributions(attributions: List<String?>?)
+
+ /** Returns the lock wallpaper's action URL or null if there is none. */
+ fun getLockWallpaperActionUrl(): String?
+
+ /** Sets the lock wallpaper's action URL. */
+ fun setLockWallpaperActionUrl(actionUrl: String?)
+
+ /** Returns the lock wallpaper's collection ID or null if there is none. */
+ fun getLockWallpaperCollectionId(): String?
+
+ /** Sets the lock wallpaper's collection ID. */
+ fun setLockWallpaperCollectionId(collectionId: String?)
+
+ /** Removes all lock screen metadata from SharedPreferences. */
+ fun clearLockWallpaperMetadata()
+
+ /** Set lockscreen static image wallpaper metadata to SharedPreferences. */
+ fun setLockStaticImageWallpaperMetadata(metadata: StaticWallpaperMetadata)
+
+ /** Returns the lock screen wallpaper's bitmap hash code or 0 if there is none. */
+ fun getLockWallpaperHashCode(): Long
+
+ /** Sets the lock screen wallpaper's bitmap hash code if it is an individual image. */
+ fun setLockWallpaperHashCode(hashCode: Long)
+
+ /** Gets the lock wallpaper's service name, which is present for live wallpapers. */
+ fun getLockWallpaperServiceName(): String?
+
+ /** Sets the lock wallpaper's service name, which is present for live wallpapers. */
+ fun setLockWallpaperServiceName(serviceName: String?)
+
+ /**
+ * Gets the lock wallpaper's ID, which is provided by WallpaperManager for static wallpapers.
+ */
+ fun getLockWallpaperManagerId(): Int
+
+ /**
+ * Sets the lock wallpaper's ID, which is provided by WallpaperManager for static wallpapers.
+ */
+ fun setLockWallpaperManagerId(lockWallpaperId: Int)
+
+ /** Gets the lock wallpaper's remote identifier. */
+ fun getLockWallpaperRemoteId(): String?
+
+ /**
+ * Sets the lock wallpaper's remote identifier to SharedPreferences. This should be a string
+ * which uniquely identifies the currently set lock wallpaper in the context of a remote
+ * wallpaper collection.
+ */
+ fun setLockWallpaperRemoteId(wallpaperRemoteId: String?)
+
+ /** Gets lock home wallpaper's identifier used to index into the list of recent wallpapers. */
+ fun getLockWallpaperRecentsKey(): String?
+
+ /** Sets lock home wallpaper's identifier used to index into the list of recent wallpapers. */
+ fun setLockWallpaperRecentsKey(recentsKey: String?)
+
+ /** Gets the lock wallpaper's effects. */
+ // TODO (b/307939748): Log lock wallpaper effects. We need this function for snapshot logging
+ fun getLockWallpaperEffects(): String?
+
+ /** Sets the lock wallpaper's effects to SharedPreferences. */
+ fun setLockWallpaperEffects(wallpaperEffects: String?)
+
+ /** Persists the timestamp of a daily wallpaper rotation that just occurred. */
+ fun addDailyRotation(timestamp: Long)
+
+ /**
+ * Returns the timestamp of the last wallpaper daily rotation or -1 if there has never been a
+ * daily wallpaper rotation on the user's device.
+ */
+ fun getLastDailyRotationTimestamp(): Long
+
+ /**
+ * Returns the daily wallpaper enabled timestamp in milliseconds since Unix epoch, or -1 if
+ * daily wallpaper is not currently enabled.
+ */
+ fun getDailyWallpaperEnabledTimestamp(): Long
+
+ /**
+ * Persists the timestamp when daily wallpaper feature was last enabled.
+ *
+ * @param timestamp Milliseconds since Unix epoch.
+ */
+ fun setDailyWallpaperEnabledTimestamp(timestamp: Long)
+
+ /**
+ * Clears the persisted daily rotation timestamps and the "daily wallpaper enabled" timestamp.
+ * Called if daily rotation is disabled.
+ */
+ fun clearDailyRotations()
+
+ /**
+ * Returns the timestamp of the most recent daily logging event, in milliseconds since Unix
+ * epoch. Returns -1 if the very first daily logging event has not occurred yet.
+ */
+ fun getLastDailyLogTimestamp(): Long
+
+ /**
+ * Sets the timestamp of the most recent daily logging event.
+ *
+ * @param timestamp Milliseconds since Unix epoch.
+ */
+ fun setLastDailyLogTimestamp(timestamp: Long)
+
+ /**
+ * Returns the timestamp of the last time the app was noted to be active; i.e. the last time an
+ * activity entered the foreground (milliseconds since Unix epoch).
+ */
+ fun getLastAppActiveTimestamp(): Long
+
+ /**
+ * Sets the timestamp of the last time the app was noted to be active; i.e. the last time an
+ * activity entered the foreground.
+ *
+ * @param timestamp Milliseconds since Unix epoch.
+ */
+ fun setLastAppActiveTimestamp(timestamp: Long)
+
+ /**
+ * Sets the last rotation status for daily wallpapers with a timestamp.
+ *
+ * @param status Last status code of daily rotation.
+ * @param timestamp Milliseconds since Unix epoch.
+ */
+ fun setDailyWallpaperRotationStatus(status: Int, timestamp: Long)
+
+ /**
+ * Sets the status of whether a wallpaper is currently pending being set (i.e., user tapped the
+ * UI to set a wallpaper but it has not yet been actually set on the device). Does so in a
+ * synchronous manner so a caller may be assured that the underlying store has been updated when
+ * this method returns.
+ */
+ fun setPendingWallpaperSetStatusSync(@PendingWallpaperSetStatus setStatus: Int)
+
+ /** Gets the status of whether a wallpaper is currently pending being set. */
+ @PendingWallpaperSetStatus fun getPendingWallpaperSetStatus(): Int
+
+ /**
+ * Sets the status of whether a wallpaper is currently pending being set (i.e., user tapped the
+ * UI to set a wallpaper but it has not yet been actually set on the device). Does so in an
+ * asynchronous manner so writing the preference to the underlying store doesn't block the
+ * calling thread.
+ */
+ fun setPendingWallpaperSetStatus(@PendingWallpaperSetStatus setStatus: Int)
+
+ /**
+ * Sets whether a daily wallpaper update is pending. Writes status to memory and also to disk
+ * before returning.
+ */
+ fun setPendingDailyWallpaperUpdateStatusSync(
+ @PendingDailyWallpaperUpdateStatus updateStatus: Int,
+ )
+
+ /** Returns whether a daily wallpaper update is pending. */
+ @PendingDailyWallpaperUpdateStatus fun getPendingDailyWallpaperUpdateStatus(): Int
+
+ /**
+ * Sets whether a daily wallpaper update is pending. Writes status to memory immediately and to
+ * disk after returning.
+ */
+ fun setPendingDailyWallpaperUpdateStatus(@PendingDailyWallpaperUpdateStatus updateStatus: Int)
+
+ /** Return the count of wallpaper picker launch. */
+ fun getAppLaunchCount(): Int
+
+ /** Return the date for the first time to launch wallpaper picker. */
+ fun getFirstLaunchDateSinceSetup(): Int
+
+ /** Increments the number of wallpaper picker launch. */
+ fun incrementAppLaunched()
+
+ /** Returns the date for the first time to apply a wallpaper. */
+ fun getFirstWallpaperApplyDateSinceSetup(): Int
+
+ /**
+ * Sets wallpapers colors of wallpaper's id.
+ *
+ * @param storedWallpaperId wallpaper id.
+ * @param wallpaperColors Colors extracted from an image via quantization.
+ */
+ fun storeWallpaperColors(storedWallpaperId: String?, wallpaperColors: WallpaperColors?)
+
+ /**
+ * Returns the wallpaper colors from wallpaper's id.
+ *
+ * @param storedWallpaperId wallpaper id.
+ */
+ fun getWallpaperColors(storedWallpaperId: String): WallpaperColors?
+
+ /**
+ * Update currently set daily wallpaper info.
+ *
+ * @param destination The wallpaper destination, 1: home, 2: lockscreen, 3: both.
+ * @param collectionId wallpaper category.
+ * @param wallpaperId wallpaper id.
+ */
+ fun updateDailyWallpaperSet(
+ @WallpaperPersister.Destination destination: Int,
+ collectionId: String?,
+ wallpaperId: String?,
+ )
+
+ /**
+ * Stores the given live wallpaper in the recent wallpapers list
+ *
+ * @param which flag indicating the wallpaper destination
+ * @param wallpaperId unique identifier for this wallpaper
+ * @param wallpaper [LiveWallpaperInfo] for the applied wallpaper
+ * @param colors WallpaperColors to be used as placeholder for quickswitching
+ */
+ fun storeLatestWallpaper(
+ @SetWallpaperFlags which: Int,
+ wallpaperId: String,
+ wallpaper: LiveWallpaperInfo,
+ colors: WallpaperColors,
+ )
+
+ /**
+ * Stores the given static wallpaper data in the recent wallpapers list.
+ *
+ * @param which flag indicating the wallpaper destination
+ * @param wallpaperId unique identifier for this wallpaper
+ * @param wallpaper [WallpaperInfo] for the applied wallpaper
+ * @param croppedWallpaperBitmap wallpaper bitmap exactly as applied to WallaperManager
+ * @param colors WallpaperColors to be used as placeholder for quickswitching
+ */
+ fun storeLatestWallpaper(
+ @SetWallpaperFlags which: Int,
+ wallpaperId: String,
+ wallpaper: WallpaperInfo,
+ croppedWallpaperBitmap: Bitmap,
+ colors: WallpaperColors,
+ )
+
+ /**
+ * Stores the given static wallpaper data in the recent wallpapers list.
+ *
+ * @param which flag indicating the wallpaper destination
+ * @param wallpaperId unique identifier for this wallpaper
+ * @param attributions List of attribution items.
+ * @param actionUrl The action or "explore" URL for the wallpaper.
+ * @param collectionId identifier of this wallpaper's collection.
+ * @param croppedWallpaperBitmap wallpaper bitmap exactly as applied to WallaperManager
+ * @param colors [WallpaperColors] to be used as placeholder for quickswitching
+ */
+ fun storeLatestWallpaper(
+ @SetWallpaperFlags which: Int,
+ wallpaperId: String,
+ attributions: List<String>?,
+ actionUrl: String?,
+ collectionId: String?,
+ croppedWallpaperBitmap: Bitmap,
+ colors: WallpaperColors,
+ )
+
+ /**
+ * Add a static wallpaper to recent wallpapers as jason array, saved in preferences.
+ *
+ * @param destination destination where the wallpaper is set to
+ * @param wallpaperModel static wallpaper model
+ * @param bitmap full sie bitmap of the static wallpaper
+ * @param cropHints crop hints of the static wallpaper
+ */
+ suspend fun addStaticWallpaperToRecentWallpapers(
+ destination: WallpaperDestination,
+ wallpaperModel: WallpaperModel.StaticWallpaperModel,
+ bitmap: Bitmap,
+ cropHints: Map<ScreenOrientation, Rect?>,
+ )
+
+ /** Stores wallpaper crop hints for each dimensions. */
+ fun storeWallpaperCropHints(cropHints: Map<ScreenOrientation, Rect?>)
+
+ /** Gets wallpaper crop hints for each dimensions. */
+ fun getWallpaperCropHints(): Map<ScreenOrientation, Rect?>
+
+ /** The possible wallpaper presentation modes, i.e., either "static" or "rotating". */
+ @IntDef(PRESENTATION_MODE_STATIC, PRESENTATION_MODE_ROTATING) annotation class PresentationMode
+
+ /** Possible status of whether a wallpaper set operation is pending or not. */
+ @IntDef(WALLPAPER_SET_NOT_PENDING, WALLPAPER_SET_PENDING)
+ annotation class PendingWallpaperSetStatus
+
+ /** Possible status of whether a wallpaper set operation is pending or not. */
+ @IntDef(DAILY_WALLPAPER_UPDATE_NOT_PENDING, DAILY_WALLPAPER_UPDATE_PENDING)
+ annotation class PendingDailyWallpaperUpdateStatus
+
+ companion object {
+ /**
+ * Generates a default key to look up a wallpaper in the list of recent wallpapers.
+ *
+ * This key can be used as a fallback when [.getHomeWallpaperRecentsKey] or
+ * [.getLockWallpaperRecentsKey] return null.
+ *
+ * @param remoteId wallpaper's remote id
+ * @param hashCode wallpaper's hash code
+ * @return the recents key
+ */
+ fun generateRecentsKey(remoteId: String?, hashCode: Long): String? {
+ return if (!TextUtils.isEmpty(remoteId)) {
+ remoteId
+ } else if (hashCode > 0) {
+ hashCode.toString()
+ } else {
+ null
+ }
+ }
+
+ const val PRESENTATION_MODE_STATIC = 1
+ const val PRESENTATION_MODE_ROTATING = 2
+ const val WALLPAPER_SET_NOT_PENDING = 0
+ const val WALLPAPER_SET_PENDING = 1
+ const val DAILY_WALLPAPER_UPDATE_NOT_PENDING = 0
+ const val DAILY_WALLPAPER_UPDATE_PENDING = 1
+ }
+}
diff --git a/src/com/android/wallpaper/module/WallpaperRotationRefresher.java b/src/com/android/wallpaper/module/WallpaperRotationRefresher.java
deleted file mode 100755
index 95b81ed1..00000000
--- a/src/com/android/wallpaper/module/WallpaperRotationRefresher.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2017 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.module;
-
-import android.content.Context;
-
-/**
- * Interface for objects which refresh the current wallpaper in a rotation.
- */
-public interface WallpaperRotationRefresher {
-
- void refreshWallpaper(Context context, Listener listener);
-
- /**
- * Listener interface for clients to asynchronously receive status of wallpaper rotation refresh
- * tasks.
- */
- interface Listener {
-
- /**
- * Called when a new wallpaper in the rotation has successfully been set to the device.
- */
- void onRefreshed();
-
- /**
- * Called when there was an error setting a new wallpaper in the rotation to the device.
- */
- void onError();
- }
-}
diff --git a/src/com/android/wallpaper/module/WallpaperSetter.java b/src/com/android/wallpaper/module/WallpaperSetter.java
index b4c26852..f8a75d7a 100644
--- a/src/com/android/wallpaper/module/WallpaperSetter.java
+++ b/src/com/android/wallpaper/module/WallpaperSetter.java
@@ -1,6 +1,6 @@
package com.android.wallpaper.module;
-import static android.app.WallpaperManager.FLAG_LOCK;
+import static android.stats.style.StyleEnums.SET_WALLPAPER_ENTRY_POINT_RESTORE;
import android.app.Activity;
import android.app.ProgressDialog;
@@ -9,12 +9,10 @@ import android.app.WallpaperManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.ActivityInfo;
-import android.graphics.Point;
import android.graphics.Rect;
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import android.util.Log;
-import android.view.Display;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -28,14 +26,12 @@ import com.android.wallpaper.R;
import com.android.wallpaper.asset.Asset;
import com.android.wallpaper.model.LiveWallpaperInfo;
import com.android.wallpaper.model.WallpaperInfo;
-import com.android.wallpaper.module.UserEventLogger.WallpaperSetFailureReason;
import com.android.wallpaper.module.WallpaperPersister.Destination;
import com.android.wallpaper.module.WallpaperPersister.SetWallpaperCallback;
+import com.android.wallpaper.module.logging.UserEventLogger;
+import com.android.wallpaper.module.logging.UserEventLogger.SetWallpaperEntryPoint;
import com.android.wallpaper.picker.SetWallpaperDialogFragment;
import com.android.wallpaper.picker.SetWallpaperDialogFragment.Listener;
-import com.android.wallpaper.util.ScreenSizeCalculator;
-import com.android.wallpaper.util.ThrowableAnalyzer;
-import com.android.wallpaper.util.WallpaperCropUtils;
import com.bumptech.glide.Glide;
@@ -60,7 +56,6 @@ public class WallpaperSetter {
private final WallpaperPersister mWallpaperPersister;
private final WallpaperPreferences mPreferences;
- private final boolean mTestingModeEnabled;
private final UserEventLogger mUserEventLogger;
private final CurrentWallpaperInfoFactory mCurrentWallpaperInfoFactory;
private ProgressDialog mProgressDialog;
@@ -68,9 +63,7 @@ public class WallpaperSetter {
public WallpaperSetter(WallpaperPersister wallpaperPersister,
WallpaperPreferences preferences, UserEventLogger userEventLogger,
- CurrentWallpaperInfoFactory currentWallpaperInfoFactory,
- boolean isTestingModeEnabled) {
- mTestingModeEnabled = isTestingModeEnabled;
+ CurrentWallpaperInfoFactory currentWallpaperInfoFactory) {
mWallpaperPersister = wallpaperPersister;
mPreferences = preferences;
mUserEventLogger = userEventLogger;
@@ -78,43 +71,12 @@ public class WallpaperSetter {
}
/**
- * Sets current wallpaper to the device with the minimum scale to fit the screen size.
- *
- * @param containerActivity main Activity that owns the current fragment
- * @param wallpaper info for the actual wallpaper to set
- * @param destination the wallpaper destination i.e. home vs. lockscreen vs. both.
- * @param callback optional callback to be notified when the wallpaper is set.
- */
- public void setCurrentWallpaper(Activity containerActivity, WallpaperInfo wallpaper,
- @Destination final int destination,
- @Nullable SetWallpaperCallback callback) {
- Asset wallpaperAsset = wallpaper.getAsset(containerActivity.getApplicationContext());
- wallpaperAsset.decodeRawDimensions(containerActivity, dimensions -> {
- if (dimensions == null) {
- Log.e(TAG, "Raw wallpaper's dimensions are null");
- return;
- }
-
- Display defaultDisplay = containerActivity.getWindowManager().getDefaultDisplay();
- Point screenSize = ScreenSizeCalculator.getInstance().getScreenSize(defaultDisplay);
- Rect visibleRawWallpaperRect =
- WallpaperCropUtils.calculateVisibleRect(dimensions, screenSize);
- float wallpaperScale = WallpaperCropUtils.calculateMinZoom(dimensions, screenSize);
- Rect cropRect = WallpaperCropUtils.calculateCropRect(
- containerActivity.getApplicationContext(), defaultDisplay,
- dimensions, visibleRawWallpaperRect, wallpaperScale);
-
- setCurrentWallpaper(containerActivity, wallpaper, wallpaperAsset, destination,
- wallpaperScale, cropRect, null, callback);
- });
- }
-
- /**
* Sets current wallpaper to the device based on current zoom and scroll state.
*
* @param containerActivity main Activity that owns the current fragment
* @param wallpaper Info for the actual wallpaper to set
* @param wallpaperAsset Wallpaper asset from which to retrieve image data.
+ * @param setWallpaperEntryPoint The entry point where the wallpaper is set.
* @param destination The wallpaper destination i.e. home vs. lockscreen vs. both.
* @param wallpaperScale Scaling factor applied to the source image before setting the
* wallpaper to the device.
@@ -124,12 +86,12 @@ public class WallpaperSetter {
* @param callback Optional callback to be notified when the wallpaper is set.
*/
public void setCurrentWallpaper(Activity containerActivity, WallpaperInfo wallpaper,
- @Nullable Asset wallpaperAsset, @Destination final int destination,
- float wallpaperScale, @Nullable Rect cropRect, WallpaperColors wallpaperColors,
- @Nullable SetWallpaperCallback callback) {
+ @Nullable Asset wallpaperAsset, @SetWallpaperEntryPoint int setWallpaperEntryPoint,
+ @Destination final int destination, float wallpaperScale, @Nullable Rect cropRect,
+ WallpaperColors wallpaperColors, @Nullable SetWallpaperCallback callback) {
if (wallpaper instanceof LiveWallpaperInfo) {
- setCurrentLiveWallpaper(containerActivity, (LiveWallpaperInfo) wallpaper, destination,
- wallpaperColors, callback);
+ setCurrentLiveWallpaper(containerActivity, (LiveWallpaperInfo) wallpaper,
+ setWallpaperEntryPoint, destination, wallpaperColors, callback);
return;
}
mPreferences.setPendingWallpaperSetStatus(
@@ -145,7 +107,7 @@ public class WallpaperSetter {
// ProgressDialog endlessly updates the UI thread, keeping it from going idle which
// therefore causes Espresso to hang once the dialog is shown.
- if (!mTestingModeEnabled && !containerActivity.isFinishing()) {
+ if (!containerActivity.isFinishing()) {
int themeResId = (VERSION.SDK_INT < VERSION_CODES.LOLLIPOP)
? R.style.ProgressDialogThemePreL : R.style.LightDialogTheme;
mProgressDialog = new ProgressDialog(containerActivity, themeResId);
@@ -178,7 +140,8 @@ public class WallpaperSetter {
@Override
public void onSuccess(WallpaperInfo wallpaperInfo,
@Destination int destination) {
- onWallpaperApplied(wallpaper, containerActivity);
+ onWallpaperApplied(containerActivity, wallpaper, setWallpaperEntryPoint,
+ destination);
if (callback != null) {
callback.onSuccess(wallpaper, destination);
}
@@ -186,7 +149,7 @@ public class WallpaperSetter {
@Override
public void onError(Throwable throwable) {
- onWallpaperApplyError(throwable, containerActivity);
+ onWallpaperApplyError(containerActivity);
if (callback != null) {
callback.onError(throwable);
}
@@ -196,20 +159,14 @@ public class WallpaperSetter {
}
private void setCurrentLiveWallpaper(Activity activity, LiveWallpaperInfo wallpaper,
- @Destination final int destination, WallpaperColors colors,
- @Nullable SetWallpaperCallback callback) {
+ @SetWallpaperEntryPoint int setWallpaperEntryPoint, @Destination final int destination,
+ WallpaperColors colors, @Nullable SetWallpaperCallback callback) {
try {
// Save current screen rotation so we can temporarily disable rotation while setting the
// wallpaper and restore after setting the wallpaper finishes.
saveAndLockScreenOrientationIfNeeded(activity);
WallpaperManager wallpaperManager = WallpaperManager.getInstance(activity);
- if (destination == WallpaperPersister.DEST_LOCK_SCREEN
- && !wallpaperManager.isLockscreenLiveWallpaperEnabled()) {
- throw new IllegalArgumentException(
- "Live wallpaper cannot be applied on lock screen only");
- }
-
LiveWallpaperInfo updatedWallpaperInfo = wallpaper.saveWallpaper(
activity.getApplicationContext(), destination);
if (updatedWallpaperInfo != null) {
@@ -223,13 +180,13 @@ public class WallpaperSetter {
mPreferences.storeLatestWallpaper(WallpaperPersister.destinationToFlags(destination),
wallpaper.getWallpaperId(), wallpaper, colors);
mCurrentWallpaperInfoFactory.clearCurrentWallpaperInfos();
- onWallpaperApplied(wallpaper, activity);
+ onWallpaperApplied(activity, wallpaper, setWallpaperEntryPoint, destination);
if (callback != null) {
callback.onSuccess(wallpaper, destination);
}
mWallpaperPersister.onLiveWallpaperSet(destination);
} catch (RuntimeException | IOException e) {
- onWallpaperApplyError(e, activity);
+ onWallpaperApplyError(activity);
if (callback != null) {
callback.onError(e);
}
@@ -249,10 +206,6 @@ public class WallpaperSetter {
wallpaperManager.setWallpaperComponent(
wallpaper.getWallpaperComponent().getComponent());
}
- if (!wallpaperManager.isLockscreenLiveWallpaperEnabled()
- && destination == WallpaperPersister.DEST_BOTH) {
- wallpaperManager.clear(FLAG_LOCK);
- }
}
/**
@@ -264,16 +217,11 @@ public class WallpaperSetter {
* @param colors The {@link WallpaperColors} for placeholder of quickswitching
* @param callback Optional callback to be notified when the wallpaper is set.
*/
- public void setCurrentLiveWallpaper(Context context, LiveWallpaperInfo wallpaper,
+ public void setCurrentLiveWallpaperFromRestore(Context context, LiveWallpaperInfo wallpaper,
@Destination final int destination, @Nullable WallpaperColors colors,
@Nullable SetWallpaperCallback callback) {
try {
WallpaperManager wallpaperManager = WallpaperManager.getInstance(context);
- if (destination == WallpaperPersister.DEST_LOCK_SCREEN
- && !wallpaperManager.isLockscreenLiveWallpaperEnabled()) {
- throw new IllegalArgumentException(
- "Live wallpaper cannot be applied on lock screen only");
- }
setWallpaperComponent(wallpaperManager, wallpaper, destination);
mPreferences.storeLatestWallpaper(WallpaperPersister.destinationToFlags(destination),
wallpaper.getWallpaperId(),
@@ -282,6 +230,11 @@ public class WallpaperSetter {
.getLowResBitmap(context)));
mCurrentWallpaperInfoFactory.clearCurrentWallpaperInfos();
// Not call onWallpaperApplied() as no UI is presented.
+ mUserEventLogger.logWallpaperApplied(
+ wallpaper.getCollectionId(context),
+ wallpaper.getWallpaperId(), wallpaper.getEffectNames(),
+ SET_WALLPAPER_ENTRY_POINT_RESTORE,
+ UserEventLogger.Companion.toWallpaperDestinationForLogging(destination));
if (callback != null) {
callback.onSuccess(wallpaper, destination);
}
@@ -294,29 +247,25 @@ public class WallpaperSetter {
}
}
- private void onWallpaperApplied(WallpaperInfo wallpaper, Activity containerActivity) {
- mUserEventLogger.logWallpaperSet(
+ private void onWallpaperApplied(
+ Activity containerActivity,
+ WallpaperInfo wallpaper,
+ @SetWallpaperEntryPoint int setWallpaperEntryPoint,
+ @Destination int destination) {
+ mUserEventLogger.logWallpaperApplied(
wallpaper.getCollectionId(containerActivity),
- wallpaper.getWallpaperId(), wallpaper.getEffectNames());
+ wallpaper.getWallpaperId(), wallpaper.getEffectNames(),
+ setWallpaperEntryPoint,
+ UserEventLogger.Companion.toWallpaperDestinationForLogging(destination));
mPreferences.setPendingWallpaperSetStatus(
WallpaperPreferences.WALLPAPER_SET_NOT_PENDING);
- mUserEventLogger.logWallpaperSetResult(
- UserEventLogger.WALLPAPER_SET_RESULT_SUCCESS);
cleanUp();
restoreScreenOrientationIfNeeded(containerActivity);
}
- private void onWallpaperApplyError(Throwable throwable, Activity containerActivity) {
+ private void onWallpaperApplyError(Activity containerActivity) {
mPreferences.setPendingWallpaperSetStatus(
WallpaperPreferences.WALLPAPER_SET_NOT_PENDING);
- mUserEventLogger.logWallpaperSetResult(
- UserEventLogger.WALLPAPER_SET_RESULT_FAILURE);
- @WallpaperSetFailureReason int failureReason = ThrowableAnalyzer.isOOM(
- throwable)
- ? UserEventLogger.WALLPAPER_SET_FAILURE_REASON_OOM
- : UserEventLogger.WALLPAPER_SET_FAILURE_REASON_OTHER;
- mUserEventLogger.logWallpaperSetFailureReason(failureReason);
-
cleanUp();
restoreScreenOrientationIfNeeded(containerActivity);
}
@@ -392,34 +341,6 @@ public class WallpaperSetter {
setWallpaperDialog.setHomeOptionAvailable(isHomeOption);
setWallpaperDialog.setLockOptionAvailable(isLockOption);
}
- if (wallpaperManager.isLockscreenLiveWallpaperEnabled()) {
- setWallpaperDialog.show(fragmentManager, TAG_SET_WALLPAPER_DIALOG_FRAGMENT);
- return;
- }
-
- WallpaperStatusChecker wallpaperStatusChecker = InjectorProvider.getInjector()
- .getWallpaperStatusChecker(activity.getApplicationContext());
- boolean isLiveWallpaperSet =
- WallpaperManager.getInstance(activity).getWallpaperInfo() != null;
- // Alternative of ag/15567276
- boolean isBuiltIn = !isLiveWallpaperSet
- && !wallpaperStatusChecker.isHomeStaticWallpaperSet();
-
- if ((isLiveWallpaperSet || isBuiltIn)
- && !wallpaperStatusChecker.isLockWallpaperSet()) {
- if (isLiveWallpaper) {
- // If lock wallpaper is live and we're setting a live wallpaper, we can only
- // set it to both, so bypass the dialog.
- listener.onSet(WallpaperPersister.DEST_BOTH);
- restoreScreenOrientationIfNeeded(activity);
- return;
- }
- // if the lock wallpaper is a live wallpaper, we cannot set a home-only static one
- setWallpaperDialog.setHomeOptionAvailable(false);
- }
- if (isLiveWallpaper) {
- setWallpaperDialog.setLockOptionAvailable(false);
- }
setWallpaperDialog.show(fragmentManager, TAG_SET_WALLPAPER_DIALOG_FRAGMENT);
}
diff --git a/src/com/android/wallpaper/module/logging/NoOpUserEventLogger.kt b/src/com/android/wallpaper/module/logging/NoOpUserEventLogger.kt
new file mode 100755
index 00000000..b12558ed
--- /dev/null
+++ b/src/com/android/wallpaper/module/logging/NoOpUserEventLogger.kt
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2017 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.module.logging
+
+import android.content.Intent
+import com.android.wallpaper.module.logging.UserEventLogger.SetWallpaperEntryPoint
+import com.android.wallpaper.module.logging.UserEventLogger.WallpaperDestination
+
+/** [UserEventLogger] implementation that does nothing. */
+open class NoOpUserEventLogger : UserEventLogger {
+
+ override fun logSnapshot() {}
+
+ override fun logAppLaunched(launchSource: Intent) {}
+
+ override fun logWallpaperApplied(
+ collectionId: String?,
+ wallpaperId: String?,
+ effects: String?,
+ @SetWallpaperEntryPoint setWallpaperEntryPoint: Int,
+ @WallpaperDestination destination: Int,
+ ) {}
+
+ override fun logEffectApply(
+ effect: String,
+ status: Int,
+ timeElapsedMillis: Long,
+ resultCode: Int,
+ ) {}
+
+ override fun logEffectProbe(effect: String, status: Int) {}
+
+ override fun logEffectForegroundDownload(
+ effect: String,
+ status: Int,
+ timeElapsedMillis: Long,
+ ) {}
+
+ override fun logResetApplied() {}
+
+ override fun logWallpaperExploreButtonClicked() {}
+}
diff --git a/src/com/android/wallpaper/module/logging/UserEventLogger.kt b/src/com/android/wallpaper/module/logging/UserEventLogger.kt
new file mode 100755
index 00000000..f9e2bd34
--- /dev/null
+++ b/src/com/android/wallpaper/module/logging/UserEventLogger.kt
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2017 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.module.logging
+
+import android.content.Intent
+import android.stats.style.StyleEnums
+import androidx.annotation.IntDef
+import com.android.wallpaper.module.WallpaperPersister
+import com.android.wallpaper.module.WallpaperPersister.Destination
+
+/** Interface for logging user events in the wallpaper picker. */
+interface UserEventLogger {
+
+ /** Logs the current snapshot data, e.g. the currently-set home and lock screen wallpapers. */
+ fun logSnapshot()
+
+ /** Logs when the app is launched */
+ fun logAppLaunched(launchSource: Intent)
+
+ /** Logs the event when applying a wallpaper. */
+ fun logWallpaperApplied(
+ collectionId: String?,
+ wallpaperId: String?,
+ effects: String?,
+ @SetWallpaperEntryPoint setWallpaperEntryPoint: Int,
+ @WallpaperDestination destination: Int,
+ )
+
+ /** Logs the action related to effect. */
+ fun logEffectApply(
+ effect: String,
+ @EffectStatus status: Int,
+ timeElapsedMillis: Long,
+ resultCode: Int,
+ )
+
+ /** Logs the effect probe result. */
+ fun logEffectProbe(effect: String, @EffectStatus status: Int)
+
+ /** Logs the effect foreground download event. */
+ fun logEffectForegroundDownload(
+ effect: String,
+ @EffectStatus status: Int,
+ timeElapsedMillis: Long,
+ )
+
+ /** Logs the event when reset is applied. */
+ fun logResetApplied()
+
+ /** Logs when clicking the explore button in the wallpaper information dialog. */
+ fun logWallpaperExploreButtonClicked()
+
+ /**
+ * Possible actions for cinematic effect. These actions would be used for effect apply, effect
+ * probe, effect download.
+ */
+ @IntDef(
+ StyleEnums.EFFECT_PREFERENCE_UNSPECIFIED,
+ StyleEnums.EFFECT_APPLIED_ON_SUCCESS,
+ StyleEnums.EFFECT_APPLIED_ON_FAILED,
+ StyleEnums.EFFECT_APPLIED_OFF,
+ StyleEnums.EFFECT_APPLIED_ABORTED,
+ StyleEnums.EFFECT_APPLIED_STARTED
+ )
+ @Retention(AnnotationRetention.SOURCE)
+ annotation class EffectStatus
+
+ /**
+ * Possible actions for cinematic effect. These actions would be used for effect apply, effect
+ * probe, effect download.
+ */
+ @IntDef(
+ StyleEnums.SET_WALLPAPER_ENTRY_POINT_UNSPECIFIED,
+ StyleEnums.SET_WALLPAPER_ENTRY_POINT_WALLPAPER_PREVIEW,
+ StyleEnums.SET_WALLPAPER_ENTRY_POINT_WALLPAPER_QUICK_SWITCHER,
+ StyleEnums.SET_WALLPAPER_ENTRY_POINT_LAUNCHER_WALLPAPER_QUICK_SWITCHER,
+ StyleEnums.SET_WALLPAPER_ENTRY_POINT_ROTATION_WALLPAPER,
+ StyleEnums.SET_WALLPAPER_ENTRY_POINT_RESET,
+ StyleEnums.SET_WALLPAPER_ENTRY_POINT_RESTORE,
+ )
+ @Retention(AnnotationRetention.SOURCE)
+ annotation class SetWallpaperEntryPoint
+
+ @IntDef(
+ StyleEnums.WALLPAPER_DESTINATION_UNSPECIFIED,
+ StyleEnums.WALLPAPER_DESTINATION_HOME_SCREEN,
+ StyleEnums.WALLPAPER_DESTINATION_LOCK_SCREEN,
+ StyleEnums.WALLPAPER_DESTINATION_HOME_AND_LOCK_SCREEN,
+ )
+ @Retention(AnnotationRetention.SOURCE)
+ annotation class WallpaperDestination
+
+ companion object {
+ @WallpaperDestination
+ fun toWallpaperDestinationForLogging(@Destination destination: Int): Int {
+ return when (destination) {
+ WallpaperPersister.DEST_HOME_SCREEN -> StyleEnums.WALLPAPER_DESTINATION_HOME_SCREEN
+ WallpaperPersister.DEST_LOCK_SCREEN -> StyleEnums.WALLPAPER_DESTINATION_LOCK_SCREEN
+ WallpaperPersister.DEST_BOTH ->
+ StyleEnums.WALLPAPER_DESTINATION_HOME_AND_LOCK_SCREEN
+ else -> StyleEnums.WALLPAPER_DESTINATION_UNSPECIFIED
+ }
+ }
+ }
+}
diff --git a/src/com/android/wallpaper/picker/BasePreviewActivity.java b/src/com/android/wallpaper/picker/BasePreviewActivity.java
index c93e8e35..0ac42495 100755
--- a/src/com/android/wallpaper/picker/BasePreviewActivity.java
+++ b/src/com/android/wallpaper/picker/BasePreviewActivity.java
@@ -25,7 +25,7 @@ import androidx.core.view.WindowCompat;
import com.android.wallpaper.R;
import com.android.wallpaper.module.Injector;
import com.android.wallpaper.module.InjectorProvider;
-import com.android.wallpaper.module.UserEventLogger;
+import com.android.wallpaper.module.logging.UserEventLogger;
/**
* Abstract base class for a wallpaper full-screen preview activity.
diff --git a/src/com/android/wallpaper/picker/CategorySelectorFragment.java b/src/com/android/wallpaper/picker/CategorySelectorFragment.java
index df7fd333..9e10d151 100644
--- a/src/com/android/wallpaper/picker/CategorySelectorFragment.java
+++ b/src/com/android/wallpaper/picker/CategorySelectorFragment.java
@@ -55,7 +55,7 @@ import com.android.wallpaper.model.CategoryProvider;
import com.android.wallpaper.model.LiveWallpaperInfo;
import com.android.wallpaper.model.WallpaperInfo;
import com.android.wallpaper.module.InjectorProvider;
-import com.android.wallpaper.module.UserEventLogger;
+import com.android.wallpaper.module.logging.UserEventLogger;
import com.android.wallpaper.util.DeepLinkUtils;
import com.android.wallpaper.util.DisplayMetricsRetriever;
import com.android.wallpaper.util.ResourceUtils;
@@ -370,9 +370,6 @@ public class CategorySelectorFragment extends AppbarFragment {
@Override
public void onClick(View view) {
Activity activity = getActivity();
- final UserEventLogger eventLogger =
- InjectorProvider.getInjector().getUserEventLogger(activity);
- eventLogger.logCategorySelected(mCategory.getCollectionId());
if (mCategory.supportsCustomPhotos()) {
EffectsController effectsController =
@@ -399,8 +396,6 @@ public class CategorySelectorFragment extends AppbarFragment {
if (mCategory.isSingleWallpaperCategory()) {
WallpaperInfo wallpaper = mCategory.getSingleWallpaper();
- // Log click on individual wallpaper
- eventLogger.logIndividualWallpaperSelected(mCategory.getCollectionId());
InjectorProvider.getInjector().getWallpaperPersister(activity)
.setWallpaperInfoInPreview(wallpaper);
@@ -568,8 +563,6 @@ public class CategorySelectorFragment extends AppbarFragment {
Activity activity = getActivity();
final UserEventLogger eventLogger =
InjectorProvider.getInjector().getUserEventLogger(activity);
- eventLogger.logCategorySelected(mCategories.get(position)
- .getCollectionId());
if (mCategories.get(position).supportsCustomPhotos()) {
getCategorySelectorFragmentHost().requestCustomPhotoPicker(
new MyPhotosStarter.PermissionChangedListener() {
@@ -594,9 +587,6 @@ public class CategorySelectorFragment extends AppbarFragment {
if (mCategories.get(position).isSingleWallpaperCategory()) {
WallpaperInfo wallpaper = mCategories.get(position)
.getSingleWallpaper();
- // Log click on individual wallpaper
- eventLogger.logIndividualWallpaperSelected(
- mCategories.get(position).getCollectionId());
InjectorProvider.getInjector().getWallpaperPersister(activity)
.setWallpaperInfoInPreview(wallpaper);
diff --git a/src/com/android/wallpaper/picker/CustomizationPickerActivity.java b/src/com/android/wallpaper/picker/CustomizationPickerActivity.java
index 76e5635b..b50cdb32 100644
--- a/src/com/android/wallpaper/picker/CustomizationPickerActivity.java
+++ b/src/com/android/wallpaper/picker/CustomizationPickerActivity.java
@@ -25,7 +25,6 @@ import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.os.Bundle;
-import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
@@ -50,7 +49,7 @@ import com.android.wallpaper.module.LargeScreenMultiPanesChecker;
import com.android.wallpaper.module.MultiPanesChecker;
import com.android.wallpaper.module.NetworkStatusNotifier;
import com.android.wallpaper.module.NetworkStatusNotifier.NetworkStatus;
-import com.android.wallpaper.module.UserEventLogger;
+import com.android.wallpaper.module.logging.UserEventLogger;
import com.android.wallpaper.picker.AppbarFragment.AppbarFragmentHost;
import com.android.wallpaper.picker.CategorySelectorFragment.CategorySelectorFragmentHost;
import com.android.wallpaper.picker.MyPhotosStarter.PermissionChangedListener;
@@ -83,7 +82,6 @@ public class CustomizationPickerActivity extends FragmentActivity implements App
private BottomActionBar mBottomActionBar;
private boolean mIsSafeToCommitFragmentTransaction;
- private boolean mIsUseRevampedUi;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -93,7 +91,6 @@ public class CustomizationPickerActivity extends FragmentActivity implements App
mNetworkStatusNotifier = injector.getNetworkStatusNotifier(this);
mNetworkStatus = mNetworkStatusNotifier.getNetworkStatus();
mDisplayUtils = injector.getDisplayUtils(this);
- mIsUseRevampedUi = injector.getFlags().isUseRevampedUiEnabled(this);
enforceOrientation();
@@ -131,9 +128,8 @@ public class CustomizationPickerActivity extends FragmentActivity implements App
// Switch to the target fragment.
switchFragment(isWallpaperOnlyMode(getIntent())
- ? WallpaperOnlyFragment.newInstance(mIsUseRevampedUi)
- : CustomizationPickerFragment.newInstance(
- mIsUseRevampedUi, startFromLockScreen));
+ ? WallpaperOnlyFragment.newInstance()
+ : CustomizationPickerFragment.newInstance(startFromLockScreen));
// Cache the categories, but only if we're not restoring state (b/276767415).
mDelegate.prefetchCategories();
@@ -142,9 +138,7 @@ public class CustomizationPickerActivity extends FragmentActivity implements App
if (savedInstanceState == null) {
// We only want to start a new undo session if this activity is brand-new. A non-new
// activity will have a non-null savedInstanceState.
- if (mIsUseRevampedUi) {
- injector.getUndoInteractor(this, this).startSession();
- }
+ injector.getUndoInteractor(this, this).startSession();
}
final Intent intent = getIntent();
@@ -196,11 +190,6 @@ public class CustomizationPickerActivity extends FragmentActivity implements App
protected void onResume() {
super.onResume();
mIsSafeToCommitFragmentTransaction = true;
- boolean wallpaperOnly = isWallpaperOnlyMode(getIntent());
- boolean provisioned = Settings.Global.getInt(getContentResolver(),
- Settings.Global.DEVICE_PROVISIONED, 0) != 0;
-
- mUserEventLogger.logResumed(provisioned, wallpaperOnly);
}
@Override
@@ -211,7 +200,6 @@ public class CustomizationPickerActivity extends FragmentActivity implements App
@Override
protected void onStop() {
- mUserEventLogger.logStopped();
if (mNetworkStatusListener != null) {
mNetworkStatusNotifier.unregisterListener(mNetworkStatusListener);
mNetworkStatusListener = null;
@@ -353,7 +341,7 @@ public class CustomizationPickerActivity extends FragmentActivity implements App
if (mDelegate.handleActivityResult(requestCode, resultCode, data)) {
if (isSUWMode(this)) {
finishActivityForSUW();
- } else if (mIsUseRevampedUi) {
+ } else {
// We don't finish in the revamped UI to let the user have a chance to reset the
// change they made, should they want to. We do, however, remove all the fragments
// from our back stack to reveal the root fragment, revealing the main screen of the
@@ -362,8 +350,6 @@ public class CustomizationPickerActivity extends FragmentActivity implements App
while (fragmentManager.getBackStackEntryCount() > 0) {
fragmentManager.popBackStackImmediate();
}
- } else {
- finishActivityWithResultOk();
}
}
}
diff --git a/src/com/android/wallpaper/picker/CustomizationPickerFragment.java b/src/com/android/wallpaper/picker/CustomizationPickerFragment.java
index 068d923d..eca22667 100644
--- a/src/com/android/wallpaper/picker/CustomizationPickerFragment.java
+++ b/src/com/android/wallpaper/picker/CustomizationPickerFragment.java
@@ -62,17 +62,13 @@ public class CustomizationPickerFragment extends AppbarFragment implements
private static final String TAG = "CustomizationPickerFragment";
private static final String SCROLL_POSITION_Y = "SCROLL_POSITION_Y";
- protected static final String KEY_IS_USE_REVAMPED_UI = "is_use_revamped_ui";
private static final String KEY_START_FROM_LOCK_SCREEN = "start_from_lock_screen";
private DisposableHandle mBinding;
/** Returns a new instance of {@link CustomizationPickerFragment}. */
- public static CustomizationPickerFragment newInstance(
- boolean isUseRevampedUi,
- boolean startFromLockScreen) {
+ public static CustomizationPickerFragment newInstance(boolean startFromLockScreen) {
final CustomizationPickerFragment fragment = new CustomizationPickerFragment();
final Bundle args = new Bundle();
- args.putBoolean(KEY_IS_USE_REVAMPED_UI, isUseRevampedUi);
args.putBoolean(KEY_START_FROM_LOCK_SCREEN, startFromLockScreen);
fragment.setArguments(args);
return fragment;
@@ -95,10 +91,7 @@ public class CustomizationPickerFragment extends AppbarFragment implements
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
@Nullable Bundle savedInstanceState) {
- final boolean shouldUseRevampedUi = shouldUseRevampedUi();
- final int layoutId = shouldUseRevampedUi
- ? R.layout.toolbar_container_layout
- : R.layout.collapsing_toolbar_container_layout;
+ final int layoutId = R.layout.toolbar_container_layout;
final View view = inflater.inflate(layoutId, container, false);
if (ActivityUtils.isLaunchedFromSettingsRelated(getActivity().getIntent())) {
setUpToolbar(view, !ActivityEmbeddingUtils.shouldHideNavigateUpButton(
@@ -115,7 +108,8 @@ public class CustomizationPickerFragment extends AppbarFragment implements
this,
savedInstanceState,
injector.getUndoInteractor(requireContext(), requireActivity()),
- injector.getWallpaperInteractor(requireContext()))
+ injector.getWallpaperInteractor(requireContext()),
+ injector.getUserEventLogger(requireContext()))
).get(CustomizationPickerViewModel.class);
final Bundle arguments = getArguments();
mViewModel.setInitialScreen(
@@ -198,7 +192,7 @@ public class CustomizationPickerFragment extends AppbarFragment implements
@Override
protected int getToolbarId() {
- return shouldUseRevampedUi() ? R.id.toolbar : R.id.action_bar;
+ return R.id.toolbar;
}
@Override
@@ -342,7 +336,7 @@ public class CustomizationPickerFragment extends AppbarFragment implements
screen,
getActivity(),
getViewLifecycleOwner(),
- injector.getWallpaperColorsViewModel(),
+ injector.getWallpaperColorsRepository(),
getPermissionRequester(),
getWallpaperPreviewNavigator(),
this,
@@ -379,17 +373,6 @@ public class CustomizationPickerFragment extends AppbarFragment implements
return (WallpaperPreviewNavigator) getActivity();
}
- private boolean shouldUseRevampedUi() {
- final Bundle args = getArguments();
- if (args != null && args.containsKey(KEY_IS_USE_REVAMPED_UI)) {
- return args.getBoolean(KEY_IS_USE_REVAMPED_UI);
- } else {
- throw new IllegalStateException(
- "Must contain KEY_IS_USE_REVAMPED_UI argument, did you instantiate directly"
- + " instead of using the newInstance function?");
- }
- }
-
// TODO (b/282237387): Move wallpaper picker out of the 2-pane settings and make it a
// standalone app. Remove this flag when the bug is fixed.
private boolean getIsTwoPaneAndSmallWidth(Activity activity) {
diff --git a/src/com/android/wallpaper/picker/ImagePreviewFragment.java b/src/com/android/wallpaper/picker/ImagePreviewFragment.java
index 046eb965..aacb04bc 100755
--- a/src/com/android/wallpaper/picker/ImagePreviewFragment.java
+++ b/src/com/android/wallpaper/picker/ImagePreviewFragment.java
@@ -15,6 +15,7 @@
*/
package com.android.wallpaper.picker;
+import static android.stats.style.StyleEnums.SET_WALLPAPER_ENTRY_POINT_WALLPAPER_PREVIEW;
import static android.view.View.MeasureSpec.EXACTLY;
import static android.view.View.MeasureSpec.makeMeasureSpec;
@@ -57,7 +58,7 @@ import androidx.annotation.VisibleForTesting;
import com.android.wallpaper.R;
import com.android.wallpaper.asset.Asset;
-import com.android.wallpaper.asset.CurrentWallpaperAssetVN;
+import com.android.wallpaper.asset.CurrentWallpaperAsset;
import com.android.wallpaper.model.SetWallpaperViewModel;
import com.android.wallpaper.model.WallpaperInfo.ColorInfo;
import com.android.wallpaper.module.BitmapCropper;
@@ -230,9 +231,16 @@ public class ImagePreviewFragment extends PreviewFragment {
Math.round((float) cropRect.top * screenScale),
Math.round((float) cropRect.right * screenScale),
Math.round((float) cropRect.bottom * screenScale));
- mWallpaperSetter.setCurrentWallpaper(getActivity(), mWallpaper, mWallpaperAsset,
- destination, mFullResImageView.getScale() * screenScale, scaledCropRect,
- mWallpaperColors, SetWallpaperViewModel.getCallback(mViewModelProvider));
+ mWallpaperSetter.setCurrentWallpaper(
+ getActivity(),
+ mWallpaper,
+ mWallpaperAsset,
+ SET_WALLPAPER_ENTRY_POINT_WALLPAPER_PREVIEW,
+ destination,
+ mFullResImageView.getScale() * screenScale,
+ scaledCropRect,
+ mWallpaperColors,
+ SetWallpaperViewModel.getCallback(mViewModelProvider));
}
/**
@@ -276,7 +284,7 @@ public class ImagePreviewFragment extends PreviewFragment {
mFullResImageView.setImage(ImageSource.bitmap(pageBitmap));
setDefaultWallpaperZoomAndScroll(
- mWallpaperAsset instanceof CurrentWallpaperAssetVN);
+ mWallpaperAsset instanceof CurrentWallpaperAsset);
mFullResImageView.setOnStateChangedListener(
new OnFullResImageViewStateChangedListener() {
@Override
diff --git a/src/com/android/wallpaper/picker/LivePreviewFragment.java b/src/com/android/wallpaper/picker/LivePreviewFragment.java
index 0087147e..4c09e6fe 100644
--- a/src/com/android/wallpaper/picker/LivePreviewFragment.java
+++ b/src/com/android/wallpaper/picker/LivePreviewFragment.java
@@ -16,6 +16,9 @@
package com.android.wallpaper.picker;
import static android.app.Activity.RESULT_OK;
+import static android.app.WallpaperManager.FLAG_LOCK;
+import static android.app.WallpaperManager.FLAG_SYSTEM;
+import static android.stats.style.StyleEnums.SET_WALLPAPER_ENTRY_POINT_WALLPAPER_PREVIEW;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
@@ -122,8 +125,14 @@ public class LivePreviewFragment extends PreviewFragment {
return;
}
}
- mWallpaperSetter.setCurrentWallpaper(getActivity(), mWallpaper, null,
- destination, 0, null,
+ mWallpaperSetter.setCurrentWallpaper(
+ getActivity(),
+ mWallpaper,
+ null,
+ SET_WALLPAPER_ENTRY_POINT_WALLPAPER_PREVIEW,
+ destination,
+ 0,
+ null,
mWallpaperColors != null ? mWallpaperColors : getColorInfo().getWallpaperColors(),
callback);
}
@@ -159,11 +168,14 @@ public class LivePreviewFragment extends PreviewFragment {
private ActivityResultCallback<Integer> getCreativeWallpaperPreviewResultCallback() {
return result -> {
CreativeWallpaperInfo creativeWallpaper = (CreativeWallpaperInfo) mWallpaper;
- android.app.WallpaperInfo currentWallpaper = WallpaperManager.getInstance(
- getContext()).getWallpaperInfo();
+ WallpaperManager wallpaperManager = WallpaperManager.getInstance(getContext());
+ boolean isCreativeWallpaperApplied = creativeWallpaper.isApplied(
+ wallpaperManager.getWallpaperInfo(FLAG_SYSTEM),
+ wallpaperManager.getWallpaperInfo(FLAG_LOCK));
if (result == RESULT_OK) {
- if (creativeWallpaper.canBeDeleted() || creativeWallpaper.isApplied(
- currentWallpaper)) {
+ if (creativeWallpaper.canBeDeleted() || isCreativeWallpaperApplied) {
+ // When editing an existing wallpaper and pressing "Done" button causing the
+ // overlays to become visible
showOverlays();
overrideOnBackPressed(new OnBackPressedCallback(true) {
@Override
@@ -172,16 +184,18 @@ public class LivePreviewFragment extends PreviewFragment {
}
});
} else {
+ // When in the process of creating a new wallpaper and pressing "Done" button.
showOverlays();
overrideOnBackPressed(mSettingsOnBackPressedCallback);
}
} else {
- // Editing flow of a creative category wallpaper
- if (creativeWallpaper.canBeDeleted() || creativeWallpaper.isApplied(
- currentWallpaper)) {
+ // When you initiate the editing process for a wallpaper and then decide to exit
+ // by pressing the back button during editing.
+ if (creativeWallpaper.canBeDeleted() || isCreativeWallpaperApplied) {
showOverlays();
- // Flow where back key is pressed by user from the settings activity
} else {
+ // Flow where user opens a template (so the settings activity is launched)
+ // but user just simply presses back (without moving on to the next screen)
// TODO: This should ideally be a slide transition, but custom slide transition
// does not work properly, so having a fade transition for now
finishActivityWithFadeTransition();
@@ -280,11 +294,8 @@ public class LivePreviewFragment extends PreviewFragment {
protected void showLiveWallpaperControl() {
mSetWallpaperButton.setVisibility(VISIBLE);
- // TODO (b/242908637): unify delete logic so we don't have to do the instanceof check here
if (mWallpaper instanceof CreativeWallpaperInfo) {
CreativeWallpaperInfo creativeWallpaper = (CreativeWallpaperInfo) mWallpaper;
- android.app.WallpaperInfo currentWallpaper = WallpaperManager.getInstance(
- getContext()).getWallpaperInfo();
mWallpaperControlButtonGroup.showButton(
WallpaperControlButtonGroup.EDIT,
(buttonView, isChecked) -> {
@@ -294,8 +305,11 @@ public class LivePreviewFragment extends PreviewFragment {
mWallpaperControlButtonGroup.setChecked(
WallpaperControlButtonGroup.EDIT, false);
});
- if (!creativeWallpaper.isApplied(currentWallpaper)
- && creativeWallpaper.canBeDeleted()) {
+ WallpaperManager wallpaperManager = WallpaperManager.getInstance(getContext());
+ boolean isCreativeWallpaperApplied = creativeWallpaper.isApplied(
+ wallpaperManager.getWallpaperInfo(FLAG_SYSTEM),
+ wallpaperManager.getWallpaperInfo(FLAG_LOCK));
+ if (!isCreativeWallpaperApplied && creativeWallpaper.canBeDeleted()) {
mWallpaperControlButtonGroup.showButton(
WallpaperControlButtonGroup.DELETE,
(buttonView, isChecked) -> {
@@ -455,14 +469,15 @@ public class LivePreviewFragment extends PreviewFragment {
if (savedInstanceState == null) {
// First time at Fragment should initialize wallpaper preview.
creativeWallpaper.initializeWallpaperPreview(context);
-
}
if (savedInstanceState == null || isSettingsActivityPresent) {
+ WallpaperManager wallpaperManager = WallpaperManager.getInstance(context);
+ boolean isCreativeWallpaperApplied = creativeWallpaper.isApplied(
+ wallpaperManager.getWallpaperInfo(FLAG_SYSTEM),
+ wallpaperManager.getWallpaperInfo(FLAG_LOCK));
// First time at Fragment or settings activity is at present.
- if (!creativeWallpaper.isApplied(WallpaperManager.getInstance(
- context).getWallpaperInfo())
- && !creativeWallpaper.canBeDeleted()) {
+ if (!isCreativeWallpaperApplied && !creativeWallpaper.canBeDeleted()) {
// If it cannot be deleted, we must be creating a new one, launch settings.
// savedInstanceState != null means is rotate state and previous fragment
// already launch settings.
@@ -586,11 +601,11 @@ public class LivePreviewFragment extends PreviewFragment {
LivePreviewFragment.super.onWallpaperColorsChanged(colors);
}
},
- mWallpaperSurface, null, mIsViewAsHome
- ? WallpaperManager.FLAG_SYSTEM : WallpaperManager.FLAG_LOCK,
- mIsAssetIdPresent ? WallpaperConnection.WHICH_PREVIEW.EDIT_NON_CURRENT
- : WallpaperConnection.WHICH_PREVIEW.EDIT_CURRENT
- );
+ mWallpaperSurface,
+ null,
+ mIsViewAsHome ? FLAG_SYSTEM : FLAG_LOCK,
+ mIsAssetIdPresent ? WallpaperConnection.WhichPreview.EDIT_NON_CURRENT
+ : WallpaperConnection.WhichPreview.EDIT_CURRENT);
mWallpaperConnection.setVisibility(true);
} else {
WallpaperColorsLoader.getWallpaperColors(
diff --git a/src/com/android/wallpaper/picker/PreviewFragment.java b/src/com/android/wallpaper/picker/PreviewFragment.java
index 6fe4d9f7..e4c274e1 100755
--- a/src/com/android/wallpaper/picker/PreviewFragment.java
+++ b/src/com/android/wallpaper/picker/PreviewFragment.java
@@ -20,6 +20,7 @@ import static android.view.View.VISIBLE;
import static com.android.wallpaper.util.LaunchSourceUtils.LAUNCH_SOURCE_LAUNCHER;
import static com.android.wallpaper.util.LaunchSourceUtils.LAUNCH_SOURCE_SETTINGS_HOMEPAGE;
import static com.android.wallpaper.util.LaunchSourceUtils.WALLPAPER_LAUNCH_SOURCE;
+import static com.android.wallpaper.widget.FloatingSheet.INFORMATION;
import static com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_EXPANDED;
import static com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_HIDDEN;
@@ -61,16 +62,15 @@ import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.ViewModelProvider;
-import com.android.customization.model.color.WallpaperColorResources;
import com.android.wallpaper.R;
import com.android.wallpaper.model.LiveWallpaperInfo;
import com.android.wallpaper.model.SetWallpaperViewModel;
import com.android.wallpaper.model.WallpaperInfo;
import com.android.wallpaper.module.Injector;
import com.android.wallpaper.module.InjectorProvider;
-import com.android.wallpaper.module.UserEventLogger;
import com.android.wallpaper.module.WallpaperPersister.Destination;
import com.android.wallpaper.module.WallpaperSetter;
+import com.android.wallpaper.module.logging.UserEventLogger;
import com.android.wallpaper.util.PreviewUtils;
import com.android.wallpaper.util.ResourceUtils;
import com.android.wallpaper.widget.DuoTabs;
@@ -226,7 +226,7 @@ public abstract class PreviewFragment extends Fragment implements WallpaperColor
mUserEventLogger = injector.getUserEventLogger(appContext);
mWallpaperSetter = new WallpaperSetter(injector.getWallpaperPersister(appContext),
injector.getPreferences(appContext), mUserEventLogger,
- injector.getCurrentWallpaperInfoFactory(appContext), false);
+ injector.getCurrentWallpaperInfoFactory(appContext));
mViewModelProvider = new ViewModelProvider(requireActivity());
mSetWallpaperViewModel = mViewModelProvider.get(SetWallpaperViewModel.class);
mSetWallpaperViewModel.getStatus().observe(requireActivity(), setWallpaperStatus -> {
@@ -301,7 +301,7 @@ public abstract class PreviewFragment extends Fragment implements WallpaperColor
setUpFloatingSheet(requireContext());
mWallpaperControlButtonGroup.showButton(WallpaperControlButtonGroup.INFORMATION,
getFloatingSheetControlButtonChangeListener(WallpaperControlButtonGroup.INFORMATION,
- FloatingSheet.INFORMATION));
+ INFORMATION));
mPreviewScrim = view.findViewById(R.id.preview_scrim);
mExitFullPreviewButton = view.findViewById(R.id.exit_full_preview_button);
mExitFullPreviewButton.setOnClickListener(v -> toggleWallpaperPreviewControl());
@@ -365,7 +365,7 @@ public abstract class PreviewFragment extends Fragment implements WallpaperColor
mHideFloatingSheetTouchLayout.setVisibility(View.GONE);
mFloatingSheet.addFloatingSheetCallback(mStandardFloatingSheetCallback);
mFloatingSheet.addFloatingSheetCallback(mShowOverlayOnHideFloatingSheetCallback);
- mFloatingSheet.putFloatingSheetContent(FloatingSheet.INFORMATION,
+ mFloatingSheet.putFloatingSheetContent(INFORMATION,
new WallpaperInfoContent(context, mWallpaper));
}
@@ -377,7 +377,11 @@ public abstract class PreviewFragment extends Fragment implements WallpaperColor
mWallpaperControlButtonGroup.deselectOtherFloatingSheetControlButtons(
wallpaperType);
if (mFloatingSheet.isFloatingSheetCollapsed()) {
- hideScreenPreviewOverlay(/* hide= */true);
+ if (floatingSheetType == INFORMATION) {
+ hideScreenPreviewOverlayKeepScrim();
+ } else {
+ hideScreenPreviewOverlay(/* hide= */true);
+ }
mFloatingSheet.updateContentView(floatingSheetType);
mFloatingSheet.expand();
} else {
@@ -436,7 +440,7 @@ public abstract class PreviewFragment extends Fragment implements WallpaperColor
}
// Apply the wallpaper color resources to the fragment context. So the views created by
// the context will apply the given wallpaper color.
- new WallpaperColorResources(colors).apply(context);
+ InjectorProvider.getInjector().getWallpaperColorResources(colors, context).apply(context);
mSetWallpaperButton.setBackground(null);
mSetWallpaperButton.setBackgroundResource(R.drawable.set_wallpaper_button_background);
mExitFullPreviewButton.setForeground(
@@ -520,6 +524,18 @@ public abstract class PreviewFragment extends Fragment implements WallpaperColor
}
}
+ /**
+ * Hides or shows the overlay but leaves the scrim always visible.
+ */
+ private void hideScreenPreviewOverlayKeepScrim() {
+ mPreviewScrim.setVisibility(VISIBLE);
+ mOverlayTabs.setVisibility(View.INVISIBLE);
+ boolean isLockSelected = mOverlayTabs.getSelectedTab() == DuoTabs.TAB_PRIMARY;
+ SurfaceView targetSurface = isLockSelected ? mLockSurface : mWorkspaceSurface;
+ targetSurface.setVisibility(View.INVISIBLE);
+ targetSurface.setZOrderMediaOverlay(false);
+ }
+
protected void onSetWallpaperSuccess() {
Activity activity = getActivity();
if (activity == null) {
diff --git a/src/com/android/wallpaper/picker/StandalonePreviewActivity.java b/src/com/android/wallpaper/picker/StandalonePreviewActivity.java
index 6859ffe4..26d190c2 100755
--- a/src/com/android/wallpaper/picker/StandalonePreviewActivity.java
+++ b/src/com/android/wallpaper/picker/StandalonePreviewActivity.java
@@ -34,7 +34,6 @@ import com.android.wallpaper.config.BaseFlags;
import com.android.wallpaper.model.ImageWallpaperInfo;
import com.android.wallpaper.model.WallpaperInfo;
import com.android.wallpaper.module.InjectorProvider;
-import com.android.wallpaper.module.UserEventLogger;
import com.android.wallpaper.picker.AppbarFragment.AppbarFragmentHost;
import com.android.wallpaper.picker.preview.ui.WallpaperPreviewActivity;
@@ -48,8 +47,6 @@ public class StandalonePreviewActivity extends BasePreviewActivity implements Ap
private static final String KEY_UP_ARROW = "up_arrow";
private static final int READ_EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE = 1;
- private UserEventLogger mUserEventLogger;
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -57,10 +54,6 @@ public class StandalonePreviewActivity extends BasePreviewActivity implements Ap
enableFullScreen();
- mUserEventLogger = InjectorProvider.getInjector().getUserEventLogger(
- getApplicationContext());
- mUserEventLogger.logStandalonePreviewLaunched();
-
Intent cropAndSetWallpaperIntent = getIntent();
Uri imageUri = cropAndSetWallpaperIntent.getData();
@@ -73,8 +66,6 @@ public class StandalonePreviewActivity extends BasePreviewActivity implements Ap
// Check if READ_MEDIA_IMAGES permission is needed because the app invoking this activity
// passed a file:// URI or a content:// URI without a flag to grant read permission.
boolean isReadPermissionGrantedForImageUri = isReadPermissionGrantedForImageUri(imageUri);
- mUserEventLogger.logStandalonePreviewImageUriHasReadPermission(
- isReadPermissionGrantedForImageUri);
// Request storage permission if necessary (i.e., on Android M and later if storage
// permission has not already been granted) and delay loading the PreviewFragment until the
@@ -122,8 +113,6 @@ public class StandalonePreviewActivity extends BasePreviewActivity implements Ap
&& grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED;
- mUserEventLogger.logStandalonePreviewStorageDialogApproved(isGranted);
-
// Close the activity because we can't open the image without storage permission.
if (!isGranted) {
finish();
diff --git a/src/com/android/wallpaper/picker/WallpaperInfoHelper.java b/src/com/android/wallpaper/picker/WallpaperInfoHelper.java
index 7e5dd894..3d149f1b 100644
--- a/src/com/android/wallpaper/picker/WallpaperInfoHelper.java
+++ b/src/com/android/wallpaper/picker/WallpaperInfoHelper.java
@@ -23,7 +23,7 @@ import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import com.android.wallpaper.model.LiveWallpaperInfo;
+import com.android.wallpaper.R;
import com.android.wallpaper.model.WallpaperInfo;
import com.android.wallpaper.module.ExploreIntentChecker;
import com.android.wallpaper.module.InjectorProvider;
@@ -44,7 +44,7 @@ public class WallpaperInfoHelper {
@NonNull WallpaperInfo wallpaperInfo,
@NonNull ExploreIntentReceiver callback) {
String actionUrl = wallpaperInfo.getActionUrl(context);
- CharSequence actionLabel = getActionLabel(context, wallpaperInfo);
+ CharSequence actionLabel = context.getString(R.string.explore);
if (actionUrl != null && !actionUrl.isEmpty()) {
Uri exploreUri = Uri.parse(wallpaperInfo.getActionUrl(context));
ExploreIntentChecker intentChecker =
@@ -56,21 +56,30 @@ public class WallpaperInfoHelper {
}
}
+ /**
+ * Loads the explore Intent from the actionUrl
+ */
+ public static void loadExploreIntent(
+ Context context,
+ @Nullable String actionUrl,
+ @NonNull ExploreIntentReceiver callback) {
+ CharSequence actionLabel = context.getString(R.string.explore);
+
+ if (!TextUtils.isEmpty(actionUrl)) {
+ Uri exploreUri = Uri.parse(actionUrl);
+ ExploreIntentChecker intentChecker =
+ InjectorProvider.getInjector().getExploreIntentChecker(context);
+ intentChecker.fetchValidActionViewIntent(exploreUri,
+ intent -> callback.onReceiveExploreIntent(actionLabel, intent));
+ } else {
+ callback.onReceiveExploreIntent(actionLabel, null);
+ }
+ }
+
/** Indicates if the explore button should show up in the wallpaper info view. */
public static boolean shouldShowExploreButton(Context context, @Nullable Intent exploreIntent) {
return exploreIntent != null && !ActivityUtils.isSUWMode(context);
}
- private static CharSequence getActionLabel(Context context, WallpaperInfo wallpaperInfo) {
- CharSequence exploreLabel = null;
- if (wallpaperInfo instanceof LiveWallpaperInfo) {
- exploreLabel = ((LiveWallpaperInfo) wallpaperInfo).getActionDescription(context);
- }
- if (TextUtils.isEmpty(exploreLabel)) {
- exploreLabel = context.getString(wallpaperInfo.getActionLabelRes(context));
- }
- return exploreLabel;
- }
-
private WallpaperInfoHelper() {}
}
diff --git a/src/com/android/wallpaper/picker/WallpaperOnlyFragment.java b/src/com/android/wallpaper/picker/WallpaperOnlyFragment.java
index 033b8e95..fd7cae1c 100644
--- a/src/com/android/wallpaper/picker/WallpaperOnlyFragment.java
+++ b/src/com/android/wallpaper/picker/WallpaperOnlyFragment.java
@@ -29,10 +29,9 @@ import java.util.stream.Collectors;
public class WallpaperOnlyFragment extends CustomizationPickerFragment {
/** Returns a new instance of {@link WallpaperOnlyFragment}. */
- public static WallpaperOnlyFragment newInstance(boolean isUseRevampedUi) {
+ public static WallpaperOnlyFragment newInstance() {
final WallpaperOnlyFragment fragment = new WallpaperOnlyFragment();
final Bundle args = new Bundle();
- args.putBoolean(KEY_IS_USE_REVAMPED_UI, isUseRevampedUi);
fragment.setArguments(args);
return fragment;
}
diff --git a/src/com/android/wallpaper/picker/customization/data/content/WallpaperClient.kt b/src/com/android/wallpaper/picker/customization/data/content/WallpaperClient.kt
index f22148da..41c4b8a0 100644
--- a/src/com/android/wallpaper/picker/customization/data/content/WallpaperClient.kt
+++ b/src/com/android/wallpaper/picker/customization/data/content/WallpaperClient.kt
@@ -18,6 +18,10 @@
package com.android.wallpaper.picker.customization.data.content
import android.graphics.Bitmap
+import android.graphics.Rect
+import com.android.wallpaper.model.wallpaper.ScreenOrientation
+import com.android.wallpaper.model.wallpaper.WallpaperModel.StaticWallpaperModel
+import com.android.wallpaper.module.logging.UserEventLogger.SetWallpaperEntryPoint
import com.android.wallpaper.picker.customization.shared.model.WallpaperDestination
import com.android.wallpaper.picker.customization.shared.model.WallpaperModel
import kotlinx.coroutines.flow.Flow
@@ -32,20 +36,44 @@ interface WallpaperClient {
): Flow<List<WallpaperModel>>
/**
- * Asynchronously sets the wallpaper to the one with the given ID.
+ * Asynchronously sets a static wallpaper.
*
+ * @param setWallpaperEntryPoint The entry point where we set the wallpaper from.
+ * @param destination The screen to set the wallpaper on.
+ * @param wallpaperModel The wallpaper model of the wallpaper.
+ * @param bitmap The bitmap of the static wallpaper. Note that the bitmap should be the
+ * original, full-size bitmap.
+ * @param cropHints The crop hints that indicate how the wallpaper should be cropped and render
+ * on the designated screen and orientation.
+ * @param onDone A callback to invoke when setting is done.
+ */
+ suspend fun setStaticWallpaper(
+ @SetWallpaperEntryPoint setWallpaperEntryPoint: Int,
+ destination: WallpaperDestination,
+ wallpaperModel: StaticWallpaperModel,
+ bitmap: Bitmap,
+ cropHints: Map<ScreenOrientation, Rect>,
+ onDone: () -> Unit,
+ )
+
+ /**
+ * Asynchronously sets a recent wallpaper selected from the wallpaper quick switcher. The recent
+ * wallpaper must have a wallpaper ID.
+ *
+ * @param setWallpaperEntryPoint The entry point where we set the wallpaper from.
* @param destination The screen to set the wallpaper on.
* @param wallpaperId The ID of the wallpaper to set.
* @param onDone A callback to invoke when setting is done.
*/
- suspend fun setWallpaper(
+ suspend fun setRecentWallpaper(
+ @SetWallpaperEntryPoint setWallpaperEntryPoint: Int,
destination: WallpaperDestination,
wallpaperId: String,
- onDone: () -> Unit
+ onDone: () -> Unit,
)
- /** Returns a thumbnail for the wallpaper with the given ID. */
- suspend fun loadThumbnail(wallpaperId: String): Bitmap?
+ /** Returns a thumbnail for the wallpaper with the given ID and destination. */
+ suspend fun loadThumbnail(wallpaperId: String, destination: WallpaperDestination): Bitmap?
/** Returns whether the recent wallpapers provider is available. */
fun areRecentsAvailable(): Boolean
diff --git a/src/com/android/wallpaper/picker/customization/data/content/WallpaperClientImpl.kt b/src/com/android/wallpaper/picker/customization/data/content/WallpaperClientImpl.kt
index 65721240..0440bb53 100644
--- a/src/com/android/wallpaper/picker/customization/data/content/WallpaperClientImpl.kt
+++ b/src/com/android/wallpaper/picker/customization/data/content/WallpaperClientImpl.kt
@@ -25,11 +25,18 @@ import android.database.ContentObserver
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Color
+import android.graphics.Rect
import android.net.Uri
import android.os.Looper
import android.util.Log
+import com.android.wallpaper.asset.BitmapUtils
+import com.android.wallpaper.model.StaticWallpaperMetadata
import com.android.wallpaper.model.WallpaperInfo
-import com.android.wallpaper.module.CurrentWallpaperInfoFactory
+import com.android.wallpaper.model.wallpaper.ScreenOrientation
+import com.android.wallpaper.model.wallpaper.WallpaperModel.StaticWallpaperModel
+import com.android.wallpaper.module.InjectorProvider
+import com.android.wallpaper.module.WallpaperPreferences
+import com.android.wallpaper.module.logging.UserEventLogger.SetWallpaperEntryPoint
import com.android.wallpaper.picker.customization.shared.model.WallpaperDestination
import com.android.wallpaper.picker.customization.shared.model.WallpaperModel
import java.io.IOException
@@ -42,8 +49,8 @@ import kotlinx.coroutines.suspendCancellableCoroutine
class WallpaperClientImpl(
private val context: Context,
- private val infoFactory: CurrentWallpaperInfoFactory,
private val wallpaperManager: WallpaperManager,
+ private val wallpaperPreferences: WallpaperPreferences,
) : WallpaperClient {
private var recentsContentProviderAvailable: Boolean? = null
@@ -104,14 +111,65 @@ class WallpaperClientImpl(
}
}
- override suspend fun setWallpaper(
+ override suspend fun setStaticWallpaper(
+ @SetWallpaperEntryPoint setWallpaperEntryPoint: Int,
destination: WallpaperDestination,
- wallpaperId: String,
+ wallpaperModel: StaticWallpaperModel,
+ bitmap: Bitmap,
+ cropHints: Map<ScreenOrientation, Rect>,
onDone: () -> Unit
) {
+ // TODO (b/309138446): Use the new multi-crop API from WallpaperManager
+ val wallpaperManagerId =
+ wallpaperManager.setBitmap(
+ bitmap,
+ cropHints[ScreenOrientation.PORTRAIT],
+ true,
+ destination.toFlags()
+ )
+ // Save wallpaper metadata in the preference for two purposes
+ // 1. Quickly reconstruct the currently-selected wallpaper when opening the app
+ // 2. Snapshot logging
+ val bitmapHash = BitmapUtils.generateHashCode(bitmap)
+ val metadata =
+ StaticWallpaperMetadata(
+ wallpaperModel.commonWallpaperData.attributions,
+ wallpaperModel.commonWallpaperData.exploreActionUrl,
+ wallpaperModel.commonWallpaperData.id.collectionId,
+ bitmapHash,
+ wallpaperManagerId,
+ wallpaperModel.commonWallpaperData.id.uniqueId,
+ // TODO (b/309139122): Introduce crop hints to StaticWallpaperMetadata
+ cropHints = null,
+ )
+ if (destination == WallpaperDestination.HOME || destination == WallpaperDestination.BOTH) {
+ wallpaperPreferences.clearHomeWallpaperMetadata()
+ wallpaperPreferences.setHomeStaticImageWallpaperMetadata(metadata)
+ }
+ if (destination == WallpaperDestination.LOCK || destination == WallpaperDestination.BOTH) {
+ wallpaperPreferences.clearLockWallpaperMetadata()
+ wallpaperPreferences.setLockStaticImageWallpaperMetadata(metadata)
+ }
+ // Save the static wallpaper to recent wallpapers
+ wallpaperPreferences.addStaticWallpaperToRecentWallpapers(
+ destination,
+ wallpaperModel,
+ bitmap,
+ // TODO (b/309139122): Introduce crop hints to recent wallpapers
+ emptyMap(),
+ )
+ }
+
+ override suspend fun setRecentWallpaper(
+ @SetWallpaperEntryPoint setWallpaperEntryPoint: Int,
+ destination: WallpaperDestination,
+ wallpaperId: String,
+ onDone: () -> Unit,
+ ) {
val updateValues = ContentValues()
updateValues.put(KEY_ID, wallpaperId)
updateValues.put(KEY_SCREEN, destination.asString())
+ updateValues.put(KEY_SET_WALLPAPER_ENTRY_POINT, setWallpaperEntryPoint)
val updatedRowCount = context.contentResolver.update(SET_WALLPAPER_URI, updateValues, null)
if (updatedRowCount == 0) {
Log.e(TAG, "Error setting wallpaper: $wallpaperId")
@@ -154,15 +212,20 @@ class WallpaperClientImpl(
val idColumnIndex = cursor.getColumnIndex(KEY_ID)
val placeholderColorColumnIndex = cursor.getColumnIndex(KEY_PLACEHOLDER_COLOR)
val lastUpdatedColumnIndex = cursor.getColumnIndex(KEY_LAST_UPDATED)
+ val titleColumnIndex = cursor.getColumnIndex(TITLE)
while (cursor.moveToNext()) {
val wallpaperId = cursor.getString(idColumnIndex)
val placeholderColor = cursor.getInt(placeholderColorColumnIndex)
val lastUpdated = cursor.getLong(lastUpdatedColumnIndex)
+ val title =
+ if (titleColumnIndex > -1) cursor.getString(titleColumnIndex) else null
+
add(
WallpaperModel(
wallpaperId = wallpaperId,
placeholderColor = placeholderColor,
- lastUpdated = lastUpdated
+ lastUpdated = lastUpdated,
+ title = title,
)
)
}
@@ -183,23 +246,27 @@ class WallpaperClientImpl(
val colors = wallpaperManager.getWallpaperColors(destination.toFlags())
return WallpaperModel(
- wallpaper.wallpaperId,
- colors?.primaryColor?.toArgb() ?: Color.TRANSPARENT
+ wallpaperId = wallpaper.wallpaperId,
+ placeholderColor = colors?.primaryColor?.toArgb() ?: Color.TRANSPARENT,
+ title = wallpaper.getTitle(context)
)
}
private suspend fun getCurrentWallpapers(): Pair<WallpaperInfo, WallpaperInfo?> =
suspendCancellableCoroutine { continuation ->
- infoFactory.createCurrentWallpaperInfos(
- { homeWallpaper, lockWallpaper, _ ->
+ InjectorProvider.getInjector()
+ .getCurrentWallpaperInfoFactory(context)
+ .createCurrentWallpaperInfos(
+ context,
+ /* forceRefresh= */ false,
+ ) { homeWallpaper, lockWallpaper, _ ->
continuation.resume(Pair(homeWallpaper, lockWallpaper), null)
- },
- false
- )
+ }
}
override suspend fun loadThumbnail(
wallpaperId: String,
+ destination: WallpaperDestination
): Bitmap? {
if (areRecentsAvailable()) {
try {
@@ -207,7 +274,10 @@ class WallpaperClientImpl(
@Suppress("BlockingMethodInNonBlockingContext")
context.contentResolver
.openFile(
- GET_THUMBNAIL_BASE_URI.buildUpon().appendPath(wallpaperId).build(),
+ GET_THUMBNAIL_BASE_URI.buildUpon()
+ .appendPath(wallpaperId)
+ .appendQueryParameter(KEY_DESTINATION, destination.asString())
+ .build(),
"r",
null,
)
@@ -219,7 +289,11 @@ class WallpaperClientImpl(
}
}
} catch (e: IOException) {
- Log.e(TAG, "Error getting wallpaper preview: $wallpaperId", e)
+ Log.e(
+ TAG,
+ "Error getting wallpaper preview: $wallpaperId, destination: ${destination.asString()}",
+ e
+ )
}
} else {
val currentWallpapers = getCurrentWallpapers()
@@ -255,7 +329,7 @@ class WallpaperClientImpl(
return recentsContentProviderAvailable == true
}
- private fun WallpaperDestination.asString(): String {
+ fun WallpaperDestination.asString(): String {
return when (this) {
WallpaperDestination.BOTH -> SCREEN_ALL
WallpaperDestination.HOME -> SCREEN_HOME
@@ -298,10 +372,16 @@ class WallpaperClientImpl(
private const val KEY_ID = "id"
/** Key for a parameter used to pass the screen to/from the content provider. */
private const val KEY_SCREEN = "screen"
+ /** Key for a parameter used to pass the wallpaper destination to/from content provider. */
+ private const val KEY_DESTINATION = "destination"
+ /** Key for a parameter used to pass the screen to/from the content provider. */
+ private const val KEY_SET_WALLPAPER_ENTRY_POINT = "set_wallpaper_entry_point"
private const val KEY_LAST_UPDATED = "last_updated"
private const val SCREEN_ALL = "all_screens"
private const val SCREEN_HOME = "home_screen"
private const val SCREEN_LOCK = "lock_screen"
+
+ private const val TITLE = "title"
/**
* Key for a parameter used to get the placeholder color for a wallpaper from the content
* provider.
diff --git a/src/com/android/wallpaper/model/WallpaperColorsViewModel.kt b/src/com/android/wallpaper/picker/customization/data/repository/WallpaperColorsRepository.kt
index 98681476..167a0989 100644
--- a/src/com/android/wallpaper/model/WallpaperColorsViewModel.kt
+++ b/src/com/android/wallpaper/picker/customization/data/repository/WallpaperColorsRepository.kt
@@ -13,19 +13,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.wallpaper.model
+package com.android.wallpaper.picker.customization.data.repository
import android.app.WallpaperColors
+import com.android.wallpaper.picker.customization.shared.model.WallpaperColorsModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
-/**
- * ViewModel class to keep track of WallpaperColors for the current wallpaper
- *
- * TODO (b/269451870): Rename to WallpaperColorsRepository
- */
-class WallpaperColorsViewModel {
+/** ViewModel class to keep track of WallpaperColors for the current wallpaper */
+class WallpaperColorsRepository {
private val _homeWallpaperColors =
MutableStateFlow<WallpaperColorsModel>(WallpaperColorsModel.Loading)
diff --git a/src/com/android/wallpaper/picker/customization/data/repository/WallpaperRepository.kt b/src/com/android/wallpaper/picker/customization/data/repository/WallpaperRepository.kt
index dc2f81af..42df53b3 100644
--- a/src/com/android/wallpaper/picker/customization/data/repository/WallpaperRepository.kt
+++ b/src/com/android/wallpaper/picker/customization/data/repository/WallpaperRepository.kt
@@ -20,6 +20,7 @@ package com.android.wallpaper.picker.customization.data.repository
import android.graphics.Bitmap
import android.util.LruCache
import com.android.wallpaper.module.WallpaperPreferences
+import com.android.wallpaper.module.logging.UserEventLogger.SetWallpaperEntryPoint
import com.android.wallpaper.picker.customization.data.content.WallpaperClient
import com.android.wallpaper.picker.customization.shared.model.WallpaperDestination
import com.android.wallpaper.picker.customization.shared.model.WallpaperModel
@@ -67,8 +68,8 @@ class WallpaperRepository(
): String {
val key =
when (destination) {
- WallpaperDestination.HOME -> wallpaperPreferences.homeWallpaperRecentsKey
- WallpaperDestination.LOCK -> wallpaperPreferences.lockWallpaperRecentsKey
+ WallpaperDestination.HOME -> wallpaperPreferences.getHomeWallpaperRecentsKey()
+ WallpaperDestination.LOCK -> wallpaperPreferences.getLockWallpaperRecentsKey()
else -> error("Unsupported destination")
}
return key ?: previews?.firstOrNull()?.wallpaperId ?: DEFAULT_KEY
@@ -95,12 +96,16 @@ class WallpaperRepository(
.flowOn(backgroundDispatcher)
}
- /** Returns a thumbnail for the wallpaper with the given ID. */
- suspend fun loadThumbnail(wallpaperId: String, lastUpdatedTimestamp: Long): Bitmap? {
+ /** Returns a thumbnail for the wallpaper with the given ID and destination. */
+ suspend fun loadThumbnail(
+ wallpaperId: String,
+ lastUpdatedTimestamp: Long,
+ destination: WallpaperDestination
+ ): Bitmap? {
val cacheKey = "$wallpaperId-$lastUpdatedTimestamp"
return thumbnailCache[cacheKey]
?: withContext(backgroundDispatcher) {
- val thumbnail = client.loadThumbnail(wallpaperId)
+ val thumbnail = client.loadThumbnail(wallpaperId, destination)
if (thumbnail != null) {
thumbnailCache.put(cacheKey, thumbnail)
}
@@ -110,13 +115,15 @@ class WallpaperRepository(
/** Sets the wallpaper to the one with the given ID. */
suspend fun setWallpaper(
+ @SetWallpaperEntryPoint setWallpaperEntryPoint: Int,
destination: WallpaperDestination,
wallpaperId: String,
) {
_selectingWallpaperId.value =
_selectingWallpaperId.value.toMutableMap().apply { this[destination] = wallpaperId }
withContext(backgroundDispatcher) {
- client.setWallpaper(
+ client.setRecentWallpaper(
+ setWallpaperEntryPoint = setWallpaperEntryPoint,
destination = destination,
wallpaperId = wallpaperId,
) {
@@ -127,7 +134,7 @@ class WallpaperRepository(
}
companion object {
- private const val DEFAULT_KEY = "default_missing_key"
+ const val DEFAULT_KEY = "default_missing_key"
/** The maximum number of options to show, including the currently-selected one. */
private const val MAX_OPTIONS = 5
}
diff --git a/src/com/android/wallpaper/picker/customization/domain/interactor/WallpaperInteractor.kt b/src/com/android/wallpaper/picker/customization/domain/interactor/WallpaperInteractor.kt
index 82b39a20..016d6708 100644
--- a/src/com/android/wallpaper/picker/customization/domain/interactor/WallpaperInteractor.kt
+++ b/src/com/android/wallpaper/picker/customization/domain/interactor/WallpaperInteractor.kt
@@ -19,6 +19,7 @@ package com.android.wallpaper.picker.customization.domain.interactor
import android.graphics.Bitmap
import com.android.wallpaper.module.CustomizationSections
+import com.android.wallpaper.module.logging.UserEventLogger.SetWallpaperEntryPoint
import com.android.wallpaper.picker.customization.data.repository.WallpaperRepository
import com.android.wallpaper.picker.customization.shared.model.WallpaperDestination
import com.android.wallpaper.picker.customization.shared.model.WallpaperModel
@@ -99,20 +100,27 @@ class WallpaperInteractor(
/** Sets the wallpaper to the one with the given ID. */
suspend fun setWallpaper(
+ @SetWallpaperEntryPoint setWallpaperEntryPoint: Int,
destination: WallpaperDestination,
wallpaperId: String,
) {
repository.setWallpaper(
+ setWallpaperEntryPoint = setWallpaperEntryPoint,
destination = destination,
wallpaperId = wallpaperId,
)
}
- /** Returns a thumbnail for the wallpaper with the given ID. */
- suspend fun loadThumbnail(wallpaperId: String, lastUpdatedTimestamp: Long): Bitmap? {
+ /** Returns a thumbnail for the wallpaper with the given ID and destination. */
+ suspend fun loadThumbnail(
+ wallpaperId: String,
+ lastUpdatedTimestamp: Long,
+ destination: WallpaperDestination
+ ): Bitmap? {
return repository.loadThumbnail(
wallpaperId = wallpaperId,
- lastUpdatedTimestamp = lastUpdatedTimestamp
+ lastUpdatedTimestamp = lastUpdatedTimestamp,
+ destination = destination
)
}
}
diff --git a/src/com/android/wallpaper/picker/customization/domain/interactor/WallpaperSnapshotRestorer.kt b/src/com/android/wallpaper/picker/customization/domain/interactor/WallpaperSnapshotRestorer.kt
index 7c23cfed..e3ca17ff 100644
--- a/src/com/android/wallpaper/picker/customization/domain/interactor/WallpaperSnapshotRestorer.kt
+++ b/src/com/android/wallpaper/picker/customization/domain/interactor/WallpaperSnapshotRestorer.kt
@@ -17,6 +17,8 @@
package com.android.wallpaper.picker.customization.domain.interactor
+import android.stats.style.StyleEnums.SET_WALLPAPER_ENTRY_POINT_RESET
+import com.android.wallpaper.picker.customization.data.repository.WallpaperRepository.Companion.DEFAULT_KEY
import com.android.wallpaper.picker.customization.shared.model.WallpaperDestination
import com.android.wallpaper.picker.undo.domain.interactor.SnapshotRestorer
import com.android.wallpaper.picker.undo.domain.interactor.SnapshotStore
@@ -24,6 +26,8 @@ import com.android.wallpaper.picker.undo.shared.model.RestorableSnapshot
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.drop
+import kotlinx.coroutines.flow.filter
+import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
/** Stores and restores undo snapshots for wallpaper state. */
@@ -48,6 +52,7 @@ class WallpaperSnapshotRestorer(
val homeWallpaperId = snapshot.args[SELECTED_HOME_SCREEN_WALLPAPER_ID]
if (!homeWallpaperId.isNullOrEmpty()) {
interactor.setWallpaper(
+ setWallpaperEntryPoint = SET_WALLPAPER_ENTRY_POINT_RESET,
destination = WallpaperDestination.HOME,
wallpaperId = homeWallpaperId
)
@@ -56,6 +61,7 @@ class WallpaperSnapshotRestorer(
val lockWallpaperId = snapshot.args[SELECTED_LOCK_SCREEN_WALLPAPER_ID]
if (!lockWallpaperId.isNullOrEmpty()) {
interactor.setWallpaper(
+ setWallpaperEntryPoint = SET_WALLPAPER_ENTRY_POINT_RESET,
destination = WallpaperDestination.LOCK,
wallpaperId = lockWallpaperId
)
@@ -81,27 +87,32 @@ class WallpaperSnapshotRestorer(
}
}
- private fun snapshot(
- homeWallpaperId: String = querySelectedWallpaperId(destination = WallpaperDestination.HOME),
- lockWallpaperId: String = querySelectedWallpaperId(destination = WallpaperDestination.LOCK),
+ private suspend fun snapshot(
+ homeWallpaperId: String? = null,
+ lockWallpaperId: String? = null,
): RestorableSnapshot {
return RestorableSnapshot(
args =
buildMap {
put(
SELECTED_HOME_SCREEN_WALLPAPER_ID,
- homeWallpaperId,
+ homeWallpaperId
+ ?: querySelectedWallpaperId(destination = WallpaperDestination.HOME),
)
put(
SELECTED_LOCK_SCREEN_WALLPAPER_ID,
- lockWallpaperId,
+ lockWallpaperId
+ ?: querySelectedWallpaperId(destination = WallpaperDestination.LOCK),
)
}
)
}
- private fun querySelectedWallpaperId(destination: WallpaperDestination): String {
- return interactor.selectedWallpaperId(destination = destination).value
+ private suspend fun querySelectedWallpaperId(destination: WallpaperDestination): String {
+ return interactor
+ .selectedWallpaperId(destination = destination)
+ .filter { it != DEFAULT_KEY }
+ .first()
}
companion object {
diff --git a/src/com/android/wallpaper/model/WallpaperColorsModel.kt b/src/com/android/wallpaper/picker/customization/shared/model/WallpaperColorsModel.kt
index ef8ba7e0..d2cfd4d7 100644
--- a/src/com/android/wallpaper/model/WallpaperColorsModel.kt
+++ b/src/com/android/wallpaper/picker/customization/shared/model/WallpaperColorsModel.kt
@@ -1,4 +1,4 @@
-package com.android.wallpaper.model
+package com.android.wallpaper.picker.customization.shared.model
import android.app.WallpaperColors
diff --git a/src/com/android/wallpaper/picker/customization/shared/model/WallpaperDestination.kt b/src/com/android/wallpaper/picker/customization/shared/model/WallpaperDestination.kt
index 89d5af4e..6adbb228 100644
--- a/src/com/android/wallpaper/picker/customization/shared/model/WallpaperDestination.kt
+++ b/src/com/android/wallpaper/picker/customization/shared/model/WallpaperDestination.kt
@@ -17,6 +17,10 @@
package com.android.wallpaper.picker.customization.shared.model
+import android.app.WallpaperManager.FLAG_LOCK
+import android.app.WallpaperManager.FLAG_SYSTEM
+import android.app.WallpaperManager.SetWallpaperFlags
+
/** Enumerates all known wallpaper destinations. */
enum class WallpaperDestination {
/** Both [HOME] and [LOCK] destinations. */
@@ -24,5 +28,16 @@ enum class WallpaperDestination {
/** The home screen wallpaper. */
HOME,
/** The lock screen wallpaper. */
- LOCK,
+ LOCK;
+
+ companion object {
+ fun fromFlags(@SetWallpaperFlags flags: Int): WallpaperDestination {
+ return when (flags) {
+ FLAG_SYSTEM or FLAG_LOCK -> BOTH
+ FLAG_SYSTEM -> HOME
+ FLAG_LOCK -> LOCK
+ else -> throw IllegalArgumentException("Bad @SetWallpaperFlags value $flags")
+ }
+ }
+ }
}
diff --git a/src/com/android/wallpaper/picker/customization/shared/model/WallpaperModel.kt b/src/com/android/wallpaper/picker/customization/shared/model/WallpaperModel.kt
index afdfff68..10a62693 100644
--- a/src/com/android/wallpaper/picker/customization/shared/model/WallpaperModel.kt
+++ b/src/com/android/wallpaper/picker/customization/shared/model/WallpaperModel.kt
@@ -22,4 +22,5 @@ data class WallpaperModel(
val wallpaperId: String,
val placeholderColor: Int,
val lastUpdated: Long = -1,
+ val title: String?,
)
diff --git a/src/com/android/wallpaper/picker/customization/ui/binder/ScreenPreviewBinder.kt b/src/com/android/wallpaper/picker/customization/ui/binder/ScreenPreviewBinder.kt
index 5842de31..46b2c1a9 100644
--- a/src/com/android/wallpaper/picker/customization/ui/binder/ScreenPreviewBinder.kt
+++ b/src/com/android/wallpaper/picker/customization/ui/binder/ScreenPreviewBinder.kt
@@ -45,13 +45,15 @@ import com.android.systemui.monet.ColorScheme
import com.android.wallpaper.R
import com.android.wallpaper.asset.Asset
import com.android.wallpaper.asset.BitmapCachingAsset
-import com.android.wallpaper.asset.CurrentWallpaperAssetVN
+import com.android.wallpaper.asset.CurrentWallpaperAsset
import com.android.wallpaper.config.BaseFlags
import com.android.wallpaper.model.LiveWallpaperInfo
import com.android.wallpaper.model.WallpaperInfo
import com.android.wallpaper.module.CustomizationSections
+import com.android.wallpaper.picker.FixedWidthDisplayRatioFrameLayout
import com.android.wallpaper.picker.WorkspaceSurfaceHolderCallback
import com.android.wallpaper.picker.customization.animation.view.LoadingAnimation
+import com.android.wallpaper.picker.customization.ui.section.ScreenPreviewClickView
import com.android.wallpaper.picker.customization.ui.view.WallpaperSurfaceView
import com.android.wallpaper.picker.customization.ui.viewmodel.AnimationStateViewModel
import com.android.wallpaper.picker.customization.ui.viewmodel.ScreenPreviewViewModel
@@ -60,6 +62,7 @@ import com.android.wallpaper.util.WallpaperConnection
import com.android.wallpaper.util.WallpaperSurfaceCallback
import java.util.concurrent.CompletableFuture
import java.util.concurrent.atomic.AtomicBoolean
+import kotlinx.coroutines.DisposableHandle
import kotlinx.coroutines.launch
/**
@@ -95,7 +98,6 @@ object ScreenPreviewBinder {
offsetToStart: Boolean,
dimWallpaper: Boolean = false,
onWallpaperPreviewDirty: () -> Unit,
- onWorkspacePreviewDirty: () -> Unit = {},
animationStateViewModel: AnimationStateViewModel? = null,
isWallpaperAlwaysVisible: Boolean = true,
mirrorSurface: SurfaceView? = null,
@@ -108,16 +110,21 @@ object ScreenPreviewBinder {
// before the engine is ready, and b) we need this state for onResume
// TODO(b/287618705) Remove this
val showLivePreview = AtomicBoolean(isWallpaperAlwaysVisible)
- val fixedWidthDisplayFrameLayout = previewView.parent as? View
- val screenPreviewClickView = fixedWidthDisplayFrameLayout?.parent as? View
- // Set the content description on the parent view
- screenPreviewClickView?.contentDescription =
- activity.resources.getString(viewModel.previewContentDescription)
- fixedWidthDisplayFrameLayout?.importantForAccessibility =
- View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
-
- // This ensures that we do not announce the time multiple times
- previewView.importantForAccessibility = View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
+ val fixedWidthDisplayFrameLayout = previewView.parent as? FixedWidthDisplayRatioFrameLayout
+ val screenPreviewClickView = fixedWidthDisplayFrameLayout?.parent as? ScreenPreviewClickView
+ if (screenPreviewClickView != null) {
+ // If screenPreviewClickView exists, we will have it handle accessibility and
+ // disable a11y for the descendants.
+ // Set the content description on the parent view
+ screenPreviewClickView.contentDescription =
+ activity.resources.getString(viewModel.previewContentDescription)
+ fixedWidthDisplayFrameLayout.importantForAccessibility =
+ View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
+ // This ensures that we do not announce the time multiple times
+ previewView.importantForAccessibility =
+ View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
+ }
+
var wallpaperIsReadyForReveal = false
val surfaceViewsReady = {
wallpaperSurface.setBackgroundColor(Color.TRANSPARENT)
@@ -141,7 +148,7 @@ object ScreenPreviewBinder {
previewView.radius =
previewView.resources.getDimension(R.dimen.wallpaper_picker_entry_card_corner_radius)
- previewView.setOnClickListener { viewModel.onPreviewClicked?.invoke() }
+ previewView.isClickable = true
var previewSurfaceCallback: WorkspaceSurfaceHolderCallback? = null
var wallpaperSurfaceCallback: WallpaperSurfaceCallback? = null
@@ -154,6 +161,8 @@ object ScreenPreviewBinder {
var animationColorToRestore: Int? = null
var currentWallpaperThumbnail: Bitmap? = null
+ var disposableHandle: DisposableHandle? = null
+
val job =
lifecycleOwner.lifecycleScope.launch {
launch {
@@ -197,6 +206,7 @@ object ScreenPreviewBinder {
override fun onDestroy(owner: LifecycleOwner) {
super.onDestroy(owner)
if (isPageTransitionsFeatureEnabled) {
+ disposableHandle?.dispose()
wallpaperConnection?.destroy()
wallpaperConnection = null
}
@@ -237,6 +247,7 @@ object ScreenPreviewBinder {
)
wallpaperIsReadyForReveal = false
if (!isPageTransitionsFeatureEnabled) {
+ disposableHandle?.dispose()
wallpaperConnection?.destroy()
wallpaperConnection = null
}
@@ -360,13 +371,17 @@ object ScreenPreviewBinder {
launch {
lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
- var initialWorkspaceUpdate = true
viewModel.workspaceUpdateEvents()?.collect {
- if (initialWorkspaceUpdate) {
- initialWorkspaceUpdate = false
- } else {
- onWorkspacePreviewDirty()
- }
+ workspaceSurface.holder.removeCallback(previewSurfaceCallback)
+ previewSurfaceCallback?.cleanUp()
+ removeAndReadd(workspaceSurface)
+ previewSurfaceCallback =
+ WorkspaceSurfaceHolderCallback(
+ workspaceSurface,
+ viewModel.previewUtils,
+ viewModel.getInitialExtras(),
+ )
+ workspaceSurface.holder.addCallback(previewSurfaceCallback)
}
}
}
@@ -448,6 +463,7 @@ object ScreenPreviewBinder {
}
(wallpaperInfo as? LiveWallpaperInfo)?.let { liveWallpaperInfo ->
if (isPageTransitionsFeatureEnabled) {
+ disposableHandle?.dispose()
wallpaperConnection?.destroy()
wallpaperConnection = null
}
@@ -472,7 +488,7 @@ object ScreenPreviewBinder {
// Sometimes the service gets connected before the view
// is valid.
// TODO(b/284233455): investigate why and remove this workaround
- previewView.addOnAttachStateChangeListener(
+ val listener =
object : OnAttachStateChangeListener {
override fun onViewAttachedToWindow(v: View) {
connection.connect()
@@ -484,7 +500,11 @@ object ScreenPreviewBinder {
// Do nothing
}
}
- )
+
+ previewView.addOnAttachStateChangeListener(listener)
+ disposableHandle = DisposableHandle {
+ previewView.removeOnAttachStateChangeListener(listener)
+ }
} else {
connection.connect()
connection.setVisibility(showLivePreview.get())
@@ -543,7 +563,7 @@ object ScreenPreviewBinder {
wallpaperSurface,
mirrorSurface,
screen.toFlag(),
- WallpaperConnection.WHICH_PREVIEW.PREVIEW_CURRENT
+ WallpaperConnection.WhichPreview.PREVIEW_CURRENT
)
private fun removeAndReadd(view: View) {
@@ -580,7 +600,7 @@ object ScreenPreviewBinder {
activity,
imageView,
ResourceUtils.getColorAttr(activity, android.R.attr.colorSecondary),
- /* offsetToStart= */ thumbAsset !is CurrentWallpaperAssetVN || offsetToStart
+ /* offsetToStart= */ thumbAsset !is CurrentWallpaperAsset || offsetToStart
)
if (wallpaperInfo !is LiveWallpaperInfo) {
imageView.addOnLayoutChangeListener(
diff --git a/src/com/android/wallpaper/picker/customization/ui/binder/WallpaperQuickSwitchOptionBinder.kt b/src/com/android/wallpaper/picker/customization/ui/binder/WallpaperQuickSwitchOptionBinder.kt
index 5aba30d2..e406c166 100644
--- a/src/com/android/wallpaper/picker/customization/ui/binder/WallpaperQuickSwitchOptionBinder.kt
+++ b/src/com/android/wallpaper/picker/customization/ui/binder/WallpaperQuickSwitchOptionBinder.kt
@@ -44,13 +44,17 @@ object WallpaperQuickSwitchOptionBinder {
smallOptionWidthPx: Int,
largeOptionWidthPx: Int,
isThumbnailFadeAnimationEnabled: Boolean,
+ position: Int,
) {
val selectionBorder: View = view.requireViewById(R.id.selection_border)
val selectionIcon: View = view.requireViewById(R.id.selection_icon)
- val progressIndicator: View = view.requireViewById(R.id.progress_indicator)
val thumbnailView: ImageView = view.requireViewById(R.id.thumbnail)
val placeholder: ImageView = view.requireViewById(R.id.placeholder)
+ view.contentDescription =
+ viewModel.title
+ ?: view.resources.getString(R.string.recent_wallpaper_label, "$position")
+
placeholder.setBackgroundColor(viewModel.placeholderColor)
lifecycleOwner.lifecycleScope.launch {
@@ -83,24 +87,12 @@ object WallpaperQuickSwitchOptionBinder {
// We want to skip animating the first update so it doesn't "blink" when the
// activity is recreated.
var isFirstValue = true
- viewModel.isSelectionBorderVisible.collect {
+ viewModel.isSelectionIndicatorVisible.collect {
if (!isFirstValue) {
selectionBorder.animatedVisibility(isVisible = it)
- } else {
- selectionBorder.isVisible = it
- }
- isFirstValue = false
- }
- }
-
- launch {
- // We want to skip animating the first update so it doesn't "blink" when the
- // activity is recreated.
- var isFirstValue = true
- viewModel.isSelectionIconVisible.collect {
- if (!isFirstValue) {
selectionIcon.animatedVisibility(isVisible = it)
} else {
+ selectionBorder.isVisible = it
selectionIcon.isVisible = it
}
isFirstValue = false
@@ -109,12 +101,6 @@ object WallpaperQuickSwitchOptionBinder {
}
launch {
- viewModel.isProgressIndicatorVisible.collect {
- progressIndicator.animatedVisibility(isVisible = it)
- }
- }
-
- launch {
val thumbnail = viewModel.thumbnail()
if (thumbnailView.tag != thumbnail) {
thumbnailView.tag = thumbnail
diff --git a/src/com/android/wallpaper/picker/customization/ui/binder/WallpaperQuickSwitchSectionBinder.kt b/src/com/android/wallpaper/picker/customization/ui/binder/WallpaperQuickSwitchSectionBinder.kt
index 0c116d79..88cc10a4 100644
--- a/src/com/android/wallpaper/picker/customization/ui/binder/WallpaperQuickSwitchSectionBinder.kt
+++ b/src/com/android/wallpaper/picker/customization/ui/binder/WallpaperQuickSwitchSectionBinder.kt
@@ -87,7 +87,7 @@ object WallpaperQuickSwitchSectionBinder {
val (largeOptionWidth, smallOptionWidth) = calculateSizes(parent, options.size)
// Create, add, and bind a view for each option.
- options.forEach { option ->
+ options.forEachIndexed { index, option ->
val optionView =
createOptionView(
parent = parent,
@@ -100,6 +100,7 @@ object WallpaperQuickSwitchSectionBinder {
smallOptionWidthPx = smallOptionWidth,
largeOptionWidthPx = largeOptionWidth,
isThumbnailFadeAnimationEnabled = isThumbnailFadeAnimationEnabled,
+ position = index
)
}
}
diff --git a/src/com/android/wallpaper/picker/customization/ui/section/ScreenPreviewSectionController.kt b/src/com/android/wallpaper/picker/customization/ui/section/ScreenPreviewSectionController.kt
index 624c1c92..2b024438 100644
--- a/src/com/android/wallpaper/picker/customization/ui/section/ScreenPreviewSectionController.kt
+++ b/src/com/android/wallpaper/picker/customization/ui/section/ScreenPreviewSectionController.kt
@@ -31,12 +31,12 @@ import androidx.lifecycle.lifecycleScope
import com.android.systemui.shared.clocks.shared.model.ClockPreviewConstants
import com.android.wallpaper.R
import com.android.wallpaper.model.CustomizationSectionController
-import com.android.wallpaper.model.WallpaperColorsViewModel
import com.android.wallpaper.model.WallpaperInfo
import com.android.wallpaper.model.WallpaperPreviewNavigator
import com.android.wallpaper.module.CurrentWallpaperInfoFactory
import com.android.wallpaper.module.CustomizationSections
import com.android.wallpaper.picker.FixedWidthDisplayRatioFrameLayout
+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.binder.ScreenPreviewBinder
import com.android.wallpaper.picker.customization.ui.viewmodel.CustomizationPickerViewModel
@@ -56,7 +56,7 @@ open class ScreenPreviewSectionController(
private val lifecycleOwner: LifecycleOwner,
private val screen: CustomizationSections.Screen,
private val wallpaperInfoFactory: CurrentWallpaperInfoFactory,
- private val colorViewModel: WallpaperColorsViewModel,
+ private val colorViewModel: WallpaperColorsRepository,
private val displayUtils: DisplayUtils,
private val wallpaperPreviewNavigator: WallpaperPreviewNavigator,
private val wallpaperInteractor: WallpaperInteractor,
@@ -116,7 +116,7 @@ open class ScreenPreviewSectionController(
.requireViewById<ScreenPreviewClickView>(R.id.screen_preview_click_view)
.setOnPreviewClickedListener {
lifecycleOwner.lifecycleScope.launch {
- getWallpaperInfo()?.let { wallpaperInfo ->
+ getWallpaperInfo(context)?.let { wallpaperInfo ->
wallpaperPreviewNavigator.showViewOnlyPreview(
wallpaperInfo,
/* isAssetIdPresent= */ false,
@@ -146,9 +146,6 @@ open class ScreenPreviewSectionController(
offsetToStart = displayUtils.isSingleDisplayOrUnfoldedHorizontalHinge(activity),
onWallpaperPreviewDirty = { activity.recreate() },
animationStateViewModel = customizationPickerViewModel,
- onWorkspacePreviewDirty = {
- bindScreenPreview(previewView, context, isWallpaperAlwaysVisible)
- },
isWallpaperAlwaysVisible = isWallpaperAlwaysVisible,
)
}
@@ -176,21 +173,21 @@ open class ScreenPreviewSectionController(
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 ->
@@ -231,21 +228,21 @@ open class ScreenPreviewSectionController(
}
}
- private suspend fun getWallpaperInfo(): WallpaperInfo? {
+ private suspend fun getWallpaperInfo(context: Context): WallpaperInfo? {
return suspendCancellableCoroutine { continuation ->
wallpaperInfoFactory.createCurrentWallpaperInfos(
- { homeWallpaper, lockWallpaper, _ ->
- continuation.resume(
- if (isOnLockScreen) {
- lockWallpaper ?: homeWallpaper
- } else {
- homeWallpaper
- },
- null
- )
- },
- /* forceRefresh= */ true,
- )
+ context,
+ true,
+ ) { homeWallpaper, lockWallpaper, _ ->
+ continuation.resume(
+ if (isOnLockScreen) {
+ lockWallpaper ?: homeWallpaper
+ } else {
+ homeWallpaper
+ },
+ null
+ )
+ }
}
}
diff --git a/src/com/android/wallpaper/picker/customization/ui/viewmodel/CustomizationPickerViewModel.kt b/src/com/android/wallpaper/picker/customization/ui/viewmodel/CustomizationPickerViewModel.kt
index 8ed1c2e2..e392f9d7 100644
--- a/src/com/android/wallpaper/picker/customization/ui/viewmodel/CustomizationPickerViewModel.kt
+++ b/src/com/android/wallpaper/picker/customization/ui/viewmodel/CustomizationPickerViewModel.kt
@@ -25,6 +25,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import androidx.savedstate.SavedStateRegistryOwner
import com.android.wallpaper.module.CustomizationSections
+import com.android.wallpaper.module.logging.UserEventLogger
import com.android.wallpaper.picker.customization.domain.interactor.WallpaperInteractor
import com.android.wallpaper.picker.customization.shared.model.WallpaperDestination
import com.android.wallpaper.picker.undo.domain.interactor.UndoInteractor
@@ -41,11 +42,13 @@ constructor(
undoInteractor: UndoInteractor,
wallpaperInteractor: WallpaperInteractor,
private val savedStateHandle: SavedStateHandle,
+ private val logger: UserEventLogger,
) : AnimationStateViewModel() {
val undo: UndoViewModel =
UndoViewModel(
interactor = undoInteractor,
+ logger = logger,
)
private val homeWallpaperQuickSwitchViewModel: WallpaperQuickSwitchViewModel =
@@ -133,6 +136,7 @@ constructor(
defaultArgs: Bundle? = null,
undoInteractor: UndoInteractor,
wallpaperInteractor: WallpaperInteractor,
+ logger: UserEventLogger,
): AbstractSavedStateViewModelFactory =
object : AbstractSavedStateViewModelFactory(owner, defaultArgs) {
@Suppress("UNCHECKED_CAST")
@@ -145,6 +149,7 @@ constructor(
undoInteractor = undoInteractor,
wallpaperInteractor = wallpaperInteractor,
savedStateHandle = handle,
+ logger = logger,
)
as T
}
diff --git a/src/com/android/wallpaper/picker/customization/ui/viewmodel/ScreenPreviewViewModel.kt b/src/com/android/wallpaper/picker/customization/ui/viewmodel/ScreenPreviewViewModel.kt
index 57f36ad3..7bd8b61b 100644
--- a/src/com/android/wallpaper/picker/customization/ui/viewmodel/ScreenPreviewViewModel.kt
+++ b/src/com/android/wallpaper/picker/customization/ui/viewmodel/ScreenPreviewViewModel.kt
@@ -41,7 +41,6 @@ open class ScreenPreviewViewModel(
private val onWallpaperColorChanged: (WallpaperColors?) -> Unit = {},
private val wallpaperInteractor: WallpaperInteractor,
val screen: Screen,
- val onPreviewClicked: (() -> Unit)? = null,
) {
val previewContentDescription: Int =
@@ -64,7 +63,11 @@ open class ScreenPreviewViewModel(
fun wallpaperThumbnail(): Flow<Bitmap?> {
return wallpaperUpdateEvents().filterNotNull().map { wallpaper ->
- wallpaperInteractor.loadThumbnail(wallpaper.wallpaperId, wallpaper.lastUpdated)
+ wallpaperInteractor.loadThumbnail(
+ wallpaper.wallpaperId,
+ wallpaper.lastUpdated,
+ getWallpaperDestination()
+ )
}
}
@@ -101,11 +104,13 @@ open class ScreenPreviewViewModel(
open val isLoading: Flow<Boolean> =
wallpaperInteractor.isSelectingWallpaper(
- destination =
- if (screen == Screen.LOCK_SCREEN) {
- WallpaperDestination.LOCK
- } else {
- WallpaperDestination.HOME
- },
+ destination = getWallpaperDestination(),
)
+
+ private fun getWallpaperDestination() =
+ if (screen == Screen.LOCK_SCREEN) {
+ WallpaperDestination.LOCK
+ } else {
+ WallpaperDestination.HOME
+ }
}
diff --git a/src/com/android/wallpaper/picker/customization/ui/viewmodel/WallpaperQuickSwitchOptionViewModel.kt b/src/com/android/wallpaper/picker/customization/ui/viewmodel/WallpaperQuickSwitchOptionViewModel.kt
index c8cb2fde..4b4abc84 100644
--- a/src/com/android/wallpaper/picker/customization/ui/viewmodel/WallpaperQuickSwitchOptionViewModel.kt
+++ b/src/com/android/wallpaper/picker/customization/ui/viewmodel/WallpaperQuickSwitchOptionViewModel.kt
@@ -28,17 +28,15 @@ data class WallpaperQuickSwitchOptionViewModel(
val placeholderColor: Int,
/** A function to invoke to get the preview thumbnail for the option. */
val thumbnail: suspend () -> Bitmap?,
+ /** The title of the wallpaper or wallpaper category */
+ val title: String?,
/**
* Whether the option should be rendered as large. If `false`, the option should be rendered
* smaller.
*/
val isLarge: Flow<Boolean>,
- /** Whether the progress indicator should be visible. */
- val isProgressIndicatorVisible: Flow<Boolean>,
/** Whether the selection border should be visible. */
- val isSelectionBorderVisible: Flow<Boolean>,
- /** Whether the selection icon should be visible. */
- val isSelectionIconVisible: Flow<Boolean>,
+ val isSelectionIndicatorVisible: Flow<Boolean>,
/**
* A function to invoke when the option is clicked by the user. If `null`, the option is not
* clickable.
diff --git a/src/com/android/wallpaper/picker/customization/ui/viewmodel/WallpaperQuickSwitchViewModel.kt b/src/com/android/wallpaper/picker/customization/ui/viewmodel/WallpaperQuickSwitchViewModel.kt
index fb38f2bd..cf945b60 100644
--- a/src/com/android/wallpaper/picker/customization/ui/viewmodel/WallpaperQuickSwitchViewModel.kt
+++ b/src/com/android/wallpaper/picker/customization/ui/viewmodel/WallpaperQuickSwitchViewModel.kt
@@ -17,6 +17,7 @@
package com.android.wallpaper.picker.customization.ui.viewmodel
+import android.stats.style.StyleEnums.SET_WALLPAPER_ENTRY_POINT_WALLPAPER_QUICK_SWITCHER
import com.android.wallpaper.R
import com.android.wallpaper.picker.common.text.ui.viewmodel.Text
import com.android.wallpaper.picker.customization.domain.interactor.WallpaperInteractor
@@ -94,7 +95,8 @@ constructor(
thumbnail = {
interactor.loadThumbnail(
wallpaperId = preview.wallpaperId,
- lastUpdatedTimestamp = preview.lastUpdated
+ lastUpdatedTimestamp = preview.lastUpdated,
+ destination = destination
)
},
isLarge =
@@ -109,10 +111,7 @@ constructor(
// click.
(isSelected && !isSomethingBecomingSelected) || isBecomingSelected
},
- // We show the progress indicator if the option is in the process of
- // becoming the selected one following user click.
- isProgressIndicatorVisible = isBecomingSelectedFlow,
- isSelectionBorderVisible =
+ isSelectionIndicatorVisible =
combine(
isSelectedFlow,
isBecomingSelectedFlow,
@@ -123,17 +122,7 @@ constructor(
// the selected one following user click.
(isSelected && !isSomethingBecomingSelected) || isBeingSelected
},
- isSelectionIconVisible =
- combine(
- isSelectedFlow,
- isSomethingBecomingSelectedFlow,
- ) { isSelected, isSomethingBecomingSelected ->
- // The selection icon is shown for the option that is
- // currently selected but only if nothing else is becoming
- // selected. If anything is being selected following user
- // click, the selection icon is not shown on any option.
- isSelected && !isSomethingBecomingSelected
- },
+ title = preview.title,
onSelected =
combine(
isSelectedFlow,
@@ -155,6 +144,8 @@ constructor(
// A selectable option can become selected.
coroutineScope.launch {
interactor.setWallpaper(
+ setWallpaperEntryPoint =
+ SET_WALLPAPER_ENTRY_POINT_WALLPAPER_QUICK_SWITCHER,
destination = destination,
wallpaperId = preview.wallpaperId,
)
diff --git a/src/com/android/wallpaper/picker/di/modules/NavigationModule.kt b/src/com/android/wallpaper/picker/di/modules/AppModule.kt
index 55054373..54899075 100644
--- a/src/com/android/wallpaper/picker/di/modules/NavigationModule.kt
+++ b/src/com/android/wallpaper/picker/di/modules/AppModule.kt
@@ -16,16 +16,21 @@
package com.android.wallpaper.picker.di.modules
-import com.android.wallpaper.picker.di.navigation.NavigationController
-import com.android.wallpaper.picker.di.navigation.NavigationControllerImpl
-import dagger.Binds
+import android.app.WallpaperManager
+import android.content.Context
import dagger.Module
+import dagger.Provides
import dagger.hilt.InstallIn
-import dagger.hilt.android.components.ActivityComponent
+import dagger.hilt.android.qualifiers.ApplicationContext
+import dagger.hilt.components.SingletonComponent
+import javax.inject.Singleton
-@InstallIn(ActivityComponent::class)
@Module
-abstract class NavigationModule {
- @Binds
- abstract fun bindNavigationController(impl: NavigationControllerImpl): NavigationController
+@InstallIn(SingletonComponent::class)
+internal object AppModule {
+ @Provides
+ @Singleton
+ fun provideWallpaperManager(@ApplicationContext appContext: Context): WallpaperManager {
+ return WallpaperManager.getInstance(appContext)
+ }
}
diff --git a/src/com/android/wallpaper/dispatchers/DispatchersModule.kt b/src/com/android/wallpaper/picker/di/modules/DispatchersModule.kt
index 2bdfd717..e78d0857 100644
--- a/src/com/android/wallpaper/dispatchers/DispatchersModule.kt
+++ b/src/com/android/wallpaper/picker/di/modules/DispatchersModule.kt
@@ -12,10 +12,9 @@
* 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.dispatchers
+package com.android.wallpaper.picker.di.modules
import dagger.Module
import dagger.Provides
diff --git a/src/com/android/wallpaper/picker/di/modules/PreviewUtilsModule.kt b/src/com/android/wallpaper/picker/di/modules/PreviewUtilsModule.kt
new file mode 100644
index 00000000..d8e0e66f
--- /dev/null
+++ b/src/com/android/wallpaper/picker/di/modules/PreviewUtilsModule.kt
@@ -0,0 +1,69 @@
+/*
+ * 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.content.Context
+import com.android.wallpaper.R
+import com.android.wallpaper.util.PreviewUtils
+import dagger.Module
+import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.android.components.ActivityRetainedComponent
+import dagger.hilt.android.qualifiers.ApplicationContext
+import dagger.hilt.android.scopes.ActivityRetainedScoped
+import javax.inject.Qualifier
+
+/*
+ * This class provides the preview utils instances required for a specific screen type
+ */
+@InstallIn(ActivityRetainedComponent::class)
+@Module
+internal object PreviewUtilsModule {
+
+ @Qualifier @Retention(AnnotationRetention.BINARY) annotation class LockScreenPreviewUtils
+
+ @Qualifier @Retention(AnnotationRetention.BINARY) annotation class HomeScreenPreviewUtils
+
+ @LockScreenPreviewUtils
+ @ActivityRetainedScoped
+ @Provides
+ fun provideLockScreenPreviewUtils(
+ @ApplicationContext appContext: Context,
+ ): PreviewUtils {
+ return PreviewUtils(
+ context = appContext,
+ authority =
+ appContext.getString(
+ R.string.lock_screen_preview_provider_authority,
+ ),
+ )
+ }
+
+ @HomeScreenPreviewUtils
+ @ActivityRetainedScoped
+ @Provides
+ fun provideHomeScreenPreviewUtils(
+ @ApplicationContext appContext: Context,
+ ): PreviewUtils {
+ return PreviewUtils(
+ context = appContext,
+ authorityMetadataKey =
+ appContext.getString(
+ R.string.grid_control_metadata_name,
+ ),
+ )
+ }
+}
diff --git a/src/com/android/wallpaper/picker/di/modules/RepositoryModule.kt b/src/com/android/wallpaper/picker/di/modules/RepositoryModule.kt
new file mode 100644
index 00000000..25a6697f
--- /dev/null
+++ b/src/com/android/wallpaper/picker/di/modules/RepositoryModule.kt
@@ -0,0 +1,65 @@
+/*
+ * 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.app.WallpaperManager
+import android.content.Context
+import com.android.wallpaper.module.WallpaperPreferences
+import com.android.wallpaper.picker.customization.data.content.WallpaperClient
+import com.android.wallpaper.picker.customization.data.content.WallpaperClientImpl
+import com.android.wallpaper.picker.customization.data.repository.WallpaperRepository
+import dagger.Module
+import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.android.qualifiers.ApplicationContext
+import dagger.hilt.components.SingletonComponent
+import javax.inject.Singleton
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.CoroutineScope
+
+@InstallIn(SingletonComponent::class)
+@Module
+internal object RepositoryModule {
+
+ @Provides
+ @Singleton
+ fun provideWallpaperRepository(
+ @BackgroundDispatcher bgDispatcher: CoroutineDispatcher,
+ @MainDispatcher mainScope: CoroutineScope,
+ wallpaperPreferences: WallpaperPreferences,
+ wallpaperClient: WallpaperClient,
+ ): WallpaperRepository {
+ return WallpaperRepository(
+ mainScope,
+ wallpaperClient,
+ wallpaperPreferences,
+ bgDispatcher,
+ )
+ }
+
+ @Provides
+ fun provideWallpaperClient(
+ @ApplicationContext appContext: Context,
+ wallpaperManager: WallpaperManager,
+ wallpaperPreferences: WallpaperPreferences,
+ ): WallpaperClient {
+ return WallpaperClientImpl(
+ appContext,
+ wallpaperManager,
+ wallpaperPreferences,
+ )
+ }
+}
diff --git a/src/com/android/wallpaper/picker/di/navigation/NavigationController.kt b/src/com/android/wallpaper/picker/di/navigation/NavigationController.kt
deleted file mode 100644
index cccccb70..00000000
--- a/src/com/android/wallpaper/picker/di/navigation/NavigationController.kt
+++ /dev/null
@@ -1,62 +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.wallpaper.picker.di.navigation
-
-import androidx.annotation.IdRes
-import androidx.fragment.app.FragmentActivity
-import com.android.wallpaper.model.WallpaperInfo
-
-/** Enum is used to indicate how a fragment will be added to the view hierarchy */
-enum class Transition {
- /** Add the fragment */
- ADD,
-
- /** Replace the existing fragment */
- REPLACE
-}
-
-/**
- * This class abstracts the navigation logic for the preview screens. Concrete implementations of
- * this class should provide the navigation logic for each required screen in the Preview flow.
- */
-interface NavigationController {
-
- /**
- * This method performs navigation to the preview screen This method should use the input
- * activity and viewId to instantiate and transition to the required preview fragment
- *
- * @param activity is the activity in which the preview fragment will reside
- * @param wallpaperInfo contains the relevant data regarding the selected wallpaper
- * @param mode specifies the mode of the preview fragment i.e. crop, view only
- * @param viewFullScreen specifies whether preview screen should be launched in full screen
- * @param viewAsHome specifies if the preview should be shown as the home page
- * @param testingModeEnabled specifies whether testing mode is enabled
- * @param viewId is the id of the view in the layout where the preview fragment should be
- * added/replaced
- * @param transition specifies if the preview fragment should be added or replaced in the
- */
- fun navigateToPreview(
- activity: FragmentActivity,
- wallpaperInfo: WallpaperInfo,
- viewAsHome: Boolean,
- viewFullScreen: Boolean,
- testingModeEnabled: Boolean,
- @IdRes viewId: Int,
- transition: Transition,
- isAssetIdPresent: Boolean
- )
-}
diff --git a/src/com/android/wallpaper/picker/di/navigation/NavigationControllerImpl.kt b/src/com/android/wallpaper/picker/di/navigation/NavigationControllerImpl.kt
deleted file mode 100644
index 9aafcf48..00000000
--- a/src/com/android/wallpaper/picker/di/navigation/NavigationControllerImpl.kt
+++ /dev/null
@@ -1,61 +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.wallpaper.picker.di.navigation
-
-import android.os.Bundle
-import androidx.annotation.IdRes
-import androidx.fragment.app.FragmentActivity
-import com.android.wallpaper.model.WallpaperInfo
-import com.android.wallpaper.picker.PreviewFragment
-import com.android.wallpaper.picker.preview.ui.fragment.SmallPreviewFragment
-import javax.inject.Inject
-
-class NavigationControllerImpl @Inject constructor() : NavigationController {
-
- override fun navigateToPreview(
- activity: FragmentActivity,
- wallpaperInfo: WallpaperInfo,
- viewAsHome: Boolean,
- viewFullScreen: Boolean,
- testingModeEnabled: Boolean,
- @IdRes viewId: Int,
- transition: Transition,
- isAssetIdPresent: Boolean
- ) {
- // TODO(b/295199906): arguments removed in next diff
- val args = Bundle()
- args.putParcelable(PreviewFragment.ARG_WALLPAPER, wallpaperInfo)
- args.putBoolean(PreviewFragment.ARG_VIEW_AS_HOME, viewAsHome)
- args.putBoolean(PreviewFragment.ARG_IS_ASSET_ID_PRESENT, isAssetIdPresent)
-
- val previewFragment = SmallPreviewFragment()
- previewFragment.arguments = args
-
- when (transition) {
- Transition.ADD ->
- activity.supportFragmentManager
- .beginTransaction()
- .add(viewId, previewFragment)
- .commit()
- Transition.REPLACE ->
- activity.supportFragmentManager
- .beginTransaction()
- .replace(viewId, previewFragment)
- .commit()
- }
- }
-}
diff --git a/src/com/android/wallpaper/picker/individual/CreativeCategoryIndividualHolder.java b/src/com/android/wallpaper/picker/individual/CreativeCategoryIndividualHolder.java
index 3e51a7f9..d5961e2e 100755
--- a/src/com/android/wallpaper/picker/individual/CreativeCategoryIndividualHolder.java
+++ b/src/com/android/wallpaper/picker/individual/CreativeCategoryIndividualHolder.java
@@ -25,7 +25,6 @@ import android.view.View;
import com.android.wallpaper.model.LiveWallpaperInfo;
import com.android.wallpaper.model.WallpaperInfo;
import com.android.wallpaper.module.InjectorProvider;
-import com.android.wallpaper.module.UserEventLogger;
import com.android.wallpaper.module.WallpaperPersister;
/**
@@ -59,10 +58,6 @@ class CreativeCategoryIndividualHolder extends IndividualHolder implements View.
Log.w(TAG, "onClick received on VH on finishing Activity");
return;
}
- UserEventLogger eventLogger =
- InjectorProvider.getInjector().getUserEventLogger(mActivity);
- eventLogger.logIndividualWallpaperSelected(mWallpaper.getCollectionId(mActivity));
-
showPreview(mWallpaper);
}
diff --git a/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java b/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java
index 9c0ce72f..595dc2dc 100755
--- a/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java
+++ b/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java
@@ -155,7 +155,6 @@ public class IndividualPickerFragment extends AppbarFragment
PackageStatusNotifier.Listener mAppStatusListener;
private ProgressDialog mProgressDialog;
- private boolean mTestingMode;
private ContentLoadingProgressBar mLoading;
private CategoryProvider mCategoryProvider;
@@ -482,17 +481,6 @@ public class IndividualPickerFragment extends AppbarFragment
startRotation(networkPreference);
}
- /**
- * Enable a test mode of operation -- in which certain UI features are disabled to allow for
- * UI tests to run correctly. Works around issue in ProgressDialog currently where the dialog
- * constantly keeps the UI thread alive and blocks a test forever.
- *
- * @param testingMode
- */
- void setTestingMode(boolean testingMode) {
- mTestingMode = testingMode;
- }
-
@Override
public void startRotation(@NetworkPreference final int networkPreference) {
if (!isRotationEnabled()) {
@@ -502,21 +490,19 @@ public class IndividualPickerFragment extends AppbarFragment
// ProgressDialog endlessly updates the UI thread, keeping it from going idle which therefore
// causes Espresso to hang once the dialog is shown.
- if (!mTestingMode) {
- int themeResId;
- if (VERSION.SDK_INT < VERSION_CODES.LOLLIPOP) {
- themeResId = R.style.ProgressDialogThemePreL;
- } else {
- themeResId = R.style.LightDialogTheme;
- }
- mProgressDialog = new ProgressDialog(getActivity(), themeResId);
-
- mProgressDialog.setTitle(PROGRESS_DIALOG_NO_TITLE);
- mProgressDialog.setMessage(
- getResources().getString(R.string.start_rotation_progress_message));
- mProgressDialog.setIndeterminate(PROGRESS_DIALOG_INDETERMINATE);
- mProgressDialog.show();
+ int themeResId;
+ if (VERSION.SDK_INT < VERSION_CODES.LOLLIPOP) {
+ themeResId = R.style.ProgressDialogThemePreL;
+ } else {
+ themeResId = R.style.LightDialogTheme;
}
+ mProgressDialog = new ProgressDialog(getActivity(), themeResId);
+
+ mProgressDialog.setTitle(PROGRESS_DIALOG_NO_TITLE);
+ mProgressDialog.setMessage(
+ getResources().getString(R.string.start_rotation_progress_message));
+ mProgressDialog.setIndeterminate(PROGRESS_DIALOG_INDETERMINATE);
+ mProgressDialog.show();
final Context appContext = getActivity().getApplicationContext();
diff --git a/src/com/android/wallpaper/picker/individual/IndividualPickerFragment2.kt b/src/com/android/wallpaper/picker/individual/IndividualPickerFragment2.kt
index 3f508120..f5cf96cb 100644
--- a/src/com/android/wallpaper/picker/individual/IndividualPickerFragment2.kt
+++ b/src/com/android/wallpaper/picker/individual/IndividualPickerFragment2.kt
@@ -19,6 +19,8 @@ import CreativeCategoryHolder
import android.app.Activity
import android.app.ProgressDialog
import android.app.WallpaperManager
+import android.app.WallpaperManager.FLAG_LOCK
+import android.app.WallpaperManager.FLAG_SYSTEM
import android.content.DialogInterface
import android.content.res.Configuration
import android.content.res.Resources
@@ -236,8 +238,10 @@ class IndividualPickerFragment2 :
val appliedWallpaperIds =
getAppliedWallpaperIds().also { this.appliedWallpaperIds = it }
val firstEntry = byGroup.keys.firstOrNull()
- val currentWallpaper: android.app.WallpaperInfo? =
- WallpaperManager.getInstance(context).wallpaperInfo
+ val currentHomeWallpaper: android.app.WallpaperInfo? =
+ WallpaperManager.getInstance(context).getWallpaperInfo(FLAG_SYSTEM)
+ val currentLockWallpaper: android.app.WallpaperInfo? =
+ WallpaperManager.getInstance(context).getWallpaperInfo(FLAG_LOCK)
// Handle first group (templates/items that allow to create a new wallpaper)
if (mIsCreativeWallpaperEnabled && firstEntry != null && supportsUserCreated) {
@@ -257,7 +261,12 @@ class IndividualPickerFragment2 :
if (!TextUtils.isEmpty(groupName)) {
addItemHeader(groupName, items.isEmpty())
}
- addWallpaperItems(wallpapers, currentWallpaper, appliedWallpaperIds)
+ addWallpaperItems(
+ wallpapers,
+ currentHomeWallpaper,
+ currentLockWallpaper,
+ appliedWallpaperIds
+ )
}
}
maybeSetUpImageGrid()
@@ -309,13 +318,15 @@ class IndividualPickerFragment2 :
*/
private fun addWallpaperItems(
wallpapers: List<WallpaperInfo>,
- currentWallpaper: android.app.WallpaperInfo?,
- appliedWallpaperIds: Set<String>
+ currentHomeWallpaper: android.app.WallpaperInfo?,
+ currentLockWallpaper: android.app.WallpaperInfo?,
+ appliedWallpaperIds: Set<String>,
) {
items.addAll(
wallpapers.map {
val isApplied =
- if (it is LiveWallpaperInfo) it.isApplied(currentWallpaper)
+ if (it is LiveWallpaperInfo)
+ (it.isApplied(currentHomeWallpaper, currentLockWallpaper))
else appliedWallpaperIds.contains(it.wallpaperId)
PickerItem.WallpaperItem(it, isApplied)
}
@@ -545,7 +556,7 @@ class IndividualPickerFragment2 :
override fun onResume() {
super.onResume()
val preferences = InjectorProvider.getInjector().getPreferences(requireActivity())
- preferences.lastAppActiveTimestamp = Date().time
+ preferences.setLastAppActiveTimestamp(Date().time)
// Reset Glide memory settings to a "normal" level of usage since it may have been lowered
// in PreviewFragment.
@@ -713,15 +724,15 @@ class IndividualPickerFragment2 :
if (wallpaperInfo != null) {
wallpaperInfo.serviceName
} else {
- prefs.homeWallpaperRemoteId
+ prefs.getHomeWallpaperRemoteId()
}
- if (!TextUtils.isEmpty(homeWallpaperId)) {
+ if (!homeWallpaperId.isNullOrEmpty()) {
appliedWallpaperIds.add(homeWallpaperId)
}
val isLockWallpaperApplied =
wallpaperManager!!.getWallpaperId(WallpaperManager.FLAG_LOCK) >= 0
- val lockWallpaperId = prefs.lockWallpaperRemoteId
- if (isLockWallpaperApplied && !TextUtils.isEmpty(lockWallpaperId)) {
+ val lockWallpaperId = prefs.getLockWallpaperRemoteId()
+ if (isLockWallpaperApplied && !lockWallpaperId.isNullOrEmpty()) {
appliedWallpaperIds.add(lockWallpaperId)
}
return appliedWallpaperIds
@@ -731,7 +742,7 @@ class IndividualPickerFragment2 :
private fun isAppliedWallpaperChanged(): Boolean {
// Reload wallpapers if the current wallpapers have changed
getAppliedWallpaperIds().let {
- if (appliedWallpaperIds.isEmpty() || appliedWallpaperIds != it) {
+ if (appliedWallpaperIds != it) {
return true
}
}
diff --git a/src/com/android/wallpaper/picker/individual/PreviewIndividualHolder.java b/src/com/android/wallpaper/picker/individual/PreviewIndividualHolder.java
index f2f2cf1a..48a8794c 100755
--- a/src/com/android/wallpaper/picker/individual/PreviewIndividualHolder.java
+++ b/src/com/android/wallpaper/picker/individual/PreviewIndividualHolder.java
@@ -25,7 +25,6 @@ import android.view.View;
import com.android.wallpaper.model.LiveWallpaperInfo;
import com.android.wallpaper.model.WallpaperInfo;
import com.android.wallpaper.module.InjectorProvider;
-import com.android.wallpaper.module.UserEventLogger;
import com.android.wallpaper.module.WallpaperPersister;
/**
@@ -51,10 +50,6 @@ class PreviewIndividualHolder extends IndividualHolder implements View.OnClickLi
Log.w(TAG, "onClick received on VH on finishing Activity");
return;
}
- UserEventLogger eventLogger =
- InjectorProvider.getInjector().getUserEventLogger(mActivity);
- eventLogger.logIndividualWallpaperSelected(mWallpaper.getCollectionId(mActivity));
-
showPreview(mWallpaper);
}
diff --git a/src/com/android/wallpaper/picker/preview/data/repository/WallpaperPreviewRepository.kt b/src/com/android/wallpaper/picker/preview/data/repository/WallpaperPreviewRepository.kt
new file mode 100644
index 00000000..e1c5fca4
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/data/repository/WallpaperPreviewRepository.kt
@@ -0,0 +1,37 @@
+/*
+ * Copyright 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.preview.data.repository
+
+import com.android.wallpaper.model.wallpaper.WallpaperModel
+import dagger.hilt.android.scopes.ActivityRetainedScoped
+import javax.inject.Inject
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.asStateFlow
+import kotlinx.coroutines.flow.update
+
+/** This repository class manages the [WallpaperModel] for the preview screen */
+@ActivityRetainedScoped
+class WallpaperPreviewRepository @Inject constructor() {
+ /** This [WallpaperModel] represents the current selected wallpaper */
+ private val _wallpaperModel = MutableStateFlow<WallpaperModel?>(null)
+ val wallpaperModel: StateFlow<WallpaperModel?> = _wallpaperModel.asStateFlow()
+
+ fun setWallpaperModel(updatedWallpaperModel: WallpaperModel?) {
+ _wallpaperModel.update { updatedWallpaperModel }
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/domain/interactor/PreviewActionsInteractor.kt b/src/com/android/wallpaper/picker/preview/domain/interactor/PreviewActionsInteractor.kt
new file mode 100644
index 00000000..de186039
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/domain/interactor/PreviewActionsInteractor.kt
@@ -0,0 +1,43 @@
+/*
+ * Copyright 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.preview.domain.interactor
+
+import com.android.wallpaper.model.wallpaper.WallpaperModel
+import com.android.wallpaper.picker.di.modules.BackgroundDispatcher
+import com.android.wallpaper.picker.di.modules.MainDispatcher
+import com.android.wallpaper.picker.preview.data.repository.WallpaperPreviewRepository
+import dagger.hilt.android.scopes.ActivityRetainedScoped
+import javax.inject.Inject
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.flow.StateFlow
+
+/** This class handles the business logic for Preview screen's action buttons */
+@ActivityRetainedScoped
+class PreviewActionsInteractor
+@Inject
+constructor(
+ @MainDispatcher private val mainScope: CoroutineScope,
+ @BackgroundDispatcher private val bgDispatcher: CoroutineDispatcher,
+ private val wallpaperPreviewRepository: WallpaperPreviewRepository,
+) {
+ val wallpaperModel: StateFlow<WallpaperModel?> = wallpaperPreviewRepository.wallpaperModel
+
+ fun setWallpaperModel(wallpaperModel: WallpaperModel?) {
+ wallpaperPreviewRepository.setWallpaperModel(wallpaperModel)
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/domain/interactor/WallpaperPreviewInteractor.kt b/src/com/android/wallpaper/picker/preview/domain/interactor/WallpaperPreviewInteractor.kt
new file mode 100644
index 00000000..31a3b1ea
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/domain/interactor/WallpaperPreviewInteractor.kt
@@ -0,0 +1,34 @@
+/*
+ * 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.preview.domain.interactor
+
+import com.android.wallpaper.model.wallpaper.WallpaperModel
+import com.android.wallpaper.picker.preview.data.repository.WallpaperPreviewRepository
+import dagger.hilt.android.scopes.ActivityRetainedScoped
+import javax.inject.Inject
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.filterNotNull
+
+@ActivityRetainedScoped
+class WallpaperPreviewInteractor
+@Inject
+constructor(
+ wallpaperPreviewRepository: WallpaperPreviewRepository,
+) {
+ val wallpaperModel: Flow<WallpaperModel> =
+ wallpaperPreviewRepository.wallpaperModel.filterNotNull()
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/WallpaperPreviewActivity.kt b/src/com/android/wallpaper/picker/preview/ui/WallpaperPreviewActivity.kt
index 0c51337c..c724b869 100644
--- a/src/com/android/wallpaper/picker/preview/ui/WallpaperPreviewActivity.kt
+++ b/src/com/android/wallpaper/picker/preview/ui/WallpaperPreviewActivity.kt
@@ -22,14 +22,19 @@ import android.graphics.Color
import android.os.Bundle
import android.widget.Toast
import androidx.activity.viewModels
+import androidx.core.view.WindowCompat
import com.android.wallpaper.R
import com.android.wallpaper.model.WallpaperInfo
+import com.android.wallpaper.model.wallpaper.WallpaperModel
import com.android.wallpaper.picker.AppbarFragment
import com.android.wallpaper.picker.BasePreviewActivity
+import com.android.wallpaper.picker.preview.data.repository.WallpaperPreviewRepository
import com.android.wallpaper.picker.preview.ui.viewmodel.WallpaperPreviewViewModel
import com.android.wallpaper.util.ActivityUtils
import com.android.wallpaper.util.DisplayUtils
+import com.android.wallpaper.util.converter.WallpaperModelFactory
import dagger.hilt.android.AndroidEntryPoint
+import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject
/** This activity holds the flow for the preview screen. */
@@ -37,15 +42,22 @@ import javax.inject.Inject
class WallpaperPreviewActivity :
Hilt_WallpaperPreviewActivity(), AppbarFragment.AppbarFragmentHost {
private val viewModel: WallpaperPreviewViewModel by viewModels()
+ @ApplicationContext @Inject lateinit var appContext: Context
@Inject lateinit var displayUtils: DisplayUtils
+ @Inject lateinit var wallpaperModelFactory: WallpaperModelFactory
+ @Inject lateinit var wallpaperPreviewRepository: WallpaperPreviewRepository
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
window.navigationBarColor = Color.TRANSPARENT
window.statusBarColor = Color.TRANSPARENT
setContentView(R.layout.activity_wallpaper_preview)
- viewModel.editingWallpaper =
- intent.getParcelableExtra(EXTRA_WALLPAPER_INFO, WallpaperInfo::class.java)
+ // Fits screen to navbar and statusbar
+ WindowCompat.setDecorFitsSystemWindows(window, ActivityUtils.isSUWMode(this))
+ val wallpaper =
+ checkNotNull(intent.getParcelableExtra(EXTRA_WALLPAPER_INFO, WallpaperInfo::class.java))
+ .convertToWallpaperModel()
+ wallpaperPreviewRepository.setWallpaperModel(wallpaper)
}
override fun onUpArrowPressed() {
@@ -67,6 +79,10 @@ class WallpaperPreviewActivity :
}
}
+ private fun WallpaperInfo.convertToWallpaperModel(): WallpaperModel {
+ return wallpaperModelFactory.getWallpaperModel(appContext, this)
+ }
+
companion object {
/**
* Returns a new [Intent] that can be used to start [WallpaperPreviewActivity].
diff --git a/src/com/android/wallpaper/picker/preview/ui/WallpaperPreviewDemoActivity.kt b/src/com/android/wallpaper/picker/preview/ui/WallpaperPreviewDemoActivity.kt
deleted file mode 100644
index 83cb9681..00000000
--- a/src/com/android/wallpaper/picker/preview/ui/WallpaperPreviewDemoActivity.kt
+++ /dev/null
@@ -1,61 +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.wallpaper.picker.preview.ui
-
-import android.content.Context
-import android.content.Intent
-import android.os.Bundle
-import androidx.activity.viewModels
-import com.android.wallpaper.R
-import com.android.wallpaper.model.WallpaperInfo
-import com.android.wallpaper.picker.BasePreviewActivity
-import com.android.wallpaper.picker.preview.ui.binder.StaticWallpaperPreviewBinder
-import com.android.wallpaper.picker.preview.ui.viewmodel.StaticWallpaperPreviewViewModel
-import com.android.wallpaper.util.DisplayUtils
-import com.android.wallpaper.util.RtlUtils
-import dagger.hilt.android.AndroidEntryPoint
-import javax.inject.Inject
-
-/** A demo Activity showing wallpaper preview rendering built in the recommended architecture. */
-@AndroidEntryPoint(BasePreviewActivity::class)
-class WallpaperPreviewDemoActivity : Hilt_WallpaperPreviewDemoActivity() {
-
- private val viewModel: StaticWallpaperPreviewViewModel by viewModels()
- @Inject lateinit var displayUtils: DisplayUtils
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_wallpaper_preview_demo)
- val wallpaper = intent.getParcelableExtra(EXTRA_WALLPAPER_INFO, WallpaperInfo::class.java)
- viewModel.initializeViewModel(applicationContext, checkNotNull(wallpaper))
- StaticWallpaperPreviewBinder.bind(
- requireViewById(R.id.wallpaper_preview),
- viewModel,
- this,
- displayUtils.isSingleDisplayOrUnfoldedHorizontalHinge(this),
- RtlUtils.isRtl(applicationContext),
- )
- }
-
- companion object {
- fun newIntent(
- context: Context,
- wallpaperInfo: WallpaperInfo,
- ): Intent {
- return Intent(context.applicationContext, WallpaperPreviewDemoActivity::class.java)
- .apply { putExtra(EXTRA_WALLPAPER_INFO, wallpaperInfo) }
- }
- }
-}
diff --git a/src/com/android/wallpaper/picker/preview/ui/binder/CropWallpaperButtonBinder.kt b/src/com/android/wallpaper/picker/preview/ui/binder/CropWallpaperButtonBinder.kt
new file mode 100644
index 00000000..40136325
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/binder/CropWallpaperButtonBinder.kt
@@ -0,0 +1,44 @@
+/*
+ * Copyright 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.preview.ui.binder
+
+import android.widget.Button
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleOwner
+import androidx.lifecycle.lifecycleScope
+import androidx.lifecycle.repeatOnLifecycle
+import com.android.wallpaper.picker.preview.ui.viewmodel.WallpaperPreviewViewModel
+import kotlinx.coroutines.launch
+
+object CropWallpaperButtonBinder {
+ fun bind(
+ button: Button,
+ viewModel: WallpaperPreviewViewModel,
+ lifecycleOwner: LifecycleOwner,
+ navigate: () -> Unit,
+ ) {
+ lifecycleOwner.lifecycleScope.launch {
+ lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
+ viewModel.onCropButtonClick.collect { onCropButtonClick ->
+ button.setOnClickListener {
+ onCropButtonClick.invoke()
+ navigate.invoke()
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/binder/DualPreviewPagerBinder.kt b/src/com/android/wallpaper/picker/preview/ui/binder/DualPreviewPagerBinder.kt
new file mode 100644
index 00000000..afe63ea4
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/binder/DualPreviewPagerBinder.kt
@@ -0,0 +1,74 @@
+/*
+ * 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.preview.ui.binder
+
+import android.content.Context
+import android.view.View
+import androidx.lifecycle.LifecycleOwner
+import com.android.wallpaper.R
+import com.android.wallpaper.model.wallpaper.FoldableDisplay
+import com.android.wallpaper.model.wallpaper.PreviewPagerPage
+import com.android.wallpaper.model.wallpaper.getScreenOrientation
+import com.android.wallpaper.picker.preview.ui.fragment.smallpreview.DualPreviewViewPager
+import com.android.wallpaper.picker.preview.ui.fragment.smallpreview.adapters.DualPreviewPagerAdapter
+import com.android.wallpaper.picker.preview.ui.view.DualDisplayAspectRatioLayout
+import com.android.wallpaper.picker.preview.ui.view.DualDisplayAspectRatioLayout.Companion.getViewId
+import com.android.wallpaper.picker.preview.ui.viewmodel.WallpaperPreviewViewModel
+import kotlinx.coroutines.CoroutineScope
+
+/** Binds dual preview home screen and lock screen view pager. */
+object DualPreviewPagerBinder {
+
+ fun bind(
+ dualPreviewView: DualPreviewViewPager,
+ wallpaperPreviewViewModel: WallpaperPreviewViewModel,
+ applicationContext: Context,
+ viewLifecycleOwner: LifecycleOwner,
+ mainScope: CoroutineScope,
+ navigate: (View) -> Unit,
+ ) {
+ // implement adapter for the dual preview pager
+ dualPreviewView.adapter = DualPreviewPagerAdapter { view, position ->
+ val dualDisplayAspectRatioLayout: DualDisplayAspectRatioLayout =
+ view.requireViewById(R.id.dual_preview)
+
+ val displaySizes =
+ mapOf(
+ FoldableDisplay.FOLDED to wallpaperPreviewViewModel.smallerDisplaySize,
+ FoldableDisplay.UNFOLDED to wallpaperPreviewViewModel.wallpaperDisplaySize,
+ )
+ dualDisplayAspectRatioLayout.setDisplaySizes(displaySizes)
+ dualPreviewView.setDisplaySizes(displaySizes)
+
+ FoldableDisplay.entries.forEach { display ->
+ val previewDisplaySize = dualDisplayAspectRatioLayout.getPreviewDisplaySize(display)
+ previewDisplaySize?.let {
+ SmallPreviewBinder.bind(
+ applicationContext = applicationContext,
+ view = dualDisplayAspectRatioLayout.requireViewById(display.getViewId()),
+ viewModel = wallpaperPreviewViewModel,
+ mainScope = mainScope,
+ viewLifecycleOwner = viewLifecycleOwner,
+ screen = PreviewPagerPage.entries[position].screen,
+ orientation = getScreenOrientation(it, display),
+ foldableDisplay = display,
+ navigate = navigate,
+ )
+ }
+ }
+ }
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/binder/DualPreviewSelectorBinder.kt b/src/com/android/wallpaper/picker/preview/ui/binder/DualPreviewSelectorBinder.kt
new file mode 100644
index 00000000..6d7c78d3
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/binder/DualPreviewSelectorBinder.kt
@@ -0,0 +1,95 @@
+/*
+ * 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.preview.ui.binder
+
+import android.content.Context
+import android.view.View
+import androidx.lifecycle.LifecycleOwner
+import androidx.viewpager.widget.ViewPager
+import com.android.wallpaper.picker.preview.ui.fragment.smallpreview.DualPreviewViewPager
+import com.android.wallpaper.picker.preview.ui.viewmodel.WallpaperPreviewViewModel
+import kotlinx.coroutines.CoroutineScope
+
+/**
+ * This binder binds the data and view models for the dual preview collection on the small preview
+ * screen.
+ */
+object DualPreviewSelectorBinder {
+
+ fun bind(
+ tabsViewPager: ViewPager,
+ dualPreviewView: DualPreviewViewPager,
+ wallpaperPreviewViewModel: WallpaperPreviewViewModel,
+ applicationContext: Context,
+ viewLifecycleOwner: LifecycleOwner,
+ mainScope: CoroutineScope,
+ navigate: (View) -> Unit,
+ ) {
+ // set up tabs view pager
+ TabPagerBinder.bind(tabsViewPager)
+
+ // synchronize both view and tabs pager
+ synchronizePreviewAndTabsPager(tabsViewPager, dualPreviewView)
+
+ DualPreviewPagerBinder.bind(
+ dualPreviewView,
+ wallpaperPreviewViewModel,
+ applicationContext,
+ viewLifecycleOwner,
+ mainScope,
+ navigate,
+ )
+ }
+
+ private fun synchronizePreviewAndTabsPager(
+ tabsViewPager: ViewPager,
+ previewsViewPager: ViewPager,
+ ) {
+ val onPageChangeListenerTabs =
+ object : ViewPager.OnPageChangeListener {
+ override fun onPageSelected(position: Int) {
+ previewsViewPager.setCurrentItem(position, true)
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {}
+
+ override fun onPageScrollStateChanged(state: Int) {}
+ }
+
+ tabsViewPager.addOnPageChangeListener(onPageChangeListenerTabs)
+
+ val onPageChangeListenerPreviews =
+ object : ViewPager.OnPageChangeListener {
+ override fun onPageSelected(position: Int) {
+ tabsViewPager.setCurrentItem(position, true)
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {}
+
+ override fun onPageScrollStateChanged(state: Int) {}
+ }
+
+ previewsViewPager.addOnPageChangeListener(onPageChangeListenerPreviews)
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/binder/FullWallpaperPreviewBinder.kt b/src/com/android/wallpaper/picker/preview/ui/binder/FullWallpaperPreviewBinder.kt
new file mode 100644
index 00000000..b77ef97c
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/binder/FullWallpaperPreviewBinder.kt
@@ -0,0 +1,155 @@
+/*
+ * 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.preview.ui.binder
+
+import android.content.Context
+import android.graphics.PointF
+import android.graphics.Rect
+import android.view.LayoutInflater
+import android.view.SurfaceHolder
+import android.view.SurfaceView
+import android.view.View
+import android.widget.ImageView
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleOwner
+import androidx.lifecycle.lifecycleScope
+import androidx.lifecycle.repeatOnLifecycle
+import com.android.wallpaper.R
+import com.android.wallpaper.model.wallpaper.WallpaperModel
+import com.android.wallpaper.picker.TouchForwardingLayout
+import com.android.wallpaper.picker.di.modules.MainDispatcher
+import com.android.wallpaper.picker.preview.ui.util.FullResImageViewUtil.getCropRect
+import com.android.wallpaper.picker.preview.ui.util.SurfaceViewUtil
+import com.android.wallpaper.picker.preview.ui.util.SurfaceViewUtil.attachView
+import com.android.wallpaper.picker.preview.ui.view.FullPreviewFrameLayout
+import com.android.wallpaper.picker.preview.ui.viewmodel.WallpaperPreviewViewModel
+import com.android.wallpaper.util.DisplayUtils
+import com.android.wallpaper.util.wallpaperconnection.WallpaperConnectionUtils
+import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
+import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView.OnStateChangedListener
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.launch
+
+/** Binds wallpaper preview surface view and its view models. */
+object FullWallpaperPreviewBinder {
+
+ fun bind(
+ applicationContext: Context,
+ view: View,
+ viewModel: WallpaperPreviewViewModel,
+ displayUtils: DisplayUtils,
+ lifecycleOwner: LifecycleOwner,
+ @MainDispatcher mainScope: CoroutineScope,
+ ) {
+ val wallpaperPreviewCrop: FullPreviewFrameLayout =
+ view.requireViewById(R.id.wallpaper_preview_crop)
+ lifecycleOwner.lifecycleScope.launch {
+ lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
+ viewModel.fullWallpaper.collect { (_, config) ->
+ wallpaperPreviewCrop.setCurrentAndTargetDisplaySize(
+ displayUtils.getRealSize(checkNotNull(view.context.display)),
+ config.displaySize,
+ )
+ }
+ }
+ }
+ val surfaceView: SurfaceView = view.requireViewById(R.id.wallpaper_surface)
+ val surfaceTouchForwardingLayout: TouchForwardingLayout =
+ view.requireViewById(R.id.touch_forwarding_layout)
+ var job: Job? = null
+ surfaceView.setZOrderMediaOverlay(true)
+ surfaceView.holder.addCallback(
+ object : SurfaceViewUtil.SurfaceCallback {
+ override fun surfaceCreated(holder: SurfaceHolder) {
+ job =
+ lifecycleOwner.lifecycleScope.launch {
+ viewModel.fullWallpaper.collect { (wallpaper, config) ->
+ if (wallpaper is WallpaperModel.LiveWallpaperModel) {
+ WallpaperConnectionUtils.connect(
+ applicationContext,
+ mainScope,
+ wallpaper.liveWallpaperData.systemWallpaperInfo,
+ config.screen.toFlag(),
+ surfaceView,
+ )
+ } else if (wallpaper is WallpaperModel.StaticWallpaperModel) {
+ val (lowResImageView, fullResImageView) =
+ initStaticPreviewSurface(
+ applicationContext,
+ surfaceView,
+ surfaceTouchForwardingLayout,
+ ) { rect ->
+ viewModel.staticWallpaperPreviewViewModel
+ .fullPreviewCrop = rect
+ }
+ // Bind static wallpaper
+ StaticWallpaperPreviewBinder.bind(
+ lowResImageView,
+ fullResImageView,
+ viewModel.staticWallpaperPreviewViewModel,
+ config.screenOrientation,
+ lifecycleOwner,
+ )
+ }
+ }
+ }
+ }
+
+ override fun surfaceDestroyed(holder: SurfaceHolder) {
+ job?.cancel()
+ }
+ }
+ )
+ // TODO (b/300979155): Clean up surface when no longer needed, e.g. onDestroyed
+ }
+
+ private fun initStaticPreviewSurface(
+ applicationContext: Context,
+ surfaceView: SurfaceView,
+ surfaceTouchForwardingLayout: TouchForwardingLayout,
+ onNewCrop: (crop: Rect) -> Unit
+ ): Pair<ImageView, SubsamplingScaleImageView> {
+ val preview =
+ LayoutInflater.from(applicationContext)
+ .inflate(R.layout.fullscreen_wallpaper_preview, null)
+ surfaceView.attachView(preview)
+ val fullResImageView =
+ preview.requireViewById<SubsamplingScaleImageView>(R.id.full_res_image)
+ surfaceTouchForwardingLayout.initTouchForwarding(fullResImageView)
+ fullResImageView.setOnNewCropListener { onNewCrop.invoke(it) }
+ return Pair(preview.requireViewById(R.id.low_res_image), fullResImageView)
+ }
+
+ private fun TouchForwardingLayout.initTouchForwarding(targetView: View) {
+ setForwardingEnabled(true)
+ setTargetView(targetView)
+ }
+
+ private fun SubsamplingScaleImageView.setOnNewCropListener(onNewCrop: (crop: Rect) -> Unit) {
+ setOnStateChangedListener(
+ object : OnStateChangedListener {
+ override fun onScaleChanged(p0: Float, p1: Int) {
+ onNewCrop.invoke(getCropRect())
+ }
+
+ override fun onCenterChanged(p0: PointF?, p1: Int) {
+ onNewCrop.invoke(getCropRect())
+ }
+ }
+ )
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/binder/PreviewActionsBinder.kt b/src/com/android/wallpaper/picker/preview/ui/binder/PreviewActionsBinder.kt
new file mode 100644
index 00000000..a8553dc3
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/binder/PreviewActionsBinder.kt
@@ -0,0 +1,181 @@
+/*
+ * 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.preview.ui.binder
+
+import android.content.Intent
+import android.net.Uri
+import android.view.View
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleOwner
+import androidx.lifecycle.lifecycleScope
+import androidx.lifecycle.repeatOnLifecycle
+import com.android.wallpaper.module.logging.UserEventLogger
+import com.android.wallpaper.picker.preview.ui.view.PreviewActionFloatingSheet
+import com.android.wallpaper.picker.preview.ui.view.PreviewActionGroup
+import com.android.wallpaper.picker.preview.ui.viewmodel.Action.CUSTOMIZE
+import com.android.wallpaper.picker.preview.ui.viewmodel.Action.DELETE
+import com.android.wallpaper.picker.preview.ui.viewmodel.Action.DOWNLOAD
+import com.android.wallpaper.picker.preview.ui.viewmodel.Action.EDIT
+import com.android.wallpaper.picker.preview.ui.viewmodel.Action.EFFECTS
+import com.android.wallpaper.picker.preview.ui.viewmodel.Action.INFORMATION
+import com.android.wallpaper.picker.preview.ui.viewmodel.Action.SHARE
+import com.android.wallpaper.picker.preview.ui.viewmodel.PreviewActionsViewModel
+import com.google.android.material.bottomsheet.BottomSheetBehavior
+import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_HIDDEN
+import kotlinx.coroutines.launch
+
+/** Binds the action buttons and bottom sheet to [PreviewActionsViewModel] */
+object PreviewActionsBinder {
+ fun bind(
+ actionGroup: PreviewActionGroup,
+ floatingSheet: PreviewActionFloatingSheet,
+ viewModel: PreviewActionsViewModel,
+ lifecycleOwner: LifecycleOwner,
+ logger: UserEventLogger,
+ ) {
+ val floatingSheetCallback =
+ object : BottomSheetBehavior.BottomSheetCallback() {
+ override fun onStateChanged(view: View, newState: Int) {
+ if (newState == STATE_HIDDEN) {
+ viewModel.onDialogCollapsed()
+ }
+ }
+
+ override fun onSlide(p0: View, p1: Float) {}
+ }
+ floatingSheet.addFloatingSheetCallback(floatingSheetCallback)
+ lifecycleOwner.lifecycleScope.launch {
+ lifecycleOwner.repeatOnLifecycle(Lifecycle.State.CREATED) {
+ floatingSheet.addFloatingSheetCallback(floatingSheetCallback)
+ }
+ floatingSheet.removeFloatingSheetCallback(floatingSheetCallback)
+ }
+
+ lifecycleOwner.lifecycleScope.launch {
+ lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
+ launch {
+ viewModel.isInformationChecked.collect {
+ actionGroup.setIsChecked(INFORMATION, it)
+ }
+ }
+
+ launch {
+ viewModel.isInformationVisible.collect {
+ actionGroup.setIsVisible(INFORMATION, it)
+ }
+ }
+
+ launch {
+ viewModel.onInformationClicked.collect {
+ actionGroup.setClickListener(INFORMATION, it)
+ }
+ }
+
+ launch {
+ viewModel.isDownloadChecked.collect { actionGroup.setIsChecked(DOWNLOAD, it) }
+ }
+
+ launch {
+ viewModel.isDownloadVisible.collect { actionGroup.setIsVisible(DOWNLOAD, it) }
+ }
+
+ launch {
+ viewModel.onDownloadClicked.collect {
+ actionGroup.setClickListener(DOWNLOAD, it)
+ }
+ }
+
+ launch {
+ viewModel.isDeleteChecked.collect { actionGroup.setIsChecked(DELETE, it) }
+ }
+
+ launch {
+ viewModel.isDeleteVisible.collect { actionGroup.setIsVisible(DELETE, it) }
+ }
+
+ launch {
+ viewModel.onDeleteClicked.collect { actionGroup.setClickListener(DELETE, it) }
+ }
+
+ launch { viewModel.isEditChecked.collect { actionGroup.setIsChecked(EDIT, it) } }
+
+ launch { viewModel.isEditVisible.collect { actionGroup.setIsVisible(EDIT, it) } }
+
+ launch {
+ viewModel.onEditClicked.collect { actionGroup.setClickListener(EDIT, it) }
+ }
+
+ launch {
+ viewModel.isCustomizeChecked.collect { actionGroup.setIsChecked(CUSTOMIZE, it) }
+ }
+
+ launch {
+ viewModel.isCustomizeVisible.collect { actionGroup.setIsVisible(CUSTOMIZE, it) }
+ }
+
+ launch {
+ viewModel.onCustomizeClicked.collect {
+ actionGroup.setClickListener(CUSTOMIZE, it)
+ }
+ }
+
+ launch {
+ viewModel.isEffectsChecked.collect { actionGroup.setIsChecked(EFFECTS, it) }
+ }
+
+ launch {
+ viewModel.isEffectsVisible.collect { actionGroup.setIsVisible(EFFECTS, it) }
+ }
+
+ launch {
+ viewModel.onEffectsClicked.collect { actionGroup.setClickListener(EFFECTS, it) }
+ }
+
+ launch { viewModel.isShareChecked.collect { actionGroup.setIsChecked(SHARE, it) } }
+
+ launch { viewModel.isShareVisible.collect { actionGroup.setIsVisible(SHARE, it) } }
+
+ launch {
+ viewModel.onShareClicked.collect { actionGroup.setClickListener(SHARE, it) }
+ }
+
+ launch {
+ viewModel.informationFloatingSheetViewModel.collect { viewModel ->
+ if (viewModel == null) {
+ floatingSheet.collapse()
+ } else {
+ val onExploreButtonClicked =
+ viewModel.exploreActionUrl?.let { url ->
+ {
+ logger.logWallpaperExploreButtonClicked()
+ val appContext = floatingSheet.context.applicationContext
+ appContext.startActivity(
+ Intent(Intent.ACTION_VIEW, Uri.parse(url))
+ )
+ }
+ }
+ floatingSheet.setInformationContent(
+ viewModel.attributions,
+ onExploreButtonClicked
+ )
+ floatingSheet.expand()
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/binder/PreviewPagerBinder.kt b/src/com/android/wallpaper/picker/preview/ui/binder/PreviewPagerBinder.kt
new file mode 100644
index 00000000..014fc9a7
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/binder/PreviewPagerBinder.kt
@@ -0,0 +1,65 @@
+/*
+ * 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.preview.ui.binder
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.graphics.Point
+import android.view.View
+import androidx.lifecycle.LifecycleOwner
+import androidx.viewpager2.widget.ViewPager2
+import com.android.wallpaper.R
+import com.android.wallpaper.model.wallpaper.PreviewPagerPage
+import com.android.wallpaper.model.wallpaper.getScreenOrientation
+import com.android.wallpaper.picker.preview.ui.fragment.smallpreview.adapters.SinglePreviewPagerAdapter
+import com.android.wallpaper.picker.preview.ui.fragment.smallpreview.pagetransformers.PreviewCardPageTransformer
+import com.android.wallpaper.picker.preview.ui.viewmodel.WallpaperPreviewViewModel
+import kotlinx.coroutines.CoroutineScope
+
+/** Binds single preview home screen and lock screen tabs view pager. */
+object PreviewPagerBinder {
+
+ @SuppressLint("WrongConstant")
+ fun bind(
+ applicationContext: Context,
+ viewLifecycleOwner: LifecycleOwner,
+ mainScope: CoroutineScope,
+ previewsViewPager: ViewPager2,
+ wallpaperPreviewViewModel: WallpaperPreviewViewModel,
+ previewDisplaySize: Point,
+ navigate: (View) -> Unit,
+ ) {
+ previewsViewPager.apply {
+ adapter = SinglePreviewPagerAdapter { viewHolder, position ->
+ SmallPreviewBinder.bind(
+ applicationContext = applicationContext,
+ view = viewHolder.itemView.requireViewById(R.id.preview),
+ viewModel = wallpaperPreviewViewModel,
+ screen = PreviewPagerPage.entries[position].screen,
+ orientation = getScreenOrientation(previewDisplaySize),
+ foldableDisplay = null,
+ mainScope = mainScope,
+ viewLifecycleOwner = viewLifecycleOwner,
+ navigate = navigate,
+ )
+ }
+ offscreenPageLimit = SinglePreviewPagerAdapter.PREVIEW_PAGER_ITEM_COUNT
+ clipChildren = false
+ clipToPadding = false
+ setPageTransformer(PreviewCardPageTransformer(previewDisplaySize))
+ }
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/binder/PreviewSelectorBinder.kt b/src/com/android/wallpaper/picker/preview/ui/binder/PreviewSelectorBinder.kt
new file mode 100644
index 00000000..4b582897
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/binder/PreviewSelectorBinder.kt
@@ -0,0 +1,88 @@
+/*
+ * 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.preview.ui.binder
+
+import android.content.Context
+import android.graphics.Point
+import android.view.View
+import androidx.lifecycle.LifecycleOwner
+import androidx.viewpager.widget.ViewPager
+import androidx.viewpager2.widget.ViewPager2
+import com.android.wallpaper.picker.preview.ui.viewmodel.WallpaperPreviewViewModel
+import kotlinx.coroutines.CoroutineScope
+
+/** Binds and synchronizes the tab and preview view pagers. */
+object PreviewSelectorBinder {
+
+ fun bind(
+ tabsViewPager: ViewPager,
+ previewsViewPager: ViewPager2,
+ previewDisplaySize: Point,
+ wallpaperPreviewViewModel: WallpaperPreviewViewModel,
+ applicationContext: Context,
+ viewLifecycleOwner: LifecycleOwner,
+ mainScope: CoroutineScope,
+ navigate: (View) -> Unit,
+ ) {
+ // set up tabs view pager
+ TabPagerBinder.bind(tabsViewPager)
+
+ // set up previews view pager
+ PreviewPagerBinder.bind(
+ applicationContext,
+ viewLifecycleOwner,
+ mainScope,
+ previewsViewPager,
+ wallpaperPreviewViewModel,
+ previewDisplaySize,
+ navigate,
+ )
+
+ // synchronize the two pagers
+ synchronizePreviewAndTabsPager(tabsViewPager, previewsViewPager)
+ }
+
+ private fun synchronizePreviewAndTabsPager(
+ tabsViewPager: ViewPager,
+ previewsViewPager: ViewPager2,
+ ) {
+ val onPageChangeListener =
+ object : ViewPager.OnPageChangeListener {
+ override fun onPageSelected(position: Int) {
+ previewsViewPager.setCurrentItem(position, true)
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {}
+
+ override fun onPageScrollStateChanged(state: Int) {}
+ }
+
+ tabsViewPager.addOnPageChangeListener(onPageChangeListener)
+
+ previewsViewPager.registerOnPageChangeCallback(
+ object : ViewPager2.OnPageChangeCallback() {
+ override fun onPageSelected(position: Int) {
+ super.onPageSelected(position)
+ tabsViewPager.setCurrentItem(position, true)
+ }
+ }
+ )
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/binder/SetWallpaperButtonBinder.kt b/src/com/android/wallpaper/picker/preview/ui/binder/SetWallpaperButtonBinder.kt
new file mode 100644
index 00000000..013ff3a9
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/binder/SetWallpaperButtonBinder.kt
@@ -0,0 +1,30 @@
+/*
+ * 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.preview.ui.binder
+
+import android.widget.Button
+
+/** Binds the set wallpaper button on small preview. */
+object SetWallpaperButtonBinder {
+
+ fun bind(
+ button: Button,
+ navigate: () -> Unit,
+ ) {
+ button.setOnClickListener { navigate.invoke() }
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/binder/SetWallpaperDialogBinder.kt b/src/com/android/wallpaper/picker/preview/ui/binder/SetWallpaperDialogBinder.kt
new file mode 100644
index 00000000..0bac0344
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/binder/SetWallpaperDialogBinder.kt
@@ -0,0 +1,37 @@
+/*
+ * 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.preview.ui.binder
+
+import android.app.AlertDialog
+import android.app.Dialog
+
+/** Binds the dialog on small preview confirming and setting wallpaper with destination. */
+object SetWallpaperDialogBinder {
+
+ fun bind(
+ dialog: AlertDialog,
+ primaryText: String,
+ secondaryText: String,
+ navigate: () -> Unit,
+ ) {
+ // TODO(b/303457019): For the set button, listen to a data flow of onClick listener
+ dialog.apply {
+ setButton(Dialog.BUTTON_POSITIVE, primaryText) { _, _ -> navigate.invoke() }
+ setButton(Dialog.BUTTON_NEGATIVE, secondaryText) { _, _ -> navigate.invoke() }
+ }
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/binder/SmallPreviewBinder.kt b/src/com/android/wallpaper/picker/preview/ui/binder/SmallPreviewBinder.kt
new file mode 100644
index 00000000..d3a63ade
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/binder/SmallPreviewBinder.kt
@@ -0,0 +1,67 @@
+/*
+ * 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.preview.ui.binder
+
+import android.content.Context
+import android.view.SurfaceView
+import android.view.View
+import androidx.lifecycle.LifecycleOwner
+import com.android.wallpaper.R
+import com.android.wallpaper.model.wallpaper.FoldableDisplay
+import com.android.wallpaper.model.wallpaper.ScreenOrientation
+import com.android.wallpaper.module.CustomizationSections.Screen
+import com.android.wallpaper.picker.di.modules.MainDispatcher
+import com.android.wallpaper.picker.preview.ui.viewmodel.WallpaperPreviewViewModel
+import kotlinx.coroutines.CoroutineScope
+
+object SmallPreviewBinder {
+ /** @param foldableDisplay Only used for foldable devices; otherwise, set to null. */
+ fun bind(
+ applicationContext: Context,
+ view: View,
+ viewModel: WallpaperPreviewViewModel,
+ screen: Screen,
+ orientation: ScreenOrientation,
+ foldableDisplay: FoldableDisplay?,
+ @MainDispatcher mainScope: CoroutineScope,
+ viewLifecycleOwner: LifecycleOwner,
+ navigate: ((View) -> Unit)? = null,
+ ) {
+ val wallpaperSurface: SurfaceView = view.requireViewById(R.id.wallpaper_surface)
+ val workspaceSurface: SurfaceView = view.requireViewById(R.id.workspace_surface)
+
+ view.setOnClickListener {
+ viewModel.onSmallPreviewClicked(screen, orientation, foldableDisplay)
+ navigate?.invoke(wallpaperSurface)
+ }
+
+ val config = viewModel.getWorkspacePreviewConfig(screen, foldableDisplay)
+ WorkspacePreviewBinder.bind(
+ workspaceSurface,
+ config,
+ )
+
+ SmallWallpaperPreviewBinder.bind(
+ surface = wallpaperSurface,
+ viewModel = viewModel,
+ screen = screen,
+ screenOrientation = orientation,
+ applicationContext = applicationContext,
+ mainScope = mainScope,
+ viewLifecycleOwner = viewLifecycleOwner,
+ )
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/binder/SmallWallpaperPreviewBinder.kt b/src/com/android/wallpaper/picker/preview/ui/binder/SmallWallpaperPreviewBinder.kt
new file mode 100644
index 00000000..d6a70fa4
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/binder/SmallWallpaperPreviewBinder.kt
@@ -0,0 +1,97 @@
+/*
+ * 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.preview.ui.binder
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.SurfaceHolder
+import android.view.SurfaceView
+import androidx.lifecycle.LifecycleOwner
+import androidx.lifecycle.lifecycleScope
+import com.android.wallpaper.R
+import com.android.wallpaper.model.wallpaper.ScreenOrientation
+import com.android.wallpaper.model.wallpaper.WallpaperModel
+import com.android.wallpaper.module.CustomizationSections.Screen
+import com.android.wallpaper.picker.di.modules.MainDispatcher
+import com.android.wallpaper.picker.preview.ui.util.SurfaceViewUtil
+import com.android.wallpaper.picker.preview.ui.util.SurfaceViewUtil.attachView
+import com.android.wallpaper.picker.preview.ui.viewmodel.WallpaperPreviewViewModel
+import com.android.wallpaper.util.wallpaperconnection.WallpaperConnectionUtils
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.launch
+
+/**
+ * Bind the [SurfaceView] with [WallpaperPreviewViewModel] for rendering static or live wallpaper
+ * preview, with regard to its underlying [WallpaperModel].
+ */
+object SmallWallpaperPreviewBinder {
+ /**
+ * @param onFullResImageViewCreated This callback is only used when the wallpaperModel is a
+ * [WallpaperModel.StaticWallpaperModel]. [FullWallpaperPreviewBinder] needs the callback to
+ * further delegate the touch events and set the state change listener.
+ */
+ fun bind(
+ surface: SurfaceView,
+ viewModel: WallpaperPreviewViewModel,
+ screen: Screen,
+ screenOrientation: ScreenOrientation,
+ applicationContext: Context,
+ @MainDispatcher mainScope: CoroutineScope,
+ viewLifecycleOwner: LifecycleOwner,
+ ) {
+ var job: Job? = null
+ surface.setZOrderMediaOverlay(true)
+ surface.holder.addCallback(
+ object : SurfaceViewUtil.SurfaceCallback {
+ override fun surfaceCreated(holder: SurfaceHolder) {
+ job =
+ viewLifecycleOwner.lifecycleScope.launch {
+ viewModel.wallpaper.collect { wallpaper ->
+ if (wallpaper is WallpaperModel.LiveWallpaperModel) {
+ WallpaperConnectionUtils.connect(
+ applicationContext,
+ mainScope,
+ wallpaper.liveWallpaperData.systemWallpaperInfo,
+ screen.toFlag(),
+ surface,
+ )
+ } else if (wallpaper is WallpaperModel.StaticWallpaperModel) {
+ val staticPreviewView =
+ LayoutInflater.from(applicationContext)
+ .inflate(R.layout.fullscreen_wallpaper_preview, null)
+ surface.attachView(staticPreviewView)
+ // Bind static wallpaper
+ StaticWallpaperPreviewBinder.bind(
+ staticPreviewView.requireViewById(R.id.low_res_image),
+ staticPreviewView.requireViewById(R.id.full_res_image),
+ viewModel.staticWallpaperPreviewViewModel,
+ screenOrientation,
+ viewLifecycleOwner,
+ )
+ }
+ }
+ }
+ }
+
+ override fun surfaceDestroyed(holder: SurfaceHolder) {
+ job?.cancel()
+ }
+ }
+ )
+ // TODO (b/300979155): Clean up surface when no longer needed, e.g. onDestroyed
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/binder/StaticWallpaperPreviewBinder.kt b/src/com/android/wallpaper/picker/preview/ui/binder/StaticWallpaperPreviewBinder.kt
index fa92f89b..cf5ff63e 100644
--- a/src/com/android/wallpaper/picker/preview/ui/binder/StaticWallpaperPreviewBinder.kt
+++ b/src/com/android/wallpaper/picker/preview/ui/binder/StaticWallpaperPreviewBinder.kt
@@ -17,6 +17,9 @@ package com.android.wallpaper.picker.preview.ui.binder
import android.animation.Animator
import android.animation.AnimatorListenerAdapter
+import android.graphics.Bitmap
+import android.graphics.Point
+import android.graphics.Rect
import android.graphics.RenderEffect
import android.graphics.Shader
import android.view.View
@@ -27,9 +30,9 @@ import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
-import com.android.wallpaper.R
+import com.android.wallpaper.model.wallpaper.ScreenOrientation
import com.android.wallpaper.picker.preview.ui.util.FullResImageViewUtil
-import com.android.wallpaper.picker.preview.ui.viewmodel.FullResWallpaperViewModel
+import com.android.wallpaper.picker.preview.ui.util.FullResImageViewUtil.getCropRect
import com.android.wallpaper.picker.preview.ui.viewmodel.StaticWallpaperPreviewViewModel
import com.android.wallpaper.util.WallpaperSurfaceCallback.LOW_RES_BITMAP_BLUR_RADIUS
import com.davemorrissey.labs.subscaleview.ImageSource
@@ -42,29 +45,32 @@ object StaticWallpaperPreviewBinder {
private const val CROSS_FADE_DURATION: Long = 200
fun bind(
- view: View,
+ lowResImageView: ImageView,
+ fullResImageView: SubsamplingScaleImageView,
viewModel: StaticWallpaperPreviewViewModel,
- lifecycleOwner: LifecycleOwner,
- isSingleDisplayOrUnfoldedHorizontalHinge: Boolean,
- isRtl: Boolean,
+ screenOrientation: ScreenOrientation,
+ viewLifecycleOwner: LifecycleOwner,
) {
- val lowResImageView: ImageView = view.requireViewById(R.id.low_res_image)
lowResImageView.initLowResImageView()
-
- val fullResImageView: SubsamplingScaleImageView = view.requireViewById(R.id.full_res_image)
fullResImageView.initFullResImageView()
- lifecycleOwner.lifecycleScope.launch {
- lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
+ viewLifecycleOwner.lifecycleScope.launch {
+ viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
launch { viewModel.lowResBitmap.collect { lowResImageView.setImageBitmap(it) } }
launch {
viewModel.subsamplingScaleImageViewModel.collect {
+ val cropHint = it.cropHints?.get(screenOrientation)
fullResImageView.setFullResImage(
- it,
- isSingleDisplayOrUnfoldedHorizontalHinge,
- isRtl,
+ it.rawWallpaperBitmap,
+ it.rawWallpaperSize,
+ cropHint,
)
+
+ // Both small and full previews change fullPreviewCrop but it should track
+ // only full preview crop, initial value should align with existing crop
+ // otherwise it's a new preview selection and use current visible crop
+ viewModel.fullPreviewCrop = cropHint ?: fullResImageView.getCropRect()
crossFadeInFullResImageView(lowResImageView, fullResImageView)
}
}
@@ -88,26 +94,23 @@ object StaticWallpaperPreviewBinder {
}
private fun SubsamplingScaleImageView.setFullResImage(
- viewModel: FullResWallpaperViewModel,
- isSingleDisplayOrUnfoldedHorizontalHinge: Boolean,
- isRtl: Boolean,
+ rawWallpaperBitmap: Bitmap,
+ rawWallpaperSize: Point,
+ cropHint: Rect?,
) {
+ // Set the full res image
+ setImage(ImageSource.bitmap(rawWallpaperBitmap))
// Calculate the scale and the center point for the full res image
FullResImageViewUtil.getScaleAndCenter(
- measuredWidth,
- measuredHeight,
- viewModel.offsetToStart,
- viewModel.rawWallpaperSize,
- isSingleDisplayOrUnfoldedHorizontalHinge,
- isRtl,
+ Point(measuredWidth, measuredHeight),
+ rawWallpaperSize,
+ cropHint,
)
- .also { scaleAndCenter ->
+ .let { scaleAndCenter ->
minScale = scaleAndCenter.minScale
maxScale = scaleAndCenter.maxScale
setScaleAndCenter(scaleAndCenter.defaultScale, scaleAndCenter.center)
}
- // Set the full res image
- setImage(ImageSource.bitmap(viewModel.rawWallpaperBitmap))
}
private fun crossFadeInFullResImageView(lowResImageView: ImageView, fullResImageView: View) {
diff --git a/src/com/android/wallpaper/picker/preview/ui/binder/TabPagerBinder.kt b/src/com/android/wallpaper/picker/preview/ui/binder/TabPagerBinder.kt
new file mode 100644
index 00000000..e23b12eb
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/binder/TabPagerBinder.kt
@@ -0,0 +1,36 @@
+/*
+ * 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.preview.ui.binder
+
+import android.view.View.OVER_SCROLL_NEVER
+import androidx.viewpager.widget.ViewPager
+import com.android.wallpaper.picker.preview.ui.fragment.smallpreview.adapters.TabTextPagerAdapter
+
+/** Binds single preview home screen and lock screen tabs. */
+object TabPagerBinder {
+
+ fun bind(
+ tabsViewPager: ViewPager,
+ ) {
+ tabsViewPager.apply {
+ adapter = TabTextPagerAdapter()
+ offscreenPageLimit = 2
+ clipChildren = false
+ clipToPadding = false
+ overScrollMode = OVER_SCROLL_NEVER
+ }
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/binder/WorkspacePreviewBinder.kt b/src/com/android/wallpaper/picker/preview/ui/binder/WorkspacePreviewBinder.kt
new file mode 100644
index 00000000..7f7e83ff
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/binder/WorkspacePreviewBinder.kt
@@ -0,0 +1,105 @@
+/*
+ * 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.preview.ui.binder
+
+import android.os.Bundle
+import android.view.SurfaceHolder
+import android.view.SurfaceView
+import android.view.View
+import androidx.core.os.bundleOf
+import androidx.lifecycle.LifecycleOwner
+import androidx.lifecycle.lifecycleScope
+import com.android.wallpaper.picker.preview.ui.util.SurfaceViewUtil
+import com.android.wallpaper.picker.preview.ui.viewmodel.WallpaperPreviewViewModel
+import com.android.wallpaper.picker.preview.ui.viewmodel.WorkspacePreviewConfigViewModel
+import com.android.wallpaper.util.PreviewUtils
+import com.android.wallpaper.util.SurfaceViewUtils
+import kotlinx.coroutines.launch
+
+object WorkspacePreviewBinder {
+ fun bind(
+ surface: SurfaceView,
+ config: WorkspacePreviewConfigViewModel,
+ ) {
+ surface.visibility = View.VISIBLE
+ surface.setZOrderMediaOverlay(true)
+ surface.holder.addCallback(
+ object : SurfaceViewUtil.SurfaceCallback {
+ override fun surfaceCreated(holder: SurfaceHolder) {
+ renderWorkspacePreview(
+ surface = surface,
+ previewUtils = config.previewUtils,
+ displayId = config.displayId,
+ )
+ }
+ }
+ )
+ }
+
+ /**
+ * Binds the workspace preview in the full screen, where we need to listen to the changes of the
+ * [WorkspacePreviewConfigViewModel] according to which small preview the user clicks on.
+ */
+ fun bindFullWorkspacePreview(
+ surface: SurfaceView,
+ viewModel: WallpaperPreviewViewModel,
+ lifecycleOwner: LifecycleOwner
+ ) {
+ surface.visibility = View.VISIBLE
+ surface.setZOrderMediaOverlay(true)
+ surface.holder.addCallback(
+ object : SurfaceViewUtil.SurfaceCallback {
+ override fun surfaceCreated(holder: SurfaceHolder) {
+ lifecycleOwner.lifecycleScope.launch {
+ viewModel.fullWorkspacePreviewConfigViewModel.collect {
+ renderWorkspacePreview(
+ surface = surface,
+ previewUtils = it.previewUtils,
+ displayId = it.displayId,
+ )
+ }
+ }
+ }
+ }
+ )
+ }
+
+ private fun renderWorkspacePreview(
+ surface: SurfaceView,
+ previewUtils: PreviewUtils,
+ displayId: Int,
+ ) {
+ if (previewUtils.supportsPreview()) {
+ val request =
+ SurfaceViewUtils.createSurfaceViewRequest(
+ surface,
+ bundleOf(Pair(SurfaceViewUtils.KEY_DISPLAY_ID, displayId)),
+ )
+ previewUtils.renderPreview(
+ request,
+ object : PreviewUtils.WorkspacePreviewCallback {
+ override fun onPreviewRendered(resultBundle: Bundle?) {
+ if (resultBundle != null) {
+ surface.setChildSurfacePackage(
+ SurfaceViewUtils.getSurfacePackage(resultBundle)
+ )
+ }
+ }
+ }
+ )
+ }
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/fragment/FullPreviewFragment.kt b/src/com/android/wallpaper/picker/preview/ui/fragment/FullPreviewFragment.kt
index 3fd68f97..4092fedc 100644
--- a/src/com/android/wallpaper/picker/preview/ui/fragment/FullPreviewFragment.kt
+++ b/src/com/android/wallpaper/picker/preview/ui/fragment/FullPreviewFragment.kt
@@ -15,24 +15,99 @@
*/
package com.android.wallpaper.picker.preview.ui.fragment
+import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
+import android.view.SurfaceView
import android.view.View
import android.view.ViewGroup
-import androidx.fragment.app.Fragment
+import androidx.core.content.ContextCompat
+import androidx.core.view.ViewCompat
+import androidx.fragment.app.activityViewModels
+import androidx.navigation.fragment.findNavController
+import androidx.transition.TransitionInflater
import com.android.wallpaper.R
+import com.android.wallpaper.picker.AppbarFragment
+import com.android.wallpaper.picker.di.modules.MainDispatcher
+import com.android.wallpaper.picker.preview.ui.binder.CropWallpaperButtonBinder
+import com.android.wallpaper.picker.preview.ui.binder.FullWallpaperPreviewBinder
+import com.android.wallpaper.picker.preview.ui.binder.WorkspacePreviewBinder
+import com.android.wallpaper.picker.preview.ui.viewmodel.WallpaperPreviewViewModel
+import com.android.wallpaper.util.DisplayUtils
import dagger.hilt.android.AndroidEntryPoint
+import dagger.hilt.android.qualifiers.ApplicationContext
+import javax.inject.Inject
+import kotlinx.coroutines.CoroutineScope
/** Shows full preview of user selected wallpaper for cropping, zooming and positioning. */
-@AndroidEntryPoint(Fragment::class)
+@AndroidEntryPoint(AppbarFragment::class)
class FullPreviewFragment : Hilt_FullPreviewFragment() {
+ @Inject @ApplicationContext lateinit var appContext: Context
+ @Inject lateinit var displayUtils: DisplayUtils
+ @Inject @MainDispatcher lateinit var mainScope: CoroutineScope
+
+ private val wallpaperPreviewViewModel by activityViewModels<WallpaperPreviewViewModel>()
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ if (ENABLE_ANIMATION) {
+ sharedElementEnterTransition =
+ TransitionInflater.from(appContext).inflateTransition(R.transition.shared_view)
+ }
+ }
+
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragment_full_preview, container, false)
+ setUpToolbar(view)
+
+ val wallpaperSurface: SurfaceView = view.requireViewById(R.id.wallpaper_surface)
+ ViewCompat.setTransitionName(wallpaperSurface, "full_preview_shared_element")
+
+ FullWallpaperPreviewBinder.bind(
+ applicationContext = appContext,
+ view = view,
+ viewModel = wallpaperPreviewViewModel,
+ displayUtils = displayUtils,
+ lifecycleOwner = viewLifecycleOwner,
+ mainScope = mainScope,
+ )
+
+ CropWallpaperButtonBinder.bind(
+ button = view.requireViewById(R.id.crop_wallpaper_button),
+ viewModel = wallpaperPreviewViewModel,
+ lifecycleOwner = viewLifecycleOwner,
+ ) {
+ findNavController().popBackStack()
+ }
+
+ WorkspacePreviewBinder.bindFullWorkspacePreview(
+ surface = view.requireViewById(R.id.workspace_surface),
+ viewModel = wallpaperPreviewViewModel,
+ lifecycleOwner = viewLifecycleOwner,
+ )
+
return view
}
+
+ // TODO(b/291761856): Use real string
+ override fun getDefaultTitle(): CharSequence {
+ return ""
+ }
+
+ override fun getToolbarColorId(): Int {
+ return android.R.color.transparent
+ }
+
+ override fun getToolbarTextColor(): Int {
+ return ContextCompat.getColor(requireContext(), R.color.system_on_surface)
+ }
+
+ companion object {
+ const val ENABLE_ANIMATION = false
+ }
}
diff --git a/src/com/android/wallpaper/picker/preview/ui/fragment/SetWallpaperDialogFragment.kt b/src/com/android/wallpaper/picker/preview/ui/fragment/SetWallpaperDialogFragment.kt
new file mode 100644
index 00000000..10e9fa49
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/fragment/SetWallpaperDialogFragment.kt
@@ -0,0 +1,60 @@
+/*
+ * 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.preview.ui.fragment
+
+import android.app.AlertDialog
+import android.app.Dialog
+import android.os.Bundle
+import android.view.LayoutInflater
+import androidx.fragment.app.DialogFragment
+import androidx.fragment.app.activityViewModels
+import androidx.navigation.fragment.findNavController
+import com.android.wallpaper.R
+import com.android.wallpaper.picker.preview.ui.binder.SetWallpaperDialogBinder
+import com.android.wallpaper.picker.preview.ui.viewmodel.WallpaperPreviewViewModel
+import com.android.wallpaper.util.DisplayUtils
+import dagger.hilt.android.AndroidEntryPoint
+import javax.inject.Inject
+
+/** Shows LS/HS previews and confirmation to set as wallpaper for HS, LS or both. */
+@AndroidEntryPoint(DialogFragment::class)
+class SetWallpaperDialogFragment : Hilt_SetWallpaperDialogFragment() {
+
+ @Inject lateinit var displayUtils: DisplayUtils
+
+ private val wallpaperPreviewViewModel by activityViewModels<WallpaperPreviewViewModel>()
+
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+ super.onCreateDialog(savedInstanceState)
+
+ val layout =
+ LayoutInflater.from(requireContext()).inflate(R.layout.set_wallpaper_dialog, null)
+ val dialog =
+ AlertDialog.Builder(requireContext(), R.style.SetWallpaperPreviewDialogTheme)
+ .setView(layout)
+ .create()
+ SetWallpaperDialogBinder.bind(
+ dialog,
+ "Set",
+ "Cancel",
+ ) {
+ findNavController().popBackStack()
+ }
+
+ return dialog
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/fragment/SmallPreviewFragment.kt b/src/com/android/wallpaper/picker/preview/ui/fragment/SmallPreviewFragment.kt
index fc45366d..31a46359 100644
--- a/src/com/android/wallpaper/picker/preview/ui/fragment/SmallPreviewFragment.kt
+++ b/src/com/android/wallpaper/picker/preview/ui/fragment/SmallPreviewFragment.kt
@@ -15,22 +15,32 @@
*/
package com.android.wallpaper.picker.preview.ui.fragment
+import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
+import androidx.core.view.ViewCompat
import androidx.fragment.app.activityViewModels
+import androidx.navigation.fragment.FragmentNavigatorExtras
import androidx.navigation.fragment.findNavController
import com.android.wallpaper.R
-import com.android.wallpaper.module.CustomizationSections
-import com.android.wallpaper.module.InjectorProvider
+import com.android.wallpaper.module.logging.UserEventLogger
import com.android.wallpaper.picker.AppbarFragment
-import com.android.wallpaper.picker.customization.ui.binder.ScreenPreviewBinder
-import com.android.wallpaper.picker.customization.ui.viewmodel.ScreenPreviewViewModel
+import com.android.wallpaper.picker.di.modules.MainDispatcher
+import com.android.wallpaper.picker.preview.ui.binder.DualPreviewSelectorBinder
+import com.android.wallpaper.picker.preview.ui.binder.PreviewActionsBinder
+import com.android.wallpaper.picker.preview.ui.binder.PreviewSelectorBinder
+import com.android.wallpaper.picker.preview.ui.binder.SetWallpaperButtonBinder
+import com.android.wallpaper.picker.preview.ui.fragment.smallpreview.DualPreviewViewPager
+import com.android.wallpaper.picker.preview.ui.fragment.smallpreview.views.TabsPagerContainer
import com.android.wallpaper.picker.preview.ui.viewmodel.WallpaperPreviewViewModel
-import com.android.wallpaper.util.PreviewUtils
+import com.android.wallpaper.util.DisplayUtils
import dagger.hilt.android.AndroidEntryPoint
+import dagger.hilt.android.qualifiers.ApplicationContext
+import javax.inject.Inject
+import kotlinx.coroutines.CoroutineScope
/**
* This fragment displays the preview of the selected wallpaper on all available workspaces and
@@ -38,24 +48,41 @@ import dagger.hilt.android.AndroidEntryPoint
*/
@AndroidEntryPoint(AppbarFragment::class)
class SmallPreviewFragment : Hilt_SmallPreviewFragment() {
+
+ @Inject @ApplicationContext lateinit var appContext: Context
+ @Inject lateinit var displayUtils: DisplayUtils
+ @Inject @MainDispatcher lateinit var mainScope: CoroutineScope
+ @Inject lateinit var logger: UserEventLogger
+
private val wallpaperPreviewViewModel by activityViewModels<WallpaperPreviewViewModel>()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
- savedInstanceState: Bundle?
+ savedInstanceState: Bundle?,
): View {
val view =
- inflater.inflate(R.layout.fragment_small_preview, container, /* attachToRoot= */ false)
+ inflater.inflate(
+ if (displayUtils.hasMultiInternalDisplays())
+ R.layout.fragment_small_preview_foldable
+ else R.layout.fragment_small_preview_handheld,
+ container,
+ false,
+ )
setUpToolbar(view)
bindScreenPreview(view)
+ SetWallpaperButtonBinder.bind(
+ view.requireViewById(R.id.button_set_wallpaper),
+ ) {
+ findNavController().navigate(R.id.action_smallPreviewFragment_to_setWallpaperDialog)
+ }
+
return view
}
- // TODO(b/291761856): Use real string
override fun getDefaultTitle(): CharSequence {
- return "Small Preview"
+ return getString(R.string.preview)
}
override fun getToolbarColorId(): Int {
@@ -66,34 +93,67 @@ class SmallPreviewFragment : Hilt_SmallPreviewFragment() {
return ContextCompat.getColor(requireContext(), R.color.system_on_surface)
}
- // TODO(b/291761856): Replace placeholder preview
private fun bindScreenPreview(view: View) {
- ScreenPreviewBinder.bind(
- activity = requireActivity(),
- previewView = view.requireViewById(R.id.preview),
- viewModel =
- ScreenPreviewViewModel(
- previewUtils =
- PreviewUtils(
- context = requireContext(),
- authorityMetadataKey =
- requireContext()
- .getString(
- R.string.grid_control_metadata_name,
- ),
- ),
- wallpaperInfoProvider = { wallpaperPreviewViewModel.editingWallpaper },
- wallpaperInteractor =
- InjectorProvider.getInjector().getWallpaperInteractor(requireContext()),
- screen = CustomizationSections.Screen.HOME_SCREEN,
- onPreviewClicked = {
- findNavController()
- .navigate(R.id.action_smallPreviewFragment_to_fullPreviewFragment)
- }
- ),
- lifecycleOwner = viewLifecycleOwner,
- offsetToStart = false,
- onWallpaperPreviewDirty = { activity?.recreate() },
+ PreviewActionsBinder.bind(
+ view.requireViewById(R.id.action_button_group),
+ view.requireViewById(R.id.floating_sheet),
+ wallpaperPreviewViewModel.previewActionsViewModel,
+ viewLifecycleOwner,
+ logger,
)
+ if (displayUtils.hasMultiInternalDisplays()) {
+ val dualPreviewView: DualPreviewViewPager =
+ view.requireViewById(R.id.dual_preview_pager)
+ val tabPager: TabsPagerContainer = view.requireViewById(R.id.pager_container)
+
+ DualPreviewSelectorBinder.bind(
+ tabPager.getViewPager(),
+ dualPreviewView,
+ wallpaperPreviewViewModel,
+ appContext,
+ viewLifecycleOwner,
+ mainScope,
+ ) { sharedElement ->
+ ViewCompat.setTransitionName(sharedElement, SMALL_PREVIEW_SHARED_ELEMENT_ID)
+ val extras =
+ FragmentNavigatorExtras(sharedElement to FULL_PREVIEW_SHARED_ELEMENT_ID)
+ findNavController()
+ .navigate(
+ resId = R.id.action_smallPreviewFragment_to_fullPreviewFragment,
+ args = null,
+ navOptions = null,
+ navigatorExtras = extras
+ )
+ }
+ } else {
+ val tabPager: TabsPagerContainer = view.requireViewById(R.id.pager_container)
+
+ PreviewSelectorBinder.bind(
+ tabPager.getViewPager(),
+ view.requireViewById(R.id.pager_previews),
+ displayUtils.getRealSize(displayUtils.getWallpaperDisplay()),
+ // TODO: pass correct view models for the view pager
+ wallpaperPreviewViewModel,
+ appContext,
+ viewLifecycleOwner,
+ mainScope,
+ ) { sharedElement ->
+ ViewCompat.setTransitionName(sharedElement, SMALL_PREVIEW_SHARED_ELEMENT_ID)
+ val extras =
+ FragmentNavigatorExtras(sharedElement to FULL_PREVIEW_SHARED_ELEMENT_ID)
+ findNavController()
+ .navigate(
+ resId = R.id.action_smallPreviewFragment_to_fullPreviewFragment,
+ args = null,
+ navOptions = null,
+ navigatorExtras = extras
+ )
+ }
+ }
+ }
+
+ companion object {
+ const val SMALL_PREVIEW_SHARED_ELEMENT_ID = "small_preview_shared_element"
+ const val FULL_PREVIEW_SHARED_ELEMENT_ID = "full_preview_shared_element"
}
}
diff --git a/src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/DualPreviewViewPager.kt b/src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/DualPreviewViewPager.kt
new file mode 100644
index 00000000..9ed8e060
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/DualPreviewViewPager.kt
@@ -0,0 +1,80 @@
+/*
+ * 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.preview.ui.fragment.smallpreview
+
+import android.content.Context
+import android.graphics.Point
+import android.util.AttributeSet
+import androidx.viewpager.widget.ViewPager
+import com.android.wallpaper.R
+import com.android.wallpaper.model.wallpaper.FoldableDisplay
+import com.android.wallpaper.picker.preview.ui.view.DualDisplayAspectRatioLayout
+
+/**
+ * This view pager sizes itself to be the exact height required by its content views:
+ * [DualDisplayAspectRatioLayout]. This is required because the actual heights of
+ * [DualDisplayAspectRatioLayout] are determined after the their parent ViewPager is rendered. This
+ * prevents the ViewPager from sizing itself to wrap its contents.
+ */
+class DualPreviewViewPager
+@JvmOverloads
+constructor(context: Context, attrs: AttributeSet? = null /* attrs */) : ViewPager(context, attrs) {
+ private var previewDisplaySizes: Map<FoldableDisplay, Point>? = null
+
+ override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
+ if (previewDisplaySizes == null) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec)
+ return
+ }
+
+ val parentWidth =
+ this.measuredWidth -
+ context.resources.let {
+ it.getDimension(R.dimen.small_dual_preview_edge_space) * 2 -
+ it.getDimension(R.dimen.small_preview_inter_preview_margin) * 3
+ }
+
+ val smallDisplayAR =
+ getPreviewDisplaySize(FoldableDisplay.FOLDED).let { it.x.toFloat() / it.y }
+
+ val largeDisplayAR =
+ getPreviewDisplaySize(FoldableDisplay.UNFOLDED).let { it.x.toFloat() / it.y }
+
+ val viewPagerHeight = parentWidth / (largeDisplayAR + smallDisplayAR)
+
+ super.onMeasure(
+ widthMeasureSpec,
+ MeasureSpec.makeMeasureSpec(
+ viewPagerHeight.toInt(),
+ MeasureSpec.EXACTLY,
+ )
+ )
+ }
+
+ fun setDisplaySizes(displaySizes: Map<FoldableDisplay, Point>) {
+ previewDisplaySizes = displaySizes
+ }
+
+ /**
+ * Gets the display size for a [DualDisplayAspectRatioLayout.Companion.PreviewView].
+ *
+ * Outside this class we should get display size via
+ * [DualDisplayAspectRatioLayout.getPreviewDisplaySize].
+ */
+ private fun getPreviewDisplaySize(display: FoldableDisplay): Point {
+ return checkNotNull(previewDisplaySizes?.get(display))
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/adapters/DualPreviewPagerAdapter.kt b/src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/adapters/DualPreviewPagerAdapter.kt
new file mode 100644
index 00000000..dab4100c
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/adapters/DualPreviewPagerAdapter.kt
@@ -0,0 +1,57 @@
+/*
+ * 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.preview.ui.fragment.smallpreview.adapters
+
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.recyclerview.widget.RecyclerView
+import androidx.viewpager.widget.PagerAdapter
+import com.android.wallpaper.R
+
+/** This class provides the dual preview views for the small preview screen on foldable devices */
+class DualPreviewPagerAdapter(
+ val onBindViewHolder: (View, Int) -> Unit,
+) : PagerAdapter() {
+
+ inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
+
+ override fun isViewFromObject(item: View, `object`: Any): Boolean {
+ return item == `object`
+ }
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view =
+ LayoutInflater.from(container.context)
+ .inflate(R.layout.preview_foldable_card_view, container, false)
+
+ onBindViewHolder.invoke(view, position)
+ container.addView(view)
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
+ container.removeView(`object` as View)
+ }
+
+ override fun getCount(): Int {
+ return PREVIEW_PAGER_ITEM_COUNT
+ }
+
+ companion object {
+ const val PREVIEW_PAGER_ITEM_COUNT = 2
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/adapters/SinglePreviewPagerAdapter.kt b/src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/adapters/SinglePreviewPagerAdapter.kt
new file mode 100644
index 00000000..ef143b91
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/adapters/SinglePreviewPagerAdapter.kt
@@ -0,0 +1,47 @@
+/*
+ * 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.preview.ui.fragment.smallpreview.adapters
+
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.recyclerview.widget.RecyclerView
+import com.android.wallpaper.R
+
+/** This adapter provides preview views for the small preview fragment */
+class SinglePreviewPagerAdapter(
+ private val onBindViewHolder: (ViewHolder, Int) -> Unit,
+) : RecyclerView.Adapter<SinglePreviewPagerAdapter.ViewHolder>() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ val view =
+ LayoutInflater.from(parent.context)
+ .inflate(R.layout.preview_handheld_card_view, parent, false)
+ return ViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ onBindViewHolder.invoke(holder, position)
+ }
+
+ override fun getItemCount(): Int = PREVIEW_PAGER_ITEM_COUNT
+
+ inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
+
+ companion object {
+ const val PREVIEW_PAGER_ITEM_COUNT = 2
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/adapters/TabTextPagerAdapter.kt b/src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/adapters/TabTextPagerAdapter.kt
new file mode 100644
index 00000000..ff929032
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/adapters/TabTextPagerAdapter.kt
@@ -0,0 +1,53 @@
+/*
+ * 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.preview.ui.fragment.smallpreview.adapters
+
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.viewpager.widget.PagerAdapter
+import com.android.wallpaper.R
+
+/** This class provides the tab views for the tabs in small preview page */
+class TabTextPagerAdapter : PagerAdapter() {
+
+ // TODO: move to view model when ready
+ private val textPages = listOf(R.string.lock_screen_message, R.string.home_screen_message)
+
+ override fun getCount(): Int {
+ return textPages.size
+ }
+
+ override fun isViewFromObject(view: View, `object`: Any): Boolean {
+ return view == `object`
+ }
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val itemView =
+ LayoutInflater.from(container.context).inflate(R.layout.item_text, container, false)
+
+ val textView = itemView.requireViewById<TextView>(R.id.preview_tab_text)
+ textView.text = container.resources.getString(textPages[position])
+
+ container.addView(itemView)
+ return itemView
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
+ container.removeView(`object` as View)
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/pagetransformers/PreviewCardPageTransformer.kt b/src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/pagetransformers/PreviewCardPageTransformer.kt
new file mode 100644
index 00000000..38e85097
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/pagetransformers/PreviewCardPageTransformer.kt
@@ -0,0 +1,42 @@
+/*
+ * 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.preview.ui.fragment.smallpreview.pagetransformers
+
+import android.graphics.Point
+import android.view.View
+import androidx.viewpager2.widget.ViewPager2
+import com.android.wallpaper.R
+import kotlin.math.abs
+
+/**
+ * This class implements the translations on a view pagers adjacent pages (adjacent to the currently
+ * focused page) to make the page peek out from the end of the screen.
+ */
+class PreviewCardPageTransformer(private val screenSizePx: Point) : ViewPager2.PageTransformer {
+ override fun transformPage(page: View, position: Float) {
+ // TODO: cache this call
+ val cardPreview = page.requireViewById<View>(R.id.preview)
+
+ val nextItemVisibleOffsetPx =
+ page.resources.getDimension(R.dimen.wallpaper_control_button_group_divider_space)
+
+ // device width in pixels minus the page width will give margin
+ val availableMargin = screenSizePx.x - cardPreview.width - nextItemVisibleOffsetPx
+ page.translationX = -availableMargin * position
+
+ page.alpha = 0.25f + (1 - abs(position))
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/pagetransformers/PreviewTabsPageTransformer.kt b/src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/pagetransformers/PreviewTabsPageTransformer.kt
new file mode 100644
index 00000000..5a6fd162
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/pagetransformers/PreviewTabsPageTransformer.kt
@@ -0,0 +1,47 @@
+/*
+ * 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.preview.ui.fragment.smallpreview.pagetransformers
+
+import android.graphics.Point
+import android.view.View
+import androidx.viewpager.widget.ViewPager
+import com.android.wallpaper.R
+import kotlin.math.abs
+
+/**
+ * This class provides the transformations for the tabs in the small preview screen. It enables the
+ * behaviour where one out of two tabs cna be focused on and the other is clamped to the side of the
+ * left or right of the display
+ */
+class PreviewTabsPageTransformer(
+ private val previewDisplaySize: Point,
+) : ViewPager.PageTransformer {
+ override fun transformPage(page: View, position: Float) {
+ // TODO: cache this reference since findViewById is expensive
+ val textView = page.requireViewById<View>(R.id.preview_tab_text)
+
+ val absPosition = Math.abs(position)
+ var textViewWidthOffset: Float = (textView.width / 2 * (absPosition))
+ if (position > 0) {
+ textViewWidthOffset *= -1
+ }
+ page.translationX = -previewDisplaySize.x / 2 * position + textViewWidthOffset
+ val scaleFactor = 0.95f
+ page.scaleX = scaleFactor + (1 - scaleFactor) * (1 - absPosition)
+ page.scaleY = scaleFactor + (1 - scaleFactor) * (1 - absPosition)
+ page.alpha = 0.25f + (1 - abs(position))
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/views/TabsPager.kt b/src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/views/TabsPager.kt
new file mode 100644
index 00000000..0b68e656
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/views/TabsPager.kt
@@ -0,0 +1,53 @@
+/*
+ * 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.preview.ui.fragment.smallpreview.views
+
+import android.content.Context
+import android.util.AttributeSet
+import androidx.viewpager.widget.ViewPager
+
+/** A view pager whose height and width are determined by the maximum height/width of children */
+class TabsPager
+@JvmOverloads
+constructor(context: Context, attrs: AttributeSet? = null /* attrs */) : ViewPager(context, attrs) {
+ /** This measures the view pager to have the height and width of the largest item */
+ override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
+ var measureSpecWidth = widthMeasureSpec
+ var measureSpecHeight = heightMeasureSpec
+ var maxChildHeight = 0
+ var maxChildWidth = 0
+ for (i in 0 until childCount) {
+ val view = getChildAt(i)
+ view.measure(
+ measureSpecWidth,
+ MeasureSpec.makeMeasureSpec(0 /* size */, MeasureSpec.UNSPECIFIED)
+ )
+ val childHeight = view.measuredHeight
+ val childWidth = view.measuredWidth
+ if (childHeight > maxChildHeight) {
+ maxChildHeight = childHeight
+ }
+ if (childWidth > maxChildWidth) {
+ maxChildWidth = childWidth
+ }
+ }
+ if (maxChildHeight != 0) {
+ measureSpecHeight = MeasureSpec.makeMeasureSpec(maxChildHeight, MeasureSpec.EXACTLY)
+ }
+ measureSpecWidth = MeasureSpec.makeMeasureSpec(maxChildWidth, MeasureSpec.EXACTLY)
+ super.onMeasure(measureSpecWidth, measureSpecHeight)
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/views/TabsPagerContainer.kt b/src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/views/TabsPagerContainer.kt
new file mode 100644
index 00000000..87382db2
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/fragment/smallpreview/views/TabsPagerContainer.kt
@@ -0,0 +1,63 @@
+/*
+ * 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.preview.ui.fragment.smallpreview.views
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.Gravity
+import android.view.MotionEvent
+import android.widget.FrameLayout
+import androidx.viewpager.widget.ViewPager
+
+/** This container view wraps {TabsPager}. This is used to control the touch area of {TabsPager}. */
+class TabsPagerContainer
+@JvmOverloads
+constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) :
+ FrameLayout(context, attrs, defStyleAttr) {
+
+ private var viewPager: ViewPager
+
+ init {
+ viewPager = TabsPager(context)
+
+ val params =
+ FrameLayout.LayoutParams(
+ FrameLayout.LayoutParams.WRAP_CONTENT,
+ FrameLayout.LayoutParams.WRAP_CONTENT
+ )
+ .apply { gravity = Gravity.CENTER }
+
+ viewPager.clipChildren = false
+ viewPager.clipToPadding = false
+
+ viewPager.layoutParams = params
+ addView(viewPager)
+ }
+
+ override fun onTouchEvent(ev: MotionEvent?): Boolean {
+ return viewPager.dispatchTouchEvent(ev)
+ }
+
+ // TODO: handle click button here and pass click to correct tab
+ override fun performClick(): Boolean {
+ super.performClick()
+ return true
+ }
+
+ fun getViewPager(): ViewPager {
+ return viewPager
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/util/CropSizeUtil.kt b/src/com/android/wallpaper/picker/preview/ui/util/CropSizeUtil.kt
new file mode 100644
index 00000000..f52f1b12
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/util/CropSizeUtil.kt
@@ -0,0 +1,69 @@
+/*
+ * 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.preview.ui.util
+
+import android.graphics.Point
+import android.graphics.PointF
+import android.graphics.Rect
+import kotlin.math.abs
+
+/** Util for calculating cropping related size. */
+object CropSizeUtil {
+
+ /**
+ * Finds largest possible rectangle in [Rect] with the same aspect ratio in the target
+ * rectangle.
+ *
+ * See [findMaxRectWithRatioIn].
+ */
+ fun Rect.findMaxRectWithRatioIn(rect: Rect): PointF =
+ Point(width(), height()).findMaxRectWithRatioIn(Point(rect.width(), rect.height()))
+
+ /**
+ * Finds largest possible rectangle in [Point] with the same aspect ratio in the target
+ * rectangle.
+ *
+ * Calling rectangle will scale up or down to match the size of the target rectangle, the final
+ * rectangle size is the largest but not exceeding the size of target rectangle.
+ */
+ fun Point.findMaxRectWithRatioIn(point: Point): PointF {
+ val ratio =
+ if (x <= point.x && y <= point.y) {
+ // Target rect is containing the calling rect
+ if (abs(x - point.x) <= abs(y - point.y)) {
+ point.x.toFloat() / x
+ } else {
+ point.y.toFloat() / y
+ }
+ } else if (x > point.x && y > point.y) {
+ // Calling rect is containing the target rect
+ if (abs(x - point.x) >= abs(y - point.y)) {
+ point.x.toFloat() / x
+ } else {
+ point.y.toFloat() / y
+ }
+ } else {
+ // Target rect and calling rect overlap
+ if (x > point.x) {
+ point.x.toFloat() / x
+ } else {
+ point.y.toFloat() / y
+ }
+ }
+
+ return PointF(x * ratio, y * ratio)
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/util/FullResImageViewUtil.kt b/src/com/android/wallpaper/picker/preview/ui/util/FullResImageViewUtil.kt
index e4d267a9..d1f9a5b7 100644
--- a/src/com/android/wallpaper/picker/preview/ui/util/FullResImageViewUtil.kt
+++ b/src/com/android/wallpaper/picker/preview/ui/util/FullResImageViewUtil.kt
@@ -1,52 +1,66 @@
+/*
+ * 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.preview.ui.util
import android.graphics.Point
import android.graphics.PointF
+import android.graphics.Rect
import com.android.wallpaper.util.WallpaperCropUtils
+import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
object FullResImageViewUtil {
private const val DEFAULT_WALLPAPER_MAX_ZOOM = 8f
+
fun getScaleAndCenter(
- viewWidth: Int,
- viewHeight: Int,
- offsetToStart: Boolean,
+ viewSize: Point,
rawWallpaperSize: Point,
- isSingleDisplayOrUnfoldedHorizontalHinge: Boolean,
- isRtl: Boolean,
+ cropRect: Rect?,
): ScaleAndCenter {
// Determine minimum zoom to fit maximum visible area of wallpaper on crop surface.
- val crop = Point(viewWidth, viewHeight)
- val visibleRawWallpaperRect =
- WallpaperCropUtils.calculateVisibleRect(rawWallpaperSize, crop)
- if (offsetToStart && isSingleDisplayOrUnfoldedHorizontalHinge) {
- if (isRtl) {
- visibleRawWallpaperRect.offsetTo(
- rawWallpaperSize.x - visibleRawWallpaperRect.width(),
- visibleRawWallpaperRect.top,
- )
- } else {
- visibleRawWallpaperRect.offsetTo(/* newLeft= */ 0, visibleRawWallpaperRect.top)
- }
- }
+ // defaultRawWallpaperRect represents a brand new wallpaper preview with no crop hints.
+ val defaultRawWallpaperRect =
+ WallpaperCropUtils.calculateVisibleRect(rawWallpaperSize, viewSize)
+ val visibleRawWallpaperRect = cropRect ?: defaultRawWallpaperRect
val centerPosition =
PointF(
visibleRawWallpaperRect.centerX().toFloat(),
visibleRawWallpaperRect.centerY().toFloat()
)
- val visibleRawWallpaperSize =
- Point(visibleRawWallpaperRect.width(), visibleRawWallpaperRect.height())
val defaultWallpaperZoom =
- WallpaperCropUtils.calculateMinZoom(visibleRawWallpaperSize, crop)
+ WallpaperCropUtils.calculateMinZoom(
+ Point(defaultRawWallpaperRect.width(), defaultRawWallpaperRect.height()),
+ viewSize
+ )
+ val visibleWallpaperZoom =
+ WallpaperCropUtils.calculateMinZoom(
+ Point(visibleRawWallpaperRect.width(), visibleRawWallpaperRect.height()),
+ viewSize
+ )
return ScaleAndCenter(
defaultWallpaperZoom,
defaultWallpaperZoom.coerceAtLeast(DEFAULT_WALLPAPER_MAX_ZOOM),
- defaultWallpaperZoom,
+ visibleWallpaperZoom,
centerPosition,
)
}
+ fun SubsamplingScaleImageView.getCropRect() = Rect().apply { visibleFileRect(this) }
+
data class ScaleAndCenter(
val minScale: Float,
val maxScale: Float,
diff --git a/src/com/android/wallpaper/picker/preview/ui/util/SurfaceViewUtil.kt b/src/com/android/wallpaper/picker/preview/ui/util/SurfaceViewUtil.kt
new file mode 100644
index 00000000..635e9b8c
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/util/SurfaceViewUtil.kt
@@ -0,0 +1,42 @@
+/*
+ * 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.preview.ui.util
+
+import android.view.SurfaceControlViewHost
+import android.view.SurfaceHolder
+import android.view.SurfaceView
+import android.view.View
+import android.view.ViewGroup
+
+object SurfaceViewUtil {
+
+ fun SurfaceView.attachView(view: View) {
+ // Detach view from its parent, if the view has one
+ (view.parent as ViewGroup?)?.removeView(view)
+ val host = SurfaceControlViewHost(context, display, hostToken)
+ host.setView(view, width, height)
+ setChildSurfacePackage(checkNotNull(host.surfacePackage))
+ }
+
+ interface SurfaceCallback : SurfaceHolder.Callback {
+ override fun surfaceCreated(holder: SurfaceHolder) {}
+
+ override fun surfaceChanged(holder: SurfaceHolder, format: Int, width: Int, height: Int) {}
+
+ override fun surfaceDestroyed(holder: SurfaceHolder) {}
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/view/DualDisplayAspectRatioLayout.kt b/src/com/android/wallpaper/picker/preview/ui/view/DualDisplayAspectRatioLayout.kt
new file mode 100644
index 00000000..bad88fad
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/view/DualDisplayAspectRatioLayout.kt
@@ -0,0 +1,154 @@
+/*
+ * 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.preview.ui.view
+
+import android.content.Context
+import android.graphics.Point
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.widget.LinearLayout
+import com.android.wallpaper.R
+import com.android.wallpaper.model.wallpaper.FoldableDisplay
+
+/**
+ * This LinearLayout view group implements the dual preview view for the small preview screen for
+ * foldable devices.
+ */
+class DualDisplayAspectRatioLayout(
+ context: Context,
+ attrs: AttributeSet?,
+) : LinearLayout(context, attrs) {
+
+ private var previewDisplaySizes: Map<FoldableDisplay, Point>? = null
+
+ init {
+ val inflater =
+ getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
+ val foldedPreview = inflater.inflate(R.layout.wallpaper_preview_small, null)
+
+ foldedPreview.id = FoldableDisplay.FOLDED.getViewId()
+ addView(foldedPreview)
+
+ val unfoldedPreview = inflater.inflate(R.layout.wallpaper_preview_small, null)
+ unfoldedPreview.id = FoldableDisplay.UNFOLDED.getViewId()
+ addView(unfoldedPreview)
+ }
+
+ /**
+ * This measures the desired size of the preview views for both of foldable device's displays.
+ * Each preview view respects the aspect ratio of the display it corresponds to while trying to
+ * have the maximum possible height.
+ */
+ override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec)
+
+ if (previewDisplaySizes == null) {
+ setMeasuredDimension(widthMeasureSpec, heightMeasureSpec)
+ return
+ }
+
+ // there are three spaces to consider
+ // the margin before the folded preview, the margin in between the folded and unfolded and
+ // the margin after the unfolded view
+ val totalMarginPixels =
+ context.resources.getDimension(R.dimen.small_preview_inter_preview_margin).toInt() * 3
+
+ // TODO: This only works for portrait mode currently, need to incorporate landscape
+ val parentWidth = this.measuredWidth - totalMarginPixels
+
+ getPreviewDisplaySize(FoldableDisplay.FOLDED)?.let { smallDisplaySize ->
+ getPreviewDisplaySize(FoldableDisplay.UNFOLDED)?.let { largeDisplaySize ->
+ // calculate the aspect ratio (ar) of the folded display
+ val smallDisplayAR = smallDisplaySize.x.toFloat() / smallDisplaySize.y
+
+ // calculate the aspect ratio of the unfolded display
+ val largeDisplayAR = largeDisplaySize.x.toFloat() / largeDisplaySize.y
+
+ val sizeMultiplier = parentWidth / (largeDisplayAR + smallDisplayAR)
+ val widthFolded = (sizeMultiplier * smallDisplayAR).toInt()
+ val heightFolded = (widthFolded / smallDisplayAR).toInt()
+
+ val widthUnfolded = (sizeMultiplier * largeDisplayAR).toInt()
+ val heightUnfolded = (widthUnfolded / largeDisplayAR).toInt()
+
+ val foldedView = getChildAt(0)
+ foldedView.measure(
+ MeasureSpec.makeMeasureSpec(
+ widthFolded,
+ MeasureSpec.EXACTLY,
+ ),
+ MeasureSpec.makeMeasureSpec(
+ heightFolded,
+ MeasureSpec.EXACTLY,
+ ),
+ )
+
+ val unfoldedView = getChildAt(1)
+ unfoldedView.measure(
+ MeasureSpec.makeMeasureSpec(
+ widthUnfolded,
+ MeasureSpec.EXACTLY,
+ ),
+ MeasureSpec.makeMeasureSpec(
+ heightUnfolded,
+ MeasureSpec.EXACTLY,
+ ),
+ )
+ }
+ }
+ }
+
+ override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
+ // margins
+ val marginPixels =
+ context.resources.getDimension(R.dimen.small_preview_inter_preview_margin).toInt()
+
+ // the handheld preview will be position first
+ val foldedView = getChildAt(0)
+ val foldedViewWidth = foldedView.measuredWidth
+ val foldedViewHeight = foldedView.measuredHeight
+ foldedView.layout(0 + marginPixels, 0, foldedViewWidth + marginPixels, foldedViewHeight)
+
+ // the unfolded view will be position after
+ val unfoldedView = getChildAt(1)
+ val unfoldedViewWidth = unfoldedView.measuredWidth
+ val unfoldedViewHeight = unfoldedView.measuredHeight
+ unfoldedView.layout(
+ foldedViewWidth + 2 * marginPixels,
+ 0,
+ unfoldedViewWidth + foldedViewWidth + 2 * marginPixels,
+ unfoldedViewHeight
+ )
+ }
+
+ fun setDisplaySizes(displaySizes: Map<FoldableDisplay, Point>) {
+ previewDisplaySizes = displaySizes
+ }
+
+ fun getPreviewDisplaySize(display: FoldableDisplay): Point? {
+ return previewDisplaySizes?.get(display)
+ }
+
+ companion object {
+ /** Defines children view ids for [DualDisplayAspectRatioLayout]. */
+ fun FoldableDisplay.getViewId(): Int {
+ return when (this) {
+ FoldableDisplay.FOLDED -> R.id.small_preview_folded_preview
+ FoldableDisplay.UNFOLDED -> R.id.small_preview_unfolded_preview
+ }
+ }
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/view/FullPreviewFrameLayout.kt b/src/com/android/wallpaper/picker/preview/ui/view/FullPreviewFrameLayout.kt
new file mode 100644
index 00000000..810bcc88
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/view/FullPreviewFrameLayout.kt
@@ -0,0 +1,76 @@
+/*
+ * 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.preview.ui.view
+
+import android.content.Context
+import android.graphics.Point
+import android.util.AttributeSet
+import android.widget.FrameLayout
+import com.android.wallpaper.picker.preview.ui.util.CropSizeUtil.findMaxRectWithRatioIn
+
+/**
+ * A [FrameLayout] that scales to largest possible on current display with the size preserving
+ * target display aspect ratio.
+ *
+ * Acts as [FrameLayout] if the current and target display size were not set by the time of
+ * [onMeasure].
+ */
+class FullPreviewFrameLayout(context: Context, attrs: AttributeSet? = null) :
+ FrameLayout(context, attrs) {
+
+ // Current display size represents the size of the currently used display. There is only one
+ // size for handheld and tablet devices, but there are 2 sizes for foldable devices.
+ private var currentDisplaySize: Point? = null
+
+ // Target display size represents the size of the display that a wallpaper aims to be set to.
+ private var targetDisplaySize: Point? = null
+
+ override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec)
+
+ val currentSize = currentDisplaySize
+ val targetSize = targetDisplaySize
+
+ if (currentSize == null || targetSize == null) {
+ setMeasuredDimension(widthMeasureSpec, heightMeasureSpec)
+ return
+ }
+
+ val maxRect = targetSize.findMaxRectWithRatioIn(currentSize)
+ val width = maxRect.x.toInt()
+ val height = maxRect.y.toInt()
+ setMeasuredDimension(width, height)
+ measureChildren(
+ MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
+ )
+ }
+
+ /**
+ * Sets the target display size and the current display size.
+ *
+ * The view size is maxed out within current display size while preserving the aspect ratio of
+ * the target display size. On a single display device the current display size is always the
+ * target display size.
+ *
+ * @param currentSize current display size used as the max bound of this view.
+ * @param targetSize target display size to get and preserve it's aspect ratio.
+ */
+ fun setCurrentAndTargetDisplaySize(currentSize: Point, targetSize: Point) {
+ currentDisplaySize = currentSize
+ targetDisplaySize = targetSize
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/view/PreviewActionFloatingSheet.kt b/src/com/android/wallpaper/picker/preview/ui/view/PreviewActionFloatingSheet.kt
new file mode 100644
index 00000000..f3513ba5
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/view/PreviewActionFloatingSheet.kt
@@ -0,0 +1,112 @@
+/*
+ * 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.preview.ui.view
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import android.widget.Button
+import android.widget.FrameLayout
+import android.widget.TextView
+import androidx.core.view.isVisible
+import com.android.wallpaper.R
+import com.android.wallpaper.util.SizeCalculator
+import com.google.android.material.bottomsheet.BottomSheetBehavior
+import com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback
+
+/**
+ * UI that hosts the content of the floating sheet dialog sliding from the bottom when a
+ * correspondent preview action is toggled on.
+ */
+class PreviewActionFloatingSheet(context: Context, attrs: AttributeSet?) :
+ FrameLayout(context, attrs) {
+
+ private val floatingSheetView: ViewGroup
+ private val floatingSheetContainer: ViewGroup
+ private val floatingSheetBehavior: BottomSheetBehavior<ViewGroup>
+
+ init {
+ LayoutInflater.from(context).inflate(R.layout.floating_sheet2, this, true)
+ floatingSheetView = requireViewById(R.id.floating_sheet_content)
+ SizeCalculator.adjustBackgroundCornerRadius(floatingSheetView)
+ floatingSheetContainer = requireViewById(R.id.floating_sheet_container)
+ floatingSheetBehavior = BottomSheetBehavior.from(floatingSheetContainer)
+ floatingSheetBehavior.state = BottomSheetBehavior.STATE_HIDDEN
+ }
+
+ fun setInformationContent(
+ attributions: List<String?>?,
+ onExploreButtonClicked: (() -> Unit)?,
+ ) {
+ val view = LayoutInflater.from(context).inflate(R.layout.wallpaper_info_view2, this, false)
+ val title: TextView = view.requireViewById(R.id.wallpaper_info_title)
+ val subtitle1: TextView = view.requireViewById(R.id.wallpaper_info_subtitle1)
+ val subtitle2: TextView = view.requireViewById(R.id.wallpaper_info_subtitle2)
+ val exploreButton: Button = view.requireViewById(R.id.wallpaper_info_explore_button)
+ attributions?.forEachIndexed { index, text ->
+ when (index) {
+ 0 -> {
+ if (!text.isNullOrEmpty()) {
+ title.text = text
+ title.isVisible = true
+ }
+ }
+ 1 -> {
+ if (!text.isNullOrEmpty()) {
+ subtitle1.text = text
+ subtitle1.isVisible = true
+ }
+ }
+ 2 -> {
+ if (!text.isNullOrEmpty()) {
+ subtitle2.text = text
+ subtitle2.isVisible = true
+ }
+ }
+ }
+ if (onExploreButtonClicked != null) {
+ exploreButton.isVisible = true
+ exploreButton.setOnClickListener { onExploreButtonClicked.invoke() }
+ }
+ }
+ floatingSheetView.removeAllViews()
+ floatingSheetView.addView(view)
+ }
+
+ fun expand() {
+ floatingSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED
+ }
+
+ fun collapse() {
+ floatingSheetBehavior.state = BottomSheetBehavior.STATE_HIDDEN
+ }
+
+ /**
+ * Adds Floating Sheet Callback to connected [BottomSheetBehavior].
+ *
+ * @param callback the callback for floating sheet state changes, has to be in the type of
+ * [BottomSheetBehavior.BottomSheetCallback] since the floating sheet behavior is currently
+ * based on [BottomSheetBehavior]
+ */
+ fun addFloatingSheetCallback(callback: BottomSheetCallback) {
+ floatingSheetBehavior.addBottomSheetCallback(callback)
+ }
+
+ fun removeFloatingSheetCallback(callback: BottomSheetCallback) {
+ floatingSheetBehavior.removeBottomSheetCallback(callback)
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/view/PreviewActionGroup.kt b/src/com/android/wallpaper/picker/preview/ui/view/PreviewActionGroup.kt
new file mode 100644
index 00000000..7966752c
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/view/PreviewActionGroup.kt
@@ -0,0 +1,130 @@
+/*
+ * 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.preview.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.ToggleButton
+import androidx.appcompat.content.res.AppCompatResources
+import androidx.core.view.isVisible
+import com.android.wallpaper.R
+import com.android.wallpaper.picker.preview.ui.viewmodel.Action
+
+/** Custom layout for a group of wallpaper preview actions. */
+class PreviewActionGroup(context: Context, attrs: AttributeSet?) : FrameLayout(context, attrs) {
+
+ private val informationButton: ToggleButton
+ private val downloadButton: FrameLayout
+ private val downloadButtonToggle: ToggleButton
+ private val downloadButtonProgress: FrameLayout
+ private val deleteButton: ToggleButton
+ private val editButton: ToggleButton
+ private val customizeButton: ToggleButton
+ private val effectsButton: ToggleButton
+ private val shareButton: ToggleButton
+
+ init {
+ LayoutInflater.from(context).inflate(R.layout.preview_action_group, this, true)
+ informationButton = requireViewById(R.id.information_button)
+ downloadButton = requireViewById(R.id.download_button)
+ downloadButtonToggle = requireViewById(R.id.download_button_toggle)
+ downloadButtonProgress = requireViewById(R.id.download_button_progress)
+ deleteButton = requireViewById(R.id.delete_button)
+ editButton = requireViewById(R.id.edit_button)
+ customizeButton = requireViewById(R.id.customize_button)
+ effectsButton = requireViewById(R.id.effects_button)
+ shareButton = requireViewById(R.id.share_button)
+ }
+
+ fun setIsChecked(action: Action, isChecked: Boolean) {
+ // Updates only when the view state is different from the input isChecked
+ if (getActionToggle(action).isChecked != isChecked) {
+ getActionToggle(action).isChecked = isChecked
+ }
+ }
+
+ fun setIsVisible(action: Action, isVisible: Boolean) {
+ getActionView(action).isVisible = isVisible
+ }
+
+ fun setClickListener(action: Action, listener: (() -> Unit)?) {
+ getActionToggle(action)
+ .setOnClickListener(
+ if (listener != null) {
+ { listener.invoke() }
+ } else null
+ )
+ }
+
+ private fun getActionView(action: Action): View {
+ return when (action) {
+ Action.INFORMATION -> informationButton
+ Action.DOWNLOAD -> downloadButton
+ Action.DELETE -> deleteButton
+ Action.EDIT -> editButton
+ Action.CUSTOMIZE -> customizeButton
+ Action.EFFECTS -> effectsButton
+ Action.SHARE -> shareButton
+ }
+ }
+
+ private fun getActionToggle(action: Action): ToggleButton {
+ return when (action) {
+ Action.INFORMATION -> informationButton
+ Action.DOWNLOAD -> downloadButtonToggle
+ Action.DELETE -> deleteButton
+ Action.EDIT -> editButton
+ Action.CUSTOMIZE -> customizeButton
+ Action.EFFECTS -> effectsButton
+ Action.SHARE -> shareButton
+ }
+ }
+
+ /** Update the background color in case the context theme has changed. */
+ fun updateBackgroundColor() {
+ val context = context ?: return
+ informationButton.foreground = null
+ downloadButtonToggle.foreground = null
+ downloadButtonProgress.background = null
+ deleteButton.foreground = null
+ editButton.foreground = null
+ customizeButton.foreground = null
+ effectsButton.foreground = null
+ shareButton.foreground = null
+ informationButton.foreground =
+ AppCompatResources.getDrawable(context, R.drawable.wallpaper_control_button_info)
+ downloadButtonToggle.foreground =
+ AppCompatResources.getDrawable(context, R.drawable.wallpaper_control_button_download)
+ downloadButtonProgress.background =
+ AppCompatResources.getDrawable(
+ context,
+ R.drawable.wallpaper_control_button_off_background
+ )
+ deleteButton.foreground =
+ AppCompatResources.getDrawable(context, R.drawable.wallpaper_control_button_delete)
+ editButton.foreground =
+ AppCompatResources.getDrawable(context, R.drawable.wallpaper_control_button_edit)
+ customizeButton.foreground =
+ AppCompatResources.getDrawable(context, R.drawable.wallpaper_control_button_customize)
+ effectsButton.foreground =
+ AppCompatResources.getDrawable(context, R.drawable.wallpaper_control_button_effect)
+ shareButton.foreground =
+ AppCompatResources.getDrawable(context, R.drawable.wallpaper_control_button_share)
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/view/SystemScaledWallpaperPreviewSurfaceView.kt b/src/com/android/wallpaper/picker/preview/ui/view/SystemScaledWallpaperPreviewSurfaceView.kt
new file mode 100644
index 00000000..78127dae
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/view/SystemScaledWallpaperPreviewSurfaceView.kt
@@ -0,0 +1,49 @@
+/*
+ * 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.preview.ui.view
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.SurfaceView
+import com.android.wallpaper.util.WallpaperCropUtils
+
+/**
+ * A [SurfaceView] for wallpaper preview that scales and centers the surface to simulate the actual
+ * wallpaper surface's default system zoom.
+ */
+class SystemScaledWallpaperPreviewSurfaceView(context: Context, attrs: AttributeSet? = null) :
+ SurfaceView(context, attrs) {
+ override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec)
+
+ val scale = WallpaperCropUtils.getSystemWallpaperMaximumScale(context)
+ setMeasuredDimension((measuredWidth * scale).toInt(), (measuredHeight * scale).toInt())
+ }
+
+ override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
+ // Calculate the size of wallpaper surface based on the system zoom
+ // and scale & center the wallpaper preview to respect the zoom.
+ val scale = WallpaperCropUtils.getSystemWallpaperMaximumScale(context)
+
+ val scaledWidth = (measuredWidth * scale).toInt()
+ val scaledHeight = (measuredHeight * scale).toInt()
+ val xCentered = (measuredWidth - scaledWidth) / 2
+ val yCentered = (measuredHeight - scaledHeight) / 2
+
+ x = xCentered.toFloat()
+ y = yCentered.toFloat()
+ }
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/viewmodel/FullResWallpaperViewModel.kt b/src/com/android/wallpaper/picker/preview/ui/viewmodel/FullResWallpaperViewModel.kt
index 68fa697c..1a921f06 100644
--- a/src/com/android/wallpaper/picker/preview/ui/viewmodel/FullResWallpaperViewModel.kt
+++ b/src/com/android/wallpaper/picker/preview/ui/viewmodel/FullResWallpaperViewModel.kt
@@ -17,9 +17,11 @@ package com.android.wallpaper.picker.preview.ui.viewmodel
import android.graphics.Bitmap
import android.graphics.Point
+import android.graphics.Rect
+import com.android.wallpaper.model.wallpaper.ScreenOrientation
data class FullResWallpaperViewModel(
val rawWallpaperBitmap: Bitmap,
val rawWallpaperSize: Point,
- val offsetToStart: Boolean,
+ val cropHints: Map<ScreenOrientation, Rect>?,
)
diff --git a/src/com/android/wallpaper/picker/preview/ui/viewmodel/PreviewActionsViewModel.kt b/src/com/android/wallpaper/picker/preview/ui/viewmodel/PreviewActionsViewModel.kt
new file mode 100644
index 00000000..baff8139
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/viewmodel/PreviewActionsViewModel.kt
@@ -0,0 +1,279 @@
+/*
+ * 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.preview.ui.viewmodel
+
+import com.android.wallpaper.model.wallpaper.WallpaperModel
+import com.android.wallpaper.picker.di.modules.MainDispatcher
+import com.android.wallpaper.picker.preview.domain.interactor.PreviewActionsInteractor
+import com.android.wallpaper.picker.preview.ui.viewmodel.Action.CUSTOMIZE
+import com.android.wallpaper.picker.preview.ui.viewmodel.Action.DELETE
+import com.android.wallpaper.picker.preview.ui.viewmodel.Action.DOWNLOAD
+import com.android.wallpaper.picker.preview.ui.viewmodel.Action.EDIT
+import com.android.wallpaper.picker.preview.ui.viewmodel.Action.EFFECTS
+import com.android.wallpaper.picker.preview.ui.viewmodel.Action.INFORMATION
+import com.android.wallpaper.picker.preview.ui.viewmodel.Action.SHARE
+import com.android.wallpaper.picker.preview.ui.viewmodel.floatingSheet.InformationFloatingSheetViewModel
+import dagger.hilt.android.scopes.ViewModelScoped
+import javax.inject.Inject
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.asStateFlow
+import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.map
+
+/** View model for the preview action buttons */
+@ViewModelScoped
+class PreviewActionsViewModel
+@Inject
+constructor(
+ interactor: PreviewActionsInteractor,
+ @MainDispatcher private val scope: CoroutineScope,
+) {
+ private val _informationFloatingSheetViewModel: Flow<InformationFloatingSheetViewModel?> =
+ interactor.wallpaperModel.map { wallpaperModel ->
+ if (wallpaperModel == null || !wallpaperModel.shouldShowInformationFloatingSheet()) {
+ null
+ } else {
+ InformationFloatingSheetViewModel(
+ wallpaperModel.commonWallpaperData.attributions,
+ wallpaperModel.commonWallpaperData.exploreActionUrl,
+ )
+ }
+ }
+
+ /** Action's isVisible state */
+ val isInformationVisible: Flow<Boolean> = _informationFloatingSheetViewModel.map { it != null }
+
+ val isDownloadVisible: Flow<Boolean> =
+ interactor.wallpaperModel.map {
+ (it as? WallpaperModel.StaticWallpaperModel)?.downloadableWallpaperData != null
+ }
+
+ private val _isDeleteVisible: MutableStateFlow<Boolean> = MutableStateFlow(false)
+ val isDeleteVisible: Flow<Boolean> = _isDeleteVisible.asStateFlow()
+
+ private val _isEditVisible: MutableStateFlow<Boolean> = MutableStateFlow(false)
+ val isEditVisible: Flow<Boolean> = _isEditVisible.asStateFlow()
+
+ private val _isCustomizeVisible: MutableStateFlow<Boolean> = MutableStateFlow(false)
+ val isCustomizeVisible: Flow<Boolean> = _isCustomizeVisible.asStateFlow()
+
+ private val _isEffectsVisible: MutableStateFlow<Boolean> = MutableStateFlow(false)
+ val isEffectsVisible: Flow<Boolean> = _isEffectsVisible.asStateFlow()
+
+ private val _isShareVisible: MutableStateFlow<Boolean> = MutableStateFlow(false)
+ val isShareVisible: Flow<Boolean> = _isShareVisible.asStateFlow()
+
+ /** Action's isChecked state */
+ private val _isInformationChecked: MutableStateFlow<Boolean> = MutableStateFlow(false)
+ val isInformationChecked: Flow<Boolean> = _isInformationChecked.asStateFlow()
+
+ private val _isDownloadChecked: MutableStateFlow<Boolean> = MutableStateFlow(false)
+ val isDownloadChecked: Flow<Boolean> = _isDownloadChecked.asStateFlow()
+
+ private val _isDeleteChecked: MutableStateFlow<Boolean> = MutableStateFlow(false)
+ val isDeleteChecked: Flow<Boolean> = _isDeleteChecked.asStateFlow()
+
+ private val _isEditChecked: MutableStateFlow<Boolean> = MutableStateFlow(false)
+ val isEditChecked: Flow<Boolean> = _isEditChecked.asStateFlow()
+
+ private val _isCustomizeChecked: MutableStateFlow<Boolean> = MutableStateFlow(false)
+ val isCustomizeChecked: Flow<Boolean> = _isCustomizeChecked.asStateFlow()
+
+ private val _isEffectsChecked: MutableStateFlow<Boolean> = MutableStateFlow(false)
+ val isEffectsChecked: Flow<Boolean> = _isEffectsChecked.asStateFlow()
+
+ private val _isShareChecked: MutableStateFlow<Boolean> = MutableStateFlow(false)
+ val isShareChecked: Flow<Boolean> = _isShareChecked.asStateFlow()
+
+ /**
+ * Floating sheet contents for the bottom sheet dialog. If content is null, the bottom sheet
+ * should collapse, otherwise, expended.
+ */
+ val informationFloatingSheetViewModel: Flow<InformationFloatingSheetViewModel?> =
+ combine(isInformationChecked, _informationFloatingSheetViewModel) { checked, viewModel ->
+ if (checked && viewModel != null) {
+ viewModel
+ } else {
+ null
+ }
+ }
+ .distinctUntilChanged()
+
+ /** Action listeners */
+ val onInformationClicked: Flow<(() -> Unit)?> =
+ combine(isInformationVisible, isInformationChecked) { show, isChecked ->
+ if (show) {
+ {
+ if (!isChecked) {
+ uncheckAllOthersExcept(INFORMATION)
+ }
+ _isInformationChecked.value = !isChecked
+ }
+ } else {
+ null
+ }
+ }
+
+ val onDownloadClicked: Flow<(() -> Unit)?> =
+ combine(isDownloadVisible, isDownloadChecked) { show, isChecked ->
+ if (show) {
+ {
+ if (!isChecked) {
+ uncheckAllOthersExcept(DOWNLOAD)
+ }
+ _isDownloadChecked.value = !isChecked
+ }
+ } else {
+ null
+ }
+ }
+
+ val onDeleteClicked: Flow<(() -> Unit)?> =
+ combine(isDeleteVisible, isDeleteChecked) { show, isChecked ->
+ if (show) {
+ {
+ if (!isChecked) {
+ uncheckAllOthersExcept(DELETE)
+ }
+ _isDeleteChecked.value = !isChecked
+ }
+ } else {
+ null
+ }
+ }
+
+ val onEditClicked: Flow<(() -> Unit)?> =
+ combine(isEditVisible, isEditChecked) { show, isChecked ->
+ if (show) {
+ {
+ if (!isChecked) {
+ uncheckAllOthersExcept(EDIT)
+ }
+ _isEditChecked.value = !isChecked
+ }
+ } else {
+ null
+ }
+ }
+
+ val onCustomizeClicked: Flow<(() -> Unit)?> =
+ combine(isCustomizeVisible, isCustomizeChecked) { show, isChecked ->
+ if (show) {
+ {
+ if (!isChecked) {
+ uncheckAllOthersExcept(CUSTOMIZE)
+ }
+ _isCustomizeChecked.value = !isChecked
+ }
+ } else {
+ null
+ }
+ }
+
+ val onEffectsClicked: Flow<(() -> Unit)?> =
+ combine(isEffectsVisible, isEffectsChecked) { show, isChecked ->
+ if (show) {
+ {
+ if (!isChecked) {
+ uncheckAllOthersExcept(EFFECTS)
+ }
+ _isEffectsChecked.value = !isChecked
+ }
+ } else {
+ null
+ }
+ }
+
+ val onShareClicked: Flow<(() -> Unit)?> =
+ combine(isShareVisible, isShareChecked) { show, isChecked ->
+ if (show) {
+ {
+ if (!isChecked) {
+ uncheckAllOthersExcept(SHARE)
+ }
+ _isShareChecked.value = !isChecked
+ }
+ } else {
+ null
+ }
+ }
+
+ private fun uncheckAllOthersExcept(action: Action) {
+ if (action != INFORMATION) {
+ _isInformationChecked.value = false
+ }
+ if (action != DOWNLOAD) {
+ _isDownloadChecked.value = false
+ }
+ if (action != DELETE) {
+ _isDeleteChecked.value = false
+ }
+ if (action != EDIT) {
+ _isEditChecked.value = false
+ }
+ if (action != CUSTOMIZE) {
+ _isCustomizeChecked.value = false
+ }
+ if (action != EFFECTS) {
+ _isEffectsChecked.value = false
+ }
+ if (action != SHARE) {
+ _isShareChecked.value = false
+ }
+ }
+
+ fun onDialogCollapsed() {
+ if (_isInformationChecked.value) {
+ _isInformationChecked.value = false
+ }
+ }
+
+ companion object {
+ private fun WallpaperModel.shouldShowInformationFloatingSheet(): Boolean {
+ return if (
+ commonWallpaperData.attributions.isNullOrEmpty() &&
+ commonWallpaperData.exploreActionUrl.isNullOrEmpty()
+ ) {
+ // If neither of the attributes nor the action url exists, do not show the
+ // information floating sheet.
+ false
+ } else if (
+ this is WallpaperModel.LiveWallpaperModel &&
+ !liveWallpaperData.systemWallpaperInfo.showMetadataInPreview
+ ) {
+ // If the live wallpaper's flag of showMetadataInPreview is false, do not show the
+ // information floating sheet.
+ false
+ } else {
+ true
+ }
+ }
+ }
+}
+
+enum class Action {
+ INFORMATION,
+ DOWNLOAD,
+ DELETE,
+ EDIT,
+ CUSTOMIZE,
+ EFFECTS,
+ SHARE,
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/viewmodel/StaticWallpaperPreviewViewModel.kt b/src/com/android/wallpaper/picker/preview/ui/viewmodel/StaticWallpaperPreviewViewModel.kt
index 47f8b08b..bf561882 100644
--- a/src/com/android/wallpaper/picker/preview/ui/viewmodel/StaticWallpaperPreviewViewModel.kt
+++ b/src/com/android/wallpaper/picker/preview/ui/viewmodel/StaticWallpaperPreviewViewModel.kt
@@ -21,101 +21,68 @@ import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.ColorSpace
import android.graphics.Point
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.viewModelScope
+import android.graphics.Rect
import com.android.wallpaper.asset.Asset
-import com.android.wallpaper.asset.CurrentWallpaperAssetVN
-import com.android.wallpaper.dispatchers.BackgroundDispatcher
-import com.android.wallpaper.model.WallpaperInfo
+import com.android.wallpaper.model.wallpaper.ScreenOrientation
+import com.android.wallpaper.model.wallpaper.WallpaperModel.StaticWallpaperModel
import com.android.wallpaper.module.WallpaperPreferences
+import com.android.wallpaper.picker.di.modules.BackgroundDispatcher
+import com.android.wallpaper.picker.preview.domain.interactor.WallpaperPreviewInteractor
import com.android.wallpaper.picker.preview.ui.WallpaperPreviewActivity
-import dagger.hilt.android.lifecycle.HiltViewModel
+import dagger.hilt.android.qualifiers.ApplicationContext
+import dagger.hilt.android.scopes.ViewModelScoped
import java.io.ByteArrayOutputStream
import javax.inject.Inject
import kotlinx.coroutines.CancellableContinuation
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.map
-import kotlinx.coroutines.flow.merge
-import kotlinx.coroutines.launch
import kotlinx.coroutines.suspendCancellableCoroutine
-/** Top level [ViewModel] for [WallpaperPreviewActivity] and its fragments */
-@HiltViewModel
+/** View model for static wallpaper preview used in [WallpaperPreviewActivity] and its fragments */
+@ViewModelScoped
class StaticWallpaperPreviewViewModel
@Inject
constructor(
+ interactor: WallpaperPreviewInteractor,
+ @ApplicationContext private val context: Context,
private val wallpaperPreferences: WallpaperPreferences,
@BackgroundDispatcher private val bgDispatcher: CoroutineDispatcher,
-) : ViewModel() {
+) {
+ /** The state of static wallpaper crop in full preview, before user confirmation. */
+ var fullPreviewCrop: Rect? = null
- private var initialized = false
+ private val _cropHints: MutableStateFlow<Map<ScreenOrientation, Rect>?> = MutableStateFlow(null)
- private val _lowResBitmap: MutableStateFlow<Bitmap?> = MutableStateFlow(null)
- val lowResBitmap: Flow<Bitmap> = _lowResBitmap.filterNotNull()
-
- private val _cachedWallpaperColors: MutableStateFlow<WallpaperColors?> = MutableStateFlow(null)
- private val croppedBitmap: MutableStateFlow<Bitmap?> = MutableStateFlow(null)
- val wallpaperColors: Flow<WallpaperColors> =
- merge(
- _cachedWallpaperColors.filterNotNull(),
- croppedBitmap
- .filterNotNull()
- .map { it.extractColors() }
- .filterNotNull()
- .flowOn(bgDispatcher),
- )
-
- // Wallpaper ID is required to cache the wallpaper colors to the preferences
- private var wallpaperId: String? = null
- private val wallpaperAsset: MutableStateFlow<Asset?> = MutableStateFlow(null)
- val subsamplingScaleImageViewModel: Flow<FullResWallpaperViewModel> =
- wallpaperAsset
+ private val staticWallpaperModel: Flow<StaticWallpaperModel> =
+ interactor.wallpaperModel.map { it as? StaticWallpaperModel }.filterNotNull()
+ val lowResBitmap: Flow<Bitmap> =
+ staticWallpaperModel
+ .map { it.staticWallpaperData.asset.getLowResBitmap(context) }
.filterNotNull()
- .map {
- val dimensions = it.decodeRawDimensions()
- val bitmap = it.decodeBitmap(dimensions)
- if (bitmap != null) {
- if (_cachedWallpaperColors.value == null && wallpaperId != null) {
- // If no cached colors from the preferences, extra colors from the original
- // bitmap and cache them to the preferences.
- val colors = bitmap.extractColors()
- _cachedWallpaperColors.value = colors
- wallpaperPreferences.storeWallpaperColors(wallpaperId, colors)
- }
- FullResWallpaperViewModel(
- bitmap,
- dimensions,
- offsetToStart = it is CurrentWallpaperAssetVN,
- )
- } else {
- null
+ .flowOn(bgDispatcher)
+ val subsamplingScaleImageViewModel: Flow<FullResWallpaperViewModel> =
+ staticWallpaperModel
+ .map { it.staticWallpaperData.asset }
+ .combine(_cropHints) { asset, cropHints ->
+ val dimensions = asset.decodeRawDimensions()
+ asset.decodeBitmap(dimensions)?.let { bitmap ->
+ FullResWallpaperViewModel(bitmap, dimensions, cropHints)
}
}
.filterNotNull()
.flowOn(bgDispatcher)
+ val wallpaperColors: Flow<WallpaperColors> =
+ staticWallpaperModel
+ .map { wallpaperPreferences.getWallpaperColors(it.commonWallpaperData.id.uniqueId) }
+ .filterNotNull()
- /**
- * Init function for setting the wallpaper info that is retrieved from the intent bundle when
- * onCreate() in Activity or Fragment.
- */
- fun initializeViewModel(context: Context, wallpaper: WallpaperInfo) {
- val appContext = context.applicationContext
- if (!initialized) {
- val asset: Asset? = wallpaper.getAsset(appContext)
- val id: String? = wallpaper.getStoredWallpaperId(appContext)
- wallpaperAsset.value = asset
- wallpaperId = id
- id?.let { wallpaperPreferences.getWallpaperColors(it) }
- ?.run { _cachedWallpaperColors.value = this }
- viewModelScope.launch(bgDispatcher) {
- _lowResBitmap.value = asset?.getLowResBitmap(appContext)
- }
- initialized = true
- }
+ fun updateCropHints(cropHints: Map<ScreenOrientation, Rect>) {
+ _cropHints.value = _cropHints.value?.plus(cropHints) ?: cropHints
}
// TODO b/296288298 Create a util class for Bitmap and Asset
diff --git a/src/com/android/wallpaper/picker/preview/ui/viewmodel/WallpaperPreviewConfigViewModel.kt b/src/com/android/wallpaper/picker/preview/ui/viewmodel/WallpaperPreviewConfigViewModel.kt
new file mode 100644
index 00000000..03c55974
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/viewmodel/WallpaperPreviewConfigViewModel.kt
@@ -0,0 +1,33 @@
+/*
+ * 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.preview.ui.viewmodel
+
+import android.graphics.Point
+import com.android.wallpaper.model.wallpaper.ScreenOrientation
+import com.android.wallpaper.module.CustomizationSections.Screen
+
+/** Configuration for a wallpaper preview. */
+data class WallpaperPreviewConfigViewModel(
+
+ /** The [Screen] the preview is rendering. */
+ val screen: Screen,
+
+ /** The display size the preview is based on. */
+ val displaySize: Point,
+
+ /** The [ScreenOrientation] the preview is based on. */
+ val screenOrientation: ScreenOrientation,
+)
diff --git a/src/com/android/wallpaper/picker/preview/ui/viewmodel/WallpaperPreviewViewModel.kt b/src/com/android/wallpaper/picker/preview/ui/viewmodel/WallpaperPreviewViewModel.kt
index c0610ca4..6ab61ffd 100644
--- a/src/com/android/wallpaper/picker/preview/ui/viewmodel/WallpaperPreviewViewModel.kt
+++ b/src/com/android/wallpaper/picker/preview/ui/viewmodel/WallpaperPreviewViewModel.kt
@@ -16,14 +16,141 @@
package com.android.wallpaper.picker.preview.ui.viewmodel
import androidx.lifecycle.ViewModel
-import com.android.wallpaper.model.WallpaperInfo
+import com.android.wallpaper.model.wallpaper.FoldableDisplay
+import com.android.wallpaper.model.wallpaper.ScreenOrientation
+import com.android.wallpaper.model.wallpaper.WallpaperModel
+import com.android.wallpaper.module.CustomizationSections.Screen
+import com.android.wallpaper.picker.di.modules.PreviewUtilsModule.HomeScreenPreviewUtils
+import com.android.wallpaper.picker.di.modules.PreviewUtilsModule.LockScreenPreviewUtils
+import com.android.wallpaper.picker.preview.domain.interactor.WallpaperPreviewInteractor
import com.android.wallpaper.picker.preview.ui.WallpaperPreviewActivity
+import com.android.wallpaper.util.DisplayUtils
+import com.android.wallpaper.util.PreviewUtils
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.filterNotNull
/** Top level [ViewModel] for [WallpaperPreviewActivity] and its fragments */
@HiltViewModel
-class WallpaperPreviewViewModel @Inject constructor() : ViewModel() {
- /** User selected [WallpaperInfo] for editing. */
- var editingWallpaper: WallpaperInfo? = null
+class WallpaperPreviewViewModel
+@Inject
+constructor(
+ interactor: WallpaperPreviewInteractor,
+ val staticWallpaperPreviewViewModel: StaticWallpaperPreviewViewModel,
+ val previewActionsViewModel: PreviewActionsViewModel,
+ private val displayUtils: DisplayUtils,
+ @HomeScreenPreviewUtils private val homePreviewUtils: PreviewUtils,
+ @LockScreenPreviewUtils private val lockPreviewUtils: PreviewUtils,
+) : ViewModel() {
+
+ val smallerDisplaySize = displayUtils.getRealSize(displayUtils.getSmallerDisplay())
+ val wallpaperDisplaySize = displayUtils.getRealSize(displayUtils.getWallpaperDisplay())
+
+ val wallpaper: Flow<WallpaperModel> = interactor.wallpaperModel
+
+ // This is only used for the full screen wallpaper preview.
+ private val fullWallpaperPreviewConfigViewModel:
+ MutableStateFlow<WallpaperPreviewConfigViewModel?> =
+ MutableStateFlow(null)
+
+ // This is only used for the full screen wallpaper preview.
+ val fullWallpaper: Flow<Pair<WallpaperModel, WallpaperPreviewConfigViewModel>> =
+ combine(wallpaper, fullWallpaperPreviewConfigViewModel.filterNotNull()) {
+ wallpaper,
+ previewViewModel ->
+ Pair(wallpaper, previewViewModel)
+ }
+
+ // This is only used for the full screen wallpaper preview.
+ private val _fullWorkspacePreviewConfigViewModel:
+ MutableStateFlow<WorkspacePreviewConfigViewModel?> =
+ MutableStateFlow(null)
+
+ // This is only used for the full screen wallpaper preview.
+ val fullWorkspacePreviewConfigViewModel: Flow<WorkspacePreviewConfigViewModel> =
+ _fullWorkspacePreviewConfigViewModel.filterNotNull()
+
+ val onCropButtonClick: Flow<() -> Unit> =
+ combine(wallpaper, fullWallpaperPreviewConfigViewModel.filterNotNull()) {
+ wallpaper,
+ previewViewModel ->
+ {
+ if (wallpaper is WallpaperModel.StaticWallpaperModel) {
+ staticWallpaperPreviewViewModel.fullPreviewCrop?.let {
+ staticWallpaperPreviewViewModel.updateCropHints(
+ mapOf(previewViewModel.screenOrientation to it)
+ )
+ }
+ }
+ }
+ }
+
+ fun getWorkspacePreviewConfig(
+ screen: Screen,
+ foldableDisplay: FoldableDisplay?,
+ ): WorkspacePreviewConfigViewModel {
+ val previewUtils =
+ when (screen) {
+ Screen.HOME_SCREEN -> {
+ homePreviewUtils
+ }
+ Screen.LOCK_SCREEN -> {
+ lockPreviewUtils
+ }
+ }
+ val displayId =
+ when (foldableDisplay) {
+ FoldableDisplay.FOLDED -> {
+ displayUtils.getSmallerDisplay().displayId
+ }
+ FoldableDisplay.UNFOLDED -> {
+ displayUtils.getWallpaperDisplay().displayId
+ }
+ null -> {
+ displayUtils.getWallpaperDisplay().displayId
+ }
+ }
+ return WorkspacePreviewConfigViewModel(
+ previewUtils = previewUtils,
+ displayId = displayId,
+ )
+ }
+
+ fun onSmallPreviewClicked(
+ screen: Screen,
+ orientation: ScreenOrientation,
+ foldableDisplay: FoldableDisplay?,
+ ) {
+ fullWallpaperPreviewConfigViewModel.value =
+ getWallpaperPreviewConfig(screen, orientation, foldableDisplay)
+ _fullWorkspacePreviewConfigViewModel.value =
+ getWorkspacePreviewConfig(screen, foldableDisplay)
+ }
+
+ private fun getWallpaperPreviewConfig(
+ screen: Screen,
+ orientation: ScreenOrientation,
+ foldableDisplay: FoldableDisplay?,
+ ): WallpaperPreviewConfigViewModel {
+ val displaySize =
+ when (foldableDisplay) {
+ FoldableDisplay.FOLDED -> {
+ smallerDisplaySize
+ }
+ FoldableDisplay.UNFOLDED -> {
+ wallpaperDisplaySize
+ }
+ null -> {
+ wallpaperDisplaySize
+ }
+ }
+ return WallpaperPreviewConfigViewModel(
+ screen = screen,
+ displaySize = displaySize,
+ screenOrientation = orientation,
+ )
+ }
}
diff --git a/src/com/android/wallpaper/picker/preview/ui/viewmodel/WorkspacePreviewConfigViewModel.kt b/src/com/android/wallpaper/picker/preview/ui/viewmodel/WorkspacePreviewConfigViewModel.kt
new file mode 100644
index 00000000..35f51117
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/viewmodel/WorkspacePreviewConfigViewModel.kt
@@ -0,0 +1,28 @@
+/*
+ * 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.preview.ui.viewmodel
+
+import com.android.wallpaper.util.PreviewUtils
+
+/** Defines configuration associated with a single workspace preview. */
+data class WorkspacePreviewConfigViewModel(
+
+ /** The preview utils for rendering the workspace preview, different for Home & Lock screens. */
+ val previewUtils: PreviewUtils,
+
+ /** The ID of the display to be rendered. */
+ val displayId: Int,
+)
diff --git a/src/com/android/wallpaper/picker/preview/ui/viewmodel/floatingSheet/InfoFloatingSheetViewModel.kt b/src/com/android/wallpaper/picker/preview/ui/viewmodel/floatingSheet/InfoFloatingSheetViewModel.kt
new file mode 100644
index 00000000..29fa2553
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/viewmodel/floatingSheet/InfoFloatingSheetViewModel.kt
@@ -0,0 +1,40 @@
+/*
+ * 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.preview.ui.viewmodel.floatingSheet
+
+import com.android.wallpaper.model.wallpaper.WallpaperModel
+
+/** This data class represents the view data for the info floating sheet */
+data class InfoFloatingSheetViewModel(
+ val actionUrl: String?,
+ val attributions: List<String?>?,
+ val showMetadata: Boolean
+) {
+
+ constructor(
+ wallpaperModel: WallpaperModel
+ ) : this(
+ actionUrl = wallpaperModel.commonWallpaperData.exploreActionUrl,
+ attributions = wallpaperModel.commonWallpaperData.attributions,
+ showMetadata =
+ if (wallpaperModel is WallpaperModel.LiveWallpaperModel) {
+ wallpaperModel.liveWallpaperData.systemWallpaperInfo.showMetadataInPreview
+ } else {
+ true
+ }
+ )
+}
diff --git a/src/com/android/wallpaper/picker/preview/ui/viewmodel/floatingSheet/InformationFloatingSheetViewModel.kt b/src/com/android/wallpaper/picker/preview/ui/viewmodel/floatingSheet/InformationFloatingSheetViewModel.kt
new file mode 100644
index 00000000..c14bd791
--- /dev/null
+++ b/src/com/android/wallpaper/picker/preview/ui/viewmodel/floatingSheet/InformationFloatingSheetViewModel.kt
@@ -0,0 +1,23 @@
+/*
+ * 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.preview.ui.viewmodel.floatingSheet
+
+/** This data class represents the view data for the info floating sheet */
+data class InformationFloatingSheetViewModel(
+ val attributions: List<String?>?,
+ val exploreActionUrl: String?,
+)
diff --git a/src/com/android/wallpaper/picker/undo/ui/viewmodel/UndoViewModel.kt b/src/com/android/wallpaper/picker/undo/ui/viewmodel/UndoViewModel.kt
index d6814ee2..2e295b54 100644
--- a/src/com/android/wallpaper/picker/undo/ui/viewmodel/UndoViewModel.kt
+++ b/src/com/android/wallpaper/picker/undo/ui/viewmodel/UndoViewModel.kt
@@ -18,6 +18,7 @@
package com.android.wallpaper.picker.undo.ui.viewmodel
import com.android.wallpaper.R
+import com.android.wallpaper.module.logging.UserEventLogger
import com.android.wallpaper.picker.common.button.ui.viewmodel.ButtonStyle
import com.android.wallpaper.picker.common.button.ui.viewmodel.ButtonViewModel
import com.android.wallpaper.picker.common.dialog.ui.viewmodel.DialogViewModel
@@ -31,6 +32,7 @@ import kotlinx.coroutines.flow.asStateFlow
/** Models the UI state of the undo system. */
class UndoViewModel(
private val interactor: UndoInteractor,
+ private val logger: UserEventLogger,
) {
/** Whether the "revert" button should be visible. */
val isRevertButtonVisible: Flow<Boolean> = interactor.isUndoable
@@ -63,6 +65,7 @@ class UndoViewModel(
style = ButtonStyle.Primary,
onClicked = {
interactor.revertAll()
+ logger.logResetApplied()
_dialog.value = null
},
),
diff --git a/src/com/android/wallpaper/util/DeletableUtils.kt b/src/com/android/wallpaper/util/DeletableUtils.kt
index 62656806..f892b096 100644
--- a/src/com/android/wallpaper/util/DeletableUtils.kt
+++ b/src/com/android/wallpaper/util/DeletableUtils.kt
@@ -17,6 +17,8 @@ package com.android.wallpaper.util
import android.app.WallpaperInfo
import android.app.WallpaperManager
+import android.app.WallpaperManager.FLAG_LOCK
+import android.app.WallpaperManager.FLAG_SYSTEM
import android.content.Context
import android.content.Intent
import android.content.pm.ApplicationInfo
@@ -58,7 +60,8 @@ object DeletableUtils {
}
private fun getDeleteAction(context: Context, wallpaperInfo: WallpaperInfo): String? {
- val currentInfo = WallpaperManager.getInstance(context).wallpaperInfo
+ val currentInfo = WallpaperManager.getInstance(context).getWallpaperInfo(FLAG_SYSTEM)
+ val currentLockInfo = WallpaperManager.getInstance(context).getWallpaperInfo(FLAG_LOCK)
val serviceInfo = wallpaperInfo.serviceInfo
val appInfo = serviceInfo.applicationInfo
val isPackagePreInstalled =
@@ -68,11 +71,19 @@ object DeletableUtils {
Log.d(TAG, "This wallpaper is not pre-installed: " + serviceInfo.name)
return null
}
- val currentService = currentInfo?.serviceInfo
+
// A currently set Live wallpaper should not be deleted.
+ val currentService = currentInfo?.serviceInfo
if (currentService != null && TextUtils.equals(serviceInfo.name, currentService.name)) {
return null
}
+ val currentLockService = currentLockInfo?.serviceInfo
+ if (
+ currentLockService != null &&
+ TextUtils.equals(serviceInfo.name, currentLockService.name)
+ ) {
+ return null
+ }
val metaData = serviceInfo.metaData
return metaData?.getString(LivePreviewFragment.KEY_ACTION_DELETE_LIVE_WALLPAPER)
}
diff --git a/src/com/android/wallpaper/util/DisplayUtils.kt b/src/com/android/wallpaper/util/DisplayUtils.kt
index 5c2b4e86..6ea533bb 100644
--- a/src/com/android/wallpaper/util/DisplayUtils.kt
+++ b/src/com/android/wallpaper/util/DisplayUtils.kt
@@ -30,6 +30,9 @@ import kotlin.math.min
/**
* Utility class to provide methods to find and obtain information about displays via {@link
* DisplayManager}
+ *
+ * Always pass [Context] or [Display] for the current display, instead of using the context in this
+ * class, which is fine for stateless info.
*/
class DisplayUtils(private val context: Context) {
companion object {
@@ -109,16 +112,30 @@ class DisplayUtils(private val context: Context) {
return activity.display?.uniqueId == getWallpaperDisplay().uniqueId
}
- private fun getRealArea(display: Display): Int {
+ /** Gets the real width and height of the display. */
+ fun getRealSize(display: Display): Point {
val displayInfo = DisplayInfo()
display.getDisplayInfo(displayInfo)
- return displayInfo.logicalHeight * displayInfo.logicalWidth
+ return Point(displayInfo.logicalWidth, displayInfo.logicalHeight)
}
- private fun getRealSize(display: Display): Point {
+ /**
+ * Returns the smallest display on a device
+ *
+ * For foldable devices, this method will return the outer display or the primary display when
+ * the device is folded. This is always the smallest display in foldable devices.
+ */
+ fun getSmallerDisplay(): Display {
+ val internalDisplays = getInternalDisplays()
+ var largestDisplay = getWallpaperDisplay()
+ val smallestDisplay = internalDisplays.firstOrNull() { it != largestDisplay }
+ return smallestDisplay ?: largestDisplay
+ }
+
+ private fun getRealArea(display: Display): Int {
val displayInfo = DisplayInfo()
display.getDisplayInfo(displayInfo)
- return Point(displayInfo.logicalWidth, displayInfo.logicalHeight)
+ return displayInfo.logicalHeight * displayInfo.logicalWidth
}
private fun getInternalDisplays(): List<Display> {
diff --git a/src/com/android/wallpaper/util/FullScreenAnimation.java b/src/com/android/wallpaper/util/FullScreenAnimation.java
deleted file mode 100644
index d1b19bbd..00000000
--- a/src/com/android/wallpaper/util/FullScreenAnimation.java
+++ /dev/null
@@ -1,512 +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.wallpaper.util;
-
-import android.animation.Animator;
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
-import android.animation.ValueAnimator;
-import android.content.res.TypedArray;
-import android.graphics.Insets;
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.view.Gravity;
-import android.view.SurfaceView;
-import android.view.View;
-import android.view.WindowInsets;
-import android.widget.Button;
-import android.widget.FrameLayout;
-import android.widget.ImageButton;
-import android.widget.TextView;
-import android.widget.Toolbar;
-
-import androidx.cardview.widget.CardView;
-
-import com.android.wallpaper.R;
-import com.android.wallpaper.picker.TouchForwardingLayout;
-
-/**
- * A class storing information about a preview fragment's full-screen layout.
- *
- * Used for {@code ImagePreviewFragment} and {@code LivePreviewFragment}.
- */
-public class FullScreenAnimation {
-
- private final View mView;
- private final TouchForwardingLayout mTouchForwardingLayout;
- private final SurfaceView mWorkspaceSurface;
- private boolean mIsFullScreen = false;
- private boolean mShowInFullScreen = false;
-
- private boolean mScaleIsSet = false;
- private boolean mWorkspaceVisibility = true;
- private float mOffsetY;
- private float mScale;
- private float mDefaultRadius;
- private int mWorkspaceWidth;
- private int mWorkspaceHeight;
- private float mBottomActionBarTranslation;
- private float mFullScreenButtonsTranslation;
- private int mStatusBarHeight;
- private int mNavigationBarHeight;
- private FullScreenStatusListener mFullScreenStatusListener;
-
- private static final float HIDE_ICONS_TOP_RATIO = 0.2f;
-
- private boolean mIsHomeSelected = true;
-
- /**
- * Options for the full-screen text color.
- *
- * {@code DEFAULT} represents the default text color.
- * {@code DARK} represents a text color that is dark, and should be used when the wallpaper
- * supports dark text.
- * {@code LIGHT} represents a text color that is light, and should be used when the wallpaper
- * does not support dark text.
- */
- public enum FullScreenTextColor {
- DEFAULT,
- DARK,
- LIGHT
- }
-
- FullScreenTextColor mFullScreenTextColor = FullScreenTextColor.DEFAULT;
- private int mCurrentTextColor;
-
- /** Callback for full screen status. */
- public interface FullScreenStatusListener {
- /** Gets called at animation end when full screen status gets changed. */
- void onFullScreenStatusChange(boolean isFullScreen);
- }
-
- /**
- * Constructor.
- *
- * @param view The view containing all relevant UI elements. Equal to {@code mRootView}.
- */
- public FullScreenAnimation(View view) {
- mView = view;
- mTouchForwardingLayout = view.findViewById(R.id.touch_forwarding_layout);
- mWorkspaceSurface = view.findViewById(R.id.workspace_surface);
- mCurrentTextColor = ResourceUtils.getColorAttr(
- view.getContext(),
- android.R.attr.textColorPrimary);
- }
-
- /**
- * Returns if the preview layout is currently in full screen.
- *
- * @return whether the preview layout is currently in full screen.
- */
- public boolean isFullScreen() {
- return mIsFullScreen;
- }
-
- /**
- * Informs this object whether the home tab is selected.
- *
- * Used to determine the visibility of {@code lock_screen_preview_container}.
- *
- * @param isHomeSelected whether the home tab is selected.
- */
- public void setIsHomeSelected(boolean isHomeSelected) {
- mIsHomeSelected = isHomeSelected;
- }
-
- /**
- * Informs this object whether the full screen is separate activity.
- *
- * Used to determine the height of workspace.
- *
- * @param isShowInFullScreen whether the full screen is separate activity.
- */
- public void setShowInFullScreen(boolean isShowInFullScreen) {
- mShowInFullScreen = isShowInFullScreen;
- }
-
- /**
- * Returns the height of status bar.
- *
- * @return height of status bar.
- */
- public int getStatusBarHeight() {
- return mStatusBarHeight;
- }
-
- private int getNavigationBarHeight() {
- return mNavigationBarHeight;
- }
-
- private int getAttributeDimension(int resId) {
- final TypedArray attributes = mView.getContext().getTheme().obtainStyledAttributes(
- new int[]{resId});
- int dimension = attributes.getDimensionPixelSize(0, 0);
- attributes.recycle();
- return dimension;
- }
-
- private void setViewMargins(int viewId, float marginTop, float marginBottom,
- boolean separatedTabs) {
- FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
- FrameLayout.LayoutParams.MATCH_PARENT,
- separatedTabs ? FrameLayout.LayoutParams.WRAP_CONTENT
- : FrameLayout.LayoutParams.MATCH_PARENT);
-
- layoutParams.setMargins(0, Math.round(marginTop), 0, Math.round(marginBottom));
-
- if (separatedTabs) {
- layoutParams.gravity = Gravity.BOTTOM;
- }
-
- mView.findViewById(viewId).setLayoutParams(layoutParams);
- }
-
- /** Sets a {@param listener} to listen full screen state changes. */
- public void setFullScreenStatusListener(FullScreenStatusListener listener) {
- mFullScreenStatusListener = listener;
- }
-
- /**
- * Informs the {@code FullScreenAnimation} object about the window insets of the current
- * window.
- *
- * Called by a {@code View.OnApplyWindowInsetsListener} defined in {@code PreviewFragment}.
- *
- * @param windowInsets the window insets of the current window.
- */
- public void setWindowInsets(WindowInsets windowInsets) {
- Insets insets = windowInsets.getInsetsIgnoringVisibility(
- WindowInsets.Type.systemBars()
- );
-
- mStatusBarHeight = insets.top;
- mNavigationBarHeight = insets.bottom;
- }
-
- /**
- * Place UI elements in the correct locations.
- *
- * Takes status bar and navigation bar into account.
- * @param view view is used to show preview fragment.
- */
- public void placeViews(View view) {
- // If is already full screen we do not do anything here.
- if (mIsFullScreen) {
- return;
- }
- if (mShowInFullScreen) {
- View container = view.findViewById(R.id.container);
- container.setPadding(0, 0, 0, 0);
- setViewMargins(R.id.screen_preview_layout, 0, 0, false);
- } else {
- setViewMargins(R.id.screen_preview_layout,
- (float) getStatusBarHeight() + mView.findViewById(
- R.id.preview_header).getPaddingBottom(),
- getNavigationBarHeight()
- + mView.getResources().getDimension(R.dimen.bottom_actions_height)
- + mView.getResources().getDimension(R.dimen.separated_tabs_height),
- false);
- }
- setViewMargins(R.id.bottom_action_bar_container,
- 0,
- getNavigationBarHeight(),
- false);
- setViewMargins(R.id.separated_tabs_container,
- 0,
- getNavigationBarHeight()
- + mView.getResources().getDimension(R.dimen.bottom_actions_height),
- true);
- ensureToolbarIsCorrectlyLocated();
- }
-
- /**
- * Ensures that the bottom action bar is in the correct location.
- *
- * Called by {@code onBottomActionBarReady}, so that the bottom action bar is correctly located
- * when it is redrawn.
- */
- public void ensureBottomActionBarIsCorrectlyLocated() {
- float targetTranslation = mIsFullScreen ? mBottomActionBarTranslation : 0;
- mView.findViewById(R.id.bottom_actionbar).setTranslationY(targetTranslation);
- }
-
- /**
- * Ensures that the toolbar is in the correct location.
- *
- * Called by {@code placeViews}, {@code ImageWallpaperColorThemePreviewFragment#updateToolBar},
- * and @{code LiveWallpaperColorThemePreviewFragment#updateToolBar}, so that the toolbar is
- * correctly located when it is redrawn.
- */
- public void ensureToolbarIsCorrectlyLocated() {
- FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
- FrameLayout.LayoutParams.MATCH_PARENT,
- FrameLayout.LayoutParams.MATCH_PARENT);
-
- layoutParams.setMargins(0, getStatusBarHeight(), 0, 0);
- mView.findViewById(R.id.section_header_container).setLayoutParams(layoutParams);
- }
-
- /**
- * Ensures that the text and the navigation button on the toolbar is given the correct color.
- *
- * Called by {@code updateToolBar}.
- */
- public void ensureToolbarIsCorrectlyColored() {
- TextView textView = mView.findViewById(R.id.custom_toolbar_title);
- if (textView != null) {
- textView.setTextColor(mCurrentTextColor);
- }
-
- Toolbar toolbar = mView.findViewById(R.id.toolbar);
- // It may be null because there's no back arrow in some cases. For example: no back arrow
- // for Photos launching case.
- ImageButton button = (ImageButton) toolbar.getNavigationView();
- if (button != null) {
- button.setColorFilter(mCurrentTextColor);
- }
- }
-
- /**
- * Sets the text color used for the "Preview" caption in full screen mode.
- *
- * @param fullScreenTextColor The desired color for the "Preview" caption in full screen mode.
- */
- public void setFullScreenTextColor(FullScreenTextColor fullScreenTextColor) {
- mFullScreenTextColor = fullScreenTextColor;
-
- animateColor(mIsFullScreen);
- }
-
- /**
- * Sets the visibility of the workspace surface (containing icons from the home screen) and
- * the elements unique to the lock screen (date and time).
- *
- * Called when the "Hide UI Preview" button is clicked.
- *
- * @param visible {@code true} if the icons should be shown;
- * {@code false} if they should be hidden.
- */
- public void setWorkspaceVisibility(boolean visible) {
- // Not using [setVisibility], because it creates a "jump".
- if (visible) {
- mWorkspaceSurface.setClipBounds(new Rect(
- 0,
- Math.round(mWorkspaceHeight * HIDE_ICONS_TOP_RATIO),
- mWorkspaceWidth,
- mShowInFullScreen ? mWorkspaceHeight : mWorkspaceHeight + Math.round(
- mFullScreenButtonsTranslation / mScale)));
- mView.findViewById(R.id.lock_screen_preview_container).setVisibility(View.VISIBLE);
- } else {
- mWorkspaceSurface.setClipBounds(new Rect(
- mWorkspaceWidth - 1,
- mWorkspaceHeight - 1,
- mWorkspaceWidth,
- mWorkspaceHeight));
- mView.findViewById(R.id.lock_screen_preview_container).setVisibility(View.INVISIBLE);
- }
- if (mIsHomeSelected) {
- mView.findViewById(R.id.lock_screen_preview_container).setVisibility(View.INVISIBLE);
- }
- mWorkspaceVisibility = visible;
- }
-
- /**
- * Returns the visibility of the workspace surface (containing icons from the home screen).
- *
- * @return the visibility of the workspace surface.
- */
- public boolean getWorkspaceVisibility() {
- return mWorkspaceVisibility;
- }
-
- private void animateColor(boolean toFullScreen) {
- TextView textView = mView.findViewById(R.id.custom_toolbar_title);
-
- int targetColor;
- if (!toFullScreen || mFullScreenTextColor == FullScreenTextColor.DEFAULT) {
- targetColor = ResourceUtils.getColorAttr(
- mView.getContext(),
- android.R.attr.textColorPrimary);
- } else if (mFullScreenTextColor == FullScreenTextColor.DARK) {
- targetColor = mView.getContext().getColor(android.R.color.black);
- } else {
- targetColor = mView.getContext().getColor(android.R.color.white);
- }
-
- if (targetColor == mCurrentTextColor) {
- return;
- }
-
- Toolbar toolbar = mView.findViewById(R.id.toolbar);
- ImageButton button = (ImageButton) toolbar.getNavigationView();
-
- ValueAnimator colorAnimator = ValueAnimator.ofArgb(mCurrentTextColor, targetColor);
- colorAnimator.addUpdateListener(animation -> {
- int color = (int) animation.getAnimatedValue();
- if (textView != null) {
- textView.setTextColor(color);
- }
- // It may be null because there's no back arrow in some cases. For example: no back
- // arrow for Photos launching case.
- if (button != null) {
- button.setColorFilter(color);
- }
- });
- colorAnimator.start();
-
- mCurrentTextColor = targetColor;
- }
-
- /**
- * Animates the layout to or from fullscreen.
- *
- * @param toFullScreen {@code true} if animating into the full screen layout;
- * {@code false} if animating out of the full screen layout.
- */
- public void startAnimation(boolean toFullScreen) {
- // If there is no need to animate, return.
- if (toFullScreen == mIsFullScreen) {
- return;
- }
-
- // If the scale is not set, compute the location and size of frame layout.
- if (!mScaleIsSet) {
- int[] loc = new int[2];
- mTouchForwardingLayout.getLocationInWindow(loc);
-
- ScreenSizeCalculator screenSizeCalculator = ScreenSizeCalculator.getInstance();
- Point screenSize = screenSizeCalculator.getScreenSize(mView.getDisplay());
- int screenWidth = screenSize.x;
- int screenHeight = screenSize.y;
-
- mOffsetY = (float) (screenHeight / 2.0
- - (loc[1] + mTouchForwardingLayout.getHeight() / 2.0));
-
- mScale = Math.max(
- screenWidth / (float) mTouchForwardingLayout.getWidth(),
- screenHeight / (float) mTouchForwardingLayout.getHeight());
-
- mDefaultRadius = ((CardView) mWorkspaceSurface.getParent()).getRadius();
-
- mWorkspaceSurface.setEnableSurfaceClipping(true);
-
- mWorkspaceWidth = mWorkspaceSurface.getWidth();
- mWorkspaceHeight = mWorkspaceSurface.getHeight();
-
- mBottomActionBarTranslation = getNavigationBarHeight()
- + mView.getResources().getDimension(R.dimen.bottom_actions_height)
- + mView.getResources().getDimension(R.dimen.separated_tabs_height);
-
- mFullScreenButtonsTranslation = -(getNavigationBarHeight()
- + mView.getResources().getDimension(
- R.dimen.fullscreen_preview_button_margin_bottom)
- + mView.getResources().getDimension(R.dimen.separated_tabs_height));
-
- mScaleIsSet = true;
- }
-
- // Perform animations.
-
- // Rounding animation.
- // Animated version of ((CardView) mWorkspaceSurface.getParent()).setRadius(0);
- float fromRadius = toFullScreen ? mDefaultRadius : 0f;
- float toRadius = toFullScreen ? 0f : mDefaultRadius;
-
- ValueAnimator animationRounding = ValueAnimator.ofFloat(fromRadius, toRadius);
- animationRounding.addUpdateListener(animation -> {
- ((CardView) mWorkspaceSurface.getParent()).setRadius(
- (float) animation.getAnimatedValue());
- });
-
- // Animation to hide some of the home screen icons.
- float fromTop = toFullScreen ? 0f : HIDE_ICONS_TOP_RATIO;
- float toTop = toFullScreen ? HIDE_ICONS_TOP_RATIO : 0f;
- float fromBottom = toFullScreen ? 0 : mFullScreenButtonsTranslation / mScale;
- float toBottom = toFullScreen ? mFullScreenButtonsTranslation / mScale : 0;
-
- ValueAnimator animationHide = ValueAnimator.ofFloat(0f, 1f);
- animationHide.addUpdateListener(animation -> {
- float t = (float) animation.getAnimatedValue();
- float top = fromTop + t * (toTop - fromTop);
- float bottom = fromBottom + t * (toBottom - fromBottom);
- mWorkspaceSurface.setClipBounds(new Rect(
- 0,
- Math.round(mWorkspaceHeight * top),
- mWorkspaceWidth,
- mShowInFullScreen ? mWorkspaceHeight : mWorkspaceHeight + Math.round(bottom)));
- });
-
- // Other animations.
- float scale = toFullScreen ? mScale : 1f;
- float offsetY = toFullScreen ? mOffsetY : 0f;
- float bottomActionBarTranslation = toFullScreen ? mBottomActionBarTranslation : 0;
- float fullScreenButtonsTranslation = toFullScreen ? mFullScreenButtonsTranslation : 0;
- View frameLayout = mView.findViewById(R.id.screen_preview_layout);
-
- AnimatorSet animatorSet = new AnimatorSet();
- animatorSet.playTogether(
- ObjectAnimator.ofFloat(frameLayout, "scaleX", scale),
- ObjectAnimator.ofFloat(frameLayout, "scaleY", scale),
- ObjectAnimator.ofFloat(frameLayout, "translationY", offsetY),
- ObjectAnimator.ofFloat(mView.findViewById(R.id.bottom_actionbar),
- "translationY", bottomActionBarTranslation),
- ObjectAnimator.ofFloat(mView.findViewById(R.id.separated_tabs_container),
- "translationY", bottomActionBarTranslation),
- ObjectAnimator.ofFloat(mView.findViewById(R.id.fullscreen_buttons_container),
- "translationY", fullScreenButtonsTranslation),
- animationRounding,
- animationHide
- );
- animatorSet.addListener(new Animator.AnimatorListener() {
- @Override
- public void onAnimationCancel(Animator animator) {}
-
- @Override
- public void onAnimationEnd(Animator animator) {
- if (mFullScreenStatusListener != null) {
- mFullScreenStatusListener.onFullScreenStatusChange(toFullScreen);
- }
- }
-
- @Override
- public void onAnimationRepeat(Animator animator) {}
-
- @Override
- public void onAnimationStart(Animator animator) {}
- });
- animatorSet.start();
-
- animateColor(toFullScreen);
-
- // Changes appearances of some elements.
- mWorkspaceVisibility = true;
-
- if (toFullScreen) {
- ((Button) mView.findViewById(R.id.hide_ui_preview_button)).setText(
- R.string.hide_ui_preview_text
- );
- }
-
- mView.findViewById(R.id.lock_screen_preview_container).setVisibility(View.VISIBLE);
- if (mIsHomeSelected) {
- mView.findViewById(R.id.lock_screen_preview_container)
- .setVisibility(View.INVISIBLE);
- }
-
- mIsFullScreen = toFullScreen;
- }
-}
diff --git a/src/com/android/wallpaper/util/LaunchSourceUtils.java b/src/com/android/wallpaper/util/LaunchSourceUtils.java
deleted file mode 100644
index 02981867..00000000
--- a/src/com/android/wallpaper/util/LaunchSourceUtils.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.android.wallpaper.util;
-
-/** Util class for launch source logging. */
-public final class LaunchSourceUtils {
- public static final String WALLPAPER_LAUNCH_SOURCE =
- "com.android.wallpaper.LAUNCH_SOURCE";
- public static final String LAUNCH_SOURCE_LAUNCHER = "app_launched_launcher";
- public static final String LAUNCH_SOURCE_SETTINGS = "app_launched_settings";
- public static final String LAUNCH_SOURCE_SUW = "app_launched_suw";
- public static final String LAUNCH_SOURCE_TIPS = "app_launched_tips";
- public static final String LAUNCH_SOURCE_DEEP_LINK = "app_launched_deeplink";
- public static final String LAUNCH_SETTINGS_SEARCH = ":settings:fragment_args_key";
- public static final String LAUNCH_SOURCE_SETTINGS_HOMEPAGE = "is_from_settings_homepage";
-}
diff --git a/src/com/android/wallpaper/util/LaunchSourceUtils.kt b/src/com/android/wallpaper/util/LaunchSourceUtils.kt
new file mode 100644
index 00000000..c1674487
--- /dev/null
+++ b/src/com/android/wallpaper/util/LaunchSourceUtils.kt
@@ -0,0 +1,31 @@
+/*
+ * 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.util
+
+/** Constants for launch source */
+object LaunchSourceUtils {
+ const val WALLPAPER_LAUNCH_SOURCE = "com.android.wallpaper.LAUNCH_SOURCE"
+ const val LAUNCH_SOURCE_LAUNCHER = "app_launched_launcher"
+ const val LAUNCH_SOURCE_SETTINGS = "app_launched_settings"
+ const val LAUNCH_SOURCE_SUW = "app_launched_suw"
+ const val LAUNCH_SOURCE_TIPS = "app_launched_tips"
+ const val LAUNCH_SOURCE_DEEP_LINK = "app_launched_deeplink"
+ const val LAUNCH_SETTINGS_SEARCH = ":settings:fragment_args_key"
+ const val LAUNCH_SOURCE_SETTINGS_HOMEPAGE = "is_from_settings_homepage"
+ const val LAUNCH_SOURCE_KEYGUARD = "app_launched_keyguard"
+}
diff --git a/src/com/android/wallpaper/util/SurfaceViewUtils.java b/src/com/android/wallpaper/util/SurfaceViewUtils.java
index 1b74f777..80dbfee4 100644
--- a/src/com/android/wallpaper/util/SurfaceViewUtils.java
+++ b/src/com/android/wallpaper/util/SurfaceViewUtils.java
@@ -28,7 +28,7 @@ public class SurfaceViewUtils {
private static final String KEY_HOST_TOKEN = "host_token";
private static final String KEY_VIEW_WIDTH = "width";
private static final String KEY_VIEW_HEIGHT = "height";
- private static final String KEY_DISPLAY_ID = "display_id";
+ public static final String KEY_DISPLAY_ID = "display_id";
private static final String KEY_SURFACE_PACKAGE = "surface_package";
private static final String KEY_CALLBACK = "callback";
diff --git a/src/com/android/wallpaper/util/WallpaperConnection.java b/src/com/android/wallpaper/util/WallpaperConnection.java
index b6017d30..d3150bb1 100644
--- a/src/com/android/wallpaper/util/WallpaperConnection.java
+++ b/src/com/android/wallpaper/util/WallpaperConnection.java
@@ -62,11 +62,10 @@ import java.util.List;
public class WallpaperConnection extends IWallpaperConnection.Stub implements ServiceConnection {
/**
- * Defines the different possible scenarios for which we need to dispatch a command
- * from picker to the wallpaper.
+ * Defines different possible scenarios for which we need to dispatch a command from picker to
+ * the wallpaper.
*/
-
- public enum WHICH_PREVIEW {
+ public enum WhichPreview {
/**
* Represents the case when we preview a currently applied wallpaper (home/lock) simply
* by tapping on it.
@@ -83,7 +82,7 @@ public class WallpaperConnection extends IWallpaperConnection.Stub implements Se
private final int mValue;
- WHICH_PREVIEW(int value) {
+ WhichPreview(int value) {
this.mValue = value;
}
@@ -120,7 +119,7 @@ public class WallpaperConnection extends IWallpaperConnection.Stub implements Se
private boolean mEngineReady;
private boolean mDestroyed;
private int mDestinationFlag;
- private WHICH_PREVIEW mWhichPreview;
+ private WhichPreview mWhichPreview;
/**
* @param intent used to bind the wallpaper service
@@ -130,7 +129,7 @@ public class WallpaperConnection extends IWallpaperConnection.Stub implements Se
*/
public WallpaperConnection(Intent intent, Context context,
@Nullable WallpaperConnectionListener listener, @NonNull SurfaceView containerView,
- WHICH_PREVIEW preview) {
+ WhichPreview preview) {
this(intent, context, listener, containerView, null, null,
preview);
}
@@ -150,7 +149,7 @@ public class WallpaperConnection extends IWallpaperConnection.Stub implements Se
@Nullable WallpaperConnectionListener listener, @NonNull SurfaceView containerView,
@Nullable SurfaceView secondaryContainerView,
@Nullable @WallpaperManager.SetWallpaperFlags Integer destinationFlag,
- WHICH_PREVIEW preview) {
+ WhichPreview preview) {
mContext = context.getApplicationContext();
mIntent = intent;
mListener = listener;
@@ -403,7 +402,7 @@ public class WallpaperConnection extends IWallpaperConnection.Stub implements Se
mService.attach(this, mContainerView.getWindowToken(),
LayoutParams.TYPE_APPLICATION_MEDIA, true, mContainerView.getWidth(),
mContainerView.getHeight(), new Rect(0, 0, 0, 0), displayId,
- mDestinationFlag);
+ mDestinationFlag, null);
}
} catch (RemoteException e) {
Log.w(TAG, "Failed attaching wallpaper; clearing", e);
diff --git a/src/com/android/wallpaper/util/converter/DefaultWallpaperModelFactory.kt b/src/com/android/wallpaper/util/converter/DefaultWallpaperModelFactory.kt
new file mode 100644
index 00000000..b5e2ae45
--- /dev/null
+++ b/src/com/android/wallpaper/util/converter/DefaultWallpaperModelFactory.kt
@@ -0,0 +1,56 @@
+/*
+ * Copyright 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.util.converter
+
+import android.content.Context
+import com.android.wallpaper.model.CreativeWallpaperInfo
+import com.android.wallpaper.model.ImageWallpaperInfo
+import com.android.wallpaper.model.LiveWallpaperInfo
+import com.android.wallpaper.model.WallpaperInfo
+import com.android.wallpaper.model.wallpaper.StaticWallpaperData
+import com.android.wallpaper.model.wallpaper.WallpaperModel
+import com.android.wallpaper.util.converter.WallpaperModelFactory.Companion.getCommonWallpaperData
+import com.android.wallpaper.util.converter.WallpaperModelFactory.Companion.getCreativeWallpaperData
+import com.android.wallpaper.util.converter.WallpaperModelFactory.Companion.getImageWallpaperData
+import com.android.wallpaper.util.converter.WallpaperModelFactory.Companion.getLiveWallpaperData
+import javax.inject.Inject
+import javax.inject.Singleton
+
+@Singleton
+class DefaultWallpaperModelFactory @Inject constructor() : WallpaperModelFactory {
+
+ override fun getWallpaperModel(context: Context, wallpaperInfo: WallpaperInfo): WallpaperModel {
+ return if (wallpaperInfo is LiveWallpaperInfo) {
+ WallpaperModel.LiveWallpaperModel(
+ commonWallpaperData = wallpaperInfo.getCommonWallpaperData(context),
+ liveWallpaperData = wallpaperInfo.getLiveWallpaperData(context),
+ creativeWallpaperData =
+ (wallpaperInfo as? CreativeWallpaperInfo)?.getCreativeWallpaperData(),
+ internalLiveWallpaperData = null,
+ )
+ } else {
+ WallpaperModel.StaticWallpaperModel(
+ commonWallpaperData = wallpaperInfo.getCommonWallpaperData(context),
+ staticWallpaperData = StaticWallpaperData(asset = wallpaperInfo.getAsset(context)),
+ imageWallpaperData =
+ (wallpaperInfo as? ImageWallpaperInfo)?.getImageWallpaperData(),
+ networkWallpaperData = null,
+ downloadableWallpaperData = null,
+ )
+ }
+ }
+}
diff --git a/src/com/android/wallpaper/util/converter/WallpaperModelFactory.kt b/src/com/android/wallpaper/util/converter/WallpaperModelFactory.kt
new file mode 100644
index 00000000..4c0927d9
--- /dev/null
+++ b/src/com/android/wallpaper/util/converter/WallpaperModelFactory.kt
@@ -0,0 +1,133 @@
+/*
+ * 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.util.converter
+
+import android.app.WallpaperManager
+import android.content.ComponentName
+import android.content.Context
+import android.util.Log
+import com.android.wallpaper.model.CreativeWallpaperInfo
+import com.android.wallpaper.model.CurrentWallpaperInfo
+import com.android.wallpaper.model.ImageWallpaperInfo
+import com.android.wallpaper.model.LiveWallpaperInfo
+import com.android.wallpaper.model.WallpaperInfo
+import com.android.wallpaper.model.wallpaper.ColorInfo
+import com.android.wallpaper.model.wallpaper.CommonWallpaperData
+import com.android.wallpaper.model.wallpaper.CreativeWallpaperData
+import com.android.wallpaper.model.wallpaper.Destination
+import com.android.wallpaper.model.wallpaper.ImageWallpaperData
+import com.android.wallpaper.model.wallpaper.LiveWallpaperData
+import com.android.wallpaper.model.wallpaper.WallpaperId
+import com.android.wallpaper.model.wallpaper.WallpaperModel
+
+/** This class creates an instance of [WallpaperModel] from a given [WallpaperInfo] object. */
+interface WallpaperModelFactory {
+
+ fun getWallpaperModel(context: Context, wallpaperInfo: WallpaperInfo): WallpaperModel
+
+ companion object {
+
+ const val STATIC_WALLPAPER_PACKAGE = "StaticWallpaperPackage"
+ const val STATIC_WALLPAPER_CLASS = "StaticWallpaperClass"
+
+ private const val TAG = "WallpaperModelFactory"
+ private const val UNKNOWN_COLLECTION_ID = "unknown_collection_id"
+
+ fun WallpaperInfo.getCommonWallpaperData(context: Context): CommonWallpaperData {
+ var wallpaperDestination = Destination.NOT_APPLIED
+ if (this is CurrentWallpaperInfo) {
+ wallpaperDestination =
+ when (wallpaperManagerFlag) {
+ WallpaperManager.FLAG_SYSTEM -> Destination.APPLIED_TO_SYSTEM
+ WallpaperManager.FLAG_LOCK -> Destination.APPLIED_TO_LOCK
+ WallpaperManager.FLAG_LOCK and WallpaperManager.FLAG_SYSTEM ->
+ Destination.APPLIED_TO_SYSTEM_LOCK
+ else -> {
+ Log.w(
+ TAG,
+ "Invalid value for wallpaperManagerFlag: $wallpaperManagerFlag"
+ )
+ Destination.NOT_APPLIED
+ }
+ }
+ }
+
+ // componentName is a valid value for liveWallpapers, for other types of wallpapers
+ // (which are static) we can have a constant value
+ val componentName =
+ if (this is LiveWallpaperInfo) {
+ wallpaperComponent.component
+ } else {
+ ComponentName(STATIC_WALLPAPER_PACKAGE, STATIC_WALLPAPER_CLASS)
+ }
+
+ val wallpaperId =
+ WallpaperId(
+ componentName = componentName,
+ uniqueId = wallpaperId,
+ // TODO(b/308800470): Figure out the use of collection ID
+ collectionId = getCollectionId(context) ?: UNKNOWN_COLLECTION_ID,
+ )
+
+ val colorInfoOfWallpaper =
+ ColorInfo(colorInfo.wallpaperColors, colorInfo.placeholderColor)
+
+ return CommonWallpaperData(
+ id = wallpaperId,
+ title = getTitle(context),
+ attributions = getAttributions(context),
+ exploreActionUrl = getActionUrl(context),
+ thumbAsset = getThumbAsset(context),
+ placeholderColorInfo = colorInfoOfWallpaper,
+ destination = wallpaperDestination,
+ )
+ }
+
+ fun LiveWallpaperInfo.getLiveWallpaperData(context: Context): LiveWallpaperData {
+ val groupNameOfWallpaper = (this as? CreativeWallpaperInfo)?.groupName ?: ""
+ val wallpaperManager = WallpaperManager.getInstance(context)
+ val currentHomeWallpaper =
+ wallpaperManager.getWallpaperInfo(WallpaperManager.FLAG_SYSTEM)
+ val currentLockWallpaper = wallpaperManager.getWallpaperInfo(WallpaperManager.FLAG_LOCK)
+ return LiveWallpaperData(
+ groupName = groupNameOfWallpaper,
+ systemWallpaperInfo = info,
+ isTitleVisible = isVisibleTitle,
+ isApplied = isApplied(currentHomeWallpaper, currentLockWallpaper),
+ effectNames = effectNames,
+ )
+ }
+
+ fun CreativeWallpaperInfo.getCreativeWallpaperData(): CreativeWallpaperData {
+ return CreativeWallpaperData(
+ configPreviewUri = configPreviewUri,
+ cleanPreviewUri = cleanPreviewUri,
+ deleteUri = deleteUri,
+ thumbnailUri = thumbnailUri,
+ shareUri = shareUri,
+ author = author ?: "",
+ description = description ?: "",
+ contentDescription = contentDescription,
+ isCurrent = isCurrent.toString() // Convert boolean to String
+ )
+ }
+
+ fun ImageWallpaperInfo.getImageWallpaperData(): ImageWallpaperData {
+ return ImageWallpaperData(uri)
+ }
+ }
+}
diff --git a/src/com/android/wallpaper/util/wallpaperconnection/WallpaperConnectionUtils.kt b/src/com/android/wallpaper/util/wallpaperconnection/WallpaperConnectionUtils.kt
new file mode 100644
index 00000000..69a8d063
--- /dev/null
+++ b/src/com/android/wallpaper/util/wallpaperconnection/WallpaperConnectionUtils.kt
@@ -0,0 +1,161 @@
+package com.android.wallpaper.util.wallpaperconnection
+
+import android.app.WallpaperInfo
+import android.content.Context
+import android.content.Intent
+import android.graphics.Matrix
+import android.graphics.Point
+import android.os.RemoteException
+import android.service.wallpaper.IWallpaperEngine
+import android.service.wallpaper.IWallpaperService
+import android.service.wallpaper.WallpaperService
+import android.util.Log
+import android.view.Display
+import android.view.SurfaceControl
+import android.view.SurfaceView
+import android.view.View
+import com.android.wallpaper.picker.di.modules.MainDispatcher
+import com.android.wallpaper.util.ScreenSizeCalculator
+import com.android.wallpaper.util.WallpaperConnection
+import kotlinx.coroutines.CancellableContinuation
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Deferred
+import kotlinx.coroutines.async
+import kotlinx.coroutines.suspendCancellableCoroutine
+import kotlinx.coroutines.sync.Mutex
+import kotlinx.coroutines.sync.withLock
+
+object WallpaperConnectionUtils {
+
+ private val engineMap = mutableMapOf<String, Deferred<IWallpaperEngine>>()
+ private val mutex = Mutex()
+
+ /** Only call this function when the surface view is attached. */
+ suspend fun connect(
+ context: Context,
+ @MainDispatcher mainScope: CoroutineScope,
+ wallpaperInfo: WallpaperInfo,
+ destinationFlag: Int,
+ surfaceView: SurfaceView,
+ ) {
+ val displayMetrics = getDisplayMetrics(surfaceView)
+ val engineKey = wallpaperInfo.getKey()
+
+ if (!engineMap.containsKey(engineKey)) {
+ mutex.withLock {
+ if (!engineMap.containsKey(engineKey)) {
+ engineMap[engineKey] =
+ mainScope.async {
+ initEngine(
+ context,
+ wallpaperInfo.getWallpaperIntent(),
+ displayMetrics,
+ destinationFlag,
+ surfaceView,
+ )
+ }
+ }
+ }
+ }
+
+ engineMap[engineKey]?.await()?.let { mirrorAndReparent(it, surfaceView, displayMetrics) }
+ }
+
+ private suspend fun initEngine(
+ context: Context,
+ wallpaperIntent: Intent,
+ displayMetrics: Point,
+ destinationFlag: Int,
+ surfaceView: SurfaceView
+ ): IWallpaperEngine {
+ // Bind service
+ val wallpaperService = bindService(context, wallpaperIntent)
+ // Attach wallpaper connection to service and get wallpaper engine
+ return WallpaperEngineConnection(displayMetrics)
+ .getEngine(wallpaperService, destinationFlag, surfaceView)
+ }
+
+ private fun WallpaperInfo.getWallpaperIntent(): Intent {
+ return Intent(WallpaperService.SERVICE_INTERFACE)
+ .setClassName(this.packageName, this.serviceName)
+ }
+
+ private fun WallpaperInfo.getKey(): String {
+ return this.packageName.plus(":").plus(this.serviceName)
+ }
+
+ private suspend fun bindService(context: Context, intent: Intent): IWallpaperService =
+ suspendCancellableCoroutine { k: CancellableContinuation<IWallpaperService> ->
+ val serviceConnection =
+ WallpaperServiceConnection(
+ object : WallpaperServiceConnection.WallpaperServiceConnectionListener {
+ override fun onWallpaperServiceConnected(
+ wallpaperService: IWallpaperService
+ ) {
+ k.resumeWith(Result.success(wallpaperService))
+ }
+ }
+ )
+ val success =
+ context.bindService(
+ intent,
+ serviceConnection,
+ Context.BIND_AUTO_CREATE or
+ Context.BIND_IMPORTANT or
+ Context.BIND_ALLOW_ACTIVITY_STARTS
+ )
+ if (!success) {
+ k.resumeWith(Result.failure(Exception("Fail to bind the live wallpaper service.")))
+ }
+ }
+
+ private fun mirrorAndReparent(
+ engine: IWallpaperEngine,
+ parentSurface: SurfaceView,
+ displayMetrics: Point
+ ) {
+ fun logError(e: Exception) {
+ Log.e(WallpaperConnection::class.simpleName, "Fail to reparent wallpaper surface", e)
+ }
+
+ try {
+ val parentSC = parentSurface.surfaceControl
+ val wallpaperMirrorSC = engine.mirrorSurfaceControl() ?: return
+ val values = getScale(parentSurface, displayMetrics)
+ SurfaceControl.Transaction().use { t ->
+ t.setMatrix(
+ wallpaperMirrorSC,
+ values[Matrix.MSCALE_X],
+ values[Matrix.MSKEW_Y],
+ values[Matrix.MSKEW_X],
+ values[Matrix.MSCALE_Y]
+ )
+ t.reparent(wallpaperMirrorSC, parentSC)
+ t.show(wallpaperMirrorSC)
+ t.apply()
+ }
+ } catch (e: RemoteException) {
+ logError(e)
+ } catch (e: NullPointerException) {
+ logError(e)
+ }
+ }
+
+ private fun getScale(parentSurface: SurfaceView, displayMetrics: Point): FloatArray {
+ val metrics = Matrix()
+ val values = FloatArray(9)
+ val surfacePosition = parentSurface.holder.surfaceFrame
+ metrics.postScale(
+ surfacePosition.width().toFloat() / displayMetrics.x,
+ surfacePosition.height().toFloat() / displayMetrics.y
+ )
+ metrics.getValues(values)
+ return values
+ }
+
+ private fun getDisplayMetrics(view: View): Point {
+ val screenSizeCalculator = ScreenSizeCalculator.getInstance()
+ val display: Display = view.display
+ return screenSizeCalculator.getScreenSize(display)
+ }
+}
diff --git a/src/com/android/wallpaper/util/wallpaperconnection/WallpaperEngineConnection.kt b/src/com/android/wallpaper/util/wallpaperconnection/WallpaperEngineConnection.kt
new file mode 100644
index 00000000..4c70b6ee
--- /dev/null
+++ b/src/com/android/wallpaper/util/wallpaperconnection/WallpaperEngineConnection.kt
@@ -0,0 +1,129 @@
+package com.android.wallpaper.util.wallpaperconnection
+
+import android.app.WallpaperColors
+import android.graphics.Point
+import android.graphics.Rect
+import android.graphics.RectF
+import android.os.IBinder
+import android.os.ParcelFileDescriptor
+import android.service.wallpaper.IWallpaperConnection
+import android.service.wallpaper.IWallpaperEngine
+import android.service.wallpaper.IWallpaperService
+import android.view.SurfaceView
+import android.view.WindowManager
+import java.lang.reflect.InvocationTargetException
+import java.lang.reflect.Method
+import kotlinx.coroutines.CancellableContinuation
+import kotlinx.coroutines.suspendCancellableCoroutine
+
+class WallpaperEngineConnection(
+ private val displayMetrics: Point,
+) : IWallpaperConnection.Stub() {
+
+ var engine: IWallpaperEngine? = null
+ private var engineContinuation: CancellableContinuation<IWallpaperEngine>? = null
+
+ suspend fun getEngine(
+ wallpaperService: IWallpaperService,
+ destinationFlag: Int,
+ surfaceView: SurfaceView,
+ ): IWallpaperEngine {
+ return engine
+ ?: suspendCancellableCoroutine { k: CancellableContinuation<IWallpaperEngine> ->
+ engineContinuation = k
+ attachEngineConnection(
+ wallpaperEngineConnection = this,
+ wallpaperService = wallpaperService,
+ destinationFlag = destinationFlag,
+ surfaceView = surfaceView,
+ )
+ }
+ }
+
+ override fun attachEngine(engine: IWallpaperEngine?, displayId: Int) {
+ engine?.apply {
+ resizePreview(Rect(0, 0, displayMetrics.x, displayMetrics.y))
+ requestWallpaperColors()
+ }
+ }
+
+ override fun engineShown(engine: IWallpaperEngine?) {
+ engine?.let { engineContinuation?.resumeWith(Result.success(it)) }
+ this.engine = engine
+ }
+
+ override fun onLocalWallpaperColorsChanged(
+ area: RectF?,
+ colors: WallpaperColors?,
+ displayId: Int
+ ) {
+ // Do nothing intended.
+ }
+
+ override fun onWallpaperColorsChanged(p0: WallpaperColors?, p1: Int) {
+ // Do nothing intended.
+ }
+
+ override fun setWallpaper(p0: String?): ParcelFileDescriptor {
+ TODO("Not yet implemented")
+ }
+
+ companion object {
+ /**
+ * Before Android U, [IWallpaperService.attach] has no input of destinationFlag. We do
+ * method reflection to probe if the service from the external app is using a pre-U API;
+ * otherwise, we use the new one.
+ */
+ private fun attachEngineConnection(
+ wallpaperEngineConnection: WallpaperEngineConnection,
+ wallpaperService: IWallpaperService,
+ destinationFlag: Int,
+ surfaceView: SurfaceView,
+ ) {
+ try {
+ val preUMethod: Method =
+ wallpaperService.javaClass.getMethod(
+ "attach",
+ IWallpaperConnection::class.java,
+ IBinder::class.java,
+ Int::class.javaPrimitiveType,
+ Boolean::class.javaPrimitiveType,
+ Int::class.javaPrimitiveType,
+ Int::class.javaPrimitiveType,
+ Rect::class.java,
+ Int::class.javaPrimitiveType
+ )
+ preUMethod.invoke(
+ wallpaperService,
+ wallpaperEngineConnection,
+ surfaceView.windowToken,
+ WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA,
+ true,
+ surfaceView.width,
+ surfaceView.height,
+ Rect(0, 0, 0, 0),
+ surfaceView.display.displayId
+ )
+ } catch (e: Exception) {
+ when (e) {
+ is NoSuchMethodException,
+ is InvocationTargetException,
+ is IllegalAccessException ->
+ wallpaperService.attach(
+ wallpaperEngineConnection,
+ surfaceView.windowToken,
+ WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA,
+ true,
+ surfaceView.width,
+ surfaceView.height,
+ Rect(0, 0, 0, 0),
+ surfaceView.display.displayId,
+ destinationFlag,
+ null,
+ )
+ else -> throw e
+ }
+ }
+ }
+ }
+}
diff --git a/src/com/android/wallpaper/util/wallpaperconnection/WallpaperServiceConnection.kt b/src/com/android/wallpaper/util/wallpaperconnection/WallpaperServiceConnection.kt
new file mode 100644
index 00000000..14f2bc8f
--- /dev/null
+++ b/src/com/android/wallpaper/util/wallpaperconnection/WallpaperServiceConnection.kt
@@ -0,0 +1,23 @@
+package com.android.wallpaper.util.wallpaperconnection
+
+import android.content.ComponentName
+import android.content.ServiceConnection
+import android.os.IBinder
+import android.service.wallpaper.IWallpaperService
+
+class WallpaperServiceConnection(val listener: WallpaperServiceConnectionListener) :
+ ServiceConnection {
+
+ override fun onServiceConnected(componentName: ComponentName?, service: IBinder?) {
+ listener.onWallpaperServiceConnected(IWallpaperService.Stub.asInterface(service))
+ }
+
+ override fun onServiceDisconnected(componentName: ComponentName?) {
+ // TODO b/300979155(giolin): Recycle resources when onServiceDisconnected
+ // Do nothing intended
+ }
+
+ interface WallpaperServiceConnectionListener {
+ fun onWallpaperServiceConnected(wallpaperService: IWallpaperService)
+ }
+}
diff --git a/src/com/android/wallpaper/widget/WallpaperControlButtonGroup.java b/src/com/android/wallpaper/widget/WallpaperControlButtonGroup.java
index c5c8f7ea..df504076 100644
--- a/src/com/android/wallpaper/widget/WallpaperControlButtonGroup.java
+++ b/src/com/android/wallpaper/widget/WallpaperControlButtonGroup.java
@@ -16,10 +16,12 @@
package com.android.wallpaper.widget;
import android.content.Context;
+import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.CompoundButton;
import android.widget.FrameLayout;
+import android.widget.LinearLayout;
import android.widget.ToggleButton;
import androidx.annotation.IntDef;
@@ -40,16 +42,7 @@ public final class WallpaperControlButtonGroup extends FrameLayout {
public static final int EFFECTS = 3;
public static final int INFORMATION = 4;
public static final int SHARE = 5;
-
- /**
- * Overlay tab
- */
- @IntDef({DELETE, EDIT, CUSTOMIZE, EFFECTS, SHARE, INFORMATION})
- public @interface WallpaperControlType {
- }
-
- final int[] mFloatingSheetControlButtonTypes = { CUSTOMIZE, EFFECTS, SHARE, INFORMATION };
-
+ final int[] mFloatingSheetControlButtonTypes = {CUSTOMIZE, EFFECTS, SHARE, INFORMATION};
ToggleButton mDeleteButton;
ToggleButton mEditButton;
ToggleButton mCustomizeButton;
@@ -58,11 +51,30 @@ public final class WallpaperControlButtonGroup extends FrameLayout {
ToggleButton mInformationButton;
/**
+ * The default orientation is vertical
+ */
+ private int mOrientation = LinearLayout.VERTICAL;
+
+ /**
* Constructor
*/
public WallpaperControlButtonGroup(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
- LayoutInflater.from(context).inflate(R.layout.wallpaper_control_button_group, this, true);
+ initAttributes(attrs);
+ LayoutInflater.from(context).inflate(R.layout.wallpaper_control_button_group, this,
+ true);
+ LinearLayout buttonGroupContainer = findViewById(R.id.wallpaper_control_container);
+ if (mOrientation == LinearLayout.HORIZONTAL) {
+ buttonGroupContainer.setOrientation(LinearLayout.HORIZONTAL);
+ buttonGroupContainer.setDividerDrawable(context.getDrawable(
+ R.drawable.wallpaper_control_button_group_divider_horizontal));
+ } else {
+ buttonGroupContainer.setOrientation(LinearLayout.VERTICAL);
+ buttonGroupContainer.setDividerDrawable(
+ context.getDrawable(
+ R.drawable.wallpaper_control_button_group_divider_vertical));
+ }
+
mDeleteButton = findViewById(R.id.delete_button);
mEditButton = findViewById(R.id.edit_button);
mCustomizeButton = findViewById(R.id.customize_button);
@@ -72,6 +84,22 @@ public final class WallpaperControlButtonGroup extends FrameLayout {
}
/**
+ * @param attrs sets the local attribute properties for [WallpaperControlButtonGroup]
+ */
+ private void initAttributes(AttributeSet attrs) {
+ if (attrs != null) {
+ TypedArray typeArray = getContext().obtainStyledAttributes(attrs,
+ R.styleable.WallpaperControlButtonGroup);
+
+ // default to vertical
+ mOrientation = typeArray.getInt(R.styleable.WallpaperControlButtonGroup_orientation,
+ LinearLayout.VERTICAL);
+
+ typeArray.recycle();
+ }
+ }
+
+ /**
* Show a button by giving a correspondent listener
*/
public void showButton(@WallpaperControlType int type,
@@ -175,4 +203,11 @@ public final class WallpaperControlButtonGroup extends FrameLayout {
getActionButton(type).setChecked(false);
}
}
+
+ /**
+ * Overlay tab
+ */
+ @IntDef({DELETE, EDIT, CUSTOMIZE, EFFECTS, SHARE, INFORMATION})
+ public @interface WallpaperControlType {
+ }
}
diff --git a/src/com/android/wallpaper/widget/floatingsheetcontent/WallpaperInfoContent.kt b/src/com/android/wallpaper/widget/floatingsheetcontent/WallpaperInfoContent.kt
index 611df546..980be4a4 100644
--- a/src/com/android/wallpaper/widget/floatingsheetcontent/WallpaperInfoContent.kt
+++ b/src/com/android/wallpaper/widget/floatingsheetcontent/WallpaperInfoContent.kt
@@ -62,11 +62,7 @@ class WallpaperInfoContent(private var context: Context, private val wallpaper:
private fun onExploreClicked() {
val injector = InjectorProvider.getInjector()
- val userEventLogger = injector.getUserEventLogger(context!!.applicationContext)
- userEventLogger.logActionClicked(
- wallpaper!!.getCollectionId(context),
- wallpaper.getActionLabelRes(context)
- )
+ injector.getUserEventLogger(context.applicationContext).logWallpaperExploreButtonClicked()
context.startActivity(exploreIntent)
}
diff --git a/src/com/android/wallpaper/widget/floatingsheetcontent/WallpaperInfoView.kt b/src/com/android/wallpaper/widget/floatingsheetcontent/WallpaperInfoView.kt
index fe88ea4e..94ef9781 100644
--- a/src/com/android/wallpaper/widget/floatingsheetcontent/WallpaperInfoView.kt
+++ b/src/com/android/wallpaper/widget/floatingsheetcontent/WallpaperInfoView.kt
@@ -24,6 +24,7 @@ import android.widget.LinearLayout
import android.widget.TextView
import com.android.wallpaper.R
import com.android.wallpaper.model.WallpaperInfo
+import com.android.wallpaper.picker.preview.ui.viewmodel.floatingSheet.InfoFloatingSheetViewModel
import java.util.concurrent.Executors
/** A view for displaying wallpaper info. */
@@ -50,8 +51,40 @@ class WallpaperInfoView(context: Context?, attrs: AttributeSet?) : LinearLayout(
shouldShowExploreButton: Boolean,
exploreButtonClickListener: OnClickListener?
) {
+ loadWallpaperInfoData(
+ wallpaperInfo.getAttributions(context),
+ actionLabel,
+ shouldShowExploreButton,
+ exploreButtonClickListener,
+ shouldShowMetadata(wallpaperInfo)
+ )
+ }
+
+ fun populateWallpaperInfo(
+ infoFloatingSheetViewModel: InfoFloatingSheetViewModel,
+ actionLabel: CharSequence?,
+ shouldShowExploreButton: Boolean,
+ exploreButtonClickListener: OnClickListener?,
+ ) {
+
+ loadWallpaperInfoData(
+ infoFloatingSheetViewModel.attributions,
+ actionLabel,
+ shouldShowExploreButton,
+ exploreButtonClickListener,
+ infoFloatingSheetViewModel.showMetadata
+ )
+ }
+
+ private fun loadWallpaperInfoData(
+ attributions: List<String?>?,
+ actionLabel: CharSequence?,
+ shouldShowExploreButton: Boolean,
+ exploreButtonClickListener: OnClickListener?,
+ shouldShowMetadata: Boolean,
+ ) {
+
executorService.execute {
- val attributions = wallpaperInfo.getAttributions(context)
Handler(Looper.getMainLooper()).post {
// Reset wallpaper information UI
@@ -63,15 +96,16 @@ class WallpaperInfoView(context: Context?, attrs: AttributeSet?) : LinearLayout(
exploreButton?.text = ""
exploreButton?.setOnClickListener(null)
exploreButton?.visibility = GONE
- if (attributions.size > 0 && attributions[0] != null) {
+
+ if (attributions != null && attributions.size > 0 && attributions[0] != null) {
title?.text = attributions[0]
}
- if (shouldShowMetadata(wallpaperInfo)) {
- if (attributions.size > 1 && attributions[1] != null) {
+ if (shouldShowMetadata) {
+ if (attributions != null && attributions.size > 1 && attributions[1] != null) {
subtitle1?.visibility = VISIBLE
subtitle1?.text = attributions[1]
}
- if (attributions.size > 2 && attributions[2] != null) {
+ if (attributions != null && attributions.size > 2 && attributions[2] != null) {
subtitle2?.visibility = VISIBLE
subtitle2?.text = attributions[2]
}
diff --git a/src/com/android/wallpaper/widget/floatingsheetcontent/WallpaperModelInfoContent.kt b/src/com/android/wallpaper/widget/floatingsheetcontent/WallpaperModelInfoContent.kt
new file mode 100644
index 00000000..3bc43074
--- /dev/null
+++ b/src/com/android/wallpaper/widget/floatingsheetcontent/WallpaperModelInfoContent.kt
@@ -0,0 +1,88 @@
+/*
+ * 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.widget.floatingsheetcontent
+
+import android.content.Context
+import android.content.Intent
+import com.android.wallpaper.R
+import com.android.wallpaper.module.InjectorProvider
+import com.android.wallpaper.picker.WallpaperInfoHelper
+import com.android.wallpaper.picker.preview.ui.viewmodel.floatingSheet.InfoFloatingSheetViewModel
+
+/**
+ * This class implements the bottom sheet which holds the wallpaper information for the selected
+ * wallpaper
+ */
+// TODO(b/310742193): implement this bottom sheet with the modern architecture
+class WallpaperModelInfoContent(
+ private var context: Context,
+ private val infoFloatingSheetViewModel: InfoFloatingSheetViewModel?
+) : FloatingSheetContent<WallpaperInfoView>(context) {
+
+ private var exploreIntent: Intent? = null
+ private var actionLabel: CharSequence? = null
+ private var wallpaperInfoView: WallpaperInfoView? = null
+
+ override val viewId: Int
+ get() = R.layout.floating_sheet_wallpaper_info_view
+
+ /** Gets called when the content view is created or recreated by [FloatingSheetContent] */
+ override fun onViewCreated(view: WallpaperInfoView) {
+ wallpaperInfoView = view
+ context = view.context
+ initializeWallpaperContent()
+ }
+
+ private fun initializeWallpaperContent() {
+ if (infoFloatingSheetViewModel == null) {
+ return
+ }
+ if (actionLabel == null) {
+ setUpExploreIntentAndLabel { populateWallpaperInfo(wallpaperInfoView) }
+ } else {
+ populateWallpaperInfo(wallpaperInfoView)
+ }
+ }
+
+ private fun setUpExploreIntentAndLabel(callback: Runnable?) {
+ WallpaperInfoHelper.loadExploreIntent(context, infoFloatingSheetViewModel?.actionUrl) {
+ actionLabel: CharSequence?,
+ exploreIntent: Intent? ->
+ this.actionLabel = actionLabel
+ this.exploreIntent = exploreIntent
+ callback?.run()
+ }
+ }
+
+ private fun onExploreClicked() {
+ val injector = InjectorProvider.getInjector()
+ injector.getUserEventLogger(context.applicationContext).logWallpaperExploreButtonClicked()
+ context.startActivity(exploreIntent)
+ }
+
+ private fun populateWallpaperInfo(view: WallpaperInfoView?) {
+ view?.let {
+ it.populateWallpaperInfo(
+ infoFloatingSheetViewModel!!,
+ actionLabel,
+ WallpaperInfoHelper.shouldShowExploreButton(context, exploreIntent)
+ ) {
+ onExploreClicked()
+ }
+ }
+ }
+}
diff --git a/src_override/com/android/wallpaper/module/AppModule.kt b/src_override/com/android/wallpaper/module/AppModule.kt
index dd3490db..f992b53e 100644
--- a/src_override/com/android/wallpaper/module/AppModule.kt
+++ b/src_override/com/android/wallpaper/module/AppModule.kt
@@ -16,6 +16,10 @@
package com.android.wallpaper.module
import android.content.Context
+import com.android.wallpaper.module.logging.NoOpUserEventLogger
+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
@@ -29,6 +33,12 @@ import javax.inject.Singleton
abstract class AppModule {
@Binds @Singleton abstract fun bindInjector(impl: WallpaperPicker2Injector): Injector
+ @Binds
+ @Singleton
+ abstract fun bindWallpaperModelFactory(
+ impl: DefaultWallpaperModelFactory
+ ): WallpaperModelFactory
+
companion object {
@Provides
@Singleton
@@ -37,5 +47,11 @@ abstract class AppModule {
): WallpaperPreferences {
return DefaultWallpaperPreferences(context)
}
+
+ @Provides
+ @Singleton
+ fun provideUserEventLogger(): UserEventLogger {
+ return NoOpUserEventLogger()
+ }
}
}
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..8d6f1440
--- /dev/null
+++ b/src_override/com/android/wallpaper/picker/di/modules/InteractorModule.kt
@@ -0,0 +1,36 @@
+/*
+ * 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 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 wallpaper picker. */
+@InstallIn(SingletonComponent::class)
+@Module
+internal object InteractorModule {
+
+ @Provides
+ @Singleton
+ fun provideWallpaperInteractor(wallpaperRepository: WallpaperRepository): WallpaperInteractor {
+ return WallpaperInteractor(wallpaperRepository)
+ }
+}
diff --git a/tests/Android.bp b/tests/Android.bp
index 83fb459c..9c681da2 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -31,19 +31,20 @@ filegroup {
"src/**/*.java",
"src/**/*.kt",
],
- exclude_srcs: [
- "src/com/android/wallpaper/testing/**/*.java",
- "src/com/android/wallpaper/testing/**/*.kt",
- ],
}
android_test {
name: "WallpaperPicker2Tests",
defaults: ["WallpaperPicker2_defaults"],
- srcs: [":WallpaperPicker2Tests_srcs"],
+ srcs: [
+ ":WallpaperPicker2Tests_srcs",
+ "module/src/com/android/wallpaper/TestModule.kt",
+ ],
+ exclude_srcs: [":WallpaperPicker2_src_prod"],
static_libs: [
"WallpaperPicker2TestLib",
+ "WallpaperPicker2TestRunner",
"androidx.test.espresso.core",
"androidx.test.espresso.contrib",
"androidx.test.espresso.intents",
@@ -51,8 +52,9 @@ android_test {
"androidx.test.rules",
"hamcrest-library",
"hamcrest",
+ "hilt_android",
+ "hilt_android_testing",
"mockito-target-minus-junit4",
- "ub-uiautomator",
"junit",
"kotlinx_coroutines_test",
"truth",
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index 94d279b1..e4a0a71b 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -30,7 +30,7 @@
</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 WallpaperPicker2" />
diff --git a/tests/AndroidTest.xml b/tests/AndroidTest.xml
index ae72b077..020bf8f6 100644
--- a/tests/AndroidTest.xml
+++ b/tests/AndroidTest.xml
@@ -22,7 +22,7 @@
<option name="test-tag" value="WallpaperPicker2Tests" />
<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 cee655f5..d087cbbc 100644
--- a/tests/common/Android.bp
+++ b/tests/common/Android.bp
@@ -25,8 +25,8 @@ android_library {
defaults: ["WallpaperPicker2_common_defaults"],
srcs: [
- "src/com/android/wallpaper/testing/**/*.java",
- "src/com/android/wallpaper/testing/**/*.kt",
+ "src/**/*.java",
+ "src/**/*.kt",
],
static_libs: [
"androidx.annotation_annotation",
diff --git a/tests/common/src/com/android/wallpaper/module/logging/TestUserEventLogger.kt b/tests/common/src/com/android/wallpaper/module/logging/TestUserEventLogger.kt
new file mode 100644
index 00000000..ed73009c
--- /dev/null
+++ b/tests/common/src/com/android/wallpaper/module/logging/TestUserEventLogger.kt
@@ -0,0 +1,63 @@
+/*
+ * 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.wallpaper.module.logging
+
+import android.content.Intent
+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 javax.inject.Inject
+import javax.inject.Singleton
+
+/** Test implementation of [UserEventLogger]. */
+@Singleton
+open class TestUserEventLogger @Inject constructor() : UserEventLogger {
+
+ val numWallpaperSetEvents = 0
+ var numWallpaperSetResultEvents = 0
+ private set
+
+ override fun logSnapshot() {}
+
+ override fun logAppLaunched(launchSource: Intent) {}
+
+ override fun logWallpaperApplied(
+ collectionId: String?,
+ wallpaperId: String?,
+ effects: String?,
+ @SetWallpaperEntryPoint setWallpaperEntryPoint: Int,
+ @WallpaperDestination destination: Int,
+ ) {}
+
+ override fun logEffectApply(
+ effect: String,
+ status: Int,
+ timeElapsedMillis: Long,
+ resultCode: Int
+ ) {}
+
+ override fun logEffectProbe(effect: String, @EffectStatus status: Int) {}
+
+ override fun logEffectForegroundDownload(
+ effect: String,
+ status: Int,
+ timeElapsedMillis: Long,
+ ) {}
+
+ override fun logResetApplied() {}
+
+ override fun logWallpaperExploreButtonClicked() {}
+}
diff --git a/tests/common/src/com/android/wallpaper/testing/FakeWallpaperClient.kt b/tests/common/src/com/android/wallpaper/testing/FakeWallpaperClient.kt
index f7c64ece..1daa9c59 100644
--- a/tests/common/src/com/android/wallpaper/testing/FakeWallpaperClient.kt
+++ b/tests/common/src/com/android/wallpaper/testing/FakeWallpaperClient.kt
@@ -18,6 +18,10 @@
package com.android.wallpaper.testing
import android.graphics.Bitmap
+import android.graphics.Rect
+import com.android.wallpaper.model.wallpaper.ScreenOrientation
+import com.android.wallpaper.model.wallpaper.WallpaperModel.StaticWallpaperModel
+import com.android.wallpaper.module.logging.UserEventLogger.SetWallpaperEntryPoint
import com.android.wallpaper.picker.customization.data.content.WallpaperClient
import com.android.wallpaper.picker.customization.shared.model.WallpaperDestination
import com.android.wallpaper.picker.customization.shared.model.WallpaperModel
@@ -77,13 +81,27 @@ class FakeWallpaperClient : WallpaperClient {
?: error("No wallpapers for screen $destination")
}
- override suspend fun setWallpaper(
+ override suspend fun setStaticWallpaper(
+ setWallpaperEntryPoint: Int,
+ destination: WallpaperDestination,
+ wallpaperModel: StaticWallpaperModel,
+ bitmap: Bitmap,
+ cropHints: Map<ScreenOrientation, Rect>,
+ onDone: () -> Unit
+ ) {
+ TODO("Not yet implemented")
+ }
+
+ override suspend fun setRecentWallpaper(
+ @SetWallpaperEntryPoint setWallpaperEntryPoint: Int,
destination: WallpaperDestination,
wallpaperId: String,
onDone: () -> Unit
) {
if (isPaused) {
- deferred.add { setWallpaper(destination, wallpaperId, onDone) }
+ deferred.add {
+ setRecentWallpaper(setWallpaperEntryPoint, destination, wallpaperId, onDone)
+ }
} else {
_recentWallpapers.value =
_recentWallpapers.value.toMutableMap().apply {
@@ -97,7 +115,10 @@ class FakeWallpaperClient : WallpaperClient {
}
}
- override suspend fun loadThumbnail(wallpaperId: String): Bitmap? {
+ override suspend fun loadThumbnail(
+ wallpaperId: String,
+ destination: WallpaperDestination
+ ): Bitmap? {
return Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888)
}
@@ -108,18 +129,9 @@ class FakeWallpaperClient : WallpaperClient {
companion object {
val INITIAL_RECENT_WALLPAPERS =
listOf(
- WallpaperModel(
- wallpaperId = "zero",
- placeholderColor = 0,
- ),
- WallpaperModel(
- wallpaperId = "one",
- placeholderColor = 1,
- ),
- WallpaperModel(
- wallpaperId = "two",
- placeholderColor = 2,
- ),
+ WallpaperModel(wallpaperId = "zero", placeholderColor = 0, title = "title1"),
+ WallpaperModel(wallpaperId = "one", placeholderColor = 1, title = "title2"),
+ WallpaperModel(wallpaperId = "two", placeholderColor = 2, title = "title3"),
)
}
}
diff --git a/tests/common/src/com/android/wallpaper/testing/TestCurrentWallpaperInfoFactory.java b/tests/common/src/com/android/wallpaper/testing/TestCurrentWallpaperInfoFactory.java
index 1473ddcd..1b05aeb0 100644
--- a/tests/common/src/com/android/wallpaper/testing/TestCurrentWallpaperInfoFactory.java
+++ b/tests/common/src/com/android/wallpaper/testing/TestCurrentWallpaperInfoFactory.java
@@ -37,8 +37,8 @@ public class TestCurrentWallpaperInfoFactory implements CurrentWallpaperInfoFact
}
@Override
- public void createCurrentWallpaperInfos(final WallpaperInfoCallback callback,
- boolean forceRefresh) {
+ public void createCurrentWallpaperInfos(Context context, boolean forceRefresh,
+ WallpaperInfoCallback callback) {
mRefresher.refresh((homeWallpaperMetadata, lockWallpaperMetadata, presentationMode) -> {
WallpaperInfo homeWallpaper = createTestWallpaperInfo(
diff --git a/tests/common/src/com/android/wallpaper/testing/TestCustomizationSections.kt b/tests/common/src/com/android/wallpaper/testing/TestCustomizationSections.kt
index 507186e8..08f10d41 100644
--- a/tests/common/src/com/android/wallpaper/testing/TestCustomizationSections.kt
+++ b/tests/common/src/com/android/wallpaper/testing/TestCustomizationSections.kt
@@ -6,10 +6,10 @@ import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.LifecycleOwner
import com.android.wallpaper.model.CustomizationSectionController
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.viewmodel.CustomizationPickerViewModel
import com.android.wallpaper.util.DisplayUtils
@@ -20,7 +20,7 @@ class TestCustomizationSections : CustomizationSections {
screen: CustomizationSections.Screen?,
activity: FragmentActivity?,
lifecycleOwner: LifecycleOwner?,
- wallpaperColorsViewModel: WallpaperColorsViewModel?,
+ wallpaperColorsRepository: WallpaperColorsRepository?,
permissionRequester: PermissionRequester?,
wallpaperPreviewNavigator: WallpaperPreviewNavigator?,
sectionNavigationController:
diff --git a/tests/common/src/com/android/wallpaper/testing/TestInjector.kt b/tests/common/src/com/android/wallpaper/testing/TestInjector.kt
index cb250456..704fa681 100644
--- a/tests/common/src/com/android/wallpaper/testing/TestInjector.kt
+++ b/tests/common/src/com/android/wallpaper/testing/TestInjector.kt
@@ -15,6 +15,7 @@
*/
package com.android.wallpaper.testing
+import android.app.WallpaperColors
import android.content.Context
import android.content.Intent
import android.net.Uri
@@ -22,12 +23,12 @@ import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.fragment.app.Fragment
import androidx.lifecycle.LifecycleOwner
+import com.android.customization.model.color.WallpaperColorResources
import com.android.systemui.shared.customization.data.content.CustomizationProviderClient
import com.android.wallpaper.config.BaseFlags
import com.android.wallpaper.effects.EffectsController
import com.android.wallpaper.model.CategoryProvider
import com.android.wallpaper.model.InlinePreviewIntentFactory
-import com.android.wallpaper.model.WallpaperColorsViewModel
import com.android.wallpaper.model.WallpaperInfo
import com.android.wallpaper.module.AlarmManagerWrapper
import com.android.wallpaper.module.BitmapCropper
@@ -42,12 +43,11 @@ import com.android.wallpaper.module.NetworkStatusNotifier
import com.android.wallpaper.module.PackageStatusNotifier
import com.android.wallpaper.module.PartnerProvider
import com.android.wallpaper.module.SystemFeatureChecker
-import com.android.wallpaper.module.UserEventLogger
import com.android.wallpaper.module.WallpaperPersister
import com.android.wallpaper.module.WallpaperPreferences
import com.android.wallpaper.module.WallpaperRefresher
-import com.android.wallpaper.module.WallpaperRotationRefresher
import com.android.wallpaper.module.WallpaperStatusChecker
+import com.android.wallpaper.module.logging.UserEventLogger
import com.android.wallpaper.monitor.PerformanceMonitor
import com.android.wallpaper.network.Requester
import com.android.wallpaper.picker.ImagePreviewFragment
@@ -55,6 +55,7 @@ import com.android.wallpaper.picker.MyPhotosStarter
import com.android.wallpaper.picker.PreviewActivity
import com.android.wallpaper.picker.PreviewFragment
import com.android.wallpaper.picker.ViewOnlyPreviewActivity
+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.customization.domain.interactor.WallpaperSnapshotRestorer
@@ -62,11 +63,15 @@ import com.android.wallpaper.picker.individual.IndividualPickerFragment
import com.android.wallpaper.picker.undo.data.repository.UndoRepository
import com.android.wallpaper.picker.undo.domain.interactor.UndoInteractor
import com.android.wallpaper.util.DisplayUtils
+import javax.inject.Inject
+import javax.inject.Singleton
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
/** Test implementation of [Injector] */
-open class TestInjector : Injector {
+@Singleton
+open class TestInjector @Inject constructor(private val userEventLogger: UserEventLogger) :
+ Injector {
private var appScope: CoroutineScope? = null
private var alarmManagerWrapper: AlarmManagerWrapper? = null
private var bitmapCropper: BitmapCropper? = null
@@ -81,17 +86,16 @@ open class TestInjector : Injector {
private var performanceMonitor: PerformanceMonitor? = null
private var requester: Requester? = null
private var systemFeatureChecker: SystemFeatureChecker? = null
- private var userEventLogger: UserEventLogger? = null
private var wallpaperPersister: WallpaperPersister? = null
- private var prefs: WallpaperPreferences? = null
+ @Inject lateinit var prefs: WallpaperPreferences
private var wallpaperRefresher: WallpaperRefresher? = null
- private var wallpaperRotationRefresher: WallpaperRotationRefresher? = null
private var wallpaperStatusChecker: WallpaperStatusChecker? = null
private var flags: BaseFlags? = null
private var undoInteractor: UndoInteractor? = null
private var wallpaperInteractor: WallpaperInteractor? = null
+ @Inject lateinit var injectedWallpaperInteractor: WallpaperInteractor
private var wallpaperSnapshotRestorer: WallpaperSnapshotRestorer? = null
- private var wallpaperColorsViewModel: WallpaperColorsViewModel? = null
+ private var wallpaperColorsRepository: WallpaperColorsRepository? = null
private var wallpaperClient: FakeWallpaperClient? = null
private var previewActivityIntentFactory: InlinePreviewIntentFactory? = null
private var viewOnlyPreviewActivityIntentFactory: InlinePreviewIntentFactory? = null
@@ -197,7 +201,7 @@ open class TestInjector : Injector {
return fragment
}
- override fun getRequester(unused: Context): Requester {
+ override fun getRequester(context: Context): Requester {
return requester ?: TestRequester().also { requester = it }
}
@@ -206,7 +210,7 @@ open class TestInjector : Injector {
}
override fun getUserEventLogger(context: Context): UserEventLogger {
- return userEventLogger ?: TestUserEventLogger().also { userEventLogger = it }
+ return userEventLogger
}
override fun getWallpaperPersister(context: Context): WallpaperPersister {
@@ -215,7 +219,7 @@ open class TestInjector : Injector {
}
override fun getPreferences(context: Context): WallpaperPreferences {
- return prefs ?: TestWallpaperPreferences().also { prefs = it }
+ return prefs
}
override fun getWallpaperRefresher(context: Context): WallpaperRefresher {
@@ -223,17 +227,6 @@ open class TestInjector : Injector {
?: TestWallpaperRefresher(context.applicationContext).also { wallpaperRefresher = it }
}
- override fun getWallpaperRotationRefresher(): WallpaperRotationRefresher {
- return wallpaperRotationRefresher
- ?: WallpaperRotationRefresher {
- context: Context?,
- listener: WallpaperRotationRefresher.Listener ->
- // Not implemented
- listener.onError()
- }
- .also { wallpaperRotationRefresher = it }
- }
-
override fun getWallpaperStatusChecker(context: Context): WallpaperStatusChecker {
return wallpaperStatusChecker
?: TestWallpaperStatusChecker().also { wallpaperStatusChecker = it }
@@ -272,6 +265,10 @@ open class TestInjector : Injector {
}
override fun getWallpaperInteractor(context: Context): WallpaperInteractor {
+ if (getFlags().isMultiCropEnabled() && getFlags().isMultiCropPreviewUiEnabled()) {
+ return injectedWallpaperInteractor
+ }
+
return wallpaperInteractor
?: WallpaperInteractor(
repository =
@@ -294,9 +291,16 @@ open class TestInjector : Injector {
.also { wallpaperSnapshotRestorer = it }
}
- override fun getWallpaperColorsViewModel(): WallpaperColorsViewModel {
- return wallpaperColorsViewModel
- ?: WallpaperColorsViewModel().also { wallpaperColorsViewModel = it }
+ override fun getWallpaperColorResources(
+ wallpaperColors: WallpaperColors,
+ context: Context
+ ): WallpaperColorResources {
+ return WallpaperColorResources(wallpaperColors)
+ }
+
+ override fun getWallpaperColorsRepository(): WallpaperColorsRepository {
+ return wallpaperColorsRepository
+ ?: WallpaperColorsRepository().also { wallpaperColorsRepository = it }
}
override fun getMyPhotosIntentProvider(): MyPhotosStarter.MyPhotosIntentProvider {
diff --git a/tests/common/src/com/android/wallpaper/testing/TestUserEventLogger.java b/tests/common/src/com/android/wallpaper/testing/TestUserEventLogger.java
deleted file mode 100644
index 8e1fff30..00000000
--- a/tests/common/src/com/android/wallpaper/testing/TestUserEventLogger.java
+++ /dev/null
@@ -1,316 +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.wallpaper.testing;
-
-import android.content.Intent;
-
-import com.android.wallpaper.module.UserEventLogger;
-
-/**
- * Test implementation of {@link UserEventLogger}.
- */
-public class TestUserEventLogger implements UserEventLogger {
-
- private int mNumDailyRefreshTurnedOnEvents;
- private int mNumCurrentWallpaperPreviewedEvents;
- private int mNumActionClickedEvents;
- private int mNumIndividualWallpaperSelectedEvents;
- private int mNumCategorySelectedEvents;
- private int mNumWallpaperSetEvents;
- private int mNumWallpaperSetResultEvents;
- private String mLastCollectionId;
- private String mLastWallpaperId;
- @WallpaperSetResult
- private int mLastWallpaperSetResult;
- private int mLastDailyRotationHour;
- private int mNum1DayActiveLogs;
- private int mNum7DayActiveLogs;
- private int mNum14DayActiveLogs;
- private int mNum28DayActiveLogs;
- private int mLastDailyWallpaperRotationStatus;
- private int mNumDaysDailyRotationFailed;
- private int mNumDaysDailyRotationNotAttempted;
- private int mLastDailyWallpaperUpdateResult;
- private int mStandalonePreviewLaunches;
- private int mNumRestores;
- private String mWallpaperSetEffects;
- private String mWallpaperApplyEffect;
- private int mWallpaperApplyEffectStatus;
- private long mTimeElapsedMillis;
- private int mResultCode;
- private String mWallpaperProbeEffect;
- private int mWallpaperProbeStatus;
-
- public TestUserEventLogger() {
- mLastDailyRotationHour = -1;
- mLastDailyWallpaperRotationStatus = -1;
- mNumDaysDailyRotationFailed = -1;
- mNumDaysDailyRotationNotAttempted = -1;
- }
-
- @Override
- public void logResumed(boolean provisioned, boolean wallpaper) {
-
- }
-
- @Override
- public void logStopped() {
-
- }
-
- @Override
- public void logAppLaunched(Intent launchSource) {
- // Do nothing.
- }
-
- @Override
- public void logDailyRefreshTurnedOn() {
- mNumDailyRefreshTurnedOnEvents++;
- }
-
- public int getNumDailyRefreshTurnedOnEvents() {
- return mNumDailyRefreshTurnedOnEvents;
- }
-
- @Override
- public void logCurrentWallpaperPreviewed() {
- mNumCurrentWallpaperPreviewedEvents++;
- }
-
- @Override
- public void logActionClicked(String collectionId, int actionLabelResId) {
- mNumActionClickedEvents++;
- mLastCollectionId = collectionId;
- }
-
- public int getNumCurrentWallpaperPreviewedEvents() {
- return mNumCurrentWallpaperPreviewedEvents;
- }
-
- public int getNumActionClickedEvents() {
- return mNumActionClickedEvents;
- }
-
- @Override
- public void logIndividualWallpaperSelected(String collectionId) {
- mNumIndividualWallpaperSelectedEvents++;
- mLastCollectionId = collectionId;
- }
-
- public int getNumIndividualWallpaperSelectedEvents() {
- return mNumIndividualWallpaperSelectedEvents;
- }
-
- @Override
- public void logCategorySelected(String collectionId) {
- mNumCategorySelectedEvents++;
- mLastCollectionId = collectionId;
- }
-
- @Override
- public void logSnapshot() {
- // No-op
- }
-
- public int getNumCategorySelectedEvents() {
- return mNumCategorySelectedEvents;
- }
-
- @Override
- public void logWallpaperSet(String collectionId, String wallpaperId, String effects) {
- mNumWallpaperSetEvents++;
- mLastCollectionId = collectionId;
- mLastWallpaperId = wallpaperId;
- mWallpaperSetEffects = effects;
- }
-
- @Override
- public void logWallpaperSetResult(@WallpaperSetResult int result) {
- mNumWallpaperSetResultEvents++;
- mLastWallpaperSetResult = result;
- }
-
- @Override
- public void logWallpaperSetFailureReason(@WallpaperSetFailureReason int reason) {
- // No-op
- }
-
-
- @Override
- public void logNumDailyWallpaperRotationsInLastWeek() {
- // No-op
- }
-
- @Override
- public void logNumDailyWallpaperRotationsPreviousDay() {
- // No-op
- }
-
- @Override
- public void logDailyWallpaperRotationHour(int hour) {
- mLastDailyRotationHour = hour;
- }
-
- @Override
- public void logDailyWallpaperDecodes(boolean decodes) {
- // No-op
- }
-
- @Override
- public void logRefreshDailyWallpaperButtonClicked() {
- // No-op
- }
-
- @Override
- public void logDailyWallpaperRotationStatus(int status) {
- mLastDailyWallpaperRotationStatus = status;
- }
-
- @Override
- public void logDailyWallpaperSetNextWallpaperResult(@DailyWallpaperUpdateResult int result) {
- mLastDailyWallpaperUpdateResult = result;
- }
-
- @Override
- public void logDailyWallpaperSetNextWallpaperCrash(@DailyWallpaperUpdateCrash int crash) {
- // No-op
- }
-
- @Override
- public void logNumDaysDailyRotationFailed(int days) {
- mNumDaysDailyRotationFailed = days;
- }
-
- @Override
- public void logDailyWallpaperMetadataRequestFailure(
- @DailyWallpaperMetadataFailureReason int reason) {
- // No-op
- }
-
- @Override
- public void logNumDaysDailyRotationNotAttempted(int days) {
- mNumDaysDailyRotationNotAttempted = days;
- }
-
- @Override
- public void logStandalonePreviewLaunched() {
- mStandalonePreviewLaunches++;
- }
-
- @Override
- public void logStandalonePreviewImageUriHasReadPermission(boolean isReadPermissionGranted) {
- // No-op
- }
-
- @Override
- public void logStandalonePreviewStorageDialogApproved(boolean isApproved) {
- // No-op
- }
-
- @Override
- public void logWallpaperPresentationMode() {
- // No-op
- }
-
- @Override
- public void logRestored() {
- mNumRestores++;
- }
-
- @Override
- public void logEffectApply(String effect, int status, long timeElapsedMillis, int resultCode) {
- mWallpaperApplyEffect = effect;
- mWallpaperApplyEffectStatus = status;
- mTimeElapsedMillis = timeElapsedMillis;
- mResultCode = resultCode;
- }
-
- @Override
- public void logEffectProbe(String effect, @EffectStatus int status) {
- mWallpaperProbeEffect = effect;
- mWallpaperProbeStatus = status;
- }
-
- @Override
- public void logEffectForegroundDownload(String effect, int status, long timeElapsedMillis) {
- // No-op
- }
-
- public int getNumWallpaperSetEvents() {
- return mNumWallpaperSetEvents;
- }
-
- public String getLastCollectionId() {
- return mLastCollectionId;
- }
-
- public String getLastWallpaperId() {
- return mLastWallpaperId;
- }
-
- public int getNumWallpaperSetResultEvents() {
- return mNumWallpaperSetResultEvents;
- }
-
- @WallpaperSetResult
- public int getLastWallpaperSetResult() {
- return mLastWallpaperSetResult;
- }
-
- public int getLastDailyRotationHour() {
- return mLastDailyRotationHour;
- }
-
- public int getNum1DayActiveLogs() {
- return mNum1DayActiveLogs;
- }
-
- public int getNum7DayActiveLogs() {
- return mNum7DayActiveLogs;
- }
-
- public int getNum14DayActiveLogs() {
- return mNum14DayActiveLogs;
- }
-
- public int getNum28DayActiveLogs() {
- return mNum28DayActiveLogs;
- }
-
- public int getLastDailyWallpaperRotationStatus() {
- return mLastDailyWallpaperRotationStatus;
- }
-
- public int getNumDaysDailyRotationFailed() {
- return mNumDaysDailyRotationFailed;
- }
-
- public int getNumDaysDailyRotationNotAttempted() {
- return mNumDaysDailyRotationNotAttempted;
- }
-
- public int getLastDailyWallpaperUpdateResult() {
- return mLastDailyWallpaperUpdateResult;
- }
-
- public int getStandalonePreviewLaunches() {
- return mStandalonePreviewLaunches;
- }
-
- public int getNumRestores() {
- return mNumRestores;
- }
-}
diff --git a/tests/common/src/com/android/wallpaper/testing/TestWallpaperPersister.java b/tests/common/src/com/android/wallpaper/testing/TestWallpaperPersister.java
index 574599e5..5c68366b 100644
--- a/tests/common/src/com/android/wallpaper/testing/TestWallpaperPersister.java
+++ b/tests/common/src/com/android/wallpaper/testing/TestWallpaperPersister.java
@@ -97,8 +97,7 @@ public class TestWallpaperPersister implements WallpaperPersister {
@Override
public boolean setWallpaperInRotation(Bitmap wallpaperBitmap, List<String> attributions,
- int actionLabelRes, int actionIconRes, String actionUrl, String collectionId,
- String remoteId) {
+ String actionUrl, String collectionId, String remoteId) {
if (mFailNextCall) {
return false;
}
@@ -122,8 +121,7 @@ public class TestWallpaperPersister implements WallpaperPersister {
@Override
public boolean finalizeWallpaperForNextRotation(List<String> attributions, String actionUrl,
- int actionLabelRes, int actionIconRes, String collectionId, int wallpaperId,
- String remoteId) {
+ String collectionId, int wallpaperId, String remoteId) {
mHomeAttributions = attributions;
mHomeActionUrl = actionUrl;
return true;
@@ -208,8 +206,7 @@ public class TestWallpaperPersister implements WallpaperPersister {
@Override
public boolean saveStaticWallpaperMetadata(List<String> attributions, String actionUrl,
- int actionLabelRes, int actionIconRes, String collectionId, int wallpaperId,
- String remoteId, @Destination int destination) {
+ String collectionId, int wallpaperId, String remoteId, @Destination int destination) {
return false;
}
diff --git a/tests/common/src/com/android/wallpaper/testing/TestWallpaperPreferences.java b/tests/common/src/com/android/wallpaper/testing/TestWallpaperPreferences.java
deleted file mode 100644
index 0db30d1f..00000000
--- a/tests/common/src/com/android/wallpaper/testing/TestWallpaperPreferences.java
+++ /dev/null
@@ -1,665 +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.wallpaper.testing;
-
-import static com.android.wallpaper.module.WallpaperPersister.DEST_BOTH;
-import static com.android.wallpaper.module.WallpaperPersister.DEST_HOME_SCREEN;
-import static com.android.wallpaper.module.WallpaperPersister.DEST_LOCK_SCREEN;
-
-import android.app.WallpaperColors;
-import android.graphics.Color;
-
-import androidx.annotation.Nullable;
-
-import com.android.wallpaper.model.StaticWallpaperMetadata;
-import com.android.wallpaper.module.WallpaperPersister.Destination;
-import com.android.wallpaper.module.WallpaperPreferences;
-
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.TimeZone;
-
-/**
- * Test implementation of the WallpaperPreferences interface. Just keeps prefs in memory.
- */
-public class TestWallpaperPreferences implements WallpaperPreferences {
-
- private int mAppLaunchCount;
- private int mFirstLaunchDate;
- private int mFirstWallpaperApplyDate;
- @PresentationMode
- private int mWallpaperPresentationMode;
-
- private List<String> mHomeScreenAttributions;
- private long mHomeScreenBitmapHashCode;
- private int mHomeWallpaperManagerId;
- private String mHomeScreenServiceName;
- private String mLockScreenServiceName;
- private String mHomeActionUrl;
- private String mHomeBaseImageUrl;
- private String mHomeCollectionId;
- private String mHomeWallpaperRemoteId;
- private String mHomeWallpaperRecentsKey;
-
- private List<String> mLockScreenAttributions;
- private long mLockScreenBitmapHashCode;
- private int mLockWallpaperManagerId;
- private String mLockActionUrl;
- private String mLockCollectionId;
- private String mLockWallpaperRemoteId;
- private String mLockWallpaperRecentsKey;
-
- private List<Long> mDailyRotations;
- private long mDailyWallpaperEnabledTimestamp;
- private long mLastDailyLogTimestamp;
- private long mLastAppActiveTimestamp;
- private int mLastDailyWallpaperRotationStatus;
- private long mLastDailyWallpaperRotationStatusTimestamp;
- private long mLastSyncTimestamp;
- @PendingWallpaperSetStatus
- private int mPendingWallpaperSetStatus;
- @PendingDailyWallpaperUpdateStatus
- private int mPendingDailyWallpaperUpdateStatus;
- private int mNumDaysDailyRotationFailed;
- private int mNumDaysDailyRotationNotAttempted;
- private int mHomeWallpaperActionLabelRes;
- private int mHomeWallpaperActionIconRes;
- private int mLockWallpaperActionLabelRes;
- private int mLockWallpaperActionIconRes;
- private String mHomeWallpaperEffects;
- private String mLockWallpaperEffects;
- private StaticWallpaperMetadata mHomeStaticWallpaperMetadata;
- private StaticWallpaperMetadata mLockStaticWallpaperMetadata;
- private HashMap<String, String> mWallStoredColor;
-
- public TestWallpaperPreferences() {
- mWallpaperPresentationMode = WallpaperPreferences.PRESENTATION_MODE_STATIC;
- mHomeScreenAttributions = Arrays.asList("Android wallpaper");
- mHomeScreenBitmapHashCode = 0;
- mHomeWallpaperManagerId = 0;
-
- mLockScreenAttributions = Arrays.asList("Android wallpaper");
- mLockScreenBitmapHashCode = 0;
- mLockWallpaperManagerId = 0;
-
- mDailyRotations = new ArrayList<>();
- mDailyWallpaperEnabledTimestamp = -1;
- mLastDailyLogTimestamp = -1;
- mLastDailyWallpaperRotationStatus = -1;
- mLastDailyWallpaperRotationStatusTimestamp = 0;
- mLastSyncTimestamp = 0;
- mPendingWallpaperSetStatus = WALLPAPER_SET_NOT_PENDING;
- mWallStoredColor = new HashMap<>();
- }
-
- @Override
- public int getWallpaperPresentationMode() {
- return mWallpaperPresentationMode;
- }
-
- @Override
- public void setWallpaperPresentationMode(@PresentationMode int presentationMode) {
- mWallpaperPresentationMode = presentationMode;
- }
-
- @Override
- public List<String> getHomeWallpaperAttributions() {
- return mHomeScreenAttributions;
- }
-
- @Override
- public void setHomeWallpaperAttributions(List<String> attributions) {
- mHomeScreenAttributions = attributions;
- }
-
- @Override
- public String getHomeWallpaperActionUrl() {
- return mHomeActionUrl;
- }
-
- @Override
- public void setHomeWallpaperActionUrl(String actionUrl) {
- mHomeActionUrl = actionUrl;
- }
-
- @Override
- public int getHomeWallpaperActionLabelRes() {
- return mHomeWallpaperActionLabelRes;
- }
-
- @Override
- public void setHomeWallpaperActionLabelRes(int resId) {
- mHomeWallpaperActionLabelRes = resId;
- }
-
- @Override
- public int getHomeWallpaperActionIconRes() {
- return mHomeWallpaperActionIconRes;
- }
-
- @Override
- public void setHomeWallpaperActionIconRes(int resId) {
- mHomeWallpaperActionIconRes = resId;
- }
-
- @Override
- public String getHomeWallpaperBaseImageUrl() {
- return mHomeBaseImageUrl;
- }
-
- @Override
- public void setHomeWallpaperBaseImageUrl(String baseImageUrl) {
- mHomeBaseImageUrl = baseImageUrl;
- }
-
- @Override
- public String getHomeWallpaperCollectionId() {
- return mHomeCollectionId;
- }
-
- @Override
- public void setHomeWallpaperCollectionId(String collectionId) {
- mHomeCollectionId = collectionId;
- }
-
- @Override
- public String getHomeWallpaperBackingFileName() {
- return null;
- }
-
- @Override
- public void setHomeWallpaperBackingFileName(String fileName) {
-
- }
-
- @Override
- public void clearHomeWallpaperMetadata() {
- mHomeScreenAttributions = null;
- mWallpaperPresentationMode = WallpaperPreferences.PRESENTATION_MODE_STATIC;
- mHomeScreenBitmapHashCode = 0;
- mHomeScreenServiceName = null;
- mHomeWallpaperManagerId = 0;
- }
-
- @Override
- public void setHomeStaticImageWallpaperMetadata(StaticWallpaperMetadata metadata) {
- mHomeStaticWallpaperMetadata = metadata;
- }
-
- @Override
- public long getHomeWallpaperHashCode() {
- return mHomeScreenBitmapHashCode;
- }
-
- @Override
- public void setHomeWallpaperHashCode(long hashCode) {
- mHomeScreenBitmapHashCode = hashCode;
- }
-
- @Override
- public String getHomeWallpaperServiceName() {
- return mHomeScreenServiceName;
- }
-
- @Override
- public void setHomeWallpaperServiceName(String serviceName) {
- mHomeScreenServiceName = serviceName;
- setFirstWallpaperApplyDateIfNeeded();
- }
-
- @Override
- public int getHomeWallpaperManagerId() {
- return mHomeWallpaperManagerId;
- }
-
- @Override
- public void setHomeWallpaperManagerId(int homeWallpaperId) {
- mHomeWallpaperManagerId = homeWallpaperId;
- }
-
- @Override
- public String getHomeWallpaperRemoteId() {
- return mHomeWallpaperRemoteId;
- }
-
- @Override
- public void setHomeWallpaperRemoteId(String wallpaperRemoteId) {
- mHomeWallpaperRemoteId = wallpaperRemoteId;
- setFirstWallpaperApplyDateIfNeeded();
- }
-
- @Override
- public String getHomeWallpaperRecentsKey() {
- return mHomeWallpaperRecentsKey;
- }
-
- @Override
- public void setHomeWallpaperRecentsKey(String recentsKey) {
- mHomeWallpaperRecentsKey = recentsKey;
- }
-
- @Override
- public String getHomeWallpaperEffects() {
- return mHomeWallpaperEffects;
- }
-
- @Override
- public void setHomeWallpaperEffects(String effects) {
- mHomeWallpaperEffects = effects;
- }
-
- @Override
- public List<String> getLockWallpaperAttributions() {
- return mLockScreenAttributions;
- }
-
- @Override
- public void setLockWallpaperAttributions(List<String> attributions) {
- mLockScreenAttributions = attributions;
- }
-
- @Override
- public String getLockWallpaperActionUrl() {
- return mLockActionUrl;
- }
-
- @Override
- public void setLockWallpaperActionUrl(String actionUrl) {
- mLockActionUrl = actionUrl;
- }
-
- @Override
- public int getLockWallpaperActionLabelRes() {
- return mLockWallpaperActionLabelRes;
- }
-
- @Override
- public void setLockWallpaperActionLabelRes(int resId) {
- mLockWallpaperActionLabelRes = resId;
- }
-
- @Override
- public int getLockWallpaperActionIconRes() {
- return mLockWallpaperActionIconRes;
- }
-
- @Override
- public void setLockWallpaperActionIconRes(int resId) {
- mLockWallpaperActionIconRes = resId;
- }
-
- @Override
- public String getLockWallpaperCollectionId() {
- return mLockCollectionId;
- }
-
- @Override
- public void setLockWallpaperCollectionId(String collectionId) {
- mLockCollectionId = collectionId;
- }
-
- @Override
- public String getLockWallpaperBackingFileName() {
- return null;
- }
-
- @Override
- public void setLockWallpaperBackingFileName(String fileName) {
-
- }
-
- @Override
- public void clearLockWallpaperMetadata() {
- mLockScreenAttributions = null;
- mLockScreenBitmapHashCode = 0;
- mLockWallpaperManagerId = 0;
- }
-
- @Override
- public void setLockStaticImageWallpaperMetadata(StaticWallpaperMetadata metadata) {
- mLockStaticWallpaperMetadata = metadata;
- }
-
- @Override
- public long getLockWallpaperHashCode() {
- return mLockScreenBitmapHashCode;
- }
-
- @Override
- public void setLockWallpaperHashCode(long hashCode) {
- mLockScreenBitmapHashCode = hashCode;
- }
-
- @Override
- public int getLockWallpaperManagerId() {
- return mLockWallpaperManagerId;
- }
-
- @Override
- public void setLockWallpaperManagerId(int lockWallpaperId) {
- mLockWallpaperManagerId = lockWallpaperId;
- }
-
- @Override
- public String getLockWallpaperRemoteId() {
- return mLockWallpaperRemoteId;
- }
-
- @Override
- public void setLockWallpaperRemoteId(String wallpaperRemoteId) {
- mLockWallpaperRemoteId = wallpaperRemoteId;
- setFirstWallpaperApplyDateIfNeeded();
- }
-
- @Override
- public String getLockWallpaperRecentsKey() {
- return mLockWallpaperRecentsKey;
- }
-
- @Override
- public void setLockWallpaperRecentsKey(String recentsKey) {
- mLockWallpaperRecentsKey = recentsKey;
- }
-
- @Override
- public String getLockWallpaperServiceName() {
- return mLockScreenServiceName;
- }
-
- @Override
- public void setLockWallpaperServiceName(String serviceName) {
- mLockScreenServiceName = serviceName;
- }
-
- @Override
- public String getLockWallpaperEffects() {
- return mLockWallpaperEffects;
- }
-
- @Override
- public void setLockWallpaperEffects(String wallpaperEffects) {
- mLockWallpaperEffects = wallpaperEffects;
- }
-
- @Override
- public void addDailyRotation(long timestamp) {
- mDailyRotations.add(timestamp);
- }
-
- @Override
- public long getLastDailyRotationTimestamp() {
- if (mDailyRotations.size() == 0) {
- return -1;
- }
-
- return mDailyRotations.get(mDailyRotations.size() - 1);
- }
-
- @Override
- public List<Long> getDailyRotationsInLastWeek() {
- return mDailyRotations;
- }
-
- @Nullable
- @Override
- public List<Long> getDailyRotationsPreviousDay() {
- return null;
- }
-
- @Override
- public long getDailyWallpaperEnabledTimestamp() {
- return mDailyWallpaperEnabledTimestamp;
- }
-
- @Override
- public void setDailyWallpaperEnabledTimestamp(long timestamp) {
- mDailyWallpaperEnabledTimestamp = timestamp;
- }
-
- @Override
- public void clearDailyRotations() {
- mDailyRotations.clear();
- }
-
- @Override
- public long getLastDailyLogTimestamp() {
- return mLastDailyLogTimestamp;
- }
-
- @Override
- public void setLastDailyLogTimestamp(long timestamp) {
- mLastDailyLogTimestamp = timestamp;
- }
-
- @Override
- public long getLastAppActiveTimestamp() {
- return mLastAppActiveTimestamp;
- }
-
- @Override
- public void setLastAppActiveTimestamp(long timestamp) {
- mLastAppActiveTimestamp = timestamp;
- }
-
- @Override
- public void setDailyWallpaperRotationStatus(int status, long timestamp) {
- mLastDailyWallpaperRotationStatus = status;
- mLastDailyWallpaperRotationStatusTimestamp = timestamp;
- }
-
- @Override
- public int getDailyWallpaperLastRotationStatus() {
- return mLastDailyWallpaperRotationStatus;
- }
-
- @Override
- public long getDailyWallpaperLastRotationStatusTimestamp() {
- return mLastDailyWallpaperRotationStatusTimestamp;
- }
-
- @Override
- public long getLastSyncTimestamp() {
- return mLastSyncTimestamp;
- }
-
- @Override
- public void setLastSyncTimestamp(long timestamp) {
- mLastSyncTimestamp = timestamp;
- }
-
- @Override
- public void setPendingWallpaperSetStatusSync(@PendingWallpaperSetStatus int setStatus) {
- mPendingWallpaperSetStatus = setStatus;
- }
-
- @Override
- public int getPendingWallpaperSetStatus() {
- return mPendingWallpaperSetStatus;
- }
-
- @Override
- public void setPendingWallpaperSetStatus(@PendingWallpaperSetStatus int setStatus) {
- mPendingWallpaperSetStatus = setStatus;
- }
-
- @Override
- public void setPendingDailyWallpaperUpdateStatusSync(
- @PendingDailyWallpaperUpdateStatus int updateStatus) {
- mPendingDailyWallpaperUpdateStatus = updateStatus;
- }
-
- @Override
- public int getPendingDailyWallpaperUpdateStatus() {
- return mPendingDailyWallpaperUpdateStatus;
- }
-
- @Override
- public void setPendingDailyWallpaperUpdateStatus(
- @PendingDailyWallpaperUpdateStatus int updateStatus) {
- mPendingDailyWallpaperUpdateStatus = updateStatus;
- }
-
- @Override
- public void incrementNumDaysDailyRotationFailed() {
- mNumDaysDailyRotationFailed++;
- }
-
- @Override
- public int getNumDaysDailyRotationFailed() {
- return mNumDaysDailyRotationFailed;
- }
-
- public void setNumDaysDailyRotationFailed(int days) {
- mNumDaysDailyRotationFailed = days;
- }
-
- @Override
- public void resetNumDaysDailyRotationFailed() {
- mNumDaysDailyRotationFailed = 0;
- }
-
- @Override
- public void incrementNumDaysDailyRotationNotAttempted() {
- mNumDaysDailyRotationNotAttempted++;
- }
-
- @Override
- public int getNumDaysDailyRotationNotAttempted() {
- return mNumDaysDailyRotationNotAttempted;
- }
-
- public void setNumDaysDailyRotationNotAttempted(int days) {
- mNumDaysDailyRotationNotAttempted = days;
- }
-
- @Override
- public void resetNumDaysDailyRotationNotAttempted() {
- mNumDaysDailyRotationNotAttempted = 0;
- }
-
-
- @Override
- public int getAppLaunchCount() {
- return mAppLaunchCount;
- }
-
- private void setAppLaunchCount(int count) {
- mAppLaunchCount = count;
- }
-
- @Override
- public int getFirstLaunchDateSinceSetup() {
- return mFirstLaunchDate;
- }
-
- private void setFirstLaunchDateSinceSetup(int firstLaunchDate) {
- mFirstLaunchDate = firstLaunchDate;
- }
-
- @Override
- public int getFirstWallpaperApplyDateSinceSetup() {
- return mFirstWallpaperApplyDate;
- }
-
- @Override
- public void storeWallpaperColors(String storedWallpaperId, WallpaperColors wallpaperColors) {
- Color primaryColor = wallpaperColors.getPrimaryColor();
- String value = new String(String.valueOf(primaryColor.toArgb()));
- Color secondaryColor = wallpaperColors.getSecondaryColor();
- if (secondaryColor != null) {
- value += "," + secondaryColor.toArgb();
- }
- Color tertiaryColor = wallpaperColors.getTertiaryColor();
- if (tertiaryColor != null) {
- value += "," + tertiaryColor.toArgb();
- }
- mWallStoredColor.put(storedWallpaperId, value);
- }
-
- @Override
- public WallpaperColors getWallpaperColors(String storedWallpaperId) {
- if (mWallStoredColor == null || mWallStoredColor.isEmpty()) {
- return null;
- }
- String value = mWallStoredColor.get(storedWallpaperId);
- if (value.equals("")) {
- return null;
- }
- String[] colorStrings = value.split(",");
- Color colorPrimary = Color.valueOf(Integer.parseInt(colorStrings[0]));
- Color colorSecondary = null;
- if (colorStrings.length >= 2) {
- colorSecondary = Color.valueOf(Integer.parseInt(colorStrings[1]));
- }
- Color colorTerTiary = null;
- if (colorStrings.length >= 3) {
- colorTerTiary = Color.valueOf(Integer.parseInt(colorStrings[2]));
- }
- return new WallpaperColors(colorPrimary, colorSecondary, colorTerTiary,
- WallpaperColors.HINT_FROM_BITMAP);
- }
-
- private void setFirstWallpaperApplyDateSinceSetup(int firstWallpaperApplyDate) {
- mFirstWallpaperApplyDate = firstWallpaperApplyDate;
- }
-
- @Override
- public void incrementAppLaunched() {
- if (getFirstLaunchDateSinceSetup() == 0) {
- setFirstLaunchDateSinceSetup(getCurrentDate());
- }
-
- int appLaunchCount = getAppLaunchCount();
- if (appLaunchCount < Integer.MAX_VALUE) {
- setAppLaunchCount(appLaunchCount + 1);
- }
- }
-
- private void setFirstWallpaperApplyDateIfNeeded() {
- if (getFirstWallpaperApplyDateSinceSetup() == 0) {
- setFirstWallpaperApplyDateSinceSetup(getCurrentDate());
- }
- }
-
- @Override
- public void updateDailyWallpaperSet(@Destination int destination, String collectionId,
- String wallpaperId) {
- // Assign wallpaper info by destination.
- if (destination == DEST_HOME_SCREEN) {
- setHomeWallpaperCollectionId(collectionId);
- setHomeWallpaperRemoteId(wallpaperId);
- } else if (destination == DEST_LOCK_SCREEN) {
- setLockWallpaperCollectionId(collectionId);
- setLockWallpaperRemoteId(wallpaperId);
- } else if (destination == DEST_BOTH) {
- setHomeWallpaperCollectionId(collectionId);
- setHomeWallpaperRemoteId(wallpaperId);
- setLockWallpaperCollectionId(collectionId);
- setLockWallpaperRemoteId(wallpaperId);
- }
- }
-
- private int getCurrentDate() {
- Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
- SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd", Locale.US);
- return Integer.parseInt(format.format(calendar.getTime()));
- }
-}
diff --git a/tests/common/src/com/android/wallpaper/testing/TestWallpaperPreferences.kt b/tests/common/src/com/android/wallpaper/testing/TestWallpaperPreferences.kt
new file mode 100644
index 00000000..d82c5548
--- /dev/null
+++ b/tests/common/src/com/android/wallpaper/testing/TestWallpaperPreferences.kt
@@ -0,0 +1,505 @@
+/*
+ * 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.wallpaper.testing
+
+import android.app.WallpaperColors
+import android.graphics.Bitmap
+import android.graphics.Color
+import android.graphics.Rect
+import com.android.wallpaper.model.LiveWallpaperInfo
+import com.android.wallpaper.model.StaticWallpaperMetadata
+import com.android.wallpaper.model.WallpaperInfo
+import com.android.wallpaper.model.wallpaper.ScreenOrientation
+import com.android.wallpaper.model.wallpaper.WallpaperModel
+import com.android.wallpaper.module.WallpaperPersister
+import com.android.wallpaper.module.WallpaperPreferences
+import com.android.wallpaper.module.WallpaperPreferences.PendingDailyWallpaperUpdateStatus
+import com.android.wallpaper.module.WallpaperPreferences.PendingWallpaperSetStatus
+import com.android.wallpaper.module.WallpaperPreferences.PresentationMode
+import com.android.wallpaper.picker.customization.shared.model.WallpaperDestination
+import com.google.common.collect.ImmutableMap
+import java.text.SimpleDateFormat
+import java.util.Calendar
+import java.util.Locale
+import java.util.TimeZone
+import javax.inject.Inject
+import javax.inject.Singleton
+
+/** Test implementation of the WallpaperPreferences interface. Just keeps prefs in memory. */
+@Singleton
+open class TestWallpaperPreferences @Inject constructor() : WallpaperPreferences {
+
+ private var appLaunchCount = 0
+ private var firstLaunchDate = 0
+ private var firstWallpaperApplyDate = 0
+ @PresentationMode private var wallpaperPresentationMode: Int
+ private var homeScreenAttributions: List<String?>?
+ private var homeScreenBitmapHashCode: Long = 0
+ private var homeWallpaperManagerId = 0
+ private var homeScreenServiceName: String? = null
+ private var lockScreenServiceName: String? = null
+ private var homeActionUrl: String? = null
+ private val homeBaseImageUrl: String? = null
+ private var homeCollectionId: String? = null
+ private var homeWallpaperRemoteId: String? = null
+ private var homeWallpaperRecentsKey: String? = null
+ private var lockScreenAttributions: List<String?>?
+ private var lockScreenBitmapHashCode: Long = 0
+ private var lockWallpaperManagerId = 0
+ private var lockActionUrl: String? = null
+ private var lockCollectionId: String? = null
+ private var lockWallpaperRemoteId: String? = null
+ private var lockWallpaperRecentsKey: String? = null
+ private val dailyRotations: MutableList<Long>
+ private var dailyWallpaperEnabledTimestamp: Long
+ private var lastDailyLogTimestamp: Long
+ private var lastAppActiveTimestamp: Long = 0
+ private var lastDailyWallpaperRotationStatus: Int
+ private var lastDailyWallpaperRotationStatusTimestamp: Long = 0
+ private val lastSyncTimestamp: Long = 0
+
+ @PendingWallpaperSetStatus private var mPendingWallpaperSetStatus: Int
+
+ @PendingDailyWallpaperUpdateStatus private var mPendingDailyWallpaperUpdateStatus = 0
+ private var mNumDaysDailyRotationFailed = 0
+ private var mNumDaysDailyRotationNotAttempted = 0
+ private var mHomeWallpaperEffects: String? = null
+ private var mLockWallpaperEffects: String? = null
+ private var mHomeStaticWallpaperMetadata: StaticWallpaperMetadata? = null
+ private var mLockStaticWallpaperMetadata: StaticWallpaperMetadata? = null
+ private val mWallStoredColor: HashMap<String, String> = HashMap()
+
+ private val wallpaperCropHints: MutableMap<ScreenOrientation, Rect?>
+
+ init {
+ wallpaperPresentationMode = WallpaperPreferences.PRESENTATION_MODE_STATIC
+ homeScreenAttributions = mutableListOf<String?>("Android wallpaper")
+ lockScreenAttributions = mutableListOf("Android wallpaper")
+ dailyRotations = ArrayList()
+ dailyWallpaperEnabledTimestamp = -1
+ lastDailyLogTimestamp = -1
+ lastDailyWallpaperRotationStatus = -1
+ mPendingWallpaperSetStatus = WallpaperPreferences.WALLPAPER_SET_NOT_PENDING
+ wallpaperCropHints = mutableMapOf()
+ }
+
+ override fun getWallpaperPresentationMode(): Int {
+ return wallpaperPresentationMode
+ }
+
+ override fun setWallpaperPresentationMode(@PresentationMode presentationMode: Int) {
+ wallpaperPresentationMode = presentationMode
+ }
+
+ override fun getHomeWallpaperAttributions(): List<String?>? {
+ return homeScreenAttributions
+ }
+
+ override fun setHomeWallpaperAttributions(attributions: List<String?>?) {
+ homeScreenAttributions = attributions
+ }
+
+ override fun getHomeWallpaperActionUrl(): String? {
+ return homeActionUrl
+ }
+
+ override fun setHomeWallpaperActionUrl(actionUrl: String?) {
+ homeActionUrl = actionUrl
+ }
+
+ override fun getHomeWallpaperCollectionId(): String? {
+ return homeCollectionId
+ }
+
+ override fun setHomeWallpaperCollectionId(collectionId: String?) {
+ homeCollectionId = collectionId
+ }
+
+ override fun clearHomeWallpaperMetadata() {
+ homeScreenAttributions = null
+ wallpaperPresentationMode = WallpaperPreferences.PRESENTATION_MODE_STATIC
+ homeScreenBitmapHashCode = 0
+ homeScreenServiceName = null
+ homeWallpaperManagerId = 0
+ }
+
+ override fun setHomeStaticImageWallpaperMetadata(metadata: StaticWallpaperMetadata) {
+ mHomeStaticWallpaperMetadata = metadata
+ }
+
+ override fun getHomeWallpaperHashCode(): Long {
+ return homeScreenBitmapHashCode
+ }
+
+ override fun setHomeWallpaperHashCode(hashCode: Long) {
+ homeScreenBitmapHashCode = hashCode
+ }
+
+ override fun getHomeWallpaperServiceName(): String? {
+ return homeScreenServiceName
+ }
+
+ override fun setHomeWallpaperServiceName(serviceName: String?) {
+ homeScreenServiceName = serviceName
+ setFirstWallpaperApplyDateIfNeeded()
+ }
+
+ override fun getHomeWallpaperManagerId(): Int {
+ return homeWallpaperManagerId
+ }
+
+ override fun setHomeWallpaperManagerId(homeWallpaperId: Int) {
+ homeWallpaperManagerId = homeWallpaperId
+ }
+
+ override fun getHomeWallpaperRemoteId(): String? {
+ return homeWallpaperRemoteId
+ }
+
+ override fun setHomeWallpaperRemoteId(wallpaperRemoteId: String?) {
+ homeWallpaperRemoteId = wallpaperRemoteId
+ setFirstWallpaperApplyDateIfNeeded()
+ }
+
+ override fun getHomeWallpaperRecentsKey(): String? {
+ return homeWallpaperRecentsKey
+ }
+
+ override fun setHomeWallpaperRecentsKey(recentsKey: String?) {
+ homeWallpaperRecentsKey = recentsKey
+ }
+
+ override fun getHomeWallpaperEffects(): String? {
+ return mHomeWallpaperEffects
+ }
+
+ override fun setHomeWallpaperEffects(wallpaperEffects: String?) {
+ mHomeWallpaperEffects = wallpaperEffects
+ }
+
+ override fun getLockWallpaperAttributions(): List<String?>? {
+ return lockScreenAttributions
+ }
+
+ override fun setLockWallpaperAttributions(attributions: List<String?>?) {
+ lockScreenAttributions = attributions
+ }
+
+ override fun getLockWallpaperActionUrl(): String? {
+ return lockActionUrl
+ }
+
+ override fun setLockWallpaperActionUrl(actionUrl: String?) {
+ lockActionUrl = actionUrl
+ }
+
+ override fun getLockWallpaperCollectionId(): String? {
+ return lockCollectionId
+ }
+
+ override fun setLockWallpaperCollectionId(collectionId: String?) {
+ lockCollectionId = collectionId
+ }
+
+ override fun clearLockWallpaperMetadata() {
+ lockScreenAttributions = null
+ lockScreenBitmapHashCode = 0
+ lockWallpaperManagerId = 0
+ }
+
+ override fun setLockStaticImageWallpaperMetadata(metadata: StaticWallpaperMetadata) {
+ mLockStaticWallpaperMetadata = metadata
+ }
+
+ override fun getLockWallpaperHashCode(): Long {
+ return lockScreenBitmapHashCode
+ }
+
+ override fun setLockWallpaperHashCode(hashCode: Long) {
+ lockScreenBitmapHashCode = hashCode
+ }
+
+ override fun getLockWallpaperServiceName(): String? {
+ return lockScreenServiceName
+ }
+
+ override fun setLockWallpaperServiceName(serviceName: String?) {
+ lockScreenServiceName = serviceName
+ }
+
+ override fun getLockWallpaperManagerId(): Int {
+ return lockWallpaperManagerId
+ }
+
+ override fun setLockWallpaperManagerId(lockWallpaperId: Int) {
+ lockWallpaperManagerId = lockWallpaperId
+ }
+
+ override fun getLockWallpaperRemoteId(): String? {
+ return lockWallpaperRemoteId
+ }
+
+ override fun setLockWallpaperRemoteId(wallpaperRemoteId: String?) {
+ lockWallpaperRemoteId = wallpaperRemoteId
+ setFirstWallpaperApplyDateIfNeeded()
+ }
+
+ override fun getLockWallpaperRecentsKey(): String? {
+ return lockWallpaperRecentsKey
+ }
+
+ override fun setLockWallpaperRecentsKey(recentsKey: String?) {
+ lockWallpaperRecentsKey = recentsKey
+ }
+
+ override fun getLockWallpaperEffects(): String? {
+ return mLockWallpaperEffects
+ }
+
+ override fun setLockWallpaperEffects(wallpaperEffects: String?) {
+ mLockWallpaperEffects = wallpaperEffects
+ }
+
+ override fun addDailyRotation(timestamp: Long) {
+ dailyRotations.add(timestamp)
+ }
+
+ override fun getLastDailyRotationTimestamp(): Long {
+ return if (dailyRotations.size == 0) {
+ -1
+ } else dailyRotations[dailyRotations.size - 1]
+ }
+
+ override fun getDailyWallpaperEnabledTimestamp(): Long {
+ return dailyWallpaperEnabledTimestamp
+ }
+
+ override fun setDailyWallpaperEnabledTimestamp(timestamp: Long) {
+ dailyWallpaperEnabledTimestamp = timestamp
+ }
+
+ override fun clearDailyRotations() {
+ dailyRotations.clear()
+ }
+
+ override fun getLastDailyLogTimestamp(): Long {
+ return lastDailyLogTimestamp
+ }
+
+ override fun setLastDailyLogTimestamp(timestamp: Long) {
+ lastDailyLogTimestamp = timestamp
+ }
+
+ override fun getLastAppActiveTimestamp(): Long {
+ return lastAppActiveTimestamp
+ }
+
+ override fun setLastAppActiveTimestamp(timestamp: Long) {
+ lastAppActiveTimestamp = timestamp
+ }
+
+ override fun setDailyWallpaperRotationStatus(status: Int, timestamp: Long) {
+ lastDailyWallpaperRotationStatus = status
+ lastDailyWallpaperRotationStatusTimestamp = timestamp
+ }
+
+ override fun setPendingWallpaperSetStatusSync(@PendingWallpaperSetStatus setStatus: Int) {
+ mPendingWallpaperSetStatus = setStatus
+ }
+
+ @PendingWallpaperSetStatus
+ override fun getPendingWallpaperSetStatus(): Int {
+ return mPendingWallpaperSetStatus
+ }
+
+ override fun setPendingWallpaperSetStatus(@PendingWallpaperSetStatus setStatus: Int) {
+ mPendingWallpaperSetStatus = setStatus
+ }
+
+ override fun setPendingDailyWallpaperUpdateStatusSync(
+ @PendingDailyWallpaperUpdateStatus updateStatus: Int
+ ) {
+ mPendingDailyWallpaperUpdateStatus = updateStatus
+ }
+
+ @PendingDailyWallpaperUpdateStatus
+ override fun getPendingDailyWallpaperUpdateStatus(): Int {
+ return mPendingDailyWallpaperUpdateStatus
+ }
+
+ override fun setPendingDailyWallpaperUpdateStatus(
+ @PendingDailyWallpaperUpdateStatus updateStatus: Int
+ ) {
+ mPendingDailyWallpaperUpdateStatus = updateStatus
+ }
+
+ override fun getAppLaunchCount(): Int {
+ return appLaunchCount
+ }
+
+ override fun getFirstLaunchDateSinceSetup(): Int {
+ return firstLaunchDate
+ }
+
+ override fun incrementAppLaunched() {
+ if (getFirstLaunchDateSinceSetup() == 0) {
+ setFirstLaunchDateSinceSetup(getCurrentDate())
+ }
+ val appLaunchCount = getAppLaunchCount()
+ if (appLaunchCount < Int.MAX_VALUE) {
+ setAppLaunchCount(appLaunchCount + 1)
+ }
+ }
+
+ override fun getFirstWallpaperApplyDateSinceSetup(): Int {
+ return firstWallpaperApplyDate
+ }
+
+ override fun storeWallpaperColors(
+ storedWallpaperId: String?,
+ wallpaperColors: WallpaperColors?
+ ) {
+ if (storedWallpaperId == null || wallpaperColors == null) {
+ return
+ }
+ val primaryColor = wallpaperColors.primaryColor
+ var value = java.lang.String(primaryColor.toArgb().toString()) as String
+ val secondaryColor = wallpaperColors.secondaryColor
+ if (secondaryColor != null) {
+ value += "," + secondaryColor.toArgb()
+ }
+ val tertiaryColor = wallpaperColors.tertiaryColor
+ if (tertiaryColor != null) {
+ value += "," + tertiaryColor.toArgb()
+ }
+ mWallStoredColor[storedWallpaperId] = value
+ }
+
+ override fun getWallpaperColors(storedWallpaperId: String): WallpaperColors? {
+ if (mWallStoredColor.isEmpty()) {
+ return null
+ }
+ val value = mWallStoredColor[storedWallpaperId]
+ if (value == "") {
+ return null
+ }
+ val colorStrings =
+ value!!.split(",".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
+ val colorPrimary = Color.valueOf(colorStrings[0].toInt())
+ var colorSecondary: Color? = null
+ if (colorStrings.size >= 2) {
+ colorSecondary = Color.valueOf(colorStrings[1].toInt())
+ }
+ var colorTerTiary: Color? = null
+ if (colorStrings.size >= 3) {
+ colorTerTiary = Color.valueOf(colorStrings[2].toInt())
+ }
+ return WallpaperColors(
+ colorPrimary,
+ colorSecondary,
+ colorTerTiary,
+ WallpaperColors.HINT_FROM_BITMAP
+ )
+ }
+
+ override fun updateDailyWallpaperSet(
+ @WallpaperPersister.Destination destination: Int,
+ collectionId: String?,
+ wallpaperId: String?
+ ) {
+ // Assign wallpaper info by destination.
+ when (destination) {
+ WallpaperPersister.DEST_HOME_SCREEN -> {
+ setHomeWallpaperCollectionId(collectionId!!)
+ setHomeWallpaperRemoteId(wallpaperId)
+ }
+ WallpaperPersister.DEST_LOCK_SCREEN -> {
+ setLockWallpaperCollectionId(collectionId!!)
+ setLockWallpaperRemoteId(wallpaperId!!)
+ }
+ WallpaperPersister.DEST_BOTH -> {
+ setHomeWallpaperCollectionId(collectionId!!)
+ setHomeWallpaperRemoteId(wallpaperId)
+ setLockWallpaperCollectionId(collectionId)
+ setLockWallpaperRemoteId(wallpaperId!!)
+ }
+ }
+ }
+
+ override fun storeLatestWallpaper(
+ which: Int,
+ wallpaperId: String,
+ wallpaper: LiveWallpaperInfo,
+ colors: WallpaperColors
+ ) {}
+
+ override fun storeLatestWallpaper(
+ which: Int,
+ wallpaperId: String,
+ wallpaper: WallpaperInfo,
+ croppedWallpaperBitmap: Bitmap,
+ colors: WallpaperColors
+ ) {}
+
+ override fun storeLatestWallpaper(
+ which: Int,
+ wallpaperId: String,
+ attributions: List<String>?,
+ actionUrl: String?,
+ collectionId: String?,
+ croppedWallpaperBitmap: Bitmap,
+ colors: WallpaperColors
+ ) {}
+
+ override suspend fun addStaticWallpaperToRecentWallpapers(
+ destination: WallpaperDestination,
+ wallpaperModel: WallpaperModel.StaticWallpaperModel,
+ bitmap: Bitmap,
+ cropHints: Map<ScreenOrientation, Rect?>
+ ) {}
+
+ override fun getWallpaperCropHints(): Map<ScreenOrientation, Rect?> {
+ return ImmutableMap.copyOf(wallpaperCropHints)
+ }
+
+ override fun storeWallpaperCropHints(cropHints: Map<ScreenOrientation, Rect?>) {
+ wallpaperCropHints.putAll(cropHints)
+ }
+
+ private fun setAppLaunchCount(count: Int) {
+ appLaunchCount = count
+ }
+
+ private fun setFirstLaunchDateSinceSetup(firstLaunchDate: Int) {
+ this.firstLaunchDate = firstLaunchDate
+ }
+
+ private fun setFirstWallpaperApplyDateSinceSetup(firstWallpaperApplyDate: Int) {
+ this.firstWallpaperApplyDate = firstWallpaperApplyDate
+ }
+
+ private fun setFirstWallpaperApplyDateIfNeeded() {
+ if (getFirstWallpaperApplyDateSinceSetup() == 0) {
+ setFirstWallpaperApplyDateSinceSetup(getCurrentDate())
+ }
+ }
+
+ private fun getCurrentDate(): Int {
+ val calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"))
+ val format = SimpleDateFormat("yyyyMMdd", Locale.US)
+ return format.format(calendar.time).toInt()
+ }
+}
diff --git a/tests/common/src/com/android/wallpaper/testing/TestWallpaperRefresher.java b/tests/common/src/com/android/wallpaper/testing/TestWallpaperRefresher.java
index 9fd4df02..608c8389 100644
--- a/tests/common/src/com/android/wallpaper/testing/TestWallpaperRefresher.java
+++ b/tests/common/src/com/android/wallpaper/testing/TestWallpaperRefresher.java
@@ -49,30 +49,24 @@ public class TestWallpaperRefresher implements WallpaperRefresher {
new WallpaperMetadata(
prefs.getHomeWallpaperAttributions(),
prefs.getHomeWallpaperActionUrl(),
- prefs.getHomeWallpaperActionLabelRes(),
- prefs.getHomeWallpaperActionIconRes(),
prefs.getHomeWallpaperCollectionId(),
- prefs.getHomeWallpaperBackingFileName(),
- null /* wallpaperComponent */),
+ /* wallpaperComponent */ null,
+ /* cropHints= */ null),
new WallpaperMetadata(
prefs.getLockWallpaperAttributions(),
prefs.getLockWallpaperActionUrl(),
- prefs.getLockWallpaperActionLabelRes(),
- prefs.getLockWallpaperActionIconRes(),
prefs.getLockWallpaperCollectionId(),
- prefs.getLockWallpaperBackingFileName(),
- null /* wallpaperComponent */),
+ /* wallpaperComponent */ null,
+ /* cropHints= */ null),
prefs.getWallpaperPresentationMode());
} else {
listener.onRefreshed(
new WallpaperMetadata(
prefs.getHomeWallpaperAttributions(),
prefs.getHomeWallpaperActionUrl(),
- prefs.getHomeWallpaperActionLabelRes(),
- prefs.getHomeWallpaperActionIconRes(),
prefs.getHomeWallpaperCollectionId(),
- prefs.getHomeWallpaperBackingFileName(),
- null /* wallpaperComponent */),
+ /* wallpaperComponent */ null,
+ /* cropHints= */ null),
null,
prefs.getWallpaperPresentationMode());
}
diff --git a/tests/module/src/com/android/wallpaper/TestModule.kt b/tests/module/src/com/android/wallpaper/TestModule.kt
new file mode 100644
index 00000000..d24d02d1
--- /dev/null
+++ b/tests/module/src/com/android/wallpaper/TestModule.kt
@@ -0,0 +1,49 @@
+/*
+ * 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
+
+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.hilt.components.SingletonComponent
+import dagger.hilt.testing.TestInstallIn
+import javax.inject.Singleton
+
+@Module
+@TestInstallIn(components = [SingletonComponent::class], replaces = [AppModule::class])
+abstract class TestModule {
+ @Binds @Singleton abstract fun bindInjector(impl: TestInjector): Injector
+
+ @Binds @Singleton abstract fun bindUserEventLogger(impl: TestUserEventLogger): UserEventLogger
+
+ @Binds
+ @Singleton
+ abstract fun bindWallpaperPreferences(impl: TestWallpaperPreferences): WallpaperPreferences
+
+ @Binds
+ @Singleton
+ abstract fun bindWallpaperModelFactory(
+ impl: DefaultWallpaperModelFactory
+ ): WallpaperModelFactory
+}
diff --git a/tests/robotests/Android.bp b/tests/robotests/Android.bp
index d81f28a4..3af69799 100644
--- a/tests/robotests/Android.bp
+++ b/tests/robotests/Android.bp
@@ -23,6 +23,8 @@ android_robolectric_test {
java_resource_dirs: ["config"],
+ // Do not add picker-related dependencies here. Add them to
+ // WallpaperPicker2Shell instead.
static_libs: [
"hilt_android_testing",
],
diff --git a/tests/robotests/src/com/android/wallpaper/module/DefaultWallpaperPersisterTest.java b/tests/robotests/src/com/android/wallpaper/module/DefaultWallpaperPersisterTest.java
index be9cae02..e226abd2 100644
--- a/tests/robotests/src/com/android/wallpaper/module/DefaultWallpaperPersisterTest.java
+++ b/tests/robotests/src/com/android/wallpaper/module/DefaultWallpaperPersisterTest.java
@@ -37,8 +37,11 @@ import androidx.test.platform.app.InstrumentationRegistry;
import com.android.wallpaper.model.WallpaperInfo;
import com.android.wallpaper.module.DefaultWallpaperPersisterTest.TestSetWallpaperCallback.SetWallpaperStatus;
import com.android.wallpaper.module.WallpaperPersister.SetWallpaperCallback;
+import com.android.wallpaper.module.logging.TestUserEventLogger;
import com.android.wallpaper.testing.TestAsset;
import com.android.wallpaper.testing.TestBitmapCropper;
+import com.android.wallpaper.testing.TestCurrentWallpaperInfoFactory;
+import com.android.wallpaper.testing.TestInjector;
import com.android.wallpaper.testing.TestStaticWallpaperInfo;
import com.android.wallpaper.testing.TestWallpaperPreferences;
import com.android.wallpaper.testing.TestWallpaperStatusChecker;
@@ -71,6 +74,7 @@ public class DefaultWallpaperPersisterTest {
@Before
public void setUp() {
+ InjectorProvider.setInjector(new TestInjector(new TestUserEventLogger()));
mContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
mManager = spy(WallpaperManager.getInstance(mContext));
mPrefs = new TestWallpaperPreferences();
@@ -78,9 +82,11 @@ public class DefaultWallpaperPersisterTest {
DisplayUtils displayUtils = new DisplayUtils(mContext);
TestBitmapCropper cropper = new TestBitmapCropper();
TestWallpaperStatusChecker statusChecker = new TestWallpaperStatusChecker();
+ TestCurrentWallpaperInfoFactory wallpaperInfoFactory =
+ new TestCurrentWallpaperInfoFactory(mContext);
mPersister = new DefaultWallpaperPersister(mContext, mManager, mPrefs, changedNotifier,
- displayUtils, cropper, statusChecker, false);
+ displayUtils, cropper, statusChecker, wallpaperInfoFactory, false);
}
@Test
diff --git a/tests/robotests/src/com/android/wallpaper/module/DefaultWallpaperPreferencesTest.kt b/tests/robotests/src/com/android/wallpaper/module/DefaultWallpaperPreferencesTest.kt
index 43f472c2..7e44c355 100644
--- a/tests/robotests/src/com/android/wallpaper/module/DefaultWallpaperPreferencesTest.kt
+++ b/tests/robotests/src/com/android/wallpaper/module/DefaultWallpaperPreferencesTest.kt
@@ -17,7 +17,6 @@ package com.android.wallpaper.module
import android.content.Context
import androidx.test.core.app.ApplicationProvider
-import com.android.wallpaper.R
import com.android.wallpaper.model.StaticWallpaperMetadata
import com.android.wallpaper.module.WallpaperPreferenceKeys.NoBackupKeys
import com.google.common.truth.Truth.assertThat
@@ -37,38 +36,40 @@ class DefaultWallpaperPreferencesTest {
StaticWallpaperMetadata(
attributions = listOf("attr1", "attr2"),
actionUrl = "http://www.google.com/",
- actionLabelRes = R.string.explore,
- actionIconRes = R.drawable.ic_explore_24px,
collectionId = "cultural_events",
hashCode = 10013L,
managerId = 3,
remoteId = "ocean",
+ cropHints = null,
)
)
- val pref =
+ val sharedPref =
(ApplicationProvider.getApplicationContext() as Context).getSharedPreferences(
DefaultWallpaperPreferences.PREFS_NAME,
Context.MODE_PRIVATE
)
- assertThat(pref.getString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_1, null))
+ assertThat(sharedPref.getString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_1, null))
.isEqualTo("attr1")
- assertThat(pref.getString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_2, null))
+ assertThat(sharedPref.getString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_2, null))
.isEqualTo("attr2")
- assertThat(pref.getString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ACTION_URL, null))
+ assertThat(
+ sharedPref.getString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ACTION_URL, null)
+ )
.isEqualTo("http://www.google.com/")
assertThat(
- pref.getString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ACTION_LABEL_RES, null)
+ sharedPref.getString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_COLLECTION_ID, null)
)
- .isEqualTo("com.android.wallpaper:string/explore")
- assertThat(pref.getString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ACTION_ICON_RES, null))
- .isEqualTo("com.android.wallpaper:drawable/ic_explore_24px")
- assertThat(pref.getString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_COLLECTION_ID, null))
.isEqualTo("cultural_events")
- assertThat(pref.getLong(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_HASH_CODE, 0L))
+ assertThat(sharedPref.getLong(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_HASH_CODE, 0L))
.isEqualTo(10013)
- assertThat(pref.getInt(NoBackupKeys.KEY_HOME_WALLPAPER_MANAGER_ID, 0)).isEqualTo(3)
- assertThat(pref.getString(NoBackupKeys.KEY_HOME_WALLPAPER_REMOTE_ID, null))
+ val noBackupPref =
+ (ApplicationProvider.getApplicationContext() as Context).getSharedPreferences(
+ DefaultWallpaperPreferences.NO_BACKUP_PREFS_NAME,
+ Context.MODE_PRIVATE
+ )
+ assertThat(noBackupPref.getInt(NoBackupKeys.KEY_HOME_WALLPAPER_MANAGER_ID, 0)).isEqualTo(3)
+ assertThat(noBackupPref.getString(NoBackupKeys.KEY_HOME_WALLPAPER_REMOTE_ID, null))
.isEqualTo("ocean")
}
@@ -78,38 +79,40 @@ class DefaultWallpaperPreferencesTest {
StaticWallpaperMetadata(
attributions = listOf("attr1", "attr2"),
actionUrl = "http://www.google.com/",
- actionLabelRes = R.string.explore,
- actionIconRes = R.drawable.ic_explore_24px,
collectionId = "cultural_events",
hashCode = 10013L,
managerId = 3,
remoteId = "ocean",
+ cropHints = null,
)
)
- val pref =
+ val sharedPref =
(ApplicationProvider.getApplicationContext() as Context).getSharedPreferences(
DefaultWallpaperPreferences.PREFS_NAME,
Context.MODE_PRIVATE
)
- assertThat(pref.getString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_1, null))
+ assertThat(sharedPref.getString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_1, null))
.isEqualTo("attr1")
- assertThat(pref.getString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_2, null))
+ assertThat(sharedPref.getString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_2, null))
.isEqualTo("attr2")
- assertThat(pref.getString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ACTION_URL, null))
+ assertThat(
+ sharedPref.getString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ACTION_URL, null)
+ )
.isEqualTo("http://www.google.com/")
assertThat(
- pref.getString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ACTION_LABEL_RES, null)
+ sharedPref.getString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_COLLECTION_ID, null)
)
- .isEqualTo("com.android.wallpaper:string/explore")
- assertThat(pref.getString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ACTION_ICON_RES, null))
- .isEqualTo("com.android.wallpaper:drawable/ic_explore_24px")
- assertThat(pref.getString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_COLLECTION_ID, null))
.isEqualTo("cultural_events")
- assertThat(pref.getLong(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_HASH_CODE, 0L))
+ assertThat(sharedPref.getLong(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_HASH_CODE, 0L))
.isEqualTo(10013)
- assertThat(pref.getInt(NoBackupKeys.KEY_LOCK_WALLPAPER_MANAGER_ID, 0)).isEqualTo(3)
- assertThat(pref.getString(NoBackupKeys.KEY_LOCK_WALLPAPER_REMOTE_ID, null))
+ val noBackupPref =
+ (ApplicationProvider.getApplicationContext() as Context).getSharedPreferences(
+ DefaultWallpaperPreferences.NO_BACKUP_PREFS_NAME,
+ Context.MODE_PRIVATE
+ )
+ assertThat(noBackupPref.getInt(NoBackupKeys.KEY_LOCK_WALLPAPER_MANAGER_ID, 0)).isEqualTo(3)
+ assertThat(noBackupPref.getString(NoBackupKeys.KEY_LOCK_WALLPAPER_REMOTE_ID, null))
.isEqualTo("ocean")
}
}
diff --git a/tests/robotests/src/com/android/wallpaper/picker/customization/data/repository/WallpaperRepositoryTest.kt b/tests/robotests/src/com/android/wallpaper/picker/customization/data/repository/WallpaperRepositoryTest.kt
index ba9c9dfe..ef88c278 100644
--- a/tests/robotests/src/com/android/wallpaper/picker/customization/data/repository/WallpaperRepositoryTest.kt
+++ b/tests/robotests/src/com/android/wallpaper/picker/customization/data/repository/WallpaperRepositoryTest.kt
@@ -17,6 +17,7 @@
package com.android.wallpaper.picker.customization.data.repository
+import android.stats.style.StyleEnums.SET_WALLPAPER_ENTRY_POINT_WALLPAPER_PREVIEW
import androidx.test.filters.SmallTest
import com.android.wallpaper.picker.customization.shared.model.WallpaperDestination
import com.android.wallpaper.testing.FakeWallpaperClient
@@ -96,17 +97,21 @@ class WallpaperRepositoryTest {
// Pause the client so we can examine the interim state.
client.pause()
underTest.setWallpaper(
+ SET_WALLPAPER_ENTRY_POINT_WALLPAPER_PREVIEW,
WallpaperDestination.HOME,
FakeWallpaperClient.INITIAL_RECENT_WALLPAPERS[1].wallpaperId,
)
- prefs.homeWallpaperRecentsKey =
+ prefs.setHomeWallpaperRecentsKey(
FakeWallpaperClient.INITIAL_RECENT_WALLPAPERS[1].wallpaperId
+ )
underTest.setWallpaper(
+ SET_WALLPAPER_ENTRY_POINT_WALLPAPER_PREVIEW,
WallpaperDestination.LOCK,
FakeWallpaperClient.INITIAL_RECENT_WALLPAPERS[2].wallpaperId,
)
- prefs.lockWallpaperRecentsKey =
+ prefs.setLockWallpaperRecentsKey(
FakeWallpaperClient.INITIAL_RECENT_WALLPAPERS[2].wallpaperId
+ )
assertThat(recentHomeWallpapers())
.isEqualTo(FakeWallpaperClient.INITIAL_RECENT_WALLPAPERS)
assertThat(recentLockWallpapers())
@@ -175,10 +180,12 @@ class WallpaperRepositoryTest {
.isEqualTo(FakeWallpaperClient.INITIAL_RECENT_WALLPAPERS.first().wallpaperId)
underTest.setWallpaper(
+ SET_WALLPAPER_ENTRY_POINT_WALLPAPER_PREVIEW,
WallpaperDestination.HOME,
FakeWallpaperClient.INITIAL_RECENT_WALLPAPERS[1].wallpaperId,
)
underTest.setWallpaper(
+ SET_WALLPAPER_ENTRY_POINT_WALLPAPER_PREVIEW,
WallpaperDestination.LOCK,
FakeWallpaperClient.INITIAL_RECENT_WALLPAPERS[2].wallpaperId,
)
diff --git a/tests/robotests/src/com/android/wallpaper/picker/customization/domain/interactor/WallpaperInteractorTest.kt b/tests/robotests/src/com/android/wallpaper/picker/customization/domain/interactor/WallpaperInteractorTest.kt
index 19088c23..a472bcf7 100644
--- a/tests/robotests/src/com/android/wallpaper/picker/customization/domain/interactor/WallpaperInteractorTest.kt
+++ b/tests/robotests/src/com/android/wallpaper/picker/customization/domain/interactor/WallpaperInteractorTest.kt
@@ -17,6 +17,7 @@
package com.android.wallpaper.picker.customization.domain.interactor
+import android.stats.style.StyleEnums.SET_WALLPAPER_ENTRY_POINT_WALLPAPER_PREVIEW
import androidx.test.filters.SmallTest
import com.android.wallpaper.module.CustomizationSections
import com.android.wallpaper.picker.customization.data.repository.WallpaperRepository
@@ -113,8 +114,16 @@ class WallpaperInteractorTest {
val homeWallpaperId1 = FakeWallpaperClient.INITIAL_RECENT_WALLPAPERS[1].wallpaperId
val lockWallpaperId1 = FakeWallpaperClient.INITIAL_RECENT_WALLPAPERS[2].wallpaperId
- underTest.setWallpaper(WallpaperDestination.HOME, homeWallpaperId1)
- underTest.setWallpaper(WallpaperDestination.LOCK, lockWallpaperId1)
+ underTest.setWallpaper(
+ SET_WALLPAPER_ENTRY_POINT_WALLPAPER_PREVIEW,
+ WallpaperDestination.HOME,
+ homeWallpaperId1
+ )
+ underTest.setWallpaper(
+ SET_WALLPAPER_ENTRY_POINT_WALLPAPER_PREVIEW,
+ WallpaperDestination.LOCK,
+ lockWallpaperId1
+ )
assertThat(homeWallpaperUpdateEvents()).isNotEqualTo(homeWallpaperUpdateOutput1)
assertThat(lockWallpaperUpdateEvents()).isNotEqualTo(lockWallpaperUpdateOutput1)
val homeWallpaperUpdateOutput2 = homeWallpaperUpdateEvents()
@@ -122,8 +131,16 @@ class WallpaperInteractorTest {
val homeWallpaperId2 = FakeWallpaperClient.INITIAL_RECENT_WALLPAPERS[2].wallpaperId
val lockWallpaperId2 = FakeWallpaperClient.INITIAL_RECENT_WALLPAPERS[2].wallpaperId
- underTest.setWallpaper(WallpaperDestination.HOME, homeWallpaperId2)
- underTest.setWallpaper(WallpaperDestination.LOCK, lockWallpaperId2)
+ underTest.setWallpaper(
+ SET_WALLPAPER_ENTRY_POINT_WALLPAPER_PREVIEW,
+ WallpaperDestination.HOME,
+ homeWallpaperId2
+ )
+ underTest.setWallpaper(
+ SET_WALLPAPER_ENTRY_POINT_WALLPAPER_PREVIEW,
+ WallpaperDestination.LOCK,
+ lockWallpaperId2
+ )
assertThat(homeWallpaperUpdateEvents()).isNotEqualTo(homeWallpaperUpdateOutput2)
assertThat(lockWallpaperUpdateEvents()).isEqualTo(lockWallpaperUpdateOutput2)
}
@@ -166,8 +183,16 @@ class WallpaperInteractorTest {
// Pause the client so we can examine the interim state.
client.pause()
- underTest.setWallpaper(WallpaperDestination.HOME, homeWallpaperId)
- underTest.setWallpaper(WallpaperDestination.LOCK, lockWallpaperId)
+ underTest.setWallpaper(
+ SET_WALLPAPER_ENTRY_POINT_WALLPAPER_PREVIEW,
+ WallpaperDestination.HOME,
+ homeWallpaperId
+ )
+ underTest.setWallpaper(
+ SET_WALLPAPER_ENTRY_POINT_WALLPAPER_PREVIEW,
+ WallpaperDestination.LOCK,
+ lockWallpaperId
+ )
assertThat(homePreviews()).isEqualTo(FakeWallpaperClient.INITIAL_RECENT_WALLPAPERS)
assertThat(lockPreviews()).isEqualTo(FakeWallpaperClient.INITIAL_RECENT_WALLPAPERS)
assertThat(selectedHomeWallpaperId())
diff --git a/tests/robotests/src/com/android/wallpaper/picker/customization/domain/interactor/WallpaperSnapshotRestorerTest.kt b/tests/robotests/src/com/android/wallpaper/picker/customization/domain/interactor/WallpaperSnapshotRestorerTest.kt
index 20d22533..f369a48e 100644
--- a/tests/robotests/src/com/android/wallpaper/picker/customization/domain/interactor/WallpaperSnapshotRestorerTest.kt
+++ b/tests/robotests/src/com/android/wallpaper/picker/customization/domain/interactor/WallpaperSnapshotRestorerTest.kt
@@ -17,6 +17,7 @@
package com.android.wallpaper.picker.customization.domain.interactor
+import android.stats.style.StyleEnums.SET_WALLPAPER_ENTRY_POINT_RESET
import androidx.test.filters.SmallTest
import com.android.wallpaper.picker.customization.data.repository.WallpaperRepository
import com.android.wallpaper.picker.customization.shared.model.WallpaperDestination
@@ -97,14 +98,16 @@ class WallpaperSnapshotRestorerTest {
)
underTest.setUpSnapshotRestorer(store)
runCurrent()
- wallpaperClient.setWallpaper(
+ wallpaperClient.setRecentWallpaper(
+ setWallpaperEntryPoint = SET_WALLPAPER_ENTRY_POINT_RESET,
destination = WallpaperDestination.HOME,
wallpaperId = INITIAL_HOME_WALLPAPERS[1].wallpaperId,
onDone = {},
)
runCurrent()
assertThat(storedSnapshots).hasSize(2)
- wallpaperClient.setWallpaper(
+ wallpaperClient.setRecentWallpaper(
+ setWallpaperEntryPoint = SET_WALLPAPER_ENTRY_POINT_RESET,
destination = WallpaperDestination.LOCK,
wallpaperId = INITIAL_LOCK_WALLPAPERS[4].wallpaperId,
onDone = {},
@@ -133,8 +136,12 @@ class WallpaperSnapshotRestorerTest {
companion object {
private val INITIAL_HOME_WALLPAPERS =
- (0..5).map { index -> WallpaperModel(wallpaperId = "H$index", placeholderColor = 0) }
+ (0..5).map { index ->
+ WallpaperModel(wallpaperId = "H$index", placeholderColor = 0, title = "title1")
+ }
private val INITIAL_LOCK_WALLPAPERS =
- (0..5).map { index -> WallpaperModel(wallpaperId = "L$index", placeholderColor = 0) }
+ (0..5).map { index ->
+ WallpaperModel(wallpaperId = "L$index", placeholderColor = 0, title = "title2")
+ }
}
}
diff --git a/tests/robotests/src/com/android/wallpaper/picker/customization/ui/viewmodel/CustomizationPickerViewModelTest.kt b/tests/robotests/src/com/android/wallpaper/picker/customization/ui/viewmodel/CustomizationPickerViewModelTest.kt
index f6dc9e55..bc2e38d0 100644
--- a/tests/robotests/src/com/android/wallpaper/picker/customization/ui/viewmodel/CustomizationPickerViewModelTest.kt
+++ b/tests/robotests/src/com/android/wallpaper/picker/customization/ui/viewmodel/CustomizationPickerViewModelTest.kt
@@ -19,6 +19,7 @@ package com.android.wallpaper.picker.customization.ui.viewmodel
import androidx.lifecycle.SavedStateHandle
import androidx.test.filters.SmallTest
+import com.android.wallpaper.module.logging.TestUserEventLogger
import com.android.wallpaper.picker.customization.data.repository.WallpaperRepository
import com.android.wallpaper.picker.customization.domain.interactor.WallpaperInteractor
import com.android.wallpaper.picker.undo.data.repository.UndoRepository
@@ -48,6 +49,7 @@ class CustomizationPickerViewModelTest {
private lateinit var testScope: TestScope
private lateinit var undoInteractor: UndoInteractor
private lateinit var wallpaperInteractor: WallpaperInteractor
+ private val logger = TestUserEventLogger()
@Before
fun setUp() {
@@ -76,6 +78,7 @@ class CustomizationPickerViewModelTest {
undoInteractor = undoInteractor,
wallpaperInteractor = wallpaperInteractor,
savedStateHandle = savedStateHandle,
+ logger = logger,
)
}
@@ -118,6 +121,7 @@ class CustomizationPickerViewModelTest {
undoInteractor = undoInteractor,
wallpaperInteractor = wallpaperInteractor,
savedStateHandle = savedStateHandle,
+ logger = logger,
)
val newIsOnLockScreen = collectLastValue(newUnderTest.isOnLockScreen)
@@ -169,6 +173,7 @@ class CustomizationPickerViewModelTest {
undoInteractor = undoInteractor,
wallpaperInteractor = wallpaperInteractor,
savedStateHandle = savedStateHandle,
+ logger = logger,
)
val newHomeScreenTab = collectLastValue(newUnderTest.homeScreenTab)
diff --git a/tests/robotests/src/com/android/wallpaper/picker/customization/ui/viewmodel/WallpaperQuickSwitchViewModelTest.kt b/tests/robotests/src/com/android/wallpaper/picker/customization/ui/viewmodel/WallpaperQuickSwitchViewModelTest.kt
index 33bf9492..798e2044 100644
--- a/tests/robotests/src/com/android/wallpaper/picker/customization/ui/viewmodel/WallpaperQuickSwitchViewModelTest.kt
+++ b/tests/robotests/src/com/android/wallpaper/picker/customization/ui/viewmodel/WallpaperQuickSwitchViewModelTest.kt
@@ -102,14 +102,17 @@ class WallpaperQuickSwitchViewModelTest {
WallpaperModel(
wallpaperId = "aaa",
placeholderColor = 1200,
+ title = "title1",
),
WallpaperModel(
wallpaperId = "bbb",
placeholderColor = 1300,
+ title = "title2",
),
WallpaperModel(
wallpaperId = "ccc",
placeholderColor = 1400,
+ title = "title3",
),
)
client.setRecentWallpapers(buildMap { put(WallpaperDestination.HOME, models) })
@@ -131,9 +134,10 @@ class WallpaperQuickSwitchViewModelTest {
val models =
FakeWallpaperClient.INITIAL_RECENT_WALLPAPERS.mapIndexed { idx, wp ->
WallpaperModel(
- wp.wallpaperId,
- wp.placeholderColor,
- if (idx == 0) 100 else wp.lastUpdated
+ wallpaperId = wp.wallpaperId,
+ placeholderColor = wp.placeholderColor,
+ lastUpdated = if (idx == 0) 100 else wp.lastUpdated,
+ title = "title1"
)
}
client.setRecentWallpapers(buildMap { put(WallpaperDestination.HOME, models) })
@@ -192,9 +196,8 @@ class WallpaperQuickSwitchViewModelTest {
wallpaperId = model.wallpaperId,
placeholderColor = model.placeholderColor,
isLarge = isBeingSelected || (nothingBeingSelected && isSelected),
- isSelectionIconVisible = nothingBeingSelected && isSelected,
- isSelectionBorderVisible = isBeingSelected || (nothingBeingSelected && isSelected),
- isProgressIndicatorVisible = isBeingSelected,
+ isSelectionIndicatorVisible =
+ isBeingSelected || (nothingBeingSelected && isSelected),
isSelectable =
(!nothingBeingSelected && !isBeingSelected) ||
(nothingBeingSelected && !isSelected),
@@ -218,15 +221,9 @@ class WallpaperQuickSwitchViewModelTest {
assertWithMessage("mismatching placeholderColor for index $index.")
.that(option.placeholderColor)
.isEqualTo(expected[index].placeholderColor)
- assertWithMessage("mismatching isProgressIndicatorVisible for index $index.")
- .that(collectLastValue(option.isProgressIndicatorVisible)())
- .isEqualTo(expected[index].isProgressIndicatorVisible)
- assertWithMessage("mismatching isSelectionIconVisible for index $index.")
- .that(collectLastValue(option.isSelectionIconVisible)())
- .isEqualTo(expected[index].isSelectionIconVisible)
assertWithMessage("mismatching isSelectionBorderVisible for index $index.")
- .that(collectLastValue(option.isSelectionBorderVisible)())
- .isEqualTo(expected[index].isSelectionBorderVisible)
+ .that(collectLastValue(option.isSelectionIndicatorVisible)())
+ .isEqualTo(expected[index].isSelectionIndicatorVisible)
assertWithMessage("mismatching isSelectable for index $index.")
.that(collectLastValue(option.onSelected)() != null)
.isEqualTo(expected[index].isSelectable)
@@ -237,9 +234,7 @@ class WallpaperQuickSwitchViewModelTest {
val wallpaperId: String,
val placeholderColor: Int,
val isLarge: Boolean = false,
- val isProgressIndicatorVisible: Boolean = false,
- val isSelectionIconVisible: Boolean = false,
- val isSelectionBorderVisible: Boolean = false,
+ val isSelectionIndicatorVisible: Boolean = false,
val isSelectable: Boolean = true,
)
}
diff --git a/tests/robotests/src/com/android/wallpaper/picker/preview/ui/util/CropSizeUtilTest.kt b/tests/robotests/src/com/android/wallpaper/picker/preview/ui/util/CropSizeUtilTest.kt
new file mode 100644
index 00000000..50178780
--- /dev/null
+++ b/tests/robotests/src/com/android/wallpaper/picker/preview/ui/util/CropSizeUtilTest.kt
@@ -0,0 +1,34 @@
+package com.android.wallpaper.picker.preview.ui.util
+
+import android.graphics.Point
+import android.graphics.PointF
+import android.graphics.Rect
+import androidx.test.filters.SmallTest
+import com.android.wallpaper.picker.preview.ui.util.CropSizeUtil.findMaxRectWithRatioIn
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@SmallTest
+@RunWith(JUnit4::class)
+class CropSizeUtilTest {
+
+ @Test
+ fun testFiveByFive_findMaxRectWithRatioIn_FiveByTen() {
+ val testRect = Point(5, 5)
+ val targetRect = Point(5, 10)
+ val result = PointF(5f, 5f)
+
+ assertThat(testRect.findMaxRectWithRatioIn(targetRect)).isEqualTo(result)
+ }
+
+ @Test
+ fun testThreeByNine_findMaxRectWithRatioIn_SixByThree() {
+ val testRect = Rect(0, 0, 3, 9)
+ val targetRect = Rect(0, 0, 6, 3)
+ val result = PointF(1f, 3f)
+
+ assertThat(testRect.findMaxRectWithRatioIn(targetRect)).isEqualTo(result)
+ }
+}
diff --git a/tests/robotests/src/com/android/wallpaper/picker/preview/ui/util/FullResImageViewUtilTest.kt b/tests/robotests/src/com/android/wallpaper/picker/preview/ui/util/FullResImageViewUtilTest.kt
index 0511f996..c6cf8d87 100644
--- a/tests/robotests/src/com/android/wallpaper/picker/preview/ui/util/FullResImageViewUtilTest.kt
+++ b/tests/robotests/src/com/android/wallpaper/picker/preview/ui/util/FullResImageViewUtilTest.kt
@@ -19,12 +19,9 @@ class FullResImageViewUtilTest {
val wallpaperSize = Point(1080, 1920)
assertThat(
FullResImageViewUtil.getScaleAndCenter(
- screenWidth,
- screenHeight,
- false,
+ Point(screenWidth, screenHeight),
wallpaperSize,
- isSingleDisplayOrUnfoldedHorizontalHinge = false,
- isRtl = false,
+ cropRect = null,
)
)
.isEqualTo(
@@ -44,12 +41,9 @@ class FullResImageViewUtilTest {
val wallpaperSize = Point(3840, 3840)
assertThat(
FullResImageViewUtil.getScaleAndCenter(
- screenWidth,
- screenHeight,
- false,
+ Point(screenWidth, screenHeight),
wallpaperSize,
- isSingleDisplayOrUnfoldedHorizontalHinge = false,
- isRtl = false,
+ cropRect = null,
)
)
.isEqualTo(
@@ -69,12 +63,9 @@ class FullResImageViewUtilTest {
val wallpaperSize = Point(960, 960)
assertThat(
FullResImageViewUtil.getScaleAndCenter(
- screenWidth,
- screenHeight,
- false,
+ Point(screenWidth, screenHeight),
wallpaperSize,
- isSingleDisplayOrUnfoldedHorizontalHinge = false,
- isRtl = false,
+ cropRect = null,
)
)
.isEqualTo(
diff --git a/tests/robotests/src/com/android/wallpaper/picker/undo/ui/viewmodel/UndoViewModelTest.kt b/tests/robotests/src/com/android/wallpaper/picker/undo/ui/viewmodel/UndoViewModelTest.kt
index a2da80fd..b523f08e 100644
--- a/tests/robotests/src/com/android/wallpaper/picker/undo/ui/viewmodel/UndoViewModelTest.kt
+++ b/tests/robotests/src/com/android/wallpaper/picker/undo/ui/viewmodel/UndoViewModelTest.kt
@@ -18,6 +18,7 @@
package com.android.wallpaper.picker.undo.ui.viewmodel
import androidx.test.filters.SmallTest
+import com.android.wallpaper.module.logging.TestUserEventLogger
import com.android.wallpaper.picker.undo.data.repository.UndoRepository
import com.android.wallpaper.picker.undo.domain.interactor.UndoInteractor
import com.android.wallpaper.testing.FAKE_RESTORERS
@@ -56,6 +57,7 @@ class UndoViewModelTest {
underTest =
UndoViewModel(
interactor = interactor,
+ logger = TestUserEventLogger(),
)
}
diff --git a/tests/runner/Android.bp b/tests/runner/Android.bp
new file mode 100644
index 00000000..66ef8989
--- /dev/null
+++ b/tests/runner/Android.bp
@@ -0,0 +1,37 @@
+// 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.
+//
+
+//
+// Build rule for WallpaperPicker2 tests
+//
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+android_library {
+ name: "WallpaperPicker2TestRunner",
+
+ srcs: [
+ "src/**/*.java",
+ "src/**/*.kt",
+ ],
+ static_libs: [
+ "androidx.test.rules",
+ "hilt_android",
+ "hilt_android_testing",
+ ],
+
+ platform_apis: true,
+}
diff --git a/tests/runner/AndroidManifest.xml b/tests/runner/AndroidManifest.xml
new file mode 100644
index 00000000..81a2f030
--- /dev/null
+++ b/tests/runner/AndroidManifest.xml
@@ -0,0 +1,21 @@
+<?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.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.wallpaper">
+
+ <application>
+ </application>
+</manifest>
diff --git a/tests/runner/src/com/android/wallpaper/CustomTestRunner.kt b/tests/runner/src/com/android/wallpaper/CustomTestRunner.kt
new file mode 100644
index 00000000..94ef1f5f
--- /dev/null
+++ b/tests/runner/src/com/android/wallpaper/CustomTestRunner.kt
@@ -0,0 +1,27 @@
+/*
+ * 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
+
+import android.app.Application
+import android.content.Context
+import androidx.test.runner.AndroidJUnitRunner
+import dagger.hilt.android.testing.HiltTestApplication
+
+class CustomTestRunner : AndroidJUnitRunner() {
+ override fun newApplication(cl: ClassLoader?, name: String?, context: Context?): Application {
+ return super.newApplication(cl, HiltTestApplication::class.java.name, context)
+ }
+}
diff --git a/tests/src/com/android/wallpaper/picker/PreviewActivityTest.java b/tests/src/com/android/wallpaper/picker/PreviewActivityTest.java
index d839d725..f89638fd 100644
--- a/tests/src/com/android/wallpaper/picker/PreviewActivityTest.java
+++ b/tests/src/com/android/wallpaper/picker/PreviewActivityTest.java
@@ -31,10 +31,7 @@ import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
-import static org.junit.Assume.assumeFalse;
-import static org.junit.Assume.assumeTrue;
-import android.app.WallpaperManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
@@ -51,17 +48,15 @@ import androidx.test.rule.ActivityTestRule;
import com.android.wallpaper.R;
import com.android.wallpaper.model.WallpaperInfo;
-import com.android.wallpaper.module.Injector;
import com.android.wallpaper.module.InjectorProvider;
-import com.android.wallpaper.module.UserEventLogger;
import com.android.wallpaper.module.WallpaperChangedNotifier;
import com.android.wallpaper.module.WallpaperPersister;
+import com.android.wallpaper.module.logging.TestUserEventLogger;
import com.android.wallpaper.testing.TestAsset;
import com.android.wallpaper.testing.TestExploreIntentChecker;
import com.android.wallpaper.testing.TestInjector;
import com.android.wallpaper.testing.TestLiveWallpaperInfo;
import com.android.wallpaper.testing.TestStaticWallpaperInfo;
-import com.android.wallpaper.testing.TestUserEventLogger;
import com.android.wallpaper.testing.TestWallpaperPersister;
import com.android.wallpaper.testing.TestWallpaperStatusChecker;
import com.android.wallpaper.util.ScreenSizeCalculator;
@@ -69,43 +64,50 @@ import com.android.wallpaper.util.WallpaperCropUtils;
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView;
+import dagger.hilt.android.testing.HiltAndroidRule;
+import dagger.hilt.android.testing.HiltAndroidTest;
+
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.RuleChain;
import org.junit.runner.RunWith;
import java.util.ArrayList;
import java.util.List;
+import javax.inject.Inject;
+
/**
* Tests for {@link PreviewActivity}.
*/
+@HiltAndroidTest
@RunWith(AndroidJUnit4.class)
@MediumTest
public class PreviewActivityTest {
-
private static final float FLOAT_ERROR_MARGIN = 0.001f;
private static final String ACTION_URL = "http://google.com";
private TestStaticWallpaperInfo mTestStaticWallpaper;
private TestLiveWallpaperInfo mTestLiveWallpaper;
- private Injector mInjector;
private TestWallpaperPersister mWallpaperPersister;
private TestUserEventLogger mEventLogger;
private TestExploreIntentChecker mExploreIntentChecker;
private TestWallpaperStatusChecker mWallpaperStatusChecker;
- private WallpaperManager mWallpaperManager;
- @Rule
- public ActivityTestRule<PreviewActivity> mActivityRule =
+ private final HiltAndroidRule mHiltRule = new HiltAndroidRule(this);
+ private final ActivityTestRule<PreviewActivity> mActivityRule =
new ActivityTestRule<>(PreviewActivity.class, false, false);
+ @Rule
+ public RuleChain rules = RuleChain.outerRule(mHiltRule).around(mActivityRule);
+
+ @Inject TestInjector mInjector;
@Before
public void setUp() {
-
- mInjector = new TestInjector();
+ mHiltRule.inject();
InjectorProvider.setInjector(mInjector);
Intents.init();
@@ -133,7 +135,6 @@ public class PreviewActivityTest {
mInjector.getExploreIntentChecker(context);
mWallpaperStatusChecker = (TestWallpaperStatusChecker)
mInjector.getWallpaperStatusChecker(context);
- mWallpaperManager = WallpaperManager.getInstance(context);
}
@After
@@ -210,8 +211,6 @@ public class PreviewActivityTest {
assertEquals(1, mEventLogger.getNumWallpaperSetEvents());
assertEquals(1, mEventLogger.getNumWallpaperSetResultEvents());
- assertEquals(UserEventLogger.WALLPAPER_SET_RESULT_SUCCESS,
- mEventLogger.getLastWallpaperSetResult());
});
}
@@ -239,8 +238,6 @@ public class PreviewActivityTest {
assertEquals(1, mEventLogger.getNumWallpaperSetEvents());
assertEquals(1, mEventLogger.getNumWallpaperSetResultEvents());
- assertEquals(UserEventLogger.WALLPAPER_SET_RESULT_SUCCESS,
- mEventLogger.getLastWallpaperSetResult());
});
}
@@ -270,8 +267,6 @@ public class PreviewActivityTest {
assertEquals(1, mEventLogger.getNumWallpaperSetEvents());
assertEquals(1, mEventLogger.getNumWallpaperSetResultEvents());
- assertEquals(UserEventLogger.WALLPAPER_SET_RESULT_SUCCESS,
- mEventLogger.getLastWallpaperSetResult());
});
}
@@ -292,8 +287,6 @@ public class PreviewActivityTest {
onView(withText(R.string.set_wallpaper_error_message)).check(matches(isDisplayed()));
assertEquals(1, mEventLogger.getNumWallpaperSetResultEvents());
- assertEquals(UserEventLogger.WALLPAPER_SET_RESULT_FAILURE,
- mEventLogger.getLastWallpaperSetResult());
// Set next call to succeed and current wallpaper bitmap should not be null and
// equals to the mock wallpaper bitmap after clicking "try again".
@@ -332,8 +325,6 @@ public class PreviewActivityTest {
matches(isDisplayed()));
assertEquals(1, mEventLogger.getNumWallpaperSetResultEvents());
- assertEquals(UserEventLogger.WALLPAPER_SET_RESULT_FAILURE,
- mEventLogger.getLastWallpaperSetResult());
// Set next call to succeed and current wallpaper bitmap should not be
// null and equals to the mock wallpaper bitmap after clicking "try again".
@@ -374,8 +365,6 @@ public class PreviewActivityTest {
onView(withText(R.string.set_wallpaper_error_message)).check(matches(isDisplayed()));
assertEquals(1, mEventLogger.getNumWallpaperSetResultEvents());
- assertEquals(UserEventLogger.WALLPAPER_SET_RESULT_FAILURE,
- mEventLogger.getLastWallpaperSetResult());
// Set next call to succeed and current wallpaper bitmap should not be null and
// equals to the mock wallpaper bitmap after clicking "try again".
@@ -451,21 +440,7 @@ public class PreviewActivityTest {
}
@Test
- public void testDestinationOptions_singleEngine_setLive_doesNotShowLockOption() {
- assumeFalse(mWallpaperManager.isLockscreenLiveWallpaperEnabled());
- launchActivityIntentWithWallpaper(mTestLiveWallpaper);
- mWallpaperStatusChecker.setHomeStaticWallpaperSet(true);
- mWallpaperStatusChecker.setLockWallpaperSet(false);
-
- onView(withId(R.id.button_set_wallpaper)).perform(click());
-
- onView(withText(R.string.set_wallpaper_lock_screen_destination)).inRoot(isDialog())
- .check(matches(not(isDisplayed())));
- }
-
- @Test
public void testDestinationOptions_multiEngine_setLive_showsLockOption() {
- assumeTrue(mWallpaperManager.isLockscreenLiveWallpaperEnabled());
launchActivityIntentWithWallpaper(mTestLiveWallpaper);
mWallpaperStatusChecker.setHomeStaticWallpaperSet(true);
mWallpaperStatusChecker.setLockWallpaperSet(false);
diff --git a/tests/src/com/android/wallpaper/picker/preview/ui/WallpaperPreviewActivityTest.kt b/tests/src/com/android/wallpaper/picker/preview/ui/WallpaperPreviewActivityTest.kt
index 2e3ee84a..95c0e5b2 100644
--- a/tests/src/com/android/wallpaper/picker/preview/ui/WallpaperPreviewActivityTest.kt
+++ b/tests/src/com/android/wallpaper/picker/preview/ui/WallpaperPreviewActivityTest.kt
@@ -15,7 +15,6 @@
*/
package com.android.wallpaper.picker.preview.ui
-import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.NavHostFragment
import androidx.test.core.app.ActivityScenario
import androidx.test.core.app.ApplicationProvider
@@ -23,17 +22,25 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import com.android.wallpaper.model.WallpaperInfo
import com.android.wallpaper.module.InjectorProvider
-import com.android.wallpaper.picker.preview.ui.viewmodel.WallpaperPreviewViewModel
import com.android.wallpaper.testing.TestInjector
import com.android.wallpaper.testing.TestStaticWallpaperInfo
import com.google.common.truth.Truth.assertThat
+import dagger.hilt.android.testing.HiltAndroidRule
+import dagger.hilt.android.testing.HiltAndroidTest
+import javax.inject.Inject
import org.junit.Before
+import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
+@HiltAndroidTest
@MediumTest
@RunWith(AndroidJUnit4::class)
class WallpaperPreviewActivityTest {
+ @get:Rule var hiltRule = HiltAndroidRule(this)
+
+ @Inject lateinit var testInjector: TestInjector
+
private val testStaticWallpaper =
TestStaticWallpaperInfo(TestStaticWallpaperInfo.COLOR_DEFAULT).setWallpaperAttributions()
private val activityStartIntent =
@@ -45,7 +52,8 @@ class WallpaperPreviewActivityTest {
@Before
fun setUp() {
- InjectorProvider.setInjector(TestInjector())
+ hiltRule.inject()
+ InjectorProvider.setInjector(testInjector)
}
@Test
@@ -60,19 +68,6 @@ class WallpaperPreviewActivityTest {
}
}
- @Test
- fun launchActivity_setsWallpaperInfo() {
- val scenario: ActivityScenario<WallpaperPreviewActivity> =
- ActivityScenario.launch(activityStartIntent)
-
- scenario.onActivity { activity ->
- val provider = ViewModelProvider(activity)
- val viewModel = provider[WallpaperPreviewViewModel::class.java]
-
- assertThat(viewModel.editingWallpaper).isEqualTo(testStaticWallpaper)
- }
- }
-
private fun TestStaticWallpaperInfo.setWallpaperAttributions(): WallpaperInfo {
setAttributions(listOf("Title", "Subtitle 1", "Subtitle 2"))
setCollectionId("collectionStatic")
diff --git a/tests/src/com/android/wallpaper/picker/preview/ui/fragment/SmallPreviewFragmentTest.kt b/tests/src/com/android/wallpaper/picker/preview/ui/fragment/SmallPreviewFragmentTest.kt
index b47685b2..c661931e 100644
--- a/tests/src/com/android/wallpaper/picker/preview/ui/fragment/SmallPreviewFragmentTest.kt
+++ b/tests/src/com/android/wallpaper/picker/preview/ui/fragment/SmallPreviewFragmentTest.kt
@@ -19,6 +19,7 @@ import androidx.test.filters.MediumTest
import androidx.test.runner.AndroidJUnit4
import com.android.wallpaper.model.WallpaperInfo
import com.android.wallpaper.module.InjectorProvider
+import com.android.wallpaper.module.logging.TestUserEventLogger
import com.android.wallpaper.testing.TestInjector
import com.android.wallpaper.testing.TestStaticWallpaperInfo
import org.junit.Before
@@ -31,10 +32,11 @@ import org.junit.runner.RunWith
class SmallPreviewFragmentTest {
private val testStaticWallpaper =
TestStaticWallpaperInfo(TestStaticWallpaperInfo.COLOR_DEFAULT).setWallpaperAttributions()
+ private val testUserEventLogger = TestUserEventLogger()
@Before
fun setUp() {
- InjectorProvider.setInjector(TestInjector())
+ InjectorProvider.setInjector(TestInjector(testUserEventLogger))
}
@Test @Ignore("b/295958495") fun testWallpaperInfoIsNotNull() {}