Merge "[TP] Preview on clock settings screen" into tm-qpr-dev am: 4769860862
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/ThemePicker/+/21170540
Change-Id: Ide6f3a40b98a14a8c9e95835e41587bb5e3a2def
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/res/layout/fragment_clock_settings.xml b/res/layout/fragment_clock_settings.xml
index 7268b34..13cec45 100644
--- a/res/layout/fragment_clock_settings.xml
+++ b/res/layout/fragment_clock_settings.xml
@@ -24,24 +24,36 @@
android:id="@+id/section_header_container"
android:layout_width="match_parent"
android:layout_height="wrap_content">
-
<include layout="@layout/section_header" />
</FrameLayout>
- <com.android.wallpaper.picker.DisplayAspectRatioFrameLayout
+ <FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:paddingTop="36dp"
android:paddingBottom="40dp">
- <include
- android:id="@+id/preview"
- layout="@layout/wallpaper_preview_card"
- android:layout_width="0dp"
- android:layout_height="match_parent"
- android:layout_gravity="center"/>
- </com.android.wallpaper.picker.DisplayAspectRatioFrameLayout>
+ <com.android.wallpaper.picker.DisplayAspectRatioFrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <include
+ android:id="@+id/lock_preview"
+ layout="@layout/wallpaper_preview_card"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_gravity="center" />
+
+ </com.android.wallpaper.picker.DisplayAspectRatioFrameLayout>
+
+ <com.android.customization.picker.clock.ui.view.ClockCarouselView
+ android:id="@+id/clock_carousel_view"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:visibility="gone" />
+ </FrameLayout>
<LinearLayout
android:layout_width="match_parent"
@@ -63,7 +75,7 @@
android:layout_height="wrap_content"
android:clipToPadding="false"
android:paddingHorizontal="16dp"
- android:layout_gravity="center_horizontal"/>
+ android:layout_gravity="center_horizontal" />
<!--
This is just an invisible placeholder put in place so that the parent keeps its height
diff --git a/src/com/android/customization/picker/clock/ui/fragment/ClockSettingsFragment.kt b/src/com/android/customization/picker/clock/ui/fragment/ClockSettingsFragment.kt
index c8d2434..56dd310 100644
--- a/src/com/android/customization/picker/clock/ui/fragment/ClockSettingsFragment.kt
+++ b/src/com/android/customization/picker/clock/ui/fragment/ClockSettingsFragment.kt
@@ -19,20 +19,24 @@
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import androidx.cardview.widget.CardView
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.get
import androidx.lifecycle.lifecycleScope
import com.android.customization.module.ThemePickerInjector
import com.android.customization.picker.clock.ui.binder.ClockSettingsBinder
import com.android.customization.picker.clock.ui.viewmodel.ClockSettingsViewModel
-import com.android.customization.picker.quickaffordance.ui.binder.KeyguardQuickAffordancePreviewBinder
-import com.android.customization.picker.quickaffordance.ui.viewmodel.KeyguardQuickAffordancePickerViewModel
import com.android.wallpaper.R
+import com.android.wallpaper.model.WallpaperColorsViewModel
import com.android.wallpaper.module.InjectorProvider
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.util.PreviewUtils
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.launch
+import kotlinx.coroutines.suspendCancellableCoroutine
import kotlinx.coroutines.withContext
@OptIn(ExperimentalCoroutinesApi::class)
@@ -58,34 +62,59 @@
false,
)
setUpToolbar(view)
+
+ val context = requireContext()
+ val activity = requireActivity()
val injector = InjectorProvider.getInjector() as ThemePickerInjector
- // TODO(b/262924055): Modify to render the lockscreen properly
- val viewModel: KeyguardQuickAffordancePickerViewModel =
- ViewModelProvider(
- requireActivity(),
- injector.getKeyguardQuickAffordancePickerViewModelFactory(requireContext()),
- )
- .get()
- KeyguardQuickAffordancePreviewBinder.bind(
- activity = requireActivity(),
- previewView = view.requireViewById(R.id.preview),
- viewModel = viewModel,
- lifecycleOwner = this,
- offsetToStart =
- injector.getDisplayUtils(requireActivity()).isOnWallpaperDisplay(requireActivity())
- )
+ val lockScreenView: CardView = view.requireViewById(R.id.lock_preview)
+ val colorViewModel = ViewModelProvider(activity)[WallpaperColorsViewModel::class.java]
+ val displayUtils = injector.getDisplayUtils(context)
+ ScreenPreviewBinder.bind(
+ activity = activity,
+ previewView = lockScreenView,
+ viewModel =
+ ScreenPreviewViewModel(
+ previewUtils =
+ PreviewUtils(
+ context = context,
+ authority =
+ resources.getString(
+ R.string.lock_screen_preview_provider_authority,
+ ),
+ ),
+ wallpaperInfoProvider = {
+ suspendCancellableCoroutine { continuation ->
+ injector
+ .getCurrentWallpaperInfoFactory(context)
+ .createCurrentWallpaperInfos(
+ { homeWallpaper, lockWallpaper, _ ->
+ continuation.resume(
+ homeWallpaper ?: lockWallpaper,
+ null,
+ )
+ },
+ /* forceRefresh= */ true,
+ )
+ }
+ },
+ onWallpaperColorChanged = { colors ->
+ colorViewModel.setLockWallpaperColors(colors)
+ },
+ ),
+ lifecycleOwner = this,
+ offsetToStart = displayUtils.isOnWallpaperDisplay(activity),
+ )
+ .show()
lifecycleScope.launch {
val clockRegistry =
- withContext(Dispatchers.IO) {
- injector.getClockRegistryProvider(requireContext()).get()
- }
+ withContext(Dispatchers.IO) { injector.getClockRegistryProvider(context).get() }
ClockSettingsBinder.bind(
view,
ClockSettingsViewModel(
- requireContext(),
- injector.getClockPickerInteractor(requireContext(), clockRegistry)
+ context,
+ injector.getClockPickerInteractor(context, clockRegistry)
),
this@ClockSettingsFragment,
)