blob: 21d39cc3a19a56729c8ebef0b75ef798b64fbafb [file]
package com.android.onboarding.tasks
import android.content.Context
import java.util.concurrent.ConcurrentHashMap
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.cancel
@Deprecated("We will remove this class very soon after we fix the build error in cl/619298504.")
class DefaultOnboardingTaskManager
private constructor(appContext: Context, coroutineScope: CoroutineScope) :
AbstractOnboardingTaskManager(appContext, coroutineScope) {
override val componentName = "DefaultOnboardingTaskManager"
override fun initializeContractAndTaskMap() =
ConcurrentHashMap<Class<out OnboardingTaskContract<*, *>>, Class<out OnboardingTask<*, *, *>>>()
/**
* Gets an instance of [DefaultOnboardingTaskManager], creating one if it does not exist.
*
* @return The singleton instance of [DefaultOnboardingTaskManager].
*/
companion object {
const val TAG: String = "DefaultOTM"
private var instance: DefaultOnboardingTaskManager? = null
/**
* Gets an instance of [DefaultOnboardingTaskManager], creating one if it does not exist. A
* default coroutine scope with [Dispatchers.Default] and [SupervisorJob] will be used for this
* function.
*
* @param appContext The application context.
* @return The singleton instance of [DefaultOnboardingTaskManager].
*/
fun getInstance(appContext: Context): DefaultOnboardingTaskManager {
return getInstance(appContext, CoroutineScope(Dispatchers.Default + SupervisorJob()))
}
/**
* Gets an instance of [DefaultOnboardingTaskManager], creating one if it does not exist. You
* can customize the coroutine scope by providing your own [CoroutineScope] instance. If not
* provided, a default coroutine scope with [Dispatchers.Default] and [SupervisorJob] will be
* used.
*
* @param appContext The application context.
* @param coroutineScope The optional [CoroutineScope] for custom coroutine handling.
* @return The singleton instance of [DefaultOnboardingTaskManager].
*/
fun getInstance(
appContext: Context,
coroutineScope: CoroutineScope? = null,
): DefaultOnboardingTaskManager {
return instance
?: synchronized(this) {
instance
?: DefaultOnboardingTaskManager(
appContext,
coroutineScope ?: CoroutineScope(Dispatchers.Default + SupervisorJob()),
)
.also { instance = it }
}
}
fun release() {
instance?.coroutineScope?.cancel()
instance = null
}
}
}