1 /* 2 * Copyright (C) 2024 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.systemui.util.kotlin 18 19 import com.android.systemui.coroutines.newTracingContext 20 import com.android.systemui.dagger.qualifiers.Application 21 import com.android.systemui.dagger.qualifiers.Main 22 import dagger.Module 23 import dagger.Provides 24 import javax.inject.Singleton 25 import kotlin.coroutines.CoroutineContext 26 import kotlinx.coroutines.CoroutineDispatcher 27 import kotlinx.coroutines.CoroutineScope 28 import kotlinx.coroutines.Dispatchers 29 30 /** Providers for various application-wide coroutines-related constructs. */ 31 @Module 32 class GlobalCoroutinesModule { 33 @Provides 34 @Singleton 35 @Application applicationScopenull36 fun applicationScope(@Main dispatcherContext: CoroutineContext): CoroutineScope = 37 CoroutineScope(dispatcherContext + newTracingContext("ApplicationScope")) 38 39 @Provides 40 @Singleton 41 @Main 42 @Deprecated( 43 "Use @Main CoroutineContext instead", 44 ReplaceWith("mainCoroutineContext()", "kotlin.coroutines.CoroutineContext"), 45 ) 46 fun mainDispatcher(): CoroutineDispatcher = Dispatchers.Main.immediate 47 48 @Provides 49 @Singleton 50 @Main 51 fun mainCoroutineContext(): CoroutineContext { 52 return Dispatchers.Main.immediate 53 } 54 } 55