Skip to content

Commit

Permalink
[feat/#76] network 자동로그인 처리
Browse files Browse the repository at this point in the history
  • Loading branch information
Mnseo committed Feb 7, 2024
1 parent 5f15315 commit 1296d4c
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 3 deletions.
1 change: 1 addition & 0 deletions data/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>
Original file line number Diff line number Diff line change
@@ -1,19 +1,24 @@
package com.kusitms.data.repository

import android.content.Context
import android.net.ConnectivityManager
import com.kusitms.data.local.AuthDataStore
import com.kusitms.data.local.DataStoreUtils
import com.kusitms.data.remote.api.KusitmsApi
import com.kusitms.domain.model.login.LoginMemberProfile
import com.kusitms.domain.model.login.TokenModel
import com.kusitms.domain.repository.AuthRepository
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.flow
import javax.inject.Inject


class AuthRepositoryImpl @Inject constructor(
private val authDataStore: AuthDataStore,
private val kusitmsApi: KusitmsApi
private val kusitmsApi: KusitmsApi,
@ApplicationContext private val context: Context
): AuthRepository {
override suspend fun getLoginMemberProfile(): Result<LoginMemberProfile?> {
return try {
Expand Down Expand Up @@ -64,4 +69,10 @@ class AuthRepositoryImpl @Inject constructor(
Result.failure(e)
}
}

override fun checkInternetConnection(): Boolean {
val connectivity = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val activeNetwork = connectivity.activeNetworkInfo
return activeNetwork != null && activeNetwork.isConnected
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,6 @@ interface AuthRepository {
suspend fun signOutMember(): Result<Unit>

suspend fun getAuthToken() :Result<TokenModel?>

fun checkInternetConnection(): Boolean
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.kusitms.domain.usecase.home

import com.kusitms.domain.repository.AuthRepository
import javax.inject.Inject

class GetNetworkStatusUseCase @Inject constructor(
private val authRepository: AuthRepository
) {
operator fun invoke(): Boolean {
return authRepository.checkInternetConnection()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.kusitms.presentation.model.signIn

import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.kusitms.domain.usecase.home.GetNetworkStatusUseCase
import com.kusitms.domain.usecase.signin.GetAuthTokenUseCase
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
Expand All @@ -14,22 +15,39 @@ enum class TokenStatus { VALID, INVALID, DEFAULT }

@HiltViewModel
class SplashViewModel @Inject constructor(
private val getAuthTokenUseCase: GetAuthTokenUseCase
private val getAuthTokenUseCase: GetAuthTokenUseCase,
private val getNetworkStatusUseCase: GetNetworkStatusUseCase
): ViewModel() {

private val _tokenStatus = MutableStateFlow(TokenStatus.DEFAULT)
val tokenStatus: StateFlow<TokenStatus> = _tokenStatus

private val _networkStatus = MutableStateFlow(false)
val networkStatus : StateFlow<Boolean> = _networkStatus

fun updateTokenStatus(tokenStatus: TokenStatus) {
_tokenStatus.value = tokenStatus
}

fun updateNetworkStatus(networkStatus: Boolean) {
_networkStatus.value = networkStatus
}

init {
verifyToken()
}

fun verifyToken() {
viewModelScope.launch {
getAuthTokenUseCase()
.onSuccess { tokenModel ->
if (tokenModel != null) {
updateTokenStatus(TokenStatus.VALID)
_networkStatus.value = getNetworkStatusUseCase()
if(_networkStatus.value) {
updateTokenStatus(TokenStatus.VALID)
} else {
updateTokenStatus(TokenStatus.INVALID)
}
} else {
// 토큰이 존재하지 않는 경우 (로그인 전)
updateTokenStatus(TokenStatus.DEFAULT)
Expand Down

0 comments on commit 1296d4c

Please sign in to comment.