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.intentresolver.inject 18 19 import dagger.Module 20 import dagger.Provides 21 import dagger.hilt.InstallIn 22 import dagger.hilt.android.ViewModelLifecycle 23 import dagger.hilt.android.components.ViewModelComponent 24 import dagger.hilt.android.scopes.ViewModelScoped 25 import kotlin.coroutines.CoroutineContext 26 import kotlin.coroutines.EmptyCoroutineContext 27 import kotlinx.coroutines.CoroutineDispatcher 28 import kotlinx.coroutines.CoroutineScope 29 import kotlinx.coroutines.cancel 30 31 @Module 32 @InstallIn(ViewModelComponent::class) 33 object ViewModelCoroutineScopeModule { 34 @Provides 35 @ViewModelScoped 36 @ViewModelOwned viewModelScopenull37 fun viewModelScope(@Main dispatcher: CoroutineDispatcher, lifecycle: ViewModelLifecycle) = 38 lifecycle.asCoroutineScope(dispatcher) 39 } 40 41 fun ViewModelLifecycle.asCoroutineScope(context: CoroutineContext = EmptyCoroutineContext) = 42 CoroutineScope(context).also { addOnClearedListener { it.cancel() } } 43