diff --git a/app/src/main/java/com/eatssu/android/presentation/MainViewModel.kt b/app/src/main/java/com/eatssu/android/presentation/MainViewModel.kt index d3890987..738847c5 100644 --- a/app/src/main/java/com/eatssu/android/presentation/MainViewModel.kt +++ b/app/src/main/java/com/eatssu/android/presentation/MainViewModel.kt @@ -6,6 +6,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.eatssu.android.R +import com.eatssu.android.data.MySharedPreferences import com.eatssu.android.domain.repository.UserRepository import com.eatssu.android.domain.usecase.auth.LogoutUseCase import com.eatssu.android.domain.usecase.user.GetUserCollegeDepartmentUseCase @@ -33,7 +34,11 @@ class MainViewModel @Inject constructor( @ApplicationContext private val context: Context ) : ViewModel() { - private val _uiState: MutableStateFlow> = MutableStateFlow(UiState.Init) + private val _uiState: MutableStateFlow> = MutableStateFlow( + UiState.Success( + MainState.DepartmentState(MySharedPreferences.getUserDepartmentName(context)) + ) + ) val uiState: StateFlow> = _uiState.asStateFlow() private val _uiEvent = MutableSharedFlow() diff --git a/app/src/main/java/com/eatssu/android/presentation/map/MapFragmentView.kt b/app/src/main/java/com/eatssu/android/presentation/map/MapFragmentView.kt index 7d83fca4..8b7e820d 100644 --- a/app/src/main/java/com/eatssu/android/presentation/map/MapFragmentView.kt +++ b/app/src/main/java/com/eatssu/android/presentation/map/MapFragmentView.kt @@ -42,7 +42,6 @@ import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.viewmodel.compose.viewModel import com.eatssu.android.R -import com.eatssu.android.data.MySharedPreferences import com.eatssu.android.domain.model.RestaurantType import com.eatssu.android.presentation.MainState import com.eatssu.android.presentation.MainViewModel @@ -103,8 +102,8 @@ fun MapFragmentComposeView( val scope = rememberCoroutineScope() var selectedFilter by remember { mutableStateOf(FilterType.All) } - val departmentId = MySharedPreferences.getUserDepartmentId(context).toLong() - val collegeId = MySharedPreferences.getUserCollegeId(context).toLong() + val departmentId = viewModel.departmentId + val collegeId = viewModel.collegeId val cameraPositionState = rememberCameraPositionState { position = CameraPosition( @@ -128,15 +127,16 @@ fun MapFragmentComposeView( } } - // MainState + // MainState에서 학과 정보 가져오기 val (departmentName, showUserDepartmentBottomSheet) = when (val state = mainUiState) { is UiState.Success -> { when (val data = state.data) { is MainState.DepartmentState -> data.departmentName to data.showUserDepartmentBottomSheet - else -> "" to false + else -> "학과" to false } } - else -> "" to false + + else -> "학과" to false } LaunchedEffect(Unit) { @@ -230,7 +230,6 @@ fun MapFragmentComposeView( ) }, ) { innerPadding -> - Timber.d("학과 정보 : ${MySharedPreferences.getUserDepartmentName(context)}") // 학과 정보가 없을 때 보여줄 BottomSheet if (sheetState.isVisible) { diff --git a/app/src/main/java/com/eatssu/android/presentation/map/MapViewModel.kt b/app/src/main/java/com/eatssu/android/presentation/map/MapViewModel.kt index e145c206..3ac652cc 100644 --- a/app/src/main/java/com/eatssu/android/presentation/map/MapViewModel.kt +++ b/app/src/main/java/com/eatssu/android/presentation/map/MapViewModel.kt @@ -1,21 +1,26 @@ package com.eatssu.android.presentation.map +import android.content.Context import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.eatssu.android.data.MySharedPreferences import com.eatssu.android.domain.model.Partnership import com.eatssu.android.domain.model.PartnershipRestaurant import com.eatssu.android.domain.repository.PartnershipRepository import com.eatssu.android.domain.usecase.user.GetPartnershipDetailUseCase +import com.eatssu.android.domain.usecase.user.GetUserCollegeDepartmentUseCase import com.eatssu.android.presentation.UiEvent import com.eatssu.android.presentation.UiState import com.eatssu.android.presentation.map.model.RestaurantInfo import dagger.hilt.android.lifecycle.HiltViewModel +import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch +import timber.log.Timber import javax.inject.Inject data class MapState( @@ -33,6 +38,8 @@ data class MapState( class MapViewModel @Inject constructor( private val partnershipRepository: PartnershipRepository, private val getPartnershipDetailUseCase: GetPartnershipDetailUseCase, + getUserCollegeDepartmentUseCase: GetUserCollegeDepartmentUseCase, + @ApplicationContext private val context: Context, ) : ViewModel() { private val _uiState: MutableStateFlow> = MutableStateFlow(UiState.Init) @@ -41,7 +48,12 @@ class MapViewModel @Inject constructor( private val _uiEvent = MutableSharedFlow() val uiEvent: SharedFlow = _uiEvent + private val userCollegeDepartment = getUserCollegeDepartmentUseCase() + val departmentId: Long = userCollegeDepartment.userDepartment.departmentId.toLong() + val collegeId: Long = userCollegeDepartment.userCollege.collegeId.toLong() + init { + Timber.d("학과 정보 : ${MySharedPreferences.getUserDepartmentName(context)}") loadPartnerships() } diff --git a/app/src/main/java/com/eatssu/android/presentation/mypage/MyPageViewModel.kt b/app/src/main/java/com/eatssu/android/presentation/mypage/MyPageViewModel.kt index b028e43f..bb034f6f 100644 --- a/app/src/main/java/com/eatssu/android/presentation/mypage/MyPageViewModel.kt +++ b/app/src/main/java/com/eatssu/android/presentation/mypage/MyPageViewModel.kt @@ -1,8 +1,10 @@ package com.eatssu.android.presentation.mypage +import android.content.Context import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.eatssu.android.BuildConfig +import com.eatssu.android.data.MySharedPreferences import com.eatssu.android.data.repository.PreferencesRepository import com.eatssu.android.domain.usecase.alarm.AlarmUseCase import com.eatssu.android.domain.usecase.alarm.SetDailyNotificationStatusUseCase @@ -10,6 +12,8 @@ import com.eatssu.android.domain.usecase.user.GetUserNickNameUseCase import com.eatssu.android.presentation.UiEvent import com.eatssu.android.presentation.UiState import dagger.hilt.android.lifecycle.HiltViewModel +import dagger.hilt.android.qualifiers.ApplicationContext +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharedFlow @@ -27,13 +31,20 @@ class MyPageViewModel @Inject constructor( private val getUserNickNameUseCase: GetUserNickNameUseCase, private val setNotificationStatusUseCase: SetDailyNotificationStatusUseCase, private val alarmUseCase: AlarmUseCase, - private val preferencesRepository: PreferencesRepository + private val preferencesRepository: PreferencesRepository, + @ApplicationContext private val context: Context ) : ViewModel() { // 내부는 항상 "값 그 자체"만 들고 있고, // 화면엔 UiState로 감싸서 노출 + // 로컬 저장소에서 닉네임을 먼저 읽어서 초기 상태 설정 private val _state = MutableStateFlow( - MyPageState(appVersion = "${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})") + MyPageState( + appVersion = "${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})", + nickname = MySharedPreferences.getUserName(context).takeIf { + it.isNotBlank() + } + ) ) val uiState: StateFlow> = _state