• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.app.tracing.coroutines.createCoroutineTracingContext
20 import com.android.systemui.dagger.qualifiers.Application
21 import com.android.systemui.dagger.qualifiers.Main
22 import com.android.systemui.dagger.qualifiers.Tracing
23 import dagger.Module
24 import dagger.Provides
25 import javax.inject.Singleton
26 import kotlin.coroutines.CoroutineContext
27 import kotlinx.coroutines.CoroutineDispatcher
28 import kotlinx.coroutines.CoroutineScope
29 import kotlinx.coroutines.Dispatchers
30 import kotlinx.coroutines.ExperimentalCoroutinesApi
31 
32 /** Providers for various application-wide coroutines-related constructs. */
33 @Module
34 class GlobalCoroutinesModule {
35     @Provides
36     @Singleton
37     @Application
applicationScopenull38     fun applicationScope(
39         @Main dispatcherContext: CoroutineContext,
40     ): CoroutineScope = CoroutineScope(dispatcherContext)
41 
42     @Provides
43     @Singleton
44     @Main
45     @Deprecated(
46         "Use @Main CoroutineContext instead",
47         ReplaceWith("mainCoroutineContext()", "kotlin.coroutines.CoroutineContext")
48     )
49     fun mainDispatcher(): CoroutineDispatcher = Dispatchers.Main.immediate
50 
51     @Provides
52     @Singleton
53     @Main
54     fun mainCoroutineContext(@Tracing tracingCoroutineContext: CoroutineContext): CoroutineContext {
55         return Dispatchers.Main.immediate + tracingCoroutineContext
56     }
57 
58     @OptIn(ExperimentalCoroutinesApi::class)
59     @Provides
60     @Tracing
61     @Singleton
tracingCoroutineContextnull62     fun tracingCoroutineContext(): CoroutineContext {
63         return createCoroutineTracingContext()
64     }
65 }
66