11package com.neki.android.app.main
22
3+ import android.content.Context
34import android.net.Uri
45import androidx.lifecycle.ViewModel
56import androidx.lifecycle.viewModelScope
7+ import com.neki.android.core.common.permission.NotificationPermissionManager
8+ import com.neki.android.core.dataapi.repository.NotificationRepository
69import com.neki.android.core.domain.usecase.UploadMultiplePhotoUseCase
710import com.neki.android.core.domain.usecase.UploadSinglePhotoUseCase
811import com.neki.android.core.ui.MviIntentStore
912import com.neki.android.core.ui.mviIntentStore
1013import com.neki.android.feature.select_album.api.SelectAlbumAction
1114import dagger.hilt.android.lifecycle.HiltViewModel
15+ import dagger.hilt.android.qualifiers.ApplicationContext
1216import kotlinx.collections.immutable.persistentListOf
1317import kotlinx.collections.immutable.toImmutableList
1418import kotlinx.coroutines.launch
@@ -17,6 +21,8 @@ import javax.inject.Inject
1721
1822@HiltViewModel
1923class MainViewModel @Inject constructor(
24+ @ApplicationContext private val context : Context ,
25+ private val notificationRepository : NotificationRepository ,
2026 private val uploadSinglePhotoUseCase : UploadSinglePhotoUseCase ,
2127 private val uploadMultiplePhotoUseCase : UploadMultiplePhotoUseCase ,
2228) : ViewModel() {
@@ -27,13 +33,18 @@ class MainViewModel @Inject constructor(
2733 onIntent = ::onIntent,
2834 )
2935
36+ init {
37+ store.onIntent(MainIntent .EnterMainScreen )
38+ }
39+
3040 private fun onIntent (
3141 intent : MainIntent ,
3242 state : MainState ,
3343 reduce : (MainState .() -> MainState ) -> Unit ,
3444 postSideEffect : (MainSideEffect ) -> Unit ,
3545 ) {
3646 when (intent) {
47+ MainIntent .EnterMainScreen -> updateNotificationToken()
3748 MainIntent .ClickAddPhotoFab -> reduce { copy(isShowAddPhotoBottomSheet = true ) }
3849 MainIntent .DismissAddPhotoBottomSheet -> reduce { copy(isShowAddPhotoBottomSheet = false ) }
3950 MainIntent .ClickQRScan -> {
@@ -94,6 +105,15 @@ class MainViewModel @Inject constructor(
94105 }
95106 }
96107
108+ private fun updateNotificationToken () {
109+ viewModelScope.launch {
110+ val token = notificationRepository.getPushToken() ? : return @launch
111+ val pushAgreed = NotificationPermissionManager .isGrantedNotificationPermission(context)
112+ notificationRepository.updateNotification(token, pushAgreed)
113+ .onFailure { Timber .e(it, " Failed to update notification token" ) }
114+ }
115+ }
116+
97117 private fun uploadSingleImage (
98118 imageUrl : String ,
99119 reduce : (MainState .() -> MainState ) -> Unit ,
0 commit comments