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

Commit 6e17da6e authored by Hawkwood Glazier's avatar Hawkwood Glazier Committed by Android (Google) Code Review
Browse files

Merge "Add Coroutine objects to ClockRegistryProvider" into tm-qpr-dev

parents 6723d37b ad0c93ea
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -285,7 +285,13 @@ open class ThemePickerInjector : WallpaperPicker2Injector(), CustomizationInject

    override fun getClockRegistryProvider(context: Context): ClockRegistryProvider {
        return clockRegistryProvider
            ?: ClockRegistryProvider(context).also { clockRegistryProvider = it }
            ?: ClockRegistryProvider(
                    context = context,
                    coroutineScope = GlobalScope,
                    mainDispatcher = Dispatchers.Main,
                    backgroundDispatcher = Dispatchers.IO,
                )
                .also { clockRegistryProvider = it }
    }

    override fun getClockPickerInteractor(
+15 −9
Original line number Diff line number Diff line
@@ -18,8 +18,6 @@ package com.android.customization.picker.clock.data.repository
import android.app.NotificationManager
import android.content.ComponentName
import android.content.Context
import android.os.Handler
import android.os.UserHandle
import android.view.LayoutInflater
import com.android.systemui.plugins.ClockProviderPlugin
import com.android.systemui.plugins.Plugin
@@ -34,6 +32,8 @@ import com.android.systemui.shared.plugins.PluginManagerImpl
import com.android.systemui.shared.plugins.PluginPrefs
import com.android.systemui.shared.system.UncaughtExceptionPreHandlerManager_Factory
import java.util.concurrent.Executors
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.suspendCancellableCoroutine

/**
@@ -42,17 +42,23 @@ import kotlinx.coroutines.suspendCancellableCoroutine
 */
class ClockRegistryProvider(
    private val context: Context,
    private val coroutineScope: CoroutineScope,
    private val mainDispatcher: CoroutineDispatcher,
    private val backgroundDispatcher: CoroutineDispatcher,
) {
    private val pluginManager: PluginManager by lazy { createPluginManager(context) }
    private val clockRegistry: ClockRegistry by lazy {
        ClockRegistry(
                context,
                pluginManager,
            Handler.getMain(),
                coroutineScope,
                mainDispatcher,
                backgroundDispatcher,
                isEnabled = true,
            userHandle = UserHandle.USER_SYSTEM,
                handleAllUsers = false,
                DefaultClockProvider(context, LayoutInflater.from(context), context.resources)
            )
            .apply { registerListeners() }
    }

    suspend fun get(): ClockRegistry {
+12 −35
Original line number Diff line number Diff line
package com.android.customization.picker.clock.ui.fragment

import android.os.Handler
import android.os.UserHandle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.android.systemui.plugins.ClockMetadata
import com.android.systemui.plugins.ClockProvider
import com.android.systemui.plugins.ClockSettings
import com.android.systemui.plugins.PluginManager
import com.android.systemui.shared.clocks.ClockRegistry
@@ -16,7 +13,8 @@ import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when` as whenever
import org.mockito.MockitoAnnotations
import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner
@@ -28,10 +26,8 @@ import org.robolectric.annotation.Config
class ClockCustomDemoFragmentTest {
    private lateinit var mActivity: AppCompatActivity
    private var mClockCustomDemoFragment: ClockCustomDemoFragment? = null
    private lateinit var registry: ClockRegistry
    @Mock private lateinit var registry: ClockRegistry
    @Mock private lateinit var mockPluginManager: PluginManager
    @Mock private lateinit var mockHandler: Handler
    @Mock private lateinit var defaultClockProvider: ClockProvider

    private var settingValue: ClockSettings? = null

@@ -40,33 +36,14 @@ class ClockCustomDemoFragmentTest {
        MockitoAnnotations.initMocks(this)
        mActivity = Robolectric.buildActivity(AppCompatActivity::class.java).get()
        mClockCustomDemoFragment = ClockCustomDemoFragment()
        Mockito.`when`(defaultClockProvider.getClocks())
            .thenReturn(listOf(ClockMetadata("DEFAULT", "Default Clock")))
        registry =
            object :
                ClockRegistry(
                    mActivity,
                    mockPluginManager,
                    mockHandler,
                    isEnabled = true,
                    userHandle = UserHandle.USER_ALL,
                    defaultClockProvider = defaultClockProvider
                ) {
                override var settings: ClockSettings?
                    get() = settingValue
                    set(value) {
                        settingValue = value
                    }

                override fun getClocks(): List<ClockMetadata> {
                    return defaultClockProvider.getClocks() +
        whenever(registry.getClocks())
            .thenReturn(
                listOf(
                    ClockMetadata("CLOCK_1", "Clock 1"),
                    ClockMetadata("CLOCK_2", "Clock 2"),
                    ClockMetadata("CLOCK_NOT_IN_USE", "Clock not in use")
                )
                }
            }
            )

        mClockCustomDemoFragment!!.clockRegistry = registry
        mClockCustomDemoFragment!!.recyclerView = RecyclerView(mActivity)
@@ -91,6 +68,6 @@ class ClockCustomDemoFragmentTest {
            .findViewHolderForAdapterPosition(testPosition)
            ?.itemView
            ?.performClick()
        Assert.assertEquals("CLOCK_1", settingValue?.clockId)
        verify(registry).currentClockId = "CLOCK_1"
    }
}
+9 −5
Original line number Diff line number Diff line
@@ -30,7 +30,8 @@ import com.android.wallpaper.module.PackageStatusNotifier
import com.android.wallpaper.module.UserEventLogger
import com.android.wallpaper.picker.undo.domain.interactor.SnapshotRestorer
import com.android.wallpaper.testing.TestInjector
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope

/** Test implementation of the dependency injector. */
class TestCustomizationInjector : TestInjector(), CustomizationInjector {
@@ -98,9 +99,10 @@ class TestCustomizationInjector : TestInjector(), CustomizationInjector {
    private fun createCustomizationProviderClient(
        context: Context
    ): KeyguardQuickAffordancePickerInteractor {
        val client: CustomizationProviderClient = CustomizationProviderClientImpl(context, IO)
        val client: CustomizationProviderClient =
            CustomizationProviderClientImpl(context, Dispatchers.IO)
        return KeyguardQuickAffordancePickerInteractor(
            KeyguardQuickAffordancePickerRepository(client, IO),
            KeyguardQuickAffordancePickerRepository(client, Dispatchers.IO),
            client
        ) { getKeyguardQuickAffordanceSnapshotRestorer(context) }
    }
@@ -121,7 +123,7 @@ class TestCustomizationInjector : TestInjector(), CustomizationInjector {
        context: Context
    ): CustomizationProviderClient {
        return customizationProviderClient
            ?: CustomizationProviderClientImpl(context, IO).also {
            ?: CustomizationProviderClientImpl(context, Dispatchers.IO).also {
                customizationProviderClient = it
            }
    }
@@ -139,7 +141,9 @@ class TestCustomizationInjector : TestInjector(), CustomizationInjector {

    override fun getClockRegistryProvider(context: Context): ClockRegistryProvider {
        return clockRegistryProvider
            ?: ClockRegistryProvider(context).also { clockRegistryProvider = it }
            ?: ClockRegistryProvider(context, GlobalScope, Dispatchers.Main, Dispatchers.IO).also {
                clockRegistryProvider = it
            }
    }

    override fun getClockPickerInteractor(