diff --git a/app/src/main/kotlin/com/naveenapps/expensemanager/ui/HomeScreen.kt b/app/src/main/kotlin/com/naveenapps/expensemanager/ui/HomeScreen.kt index cb576640..5340ecaf 100644 --- a/app/src/main/kotlin/com/naveenapps/expensemanager/ui/HomeScreen.kt +++ b/app/src/main/kotlin/com/naveenapps/expensemanager/ui/HomeScreen.kt @@ -1,6 +1,10 @@ package com.naveenapps.expensemanager.ui +import android.Manifest import android.app.Activity +import android.os.Build +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.padding import androidx.compose.material3.BottomAppBar @@ -9,8 +13,12 @@ import androidx.compose.material3.NavigationBarItem import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource @@ -153,6 +161,28 @@ fun HomeScreen(viewModel: HomeViewModel = hiltViewModel()) { val homeScreenBottomBarItems by viewModel.homeScreenBottomBarItems.collectAsState() + var hasNotificationPermission by remember { mutableStateOf(false) } + + val notificationPermissionLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.RequestPermission(), + onResult = { + hasNotificationPermission = it + if (it) { + viewModel.turnOnNotification() + } + } + ) + + LaunchedEffect(key1 = "permission") { + if (hasNotificationPermission.not()) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + notificationPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS) + } else { + viewModel.turnOnNotification() + } + } + } + BackHandler { if (homeScreenBottomBarItems != HomeScreenBottomBarItems.Home) { viewModel.setUISystem(HomeScreenBottomBarItems.Home) diff --git a/app/src/main/kotlin/com/naveenapps/expensemanager/ui/HomeViewModel.kt b/app/src/main/kotlin/com/naveenapps/expensemanager/ui/HomeViewModel.kt index 60417be2..b9f994ff 100644 --- a/app/src/main/kotlin/com/naveenapps/expensemanager/ui/HomeViewModel.kt +++ b/app/src/main/kotlin/com/naveenapps/expensemanager/ui/HomeViewModel.kt @@ -1,13 +1,20 @@ package com.naveenapps.expensemanager.ui import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.naveenapps.expensemanager.core.domain.usecase.settings.reminder.UpdateReminderStatusUseCase +import com.naveenapps.expensemanager.core.notification.NotificationScheduler import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel -class HomeViewModel @Inject constructor() : ViewModel() { +class HomeViewModel @Inject constructor( + private val updateReminderStatusUseCase: UpdateReminderStatusUseCase, + private val notificationScheduler: NotificationScheduler +) : ViewModel() { private val _homeScreenBottomBarItems = MutableStateFlow(HomeScreenBottomBarItems.Home) val homeScreenBottomBarItems = _homeScreenBottomBarItems.asStateFlow() @@ -15,4 +22,11 @@ class HomeViewModel @Inject constructor() : ViewModel() { fun setUISystem(homeScreenBottomBarItems: HomeScreenBottomBarItems) { _homeScreenBottomBarItems.value = homeScreenBottomBarItems } + + fun turnOnNotification() { + viewModelScope.launch { + updateReminderStatusUseCase.invoke(true) + notificationScheduler.checkAndRestartReminder() + } + } } diff --git a/core/domain/src/main/kotlin/com/naveenapps/expensemanager/core/domain/usecase/settings/reminder/UpdateReminderStatusUseCase.kt b/core/domain/src/main/kotlin/com/naveenapps/expensemanager/core/domain/usecase/settings/reminder/UpdateReminderStatusUseCase.kt index 5976aa08..c0428ba9 100644 --- a/core/domain/src/main/kotlin/com/naveenapps/expensemanager/core/domain/usecase/settings/reminder/UpdateReminderStatusUseCase.kt +++ b/core/domain/src/main/kotlin/com/naveenapps/expensemanager/core/domain/usecase/settings/reminder/UpdateReminderStatusUseCase.kt @@ -1,9 +1,10 @@ package com.naveenapps.expensemanager.core.domain.usecase.settings.reminder +import com.naveenapps.expensemanager.core.repository.ReminderTimeRepository import javax.inject.Inject class UpdateReminderStatusUseCase @Inject constructor( - private val repository: com.naveenapps.expensemanager.core.repository.ReminderTimeRepository, + private val repository: ReminderTimeRepository, ) { suspend operator fun invoke(reminderStatus: Boolean) {