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

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

Merge "[TP] Reuse clock views in clock carousel" into tm-qpr-dev

parents 8959e796 dafce39e
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import com.android.customization.model.theme.ThemeBundleProvider
import com.android.customization.model.theme.ThemeManager
import com.android.customization.picker.clock.data.repository.ClockRegistryProvider
import com.android.customization.picker.clock.domain.interactor.ClockPickerInteractor
import com.android.customization.picker.clock.ui.view.ClockViewFactory
import com.android.customization.picker.clock.ui.viewmodel.ClockCarouselViewModel
import com.android.customization.picker.clock.ui.viewmodel.ClockSectionViewModel
import com.android.customization.picker.color.domain.interactor.ColorPickerInteractor
@@ -71,4 +72,9 @@ interface CustomizationInjector : Injector {
        context: Context,
        clockRegistry: ClockRegistry,
    ): ClockCarouselViewModel

    fun getClockViewFactory(
        context: Context,
        registry: ClockRegistry,
    ): ClockViewFactory
}
+8 −2
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ import com.android.customization.picker.notifications.ui.section.NotificationSec
import com.android.customization.picker.notifications.ui.viewmodel.NotificationSectionViewModel;
import com.android.customization.picker.preview.ui.section.PreviewWithClockCarouselSectionController;
import com.android.customization.picker.preview.ui.section.PreviewWithClockCarouselSectionController.ClockCarouselViewModelProvider;
import com.android.customization.picker.preview.ui.section.PreviewWithClockCarouselSectionController.ClockViewFactoryProvider;
import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordancePickerInteractor;
import com.android.customization.picker.quickaffordance.ui.section.KeyguardQuickAffordanceSectionController;
import com.android.customization.picker.quickaffordance.ui.viewmodel.KeyguardQuickAffordancePickerViewModel;
@@ -53,6 +54,8 @@ public final class DefaultCustomizationSections implements CustomizationSections
    private final ClockRegistryProvider mClockRegistryProvider;
    private final PreviewWithClockCarouselSectionController.ClockCarouselViewModelProvider
            mClockCarouselViewModelProvider;
    private final PreviewWithClockCarouselSectionController.ClockViewFactoryProvider
            mClockViewFactoryProvider;

    public DefaultCustomizationSections(
            KeyguardQuickAffordancePickerInteractor keyguardQuickAffordancePickerInteractor,
@@ -61,7 +64,8 @@ public final class DefaultCustomizationSections implements CustomizationSections
            NotificationSectionViewModel.Factory notificationSectionViewModelFactory,
            BaseFlags flags,
            ClockRegistryProvider clockRegistryProvider,
            ClockCarouselViewModelProvider clockCarouselViewModelProvider) {
            ClockCarouselViewModelProvider clockCarouselViewModelProvider,
            ClockViewFactoryProvider clockViewFactoryProvider) {
        mKeyguardQuickAffordancePickerInteractor = keyguardQuickAffordancePickerInteractor;
        mKeyguardQuickAffordancePickerViewModelFactory =
                keyguardQuickAffordancePickerViewModelFactory;
@@ -69,6 +73,7 @@ public final class DefaultCustomizationSections implements CustomizationSections
        mFlags = flags;
        mClockRegistryProvider = clockRegistryProvider;
        mClockCarouselViewModelProvider = clockCarouselViewModelProvider;
        mClockViewFactoryProvider = clockViewFactoryProvider;
    }

    @Override
@@ -98,7 +103,8 @@ public final class DefaultCustomizationSections implements CustomizationSections
                        wallpaperColorsViewModel,
                        displayUtils,
                        mClockRegistryProvider,
                        mClockCarouselViewModelProvider)
                        mClockCarouselViewModelProvider,
                        mClockViewFactoryProvider)
                        : new ScreenPreviewSectionController(
                                activity,
                                lifecycleOwner,
+21 −3
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import com.android.customization.model.theme.ThemeManager
import com.android.customization.picker.clock.data.repository.ClockPickerRepositoryImpl
import com.android.customization.picker.clock.data.repository.ClockRegistryProvider
import com.android.customization.picker.clock.domain.interactor.ClockPickerInteractor
import com.android.customization.picker.clock.ui.view.ClockViewFactory
import com.android.customization.picker.clock.ui.viewmodel.ClockCarouselViewModel
import com.android.customization.picker.clock.ui.viewmodel.ClockSectionViewModel
import com.android.customization.picker.color.data.repository.ColorPickerRepositoryImpl
@@ -37,7 +38,8 @@ import com.android.customization.picker.notifications.data.repository.Notificati
import com.android.customization.picker.notifications.domain.interactor.NotificationsInteractor
import com.android.customization.picker.notifications.domain.interactor.NotificationsSnapshotRestorer
import com.android.customization.picker.notifications.ui.viewmodel.NotificationSectionViewModel
import com.android.customization.picker.preview.ui.section.PreviewWithClockCarouselSectionController
import com.android.customization.picker.preview.ui.section.PreviewWithClockCarouselSectionController.ClockCarouselViewModelProvider
import com.android.customization.picker.preview.ui.section.PreviewWithClockCarouselSectionController.ClockViewFactoryProvider
import com.android.customization.picker.quickaffordance.data.repository.KeyguardQuickAffordancePickerRepository
import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordancePickerInteractor
import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordanceSnapshotRestorer
@@ -79,6 +81,7 @@ open class ThemePickerInjector : WallpaperPicker2Injector(), CustomizationInject
    private var clockPickerInteractor: ClockPickerInteractor? = null
    private var clockSectionViewModel: ClockSectionViewModel? = null
    private var clockCarouselViewModel: ClockCarouselViewModel? = null
    private var clockViewFactory: ClockViewFactory? = null
    private var notificationsInteractor: NotificationsInteractor? = null
    private var notificationSectionViewModelFactory: NotificationSectionViewModel.Factory? = null
    private var colorPickerInteractor: ColorPickerInteractor? = null
@@ -94,14 +97,21 @@ open class ThemePickerInjector : WallpaperPicker2Injector(), CustomizationInject
                    ),
                    getFlags(),
                    getClockRegistryProvider(activity),
                    object :
                        PreviewWithClockCarouselSectionController.ClockCarouselViewModelProvider {
                    object : ClockCarouselViewModelProvider {
                        override fun get(registry: ClockRegistry): ClockCarouselViewModel {
                            return getClockCarouselViewModel(
                                context = activity,
                                clockRegistry = registry,
                            )
                        }
                    },
                    object : ClockViewFactoryProvider {
                        override fun get(registry: ClockRegistry): ClockViewFactory {
                            return getClockViewFactory(
                                context = activity,
                                registry = registry,
                            )
                        }
                    }
                )
                .also { customizationSections = it }
@@ -293,6 +303,14 @@ open class ThemePickerInjector : WallpaperPicker2Injector(), CustomizationInject
            }
    }

    override fun getClockViewFactory(
        context: Context,
        registry: ClockRegistry,
    ): ClockViewFactory {
        return clockViewFactory
            ?: ClockViewFactory(context, registry).also { clockViewFactory = it }
    }

    protected fun getNotificationsInteractor(
        context: Context,
    ): NotificationsInteractor {
+5 −1
Original line number Diff line number Diff line
@@ -69,7 +69,11 @@ class ClockCarouselView(
        override fun populate(view: View?, index: Int) {
            val viewGroup = view as ViewGroup
            viewGroup.removeAllViews()
            viewGroup.addView(onGetClockPreview(clockIds[index]))
            val clockView = onGetClockPreview(clockIds[index])
            // The clock view might still be attached to an existing parent. Detach before adding to
            // another parent.
            (clockView.parent as? ViewGroup)?.removeView(clockView)
            viewGroup.addView(clockView)
        }

        override fun onNewItem(index: Int) {
+24 −0
Original line number Diff line number Diff line
package com.android.customization.picker.clock.ui.view

import android.content.Context
import android.view.View
import com.android.systemui.plugins.ClockController
import com.android.systemui.shared.clocks.ClockRegistry
import java.util.HashMap

class ClockViewFactory(private val context: Context, private val registry: ClockRegistry) {
    private val clockControllers: HashMap<String, ClockController> =
        HashMap<String, ClockController>()

    fun getView(clockId: String): View {
        return (clockControllers[clockId] ?: initClockController(clockId)).largeClock.view
    }

    private fun initClockController(clockId: String): ClockController {
        val controller =
            registry.createExampleClock(clockId).also { it?.initialize(context.resources, 0f, 0f) }
        checkNotNull(controller)
        clockControllers[clockId] = controller
        return controller
    }
}
Loading