Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 47698608 authored by George Lin's avatar George Lin Committed by Android (Google) Code Review
Browse files

Merge "[TP] Preview on clock settings screen" into tm-qpr-dev

parents b6239929 423c6585
Loading
Loading
Loading
Loading
+22 −10
Original line number Diff line number Diff line
@@ -24,25 +24,37 @@
        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">

        <com.android.wallpaper.picker.DisplayAspectRatioFrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <include
            android:id="@+id/preview"
                android:id="@+id/lock_preview"
                layout="@layout/wallpaper_preview_card"
            android:layout_width="0dp"
                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"
        android:layout_height="wrap_content"
+51 −22
Original line number Diff line number Diff line
@@ -19,20 +19,24 @@ import android.os.Bundle
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 @@ class ClockSettingsFragment : AppbarFragment() {
                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()),
        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,
                                    )
                .get()
        KeyguardQuickAffordancePreviewBinder.bind(
            activity = requireActivity(),
            previewView = view.requireViewById(R.id.preview),
            viewModel = viewModel,
                            }
                        },
                        onWallpaperColorChanged = { colors ->
                            colorViewModel.setLockWallpaperColors(colors)
                        },
                    ),
                lifecycleOwner = this,
            offsetToStart =
                injector.getDisplayUtils(requireActivity()).isOnWallpaperDisplay(requireActivity())
                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,
            )