diff --git a/app/src/main/java/de/jeanlucmakiola/calendula/data/prefs/SettingsPrefs.kt b/app/src/main/java/de/jeanlucmakiola/calendula/data/prefs/SettingsPrefs.kt index 1cb6020..ef2c757 100644 --- a/app/src/main/java/de/jeanlucmakiola/calendula/data/prefs/SettingsPrefs.kt +++ b/app/src/main/java/de/jeanlucmakiola/calendula/data/prefs/SettingsPrefs.kt @@ -137,22 +137,16 @@ class SettingsPrefs @Inject constructor( store.edit { it[AGENDA_WIDGET_RANGE_KEY] = range.storageValue() } } - /** Whether the agenda shows its range-header banner (v2.11). Default ON. */ - val agendaShowRangeBanner: Flow = store.data.map { prefs -> - prefs[AGENDA_SHOW_RANGE_BANNER_KEY] ?: true + /** + * Whether the agenda shows its top range bar — the "showing …" header and + * the session range switcher (v2.11). Default ON. + */ + val agendaShowRangeBar: Flow = store.data.map { prefs -> + prefs[AGENDA_SHOW_RANGE_BAR_KEY] ?: true } - suspend fun setAgendaShowRangeBanner(enabled: Boolean) { - store.edit { it[AGENDA_SHOW_RANGE_BANNER_KEY] = enabled } - } - - /** Whether the agenda shows the bottom-left range pill (v2.11). Default ON. */ - val agendaShowRangePill: Flow = store.data.map { prefs -> - prefs[AGENDA_SHOW_RANGE_PILL_KEY] ?: true - } - - suspend fun setAgendaShowRangePill(enabled: Boolean) { - store.edit { it[AGENDA_SHOW_RANGE_PILL_KEY] = enabled } + suspend fun setAgendaShowRangeBar(enabled: Boolean) { + store.edit { it[AGENDA_SHOW_RANGE_BAR_KEY] = enabled } } /** @@ -346,8 +340,7 @@ class SettingsPrefs @Inject constructor( internal val WEEK_START_KEY = stringPreferencesKey("week_start") internal val AGENDA_SCREEN_RANGE_KEY = stringPreferencesKey("agenda_screen_range") internal val AGENDA_WIDGET_RANGE_KEY = stringPreferencesKey("agenda_widget_range") - internal val AGENDA_SHOW_RANGE_BANNER_KEY = booleanPreferencesKey("agenda_show_range_banner") - internal val AGENDA_SHOW_RANGE_PILL_KEY = booleanPreferencesKey("agenda_show_range_pill") + internal val AGENDA_SHOW_RANGE_BAR_KEY = booleanPreferencesKey("agenda_show_range_bar") internal val TIME_FORMAT_KEY = stringPreferencesKey("time_format") internal val SHOW_HOUR_LINES_KEY = booleanPreferencesKey("show_hour_lines") internal val DEFAULT_VIEW_KEY = stringPreferencesKey("default_view") diff --git a/app/src/main/java/de/jeanlucmakiola/calendula/ui/agenda/AgendaScreen.kt b/app/src/main/java/de/jeanlucmakiola/calendula/ui/agenda/AgendaScreen.kt index 7aabfda..8c6073c 100644 --- a/app/src/main/java/de/jeanlucmakiola/calendula/ui/agenda/AgendaScreen.kt +++ b/app/src/main/java/de/jeanlucmakiola/calendula/ui/agenda/AgendaScreen.kt @@ -155,32 +155,25 @@ fun AgendaScreen( .padding(innerPadding), ) { // One bar at the top: the "showing …" header on the left and the - // session range pill on the right (each toggleable independently). - val s = successState - if (s != null && (s.showRangeBanner || s.showRangePill)) { + // session range switcher on the right (one settings toggle). + successState?.takeIf { it.showRangeBar }?.let { s -> Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier .fillMaxWidth() .padding(start = 28.dp, end = 16.dp, top = 8.dp, bottom = 8.dp), ) { - if (s.showRangeBanner) { - AgendaRangeBanner( - range = s.range, - start = s.anchor, - end = s.rangeEnd, - modifier = Modifier.weight(1f), - ) - } else { - Spacer(Modifier.weight(1f)) - } - if (s.showRangePill) { - AgendaRangePill( - range = s.range, - isOverride = s.rangeIsOverride, - onClick = { showRangePicker = true }, - ) - } + AgendaRangeBanner( + range = s.range, + start = s.anchor, + end = s.rangeEnd, + modifier = Modifier.weight(1f), + ) + AgendaRangePill( + range = s.range, + isOverride = s.rangeIsOverride, + onClick = { showRangePicker = true }, + ) } } AgendaContent( diff --git a/app/src/main/java/de/jeanlucmakiola/calendula/ui/agenda/AgendaUiState.kt b/app/src/main/java/de/jeanlucmakiola/calendula/ui/agenda/AgendaUiState.kt index 0b8414c..110a528 100644 --- a/app/src/main/java/de/jeanlucmakiola/calendula/ui/agenda/AgendaUiState.kt +++ b/app/src/main/java/de/jeanlucmakiola/calendula/ui/agenda/AgendaUiState.kt @@ -59,9 +59,7 @@ sealed interface AgendaUiState { val rangeIsOverride: Boolean, /** Last day the current [range] covers (inclusive), for the range header. */ val rangeEnd: LocalDate, - /** Whether to show the range header banner (settings toggle, on by default). */ - val showRangeBanner: Boolean, - /** Whether to show the bottom-left range pill (settings toggle, on by default). */ - val showRangePill: Boolean, + /** Whether to show the top range bar — header + switcher (toggle, on by default). */ + val showRangeBar: Boolean, ) : AgendaUiState } diff --git a/app/src/main/java/de/jeanlucmakiola/calendula/ui/agenda/AgendaViewModel.kt b/app/src/main/java/de/jeanlucmakiola/calendula/ui/agenda/AgendaViewModel.kt index 758e296..f088e4e 100644 --- a/app/src/main/java/de/jeanlucmakiola/calendula/ui/agenda/AgendaViewModel.kt +++ b/app/src/main/java/de/jeanlucmakiola/calendula/ui/agenda/AgendaViewModel.kt @@ -43,12 +43,11 @@ class AgendaViewModel @Inject constructor( @IoDispatcher private val io: CoroutineDispatcher, ) : ViewModel() { - // The saved agenda range plus the banner/pill visibility toggles. + // The saved agenda range plus the range-bar visibility toggle. private val agendaSettings = combine( settingsPrefs.agendaScreenRange, - settingsPrefs.agendaShowRangeBanner, - settingsPrefs.agendaShowRangePill, - ) { range, showBanner, showPill -> AgendaSettings(range, showBanner, showPill) } + settingsPrefs.agendaShowRangeBar, + ) { range, showBar -> AgendaSettings(range, showBar) } // First day of the week, for the calendar-aligned "this week" range. private val weekStartDay = settingsPrefs.weekStart @@ -74,8 +73,7 @@ class AgendaViewModel @Inject constructor( range = override ?: settings.range, rangeIsOverride = override != null && override != settings.range, weekStart = weekStart, - showRangeBanner = settings.showBanner, - showRangePill = settings.showPill, + showRangeBar = settings.showBar, ) } .flatMapLatest { params -> @@ -115,8 +113,7 @@ class AgendaViewModel @Inject constructor( private data class AgendaSettings( val range: AgendaRange, - val showBanner: Boolean, - val showPill: Boolean, + val showBar: Boolean, ) private data class AgendaParams( @@ -124,8 +121,7 @@ class AgendaViewModel @Inject constructor( val range: AgendaRange, val rangeIsOverride: Boolean, val weekStart: DayOfWeek, - val showRangeBanner: Boolean, - val showRangePill: Boolean, + val showRangeBar: Boolean, ) private fun buildState( @@ -149,8 +145,7 @@ class AgendaViewModel @Inject constructor( range = params.range, rangeIsOverride = params.rangeIsOverride, rangeEnd = rangeEnd, - showRangeBanner = params.showRangeBanner, - showRangePill = params.showRangePill, + showRangeBar = params.showRangeBar, ) } } diff --git a/app/src/main/java/de/jeanlucmakiola/calendula/ui/settings/SettingsScreen.kt b/app/src/main/java/de/jeanlucmakiola/calendula/ui/settings/SettingsScreen.kt index de031ed..5dc6ef8 100644 --- a/app/src/main/java/de/jeanlucmakiola/calendula/ui/settings/SettingsScreen.kt +++ b/app/src/main/java/de/jeanlucmakiola/calendula/ui/settings/SettingsScreen.kt @@ -518,28 +518,16 @@ private fun AppearanceScreen( onClick = { showAgendaWidgetRange = true }, ) GroupedRow( - title = stringResource(R.string.settings_agenda_range_title), - summary = stringResource(R.string.settings_agenda_range_title_hint), - position = Position.Middle, - trailing = { - Switch( - checked = state.agendaShowRangeBanner, - onCheckedChange = viewModel::setAgendaShowRangeBanner, - ) - }, - onClick = { viewModel.setAgendaShowRangeBanner(!state.agendaShowRangeBanner) }, - ) - GroupedRow( - title = stringResource(R.string.settings_agenda_range_button), - summary = stringResource(R.string.settings_agenda_range_button_hint), + title = stringResource(R.string.settings_agenda_range_bar), + summary = stringResource(R.string.settings_agenda_range_bar_hint), position = Position.Bottom, trailing = { Switch( - checked = state.agendaShowRangePill, - onCheckedChange = viewModel::setAgendaShowRangePill, + checked = state.agendaShowRangeBar, + onCheckedChange = viewModel::setAgendaShowRangeBar, ) }, - onClick = { viewModel.setAgendaShowRangePill(!state.agendaShowRangePill) }, + onClick = { viewModel.setAgendaShowRangeBar(!state.agendaShowRangeBar) }, ) } diff --git a/app/src/main/java/de/jeanlucmakiola/calendula/ui/settings/SettingsUiState.kt b/app/src/main/java/de/jeanlucmakiola/calendula/ui/settings/SettingsUiState.kt index fb1958e..0507e6a 100644 --- a/app/src/main/java/de/jeanlucmakiola/calendula/ui/settings/SettingsUiState.kt +++ b/app/src/main/java/de/jeanlucmakiola/calendula/ui/settings/SettingsUiState.kt @@ -28,10 +28,8 @@ data class SettingsUiState( val agendaScreenRange: AgendaRange = AgendaRange.Month, /** How far ahead the agenda widget shows events (v2.11). */ val agendaWidgetRange: AgendaRange = AgendaRange.Month, - /** Whether the agenda shows its range-header banner (v2.11). */ - val agendaShowRangeBanner: Boolean = true, - /** Whether the agenda shows the bottom-left range pill (v2.11). */ - val agendaShowRangePill: Boolean = true, + /** Whether the agenda shows its top range bar — header + switcher (v2.11). */ + val agendaShowRangeBar: Boolean = true, /** The calendar view the app opens on, and the home of the view back stack (M1). */ val defaultView: CalendarView = CalendarView.Week, /** Optional event-form fields shown by default (rest behind "more fields"). */ diff --git a/app/src/main/java/de/jeanlucmakiola/calendula/ui/settings/SettingsViewModel.kt b/app/src/main/java/de/jeanlucmakiola/calendula/ui/settings/SettingsViewModel.kt index 740b566..bc080ba 100644 --- a/app/src/main/java/de/jeanlucmakiola/calendula/ui/settings/SettingsViewModel.kt +++ b/app/src/main/java/de/jeanlucmakiola/calendula/ui/settings/SettingsViewModel.kt @@ -84,19 +84,15 @@ class SettingsViewModel @Inject constructor( ) { view, screenRange, widgetRange, timeFormat, showHourLines -> ViewSettings(view, screenRange, widgetRange, timeFormat, showHourLines) }, - combine( - prefs.agendaShowRangeBanner, - prefs.agendaShowRangePill, - ) { banner, pill -> banner to pill }, - ) { base, defaults, overrides, views, agendaToggles -> + prefs.agendaShowRangeBar, + ) { base, defaults, overrides, views, showRangeBar -> base.copy( defaultView = views.defaultView, agendaScreenRange = views.agendaScreenRange, agendaWidgetRange = views.agendaWidgetRange, timeFormat = views.timeFormat, showHourLines = views.showHourLines, - agendaShowRangeBanner = agendaToggles.first, - agendaShowRangePill = agendaToggles.second, + agendaShowRangeBar = showRangeBar, allowColorOnUnsupportedCalendars = defaults.allowColor, defaultReminderMinutes = defaults.defaultReminder, defaultAllDayReminderMinutes = defaults.allDayReminder, @@ -154,12 +150,8 @@ class SettingsViewModel @Inject constructor( viewModelScope.launch { prefs.setAgendaWidgetRange(range) } } - fun setAgendaShowRangeBanner(enabled: Boolean) { - viewModelScope.launch { prefs.setAgendaShowRangeBanner(enabled) } - } - - fun setAgendaShowRangePill(enabled: Boolean) { - viewModelScope.launch { prefs.setAgendaShowRangePill(enabled) } + fun setAgendaShowRangeBar(enabled: Boolean) { + viewModelScope.launch { prefs.setAgendaShowRangeBar(enabled) } } fun setTimeFormat(pref: TimeFormatPref) { diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index a1448d2..348ba61 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -285,10 +285,8 @@ Wie weit im Voraus die Agenda-Ansicht Termine anzeigt. Agenda-Widget-Zeitraum Wie weit im Voraus das Agenda-Widget auf dem Startbildschirm Termine anzeigt. - Zeitraum-Titel - Eine Überschrift anzeigen, die den dargestellten Zeitraum benennt - Zeitraum-Schaltfläche - Eine Schaltfläche in der Agenda anzeigen, um den Zeitraum für die Sitzung zu wechseln + Zeitraum-Leiste + Eine Leiste oben in der Agenda anzeigen, die den dargestellten Zeitraum benennt, mit einer Schaltfläche zum Wechseln des Zeitraums für die Sitzung Heute Diese Woche Dieser Monat diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fed0707..60c1872 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -278,10 +278,8 @@ How far ahead the Agenda screen lists events. Agenda widget range How far ahead the agenda home-screen widget lists events. - Range title - Show a header naming the dates the agenda is showing - Range button - Show a button in the agenda to switch the range for the session + Range bar + Show a bar at the top of the agenda naming the dates shown, with a button to switch the range for the session Today This week This month