MainViewModel.kt
package com.gyleedev.githubsearch.ui
import android.net.Uri
import android.os.Build
import androidx.annotation.RequiresExtension
import androidx.lifecycle.viewModelScope
import com.gyleedev.githubsearch.BuildConfig
import com.gyleedev.githubsearch.domain.model.GetAccessTokenUseCaseResult
import com.gyleedev.githubsearch.domain.usecase.GetAccessTokenUseCase
import com.gyleedev.ui.BaseViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.launch
import javax.inject.Inject
/*
getAccessTokenUseCase -> repositoryGetAccessToken 있으면 repositorySaveToken
하고 리턴
*/
@HiltViewModel
class MainViewModel @Inject constructor(
private val getAccessTokenUseCase: GetAccessTokenUseCase,
) : BaseViewModel() {
private val _alertLoginSuccess = MutableSharedFlow<GetAccessTokenUseCaseResult>()
val alertLoginSuccess: SharedFlow<GetAccessTokenUseCaseResult> = _alertLoginSuccess
private val _launchOAuthEvent = MutableSharedFlow<String>()
val launchOAuthEvent: SharedFlow<String> = _launchOAuthEvent
@RequiresExtension(extension = Build.VERSION_CODES.S, version = 7)
fun getAccessToken(code: String) {
viewModelScope.launch(exceptionHandler) {
val result = getAccessTokenUseCase(code)
_alertLoginSuccess.emit(result)
}
}
@RequiresExtension(extension = Build.VERSION_CODES.S, version = 7)
fun requestGithubLogin() {
val clientId = BuildConfig.CLIENT_ID
val loginUrl =
Uri.Builder()
.scheme("https")
.authority("github.com")
.appendPath("login")
.appendPath("oauth")
.appendPath("authorize")
.appendQueryParameter("client_id", clientId)
.build()
.toString()
viewModelScope.launch(exceptionHandler) {
_launchOAuthEvent.emit(loginUrl)
}
}
}