Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
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
Expand Up @@ -19,11 +19,12 @@ import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch
import javax.inject.Inject

@HiltViewModel
class MainActivityViewModel @Inject constructor(
userDataRepository: UserDataRepository,
private val userDataRepository: UserDataRepository,
private val notePadRepository: INotePadRepository,
private val labelRepository: ILabelRepository,

Expand All @@ -34,7 +35,7 @@ class MainActivityViewModel @Inject constructor(
}.stateIn(
scope = viewModelScope,
initialValue = MainActivityUiState.Loading,
started = SharingStarted.WhileSubscribed(5_000),
started = SharingStarted.WhileSubscribed(),
)

val labels = labelRepository
Expand Down Expand Up @@ -113,6 +114,12 @@ class MainActivityViewModel @Inject constructor(
)
return notePadRepository.upsert(notePad)
}

fun setMainData(mainData: Long) {
viewModelScope.launch {
userDataRepository.setMainData(mainData)
}
}
}

sealed interface MainActivityUiState {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import com.mshdabiola.data.repository.INotePadRepository
import com.mshdabiola.model.Contrast
import com.mshdabiola.model.DarkThemeConfig
import com.mshdabiola.model.Label
import com.mshdabiola.model.MainData
import com.mshdabiola.model.NoteImage
import com.mshdabiola.model.NotePad
import com.mshdabiola.model.ThemeBrand
Expand Down Expand Up @@ -156,6 +157,7 @@ sealed interface SharedActivityUiState {
useDynamicColor = false,
shouldHideOnboarding = false,
contrast = Contrast.High,
mainData = MainData.Note,
),
val notepad: NotePad = NotePad(),
val labels: List<Label> = emptyList(),
Expand Down
17 changes: 7 additions & 10 deletions app/src/main/java/com/mshdabiola/playnotepad/ui/NoteApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.semantics.testTagsAsResourceId
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.navigation.navOptions
import com.mshdabiola.about.navigateToAbout
import com.mshdabiola.designsystem.component.NoteBackground
import com.mshdabiola.designsystem.component.NoteGradientBackground
Expand All @@ -53,6 +52,8 @@ import com.mshdabiola.detail.navigation.navigateToDetail
import com.mshdabiola.drawing.navigateToDrawing
import com.mshdabiola.labelscreen.navigateToLabel
import com.mshdabiola.main.navigation.navigateToMain
import com.mshdabiola.model.MainData
import com.mshdabiola.playnotepad.MainActivityUiState
import com.mshdabiola.playnotepad.MainActivityViewModel
import com.mshdabiola.playnotepad.navigation.NoteNavHost
import com.mshdabiola.setting.navigation.navigateToSetting
Expand All @@ -69,6 +70,7 @@ fun NoteApp(
) {
val shouldShowGradientBackground = true
val labels = viewModel.labels.collectAsStateWithLifecycle()
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
var showAudio by remember { mutableStateOf(false) }
var showImage by remember { mutableStateOf(false) }

Expand Down Expand Up @@ -98,17 +100,12 @@ fun NoteApp(
drawerContent = {
MainNavigation(
labels = labels.value,
currentMainArg = appState.mainArg,
currentMainArg = (uiState as? MainActivityUiState.Success)
?.userData?.mainData?.index ?: MainData.Note.index,
onNavigation = {
// onNavigationNoteType(it)
// appState.navController.navigateToMain()
viewModel.setMainData(it)
appState.navController.popBackStack()
appState.navController.navigateToMain(
it,
navOptions {
// this.launchSingleTop=true
},
)
appState.navController.navigateToMain()
appState.closeDrawer()
},
navigateToLevel = {
Expand Down
10 changes: 4 additions & 6 deletions app/src/main/java/com/mshdabiola/playnotepad/ui/NoteAppState.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@ import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.mshdabiola.data.util.NetworkMonitor
import com.mshdabiola.main.navigation.MainRoute
import com.mshdabiola.main.navigation.TypeArg
import com.mshdabiola.model.NoteType
import com.mshdabiola.ui.TrackDisposableJank
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.SharingStarted
Expand Down Expand Up @@ -61,10 +59,10 @@ class NoteAppState(
@Composable get() = navController
.currentBackStackEntryAsState().value?.destination?.route ?: ""

val mainArg: Long
@Composable get() = navController.currentBackStackEntryAsState().value?.arguments?.getLong(
TypeArg,
) ?: NoteType.NOTE.index
// val mainArg: Long
// @Composable get() = navController.currentBackStackEntryAsState().value?.arguments?.getLong(
// TypeArg,
// ) ?: NoteType.NOTE.index

// navController
// .currentBackStackEntryAsState().value?.toRoute<Main>() ?:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import androidx.navigation.toRoute
import com.mshdabiola.data.repository.ILabelRepository
import com.mshdabiola.data.repository.UserDataRepository
import com.mshdabiola.model.MainData
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.collections.immutable.toImmutableList
import kotlinx.coroutines.flow.collectLatest
Expand All @@ -20,6 +22,7 @@ import javax.inject.Inject
class LabelViewModel @Inject constructor(
savedStateHandle: SavedStateHandle,
private val labelRepository: ILabelRepository,
private val userDataRepository: UserDataRepository,
) : ViewModel() {

var labelScreenUiState by mutableStateOf(LabelScreenUiState())
Expand Down Expand Up @@ -58,6 +61,7 @@ class LabelViewModel @Inject constructor(
labels.removeAt(index)
labelScreenUiState = labelScreenUiState.copy(labels = labels.toImmutableList())
viewModelScope.launch {
userDataRepository.setMainData(MainData.Note.index)
labelRepository.delete(id)
}
}
Expand Down
2 changes: 2 additions & 0 deletions feature/main/src/main/kotlin/com/mshdabiola/main/MainState.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.mshdabiola.main

import com.mshdabiola.model.MainData
import com.mshdabiola.model.NotePad
import com.mshdabiola.model.NoteType

Expand All @@ -13,6 +14,7 @@ sealed class MainState {
val color: List<SearchSort.Color> = emptyList(),
val label: List<SearchSort.Label> = emptyList(),
val searchSort: SearchSort? = null,
val mainData: MainData = MainData.Note,

) : MainState()

Expand Down
28 changes: 20 additions & 8 deletions feature/main/src/main/kotlin/com/mshdabiola/main/MainViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.mshdabiola.common.IAlarmManager
import com.mshdabiola.data.repository.INotePadRepository
import com.mshdabiola.main.navigation.MainArg
import com.mshdabiola.data.repository.UserDataRepository
import com.mshdabiola.model.MainData
import com.mshdabiola.model.NoteType
import com.mshdabiola.ui.state.DateDialogUiData
import com.mshdabiola.ui.state.DateListUiState
Expand All @@ -25,6 +26,8 @@ import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.flow.mapLatest
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import kotlinx.datetime.Clock
Expand All @@ -49,14 +52,22 @@ internal class MainViewModel
savedStateHandle: SavedStateHandle,
private val notepadRepository: INotePadRepository,
private val alarmManager: IAlarmManager,
userDataRepository: UserDataRepository,
) : ViewModel() {

val searchState = TextFieldState()
private val mainArg = MainArg(savedStateHandle)

private val _mainState = MutableStateFlow<MainState>(MainState.Loading)
val mainState = _mainState.asStateFlow()

init {
viewModelScope.launch {
userDataRepository.userData.collectLatest {
if (mainState.value is MainState.Success) {
_mainState.value = getSuccess().copy(mainData = it.mainData)
}
}
}

viewModelScope.launch {
combine(
Expand Down Expand Up @@ -120,18 +131,18 @@ internal class MainViewModel
} else {

val list =
when (mainArg.noteType) {
NoteType.LABEL -> {
notepad.filter { it.labels.any { it.id == mainArg.type } }
when (mainState.mainData) {
is MainData.Label -> {
notepad.filter { it.labels.any { it.id == mainState.mainData.index } }
}

NoteType.REMAINDER -> {
is MainData.Remainder -> {
notepad.filter { it.reminder > 0 }
}

else -> {
notepad.filter {
it.noteType == mainArg.noteType
it.noteType.index == mainState.mainData.index
}
}
}
Expand All @@ -140,9 +151,10 @@ internal class MainViewModel
)
}
} else {

val mainData = userDataRepository.userData.mapLatest { it.mainData }.firstOrNull() ?: MainData.Note
_mainState.value = MainState.Success(
notePads = emptyList(),
mainData = mainData,
)

initDate()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,18 @@ package com.mshdabiola.main.navigation
import androidx.compose.animation.ExperimentalSharedTransitionApi
import androidx.compose.animation.SharedTransitionScope
import androidx.compose.ui.Modifier
import androidx.lifecycle.SavedStateHandle
import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
import androidx.navigation.NavOptions
import androidx.navigation.NavType
import androidx.navigation.compose.composable
import androidx.navigation.navArgument
import com.mshdabiola.main.MainRoute
import com.mshdabiola.model.NoteType

fun NavController.navigateToMain(
type: Long,
navOptions: NavOptions = androidx.navigation.navOptions { },
) = navigate(route = "$MainRoute/$type", navOptions)
) = navigate(route = MainRoute, navOptions)

const val MainRoute = "main"
const val TypeArg = "mainArg"
const val FullMainRoute = "$MainRoute/{$TypeArg}"
const val FullMainRoute = MainRoute

@OptIn(ExperimentalSharedTransitionApi::class)
fun NavGraphBuilder.mainScreen(
Expand All @@ -37,12 +31,6 @@ fun NavGraphBuilder.mainScreen(
) {
composable(
route = FullMainRoute,
arguments = listOf(
navArgument(TypeArg) {
type = NavType.LongType
defaultValue = -1L
},
),
) {
MainRoute(
modifier = modifier,
Expand All @@ -55,22 +43,3 @@ fun NavGraphBuilder.mainScreen(
)
}
}

//
//
internal class MainArg(val type: Long) {
val noteType: NoteType = when (type) {
NoteType.NOTE.index -> NoteType.NOTE
NoteType.ARCHIVE.index -> NoteType.ARCHIVE
NoteType.TRASH.index -> NoteType.TRASH
NoteType.REMAINDER.index -> NoteType.REMAINDER
else -> NoteType.LABEL
}

constructor(savedStateHandle: SavedStateHandle) :
this(
type = checkNotNull(savedStateHandle[TypeArg]),

)
}
//
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,8 @@ internal class OfflineFirstUserDataRepository @Inject constructor(
userPreferencesRepository.setShouldHideOnboarding(shouldHideOnboarding)
analyticsHelper.logOnboardingStateChanged(shouldHideOnboarding)
}

override suspend fun setMainData(mainData: Long) {
userPreferencesRepository.setMainData(mainData)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,5 @@ interface UserDataRepository {
* Sets whether the user has completed the onboarding process.
*/
suspend fun setShouldHideOnboarding(shouldHideOnboarding: Boolean)
suspend fun setMainData(mainData: Long)
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import com.mshdabiola.datastore.UserPreferencesRepository
import com.mshdabiola.datastore.di.testUserPreferencesDataStore
import com.mshdabiola.model.Contrast
import com.mshdabiola.model.DarkThemeConfig
import com.mshdabiola.model.MainData
import com.mshdabiola.model.ThemeBrand
import com.mshdabiola.model.UserData
import kotlinx.coroutines.flow.first
Expand Down Expand Up @@ -57,6 +58,7 @@ class OfflineFirstUserDataRepositoryTest {
useDynamicColor = false,
shouldHideOnboarding = false,
contrast = Contrast.Normal,
mainData = MainData.Label(0),
),
subject.userData.first(),
)
Expand Down

This file was deleted.

This file was deleted.

Loading
Loading