Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.yapp.common.navigation.extensions

import kotlin.reflect.KClass

fun <T : Any> KClass<T>.toRoute(): String = this.simpleName ?: error("Route name missing")
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,13 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.material3.Surface
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Modifier
import androidx.core.util.Consumer
import androidx.navigation.compose.NavHost
import com.yapp.alarm.AlarmConstants
import com.yapp.alarm.receivers.AlarmInteractionActivityReceiver
import com.yapp.common.navigation.destination.AlarmInteractionDestination
import com.yapp.common.navigation.rememberOrbitNavigator
import com.yapp.common.navigation.route.AlarmInteractionBaseRoute
import com.yapp.designsystem.theme.OrbitTheme
import com.yapp.domain.model.Alarm
import dagger.hilt.android.AndroidEntryPoint
Expand Down Expand Up @@ -70,11 +69,12 @@ class AlarmInteractionActivity : ComponentActivity() {
) {
NavHost(
navController = navigator.navController,
startDestination = AlarmInteractionDestination.Route.route,
startDestination = AlarmInteractionBaseRoute,
modifier = Modifier.navigationBarsPadding(),
) {
alarmInteractionNavGraph(
navigator = navigator,
alarm = alarm,
)
}
}
Expand All @@ -89,7 +89,7 @@ class AlarmInteractionActivity : ComponentActivity() {
}
Log.d("AlarmInteractionActivity", "New Intent: $newIntent")
newAlarm?.let { alarm ->
navigator.navController.navigate("${AlarmInteractionDestination.AlarmAction.route}/$alarm")
navigator.navigateToAlarmAction(alarm = alarm)
}
}

Expand All @@ -99,13 +99,6 @@ class AlarmInteractionActivity : ComponentActivity() {
[email protected](onNewIntentConsumer)
}
}

LaunchedEffect(Unit) {
val route = "${AlarmInteractionDestination.AlarmAction.route}/$alarm"
navigator.navController.navigate(route) {
popUpTo(AlarmInteractionDestination.Route.route) { inclusive = true }
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.yapp.alarm.interaction.action

import com.yapp.domain.model.Alarm
import com.yapp.ui.base.SideEffect
import com.yapp.ui.base.UiState

class AlarmActionContract {
Expand All @@ -22,10 +24,6 @@ class AlarmActionContract {
}

sealed class SideEffect : com.yapp.ui.base.SideEffect {
data class Navigate(
val route: String,
val popUpTo: String? = null,
val inclusive: Boolean = false,
) : SideEffect()
data class NavigateToAlarmSnooze(val alarm: Alarm) : SideEffect()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,8 @@ internal fun AlarmActionRoute(
LaunchedEffect(sideEffect) {
sideEffect.collect { action ->
when (action) {
is AlarmActionContract.SideEffect.Navigate -> {
navigator.navigateTo(
route = action.route,
popUpTo = action.popUpTo,
inclusive = action.inclusive,
)
is AlarmActionContract.SideEffect.NavigateToAlarmSnooze -> {
navigator.navigateToAlarmSnoozeTimer(action.alarm)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.viewModelScope
import com.yapp.alarm.pendingIntent.interaction.createAlarmDismissIntent
import com.yapp.alarm.pendingIntent.interaction.createAlarmSnoozeIntent
import com.yapp.common.navigation.Routes
import com.yapp.datastore.UserPreferences
import com.yapp.domain.model.Alarm
import com.yapp.ui.base.BaseViewModel
Expand All @@ -15,7 +14,10 @@ import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
import java.time.LocalDate
import java.time.LocalTime
import java.time.format.DateTimeFormatter
import java.time.format.TextStyle
import java.util.Locale
import javax.inject.Inject

@HiltViewModel
Expand Down Expand Up @@ -57,9 +59,9 @@ class AlarmActionViewModel @Inject constructor(
private fun startClock() {
viewModelScope.launch {
while (isActive) {
val now = java.time.LocalTime.now()
val today = java.time.LocalDate.now()
val dayOfWeek = today.dayOfWeek.getDisplayName(java.time.format.TextStyle.FULL, java.util.Locale.KOREAN)
val now = LocalTime.now()
val today = LocalDate.now()
val dayOfWeek = today.dayOfWeek.getDisplayName(TextStyle.FULL, Locale.KOREAN)

updateState {
copy(
Expand Down Expand Up @@ -94,13 +96,9 @@ class AlarmActionViewModel @Inject constructor(
},
)
}
emitSideEffect(
AlarmActionContract.SideEffect.Navigate(
route = "${Routes.AlarmInteraction.ALARM_SNOOZE_TIMER}/$alarm",
popUpTo = Routes.AlarmInteraction.ALARM_ACTION,
inclusive = true,
),
)
alarm?.let {
emitSideEffect(AlarmActionContract.SideEffect.NavigateToAlarmSnooze(it))
}
}

private fun dismiss() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,5 @@ class AlarmSnoozeTimerContract {
data object Dismiss : Action()
}

sealed class SideEffect : com.yapp.ui.base.SideEffect {
data class Navigate(
val route: String,
val popUpTo: String? = null,
val inclusive: Boolean = false,
) : SideEffect()
}
sealed class SideEffect : com.yapp.ui.base.SideEffect
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,17 +57,7 @@ internal fun AlarmSnoozeTimerRoute(
val sideEffect = viewModel.container.sideEffectFlow

LaunchedEffect(sideEffect) {
sideEffect.collect { action ->
when (action) {
is AlarmSnoozeTimerContract.SideEffect.Navigate -> {
navigator.navigateTo(
route = action.route,
popUpTo = action.popUpTo,
inclusive = action.inclusive,
)
}
}
}
sideEffect.collect { }
}

AlarmSnoozeTimerScreen(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,9 @@ sealed class FortuneContract {
}

sealed class SideEffect : com.yapp.ui.base.SideEffect {
data class Navigate(
val route: String,
val popUpTo: String? = null,
val inclusive: Boolean = false,
) : SideEffect()
data object NavigateToFortuneReward : SideEffect()

data object NavigateToHome : SideEffect()

data object NavigateBack : SideEffect()

Expand Down
18 changes: 2 additions & 16 deletions feature/fortune/src/main/java/com/yapp/fortune/FortuneViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ import android.app.Application
import android.util.Log
import androidx.annotation.DrawableRes
import androidx.lifecycle.viewModelScope
import com.yapp.common.navigation.destination.FortuneDestination
import com.yapp.common.navigation.destination.HomeDestination
import com.yapp.datastore.UserPreferences
import com.yapp.domain.repository.FortuneRepository
import com.yapp.domain.repository.ImageRepository
Expand Down Expand Up @@ -78,13 +76,7 @@ class FortuneViewModel @Inject constructor(
when (action) {
is FortuneContract.Action.NextStep -> {
if (state.hasReward) {
postSideEffect(
FortuneContract.SideEffect.Navigate(
route = FortuneDestination.Reward.route,
popUpTo = FortuneDestination.Fortune.route,
inclusive = true,
),
)
postSideEffect(FortuneContract.SideEffect.NavigateToFortuneReward)
} else {
reduce { state.copy(currentStep = (state.currentStep + 1).coerceAtMost(5)) }
}
Expand All @@ -102,13 +94,7 @@ class FortuneViewModel @Inject constructor(
}

private fun navigateToHome() {
emitSideEffect(
FortuneContract.SideEffect.Navigate(
route = HomeDestination.Route.route,
popUpTo = FortuneDestination.Route.route,
inclusive = true,
),
)
emitSideEffect(FortuneContract.SideEffect.NavigateToHome)
}

private fun saveImage(@DrawableRes resId: Int) = viewModelScope.launch {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,12 +95,6 @@ sealed class AlarmAddEditContract {
}

sealed class SideEffect : com.yapp.ui.base.SideEffect {
data class Navigate(
val route: String,
val popUpTo: String? = null,
val inclusive: Boolean = false,
) : SideEffect()

data object NavigateBack : SideEffect()

data class SaveAlarm(val id: Long) : SideEffect()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,13 +88,6 @@ fun AlarmAddEditRoute(
is AlarmAddEditContract.SideEffect.NavigateBack -> {
navigator.navigateBack()
}
is AlarmAddEditContract.SideEffect.Navigate -> {
navigator.navigateTo(
route = effect.route,
popUpTo = effect.popUpTo,
inclusive = effect.inclusive,
)
}
is AlarmAddEditContract.SideEffect.SaveAlarm -> {
navigator.navController.previousBackStackEntry
?.savedStateHandle
Expand Down
13 changes: 8 additions & 5 deletions feature/home/src/main/java/com/yapp/home/HomeContract.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.yapp.home
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.yapp.domain.model.Alarm
import com.yapp.ui.base.SideEffect
import com.yapp.ui.base.UiState

sealed class HomeContract {
Expand Down Expand Up @@ -72,11 +73,13 @@ sealed class HomeContract {
}

sealed class SideEffect : com.yapp.ui.base.SideEffect {
data class Navigate(
val route: String,
val popUpTo: String? = null,
val inclusive: Boolean = false,
) : SideEffect()
data object NavigateToAddAlarm : SideEffect()

data class NavigateToEditAlarm(val alarmId: Long) : SideEffect()

data object NavigateToFortune : SideEffect()

data object NavigateToSetting : SideEffect()

data class ShowSnackBar(
val message: String,
Expand Down
21 changes: 15 additions & 6 deletions feature/home/src/main/java/com/yapp/home/HomeScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -123,13 +123,22 @@ fun HomeRoute(
LaunchedEffect(sideEffect) {
sideEffect.collectLatest { effect ->
when (effect) {
is HomeContract.SideEffect.Navigate -> {
navigator.navigateTo(
route = effect.route,
popUpTo = effect.popUpTo,
inclusive = effect.inclusive,
)
is HomeContract.SideEffect.NavigateToAddAlarm -> {
navigator.navigateToAddAlarm()
}

is HomeContract.SideEffect.NavigateToEditAlarm -> {
navigator.navigateToEditAlarm(effect.alarmId)
}

is HomeContract.SideEffect.NavigateToFortune -> {
navigator.navigateToFortune()
}

is HomeContract.SideEffect.NavigateToSetting -> {
navigator.navigateToSetting()
}

is HomeContract.SideEffect.ShowSnackBar -> {
val result = showCustomSnackBar(
scope = coroutineScope,
Expand Down
17 changes: 4 additions & 13 deletions feature/home/src/main/java/com/yapp/home/HomeViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,6 @@ package com.yapp.home
import android.util.Log
import androidx.lifecycle.viewModelScope
import com.yapp.alarm.AlarmHelper
import com.yapp.common.navigation.destination.FortuneDestination
import com.yapp.common.navigation.destination.HomeDestination
import com.yapp.common.navigation.destination.SettingDestination
import com.yapp.common.util.ResourceProvider
import com.yapp.datastore.UserPreferences
import com.yapp.domain.model.Alarm
Expand Down Expand Up @@ -103,7 +100,7 @@ class HomeViewModel @Inject constructor(
}

private fun navigateToAlarmCreation() {
emitSideEffect(HomeContract.SideEffect.Navigate(HomeDestination.AlarmAddEdit.route))
emitSideEffect(HomeContract.SideEffect.NavigateToAddAlarm)
}

private fun toggleMultiSelectionMode() {
Expand Down Expand Up @@ -316,7 +313,7 @@ class HomeViewModel @Inject constructor(
}

private fun editAlarm(alarmId: Long) {
emitSideEffect(HomeContract.SideEffect.Navigate("${HomeDestination.AlarmAddEdit.route}?id=$alarmId"))
emitSideEffect(HomeContract.SideEffect.NavigateToEditAlarm(alarmId))
}

private fun updateDeliveryTime(alarms: List<Alarm>) {
Expand Down Expand Up @@ -404,9 +401,7 @@ class HomeViewModel @Inject constructor(
processAction(HomeContract.Action.ShowNoDailyFortuneDialog)
} else {
userPreferences.markFortuneAsChecked()
emitSideEffect(
HomeContract.SideEffect.Navigate(FortuneDestination.Fortune.route),
)
emitSideEffect(HomeContract.SideEffect.NavigateToFortune)
}
}
}
Expand Down Expand Up @@ -457,11 +452,7 @@ class HomeViewModel @Inject constructor(
}

private fun navigateToSetting() {
emitSideEffect(
HomeContract.SideEffect.Navigate(
route = SettingDestination.Route.route,
),
)
emitSideEffect(HomeContract.SideEffect.NavigateToSetting)
}

private fun showItemMenu(alarmId: Long, x: Float, y: Float) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,7 @@ sealed class MissionContract {
}

sealed class SideEffect : com.yapp.ui.base.SideEffect {
data class Navigate(
val route: String,
val popUpTo: String? = null,
val inclusive: Boolean = false,
) : SideEffect()
data object NavigateToFortune : SideEffect()

data object NavigateBack : SideEffect()
}
Expand Down
Loading