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

Commit ad0c93ea authored by Hawkwood Glazier's avatar Hawkwood Glazier
Browse files

Add Coroutine objects to ClockRegistryProvider

Bug: 265061202
Bug: 267372164
Test: Manually checked multiuser WPPG
Change-Id: I967eba0bc79870d816f326770c2025e68e9f7cec
parent c98daa60
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(