1 package com.android.onboarding.tasks.crossApp 2 3 import android.content.Context 4 import com.android.onboarding.tasks.OnboardingTaskContract 5 import com.android.onboarding.tasks.OnboardingTaskStateManager 6 import com.android.onboarding.tasks.OnboardingTaskToken 7 8 /** 9 * Manages the execution of cross-process tasks. 10 * 11 * This class facilitates the execution of tasks that need to run in a separate process. It provides 12 * methods for running tasks and query the tasks. 13 */ 14 class CrossProcessTaskManager 15 private constructor( 16 private val appContext: Context, 17 private val taskStateManager: OnboardingTaskStateManager, 18 ) { 19 20 fun < 21 TaskArgsT, 22 TaskResultT, 23 TaskContractT : OnboardingTaskContract<TaskArgsT, TaskResultT>, runTasknull24 > runTask(contract: TaskContractT, args: TaskArgsT): OnboardingTaskToken { 25 val onboardingTaskServiceItem = OnboardingTaskServiceItem(appContext, taskStateManager) 26 27 // Trigger cross process task. 28 val taskToken = 29 onboardingTaskServiceItem.runTask(contract as OnboardingTaskContract<Any?, Any?>, args) 30 31 return taskToken 32 } 33 34 companion object { 35 @Volatile // Mark as volatile for thread safety 36 private var instance: CrossProcessTaskManager? = null 37 getInstancenull38 fun getInstance( 39 context: Context, 40 taskStateManager: OnboardingTaskStateManager, 41 ): CrossProcessTaskManager { 42 return instance 43 ?: synchronized(this) { 44 instance ?: CrossProcessTaskManager(context, taskStateManager).also { instance = it } 45 } 46 } 47 } 48 } 49