commit 50fc855b1003d110569e23b40d4475391594483d
parent 3ec05bcefdd5614c48cb6e638531124d9b70947c
Author: MTRNord <MTRNord@users.noreply.github.com>
Date: Mon, 28 Jul 2025 19:10:00 +0200
Fix range selection
Diffstat:
4 files changed, 55 insertions(+), 53 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -13,3 +13,4 @@
.externalNativeBuild
.cxx
local.properties
+.idea/
+\ No newline at end of file
diff --git a/app/src/main/java/space/midnightthoughts/nordiccalendar/components/SidebarDrawer.kt b/app/src/main/java/space/midnightthoughts/nordiccalendar/components/SidebarDrawer.kt
@@ -126,7 +126,7 @@ fun SidebarDrawer(
modifier = Modifier.fillMaxWidth(),
colors = NavigationDrawerItemDefaults.colors()
)
- if (selectedCalendars.value !== null && !selectedCalendars.value!!.isEmpty()) {
+ if (selectedCalendars.value !== null && calendars?.value?.isEmpty() == false) {
Spacer(Modifier.height(16.dp))
HorizontalDivider(Modifier, DividerDefaults.Thickness, DividerDefaults.color)
Spacer(Modifier.height(8.dp))
diff --git a/app/src/main/java/space/midnightthoughts/nordiccalendar/screens/CalendarScreen.kt b/app/src/main/java/space/midnightthoughts/nordiccalendar/screens/CalendarScreen.kt
@@ -78,12 +78,6 @@ fun CalendarScreen(
val events = remember(calendarViewModel) {
calendarViewModel.events
}.collectAsState(initial = emptyList())
- val startMillis = remember(calendarViewModel) {
- calendarViewModel.startMillis
- }
- val endMillis = remember(calendarViewModel) {
- calendarViewModel.endMillis
- }
val isRefreshing = remember(calendarViewModel) {
calendarViewModel.isRefreshing
}.collectAsState(initial = false)
@@ -113,8 +107,7 @@ fun CalendarScreen(
// DateRangeHeader sollte direkt unter den Tabs stehen, IMMER sichtbar
DateRangeHeader(
selectedTab = selectedTab,
- startMillis = startMillis,
- endMillis = endMillis,
+ calendarViewModel = calendarViewModel,
onPrev = {
when (selectedTab) {
0 -> calendarViewModel.prevMonth()
@@ -333,20 +326,30 @@ fun CalendarTabBar(selectedTab: Int, onTabSelected: (Int) -> Unit) {
@Composable
fun DateRangeHeader(
selectedTab: Int,
- startMillis: Long,
- endMillis: Long,
+ calendarViewModel: CalendarViewModel,
onPrev: () -> Unit,
onNext: () -> Unit,
onToday: () -> Unit
) {
+ val startMillis = remember(calendarViewModel) {
+ calendarViewModel.startMillis
+ }.collectAsState(initial = System.currentTimeMillis())
+ val endMillis = remember(calendarViewModel) {
+ calendarViewModel.endMillis
+ }.collectAsState(initial = System.currentTimeMillis())
val dateFormat = when (selectedTab) {
0, 1 -> SimpleDateFormat("dd.MM.yyyy", Locale.getDefault())
2 -> SimpleDateFormat("dd.MM.yyyy", Locale.getDefault())
else -> SimpleDateFormat("dd.MM.yyyy", Locale.getDefault())
}
val rangeText = when (selectedTab) {
- 0, 1 -> dateFormat.format(Date(startMillis)) + " – " + dateFormat.format(Date(endMillis))
- 2 -> dateFormat.format(Date(startMillis))
+ 0, 1 -> dateFormat.format(Date(startMillis.value)) + " – " + dateFormat.format(
+ Date(
+ endMillis.value
+ )
+ )
+
+ 2 -> dateFormat.format(Date(startMillis.value))
else -> ""
}
val isToday = when (selectedTab) {
@@ -354,8 +357,8 @@ fun DateRangeHeader(
val cal = Calendar.getInstance()
val todayMonth = cal.get(Calendar.MONTH)
val todayYear = cal.get(Calendar.YEAR)
- val startCal = Calendar.getInstance().apply { timeInMillis = startMillis }
- val endCal = Calendar.getInstance().apply { timeInMillis = endMillis }
+ val startCal = Calendar.getInstance().apply { timeInMillis = startMillis.value }
+ val endCal = Calendar.getInstance().apply { timeInMillis = endMillis.value }
startCal.get(Calendar.MONTH) == todayMonth &&
startCal.get(Calendar.YEAR) == todayYear &&
endCal.get(Calendar.MONTH) == todayMonth &&
@@ -365,12 +368,12 @@ fun DateRangeHeader(
1 -> {
val cal = Calendar.getInstance()
val today = cal.timeInMillis
- today >= startMillis && today <= endMillis
+ today >= startMillis.value && today <= endMillis.value
}
2 -> {
val cal = Calendar.getInstance()
- val startDay = Calendar.getInstance().apply { timeInMillis = startMillis }
+ val startDay = Calendar.getInstance().apply { timeInMillis = startMillis.value }
cal.get(Calendar.YEAR) == startDay.get(Calendar.YEAR) &&
cal.get(Calendar.DAY_OF_YEAR) == startDay.get(Calendar.DAY_OF_YEAR)
}
diff --git a/app/src/main/java/space/midnightthoughts/nordiccalendar/viewmodels/CalendarViewModel.kt b/app/src/main/java/space/midnightthoughts/nordiccalendar/viewmodels/CalendarViewModel.kt
@@ -24,10 +24,10 @@ class CalendarViewModel(app: Application) : AndroidViewModel(app) {
private val _selectedTab = MutableStateFlow(0)
val selectedTab: StateFlow<Int> = _selectedTab.asStateFlow()
- var startMillis: Long = getDefaultStartMillis(0)
- private set
- var endMillis: Long = getDefaultEndMillis(0)
- private set
+ private val _startMillis = MutableStateFlow(getDefaultStartMillis(0))
+ val startMillis: StateFlow<Long> = _startMillis.asStateFlow()
+ private val _endMillis = MutableStateFlow(getDefaultEndMillis(0))
+ val endMillis: StateFlow<Long> = _endMillis.asStateFlow()
init {
loadCalendars()
@@ -52,8 +52,8 @@ class CalendarViewModel(app: Application) : AndroidViewModel(app) {
fun setTab(tab: Int) {
_selectedTab.value = tab
- startMillis = getDefaultStartMillis(tab)
- endMillis = getDefaultEndMillis(tab)
+ _startMillis.value = getDefaultStartMillis(tab)
+ _endMillis.value = getDefaultEndMillis(tab)
updateEvents()
}
@@ -124,14 +124,11 @@ class CalendarViewModel(app: Application) : AndroidViewModel(app) {
viewModelScope.launch {
isRefreshing.value = true
try {
- val tab = _selectedTab.value
- startMillis = getDefaultStartMillis(tab)
- endMillis = getDefaultEndMillis(tab)
val selectedIds = _calendars.value.filter { it.selected }.map { it.id }
_events.value = repository.getEventsForCalendars(
selectedIds,
- startMillis,
- endMillis
+ _startMillis.value,
+ _endMillis.value
)
} finally {
isRefreshing.value = false
@@ -141,60 +138,60 @@ class CalendarViewModel(app: Application) : AndroidViewModel(app) {
fun nextDay() {
if (_selectedTab.value != 2) return
- val cal = java.util.Calendar.getInstance().apply { timeInMillis = startMillis }
+ val cal = java.util.Calendar.getInstance().apply { timeInMillis = _startMillis.value }
cal.add(java.util.Calendar.DAY_OF_MONTH, 1)
- startMillis = cal.timeInMillis
+ _startMillis.value = cal.timeInMillis
cal.set(java.util.Calendar.HOUR_OF_DAY, 23)
cal.set(java.util.Calendar.MINUTE, 59)
cal.set(java.util.Calendar.SECOND, 59)
- endMillis = cal.timeInMillis
+ _endMillis.value = cal.timeInMillis
updateEvents()
}
fun prevDay() {
if (_selectedTab.value != 2) return
- val cal = java.util.Calendar.getInstance().apply { timeInMillis = startMillis }
+ val cal = java.util.Calendar.getInstance().apply { timeInMillis = _startMillis.value }
cal.add(java.util.Calendar.DAY_OF_MONTH, -1)
- startMillis = cal.timeInMillis
+ _startMillis.value = cal.timeInMillis
cal.set(java.util.Calendar.HOUR_OF_DAY, 23)
cal.set(java.util.Calendar.MINUTE, 59)
cal.set(java.util.Calendar.SECOND, 59)
- endMillis = cal.timeInMillis
+ _endMillis.value = cal.timeInMillis
updateEvents()
}
fun nextWeek() {
if (_selectedTab.value != 1) return
- val cal = java.util.Calendar.getInstance().apply { timeInMillis = startMillis }
+ val cal = java.util.Calendar.getInstance().apply { timeInMillis = _startMillis.value }
cal.add(java.util.Calendar.WEEK_OF_YEAR, 1)
- startMillis = cal.timeInMillis
+ _startMillis.value = cal.timeInMillis
cal.add(java.util.Calendar.DAY_OF_WEEK, 6)
cal.set(java.util.Calendar.HOUR_OF_DAY, 23)
cal.set(java.util.Calendar.MINUTE, 59)
cal.set(java.util.Calendar.SECOND, 59)
- endMillis = cal.timeInMillis
+ _endMillis.value = cal.timeInMillis
updateEvents()
}
fun prevWeek() {
if (_selectedTab.value != 1) return
- val cal = java.util.Calendar.getInstance().apply { timeInMillis = startMillis }
+ val cal = java.util.Calendar.getInstance().apply { timeInMillis = _startMillis.value }
cal.add(java.util.Calendar.WEEK_OF_YEAR, -1)
- startMillis = cal.timeInMillis
+ _startMillis.value = cal.timeInMillis
cal.add(java.util.Calendar.DAY_OF_WEEK, 6)
cal.set(java.util.Calendar.HOUR_OF_DAY, 23)
cal.set(java.util.Calendar.MINUTE, 59)
cal.set(java.util.Calendar.SECOND, 59)
- endMillis = cal.timeInMillis
+ _endMillis.value = cal.timeInMillis
updateEvents()
}
fun nextMonth() {
if (_selectedTab.value != 0) return
- val cal = java.util.Calendar.getInstance().apply { timeInMillis = startMillis }
+ val cal = java.util.Calendar.getInstance().apply { timeInMillis = _startMillis.value }
cal.add(java.util.Calendar.MONTH, 1)
cal.set(java.util.Calendar.DAY_OF_MONTH, 1)
- startMillis = cal.timeInMillis
+ _startMillis.value = cal.timeInMillis
cal.set(
java.util.Calendar.DAY_OF_MONTH,
cal.getActualMaximum(java.util.Calendar.DAY_OF_MONTH)
@@ -202,16 +199,16 @@ class CalendarViewModel(app: Application) : AndroidViewModel(app) {
cal.set(java.util.Calendar.HOUR_OF_DAY, 23)
cal.set(java.util.Calendar.MINUTE, 59)
cal.set(java.util.Calendar.SECOND, 59)
- endMillis = cal.timeInMillis
+ _endMillis.value = cal.timeInMillis
updateEvents()
}
fun prevMonth() {
if (_selectedTab.value != 0) return
- val cal = java.util.Calendar.getInstance().apply { timeInMillis = startMillis }
+ val cal = java.util.Calendar.getInstance().apply { timeInMillis = _startMillis.value }
cal.add(java.util.Calendar.MONTH, -1)
cal.set(java.util.Calendar.DAY_OF_MONTH, 1)
- startMillis = cal.timeInMillis
+ _startMillis.value = cal.timeInMillis
cal.set(
java.util.Calendar.DAY_OF_MONTH,
cal.getActualMaximum(java.util.Calendar.DAY_OF_MONTH)
@@ -219,20 +216,20 @@ class CalendarViewModel(app: Application) : AndroidViewModel(app) {
cal.set(java.util.Calendar.HOUR_OF_DAY, 23)
cal.set(java.util.Calendar.MINUTE, 59)
cal.set(java.util.Calendar.SECOND, 59)
- endMillis = cal.timeInMillis
+ _endMillis.value = cal.timeInMillis
updateEvents()
}
-
+
fun setTodayWeek() {
if (_selectedTab.value != 1) return
val cal = java.util.Calendar.getInstance()
- startMillis = cal.apply {
+ _startMillis.value = cal.apply {
set(java.util.Calendar.DAY_OF_WEEK, firstDayOfWeek)
set(java.util.Calendar.HOUR_OF_DAY, 0)
set(java.util.Calendar.MINUTE, 0)
set(java.util.Calendar.SECOND, 0)
}.timeInMillis
- endMillis = cal.apply {
+ _endMillis.value = cal.apply {
add(java.util.Calendar.DAY_OF_WEEK, 6)
set(java.util.Calendar.HOUR_OF_DAY, 23)
set(java.util.Calendar.MINUTE, 59)
@@ -244,13 +241,13 @@ class CalendarViewModel(app: Application) : AndroidViewModel(app) {
fun setTodayMonth() {
if (_selectedTab.value != 0) return
val cal = java.util.Calendar.getInstance()
- startMillis = cal.apply {
+ _startMillis.value = cal.apply {
set(java.util.Calendar.DAY_OF_MONTH, 1)
set(java.util.Calendar.HOUR_OF_DAY, 0)
set(java.util.Calendar.MINUTE, 0)
set(java.util.Calendar.SECOND, 0)
}.timeInMillis
- endMillis = cal.apply {
+ _endMillis.value = cal.apply {
set(
java.util.Calendar.DAY_OF_MONTH,
getActualMaximum(java.util.Calendar.DAY_OF_MONTH)
@@ -265,12 +262,12 @@ class CalendarViewModel(app: Application) : AndroidViewModel(app) {
fun setTodayDay() {
if (_selectedTab.value != 2) return
val cal = java.util.Calendar.getInstance()
- startMillis = cal.apply {
+ _startMillis.value = cal.apply {
set(java.util.Calendar.HOUR_OF_DAY, 0)
set(java.util.Calendar.MINUTE, 0)
set(java.util.Calendar.SECOND, 0)
}.timeInMillis
- endMillis = cal.apply {
+ _endMillis.value = cal.apply {
set(java.util.Calendar.HOUR_OF_DAY, 23)
set(java.util.Calendar.MINUTE, 59)
set(java.util.Calendar.SECOND, 59)