1 package com.android.onboarding.tasks 2 3 import java.util.concurrent.ConcurrentHashMap 4 5 /** 6 * Manages the states of onboarding tasks in a centralized and thread-safe manner. 7 * 8 * [OnboardingTaskStateManager] allows you to track/update the progress and results of individual 9 * onboarding tasks, identified by unique [OnboardingTaskToken] instances. 10 */ 11 class OnboardingTaskStateManager { 12 13 private val taskStates = ConcurrentHashMap<OnboardingTaskToken, OnboardingTaskState<*>>() 14 15 /** 16 * Updates the state of an onboarding task. 17 * 18 * @param token The [OnboardingTaskToken] identifying the task. 19 * @param state The updated [OnboardingTaskState] object representing the task's new state. The 20 * type of the result within the state object is flexible. 21 */ updateTaskStatenull22 fun updateTaskState(token: OnboardingTaskToken, state: OnboardingTaskState<*>) { 23 taskStates[token] = state 24 } 25 26 /** 27 * Retrieves the current state of an onboarding task. 28 * 29 * @param token The [OnboardingTaskToken] identifying the task. 30 * @return The [OnboardingTaskState] object associated with the task. If no state is found for the 31 * provided token, a [OnboardingTaskState.Failed] with the error message 32 * [ERROR_TASK_CANT_BE_FOUND] is returned. 33 */ getTaskStatenull34 fun <ResultT> getTaskState(token: OnboardingTaskToken): OnboardingTaskState<ResultT> { 35 return taskStates[token] as? OnboardingTaskState<ResultT> 36 ?: OnboardingTaskState.Failed<ResultT>(ERROR_TASK_CANT_BE_FOUND) 37 } 38 } 39