From e0fdadc7ca4953255cb1e9c942aa88ce42bb9840 Mon Sep 17 00:00:00 2001 From: Jean-Luc Makiola Date: Tue, 11 Aug 2026 18:20:09 +0200 Subject: [PATCH] =?UTF-8?q?2.19.1=20=E2=80=94=20drag=20to=20reschedule=20c?= =?UTF-8?q?an=20be=20turned=20off=20(#176)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Release branch for 2.19.1. Merging this cuts the release — versionName is bumped to 2.19.1 (versionCode 21901), which is what release.yaml picks up. ### What's in it - **Drag to reschedule can be turned off** (#173). Settings → Views → *Drag to reschedule*, on by default. Turned off, no event block in the month, week or day view registers a drag gesture. The gate is `EventMoveScope.dragEnabled` rather than the scope itself, so the screen-reader "Move event" action — which only opens the edit form — stays available either way. The setting reads as off until the stored value has actually loaded, so a cold start can't hand out a drag before the preference is known. ### Release prep - CHANGELOG 2.19.1 section written. - Per-version "What's New" hand-written for all 12 store locales (`ar`, `de-DE`, `en-GB`, `en-US`, `es-ES`, `fr-FR`, `it-IT`, `pl-PL`, `pt-BR`, `pt-PT`, `ru-RU`, `zh-CN`). - `lint test assembleDebug` and `check_translations.py` green locally. - main is one commit ahead (Weblate #175, translations only) and merges clean — not merged into the branch, it comes along with this one. Closes #173 Co-authored-by: Jean-Luc Makiola Reviewed-on: https://codeberg.org/jlmakiola/calendula/pulls/176 --- CHANGELOG.md | 25 +++++++++++++++++++ app/build.gradle.kts | 4 +-- .../calendula/data/prefs/SettingsPrefs.kt | 14 +++++++++++ .../calendula/ui/CalendarHost.kt | 6 ++++- .../calendula/ui/CalendarHostViewModel.kt | 14 +++++++++++ .../calendula/ui/common/EventMoveScope.kt | 17 +++++++++++++ .../calendula/ui/day/DayScreen.kt | 3 ++- .../calendula/ui/month/MonthScreen.kt | 2 +- .../calendula/ui/settings/SettingsScreen.kt | 5 ++-- .../calendula/ui/settings/SettingsUiState.kt | 2 ++ .../ui/settings/SettingsViewModel.kt | 20 ++++++++++++--- .../calendula/ui/settings/ViewsSettings.kt | 14 ++++++++++- .../calendula/ui/week/WeekScreen.kt | 3 ++- app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/locales_config.xml | 1 + .../metadata/android/ar/changelogs/21901.txt | 3 +++ .../android/de-DE/changelogs/21901.txt | 3 +++ .../android/en-GB/changelogs/21901.txt | 3 +++ .../android/en-US/changelogs/21901.txt | 3 +++ .../android/es-ES/changelogs/21901.txt | 3 +++ .../android/fr-FR/changelogs/21901.txt | 3 +++ .../android/it-IT/changelogs/21901.txt | 3 +++ .../android/pl-PL/changelogs/21901.txt | 3 +++ .../android/pt-BR/changelogs/21901.txt | 3 +++ .../android/pt-PT/changelogs/21901.txt | 3 +++ .../android/ru-RU/changelogs/21901.txt | 3 +++ .../android/zh-CN/changelogs/21901.txt | 3 +++ floret-kit | 2 +- 28 files changed, 157 insertions(+), 13 deletions(-) create mode 100644 fastlane/metadata/android/ar/changelogs/21901.txt create mode 100644 fastlane/metadata/android/de-DE/changelogs/21901.txt create mode 100644 fastlane/metadata/android/en-GB/changelogs/21901.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/21901.txt create mode 100644 fastlane/metadata/android/es-ES/changelogs/21901.txt create mode 100644 fastlane/metadata/android/fr-FR/changelogs/21901.txt create mode 100644 fastlane/metadata/android/it-IT/changelogs/21901.txt create mode 100644 fastlane/metadata/android/pl-PL/changelogs/21901.txt create mode 100644 fastlane/metadata/android/pt-BR/changelogs/21901.txt create mode 100644 fastlane/metadata/android/pt-PT/changelogs/21901.txt create mode 100644 fastlane/metadata/android/ru-RU/changelogs/21901.txt create mode 100644 fastlane/metadata/android/zh-CN/changelogs/21901.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index bbff0cb..399b5d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [2.19.1] — 2026-08-11 + +### Added +- **Drag to reschedule can be turned off.** Settings → Views → *Drag to + reschedule*, on by default. Off, no event can be picked up in the month, week + or day view — for anyone who kept moving appointments by accident while + scrolling ([#173]). +- An early Brazilian Portuguese translation. Calendula has started speaking + Brazilian Portuguese, contributed as a community translation through + [Calendula's Weblate](https://weblate.dev.jeanlucmakiola.de/projects/calendula/). + About a third of the app is covered, so the rest still shows in English — you + can pick it under Settings → Language or in Android's per-app language + settings. Thanks to + [bkrz](https://weblate.dev.jeanlucmakiola.de/user/bkrz/) for getting it + started; help finishing it is very welcome. + +### Fixed +- **The language picker forgot which language was picked.** Android hands the + applied language back with its script filled in — Simplified Chinese goes in + as `zh-CN` and comes out as `zh-Hans-CN` — so after a restart no entry in + Settings → Language showed as selected, and the row above it named the + language the long way round. Only languages that imply a script were + affected. + ## [2.19.0] — 2026-08-10 ### Added @@ -1389,3 +1413,4 @@ automatically, with zero telemetry and no internet permission. [#80]: https://codeberg.org/jlmakiola/calendula/issues/80 [#123]: https://codeberg.org/jlmakiola/calendula/issues/123 [#163]: https://codeberg.org/jlmakiola/calendula/issues/163 +[#173]: https://codeberg.org/jlmakiola/calendula/issues/173 diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 5d8288f..8e66663 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -28,8 +28,8 @@ android { // which builds this version and then creates the matching vX.Y.Z tag + // release itself (versionCode is pinned to MAJOR*10000 + MINOR*100 + // PATCH from versionName, e.g. 2.7.2 -> 20702). See docs/RELEASING.md. - versionCode = 21900 - versionName = "2.19.0" + versionCode = 21901 + versionName = "2.19.1" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } 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 5fa676d..6bc5849 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 @@ -301,6 +301,19 @@ class SettingsPrefs @Inject constructor( store.edit { it[TODAY_BUTTON_IN_TOOLBAR_KEY] = enabled } } + /** + * Whether events can be dragged to another slot in the calendar views (#68, + * #173). Defaults to ON. Off means no block registers a drag gesture at all; + * rescheduling then goes through the edit form. + */ + val dragToReschedule: Flow = store.data.map { prefs -> + prefs[DRAG_TO_RESCHEDULE_KEY] ?: true + } + + suspend fun setDragToReschedule(enabled: Boolean) { + store.edit { it[DRAG_TO_RESCHEDULE_KEY] = enabled } + } + /** * How far ahead the in-app Agenda screen shows events (v2.11). Defaults to * [AgendaRange.Month] — a month of upcoming events. Independent of the @@ -945,6 +958,7 @@ class SettingsPrefs @Inject constructor( internal val MONTH_VIEW_STYLE_KEY = stringPreferencesKey("month_view_style") internal val TIMELINE_SCALE_KEY = stringPreferencesKey("timeline_scale") internal val TODAY_BUTTON_IN_TOOLBAR_KEY = booleanPreferencesKey("today_button_in_toolbar") + internal val DRAG_TO_RESCHEDULE_KEY = booleanPreferencesKey("drag_to_reschedule") internal val DEFAULT_VIEW_KEY = stringPreferencesKey("default_view") internal val QUICK_SWITCH_VIEWS_KEY = stringPreferencesKey("quick_switch_views") internal val DRAWER_VIEW_ORDER_KEY = stringPreferencesKey("drawer_view_order") diff --git a/app/src/main/java/de/jeanlucmakiola/calendula/ui/CalendarHost.kt b/app/src/main/java/de/jeanlucmakiola/calendula/ui/CalendarHost.kt index f2ef6e5..fa32b89 100644 --- a/app/src/main/java/de/jeanlucmakiola/calendula/ui/CalendarHost.kt +++ b/app/src/main/java/de/jeanlucmakiola/calendula/ui/CalendarHost.kt @@ -312,9 +312,13 @@ fun CalendarHost( heldEditKey = key editKey = key } - val moveScope = remember(movableCalendarIds, reschedule) { + // Off by preference (#173) switches off the gesture, not the scope: blocks + // register no drag, while the edit form and its TalkBack action stay put. + val dragToReschedule = viewModel.dragToReschedule.collectAsStateWithLifecycle().value + val moveScope = remember(movableCalendarIds, reschedule, dragToReschedule) { EventMoveScope( movableCalendarIds = movableCalendarIds, + dragEnabled = dragToReschedule, move = reschedule::move, inFlight = reschedule.inFlight, undoStarted = reschedule.undoStarted, diff --git a/app/src/main/java/de/jeanlucmakiola/calendula/ui/CalendarHostViewModel.kt b/app/src/main/java/de/jeanlucmakiola/calendula/ui/CalendarHostViewModel.kt index a5f3104..70cabf6 100644 --- a/app/src/main/java/de/jeanlucmakiola/calendula/ui/CalendarHostViewModel.kt +++ b/app/src/main/java/de/jeanlucmakiola/calendula/ui/CalendarHostViewModel.kt @@ -53,4 +53,18 @@ class CalendarHostViewModel @Inject constructor( started = SharingStarted.WhileSubscribed(5_000L), initialValue = false, ) + + /** + * Whether events may be dragged to another slot to reschedule them (#68, #173). + * Off until the stored value arrives, even though the preference itself defaults + * on: the wrong guess costs an enabled user a gesture for the few frames a cold + * start takes to read DataStore, but re-arms the one thing a disabled user + * switched off to be rid of. + */ + val dragToReschedule: StateFlow = prefs.dragToReschedule + .stateIn( + scope = viewModelScope, + started = SharingStarted.WhileSubscribed(5_000L), + initialValue = false, + ) } diff --git a/app/src/main/java/de/jeanlucmakiola/calendula/ui/common/EventMoveScope.kt b/app/src/main/java/de/jeanlucmakiola/calendula/ui/common/EventMoveScope.kt index 6fb0d8a..c338e40 100644 --- a/app/src/main/java/de/jeanlucmakiola/calendula/ui/common/EventMoveScope.kt +++ b/app/src/main/java/de/jeanlucmakiola/calendula/ui/common/EventMoveScope.kt @@ -29,6 +29,12 @@ class EventMoveScope( * the repository writes whatever it is handed — so this gate is load-bearing. */ val movableCalendarIds: Set, + /** + * Whether the *gesture* is on (#173). Off gates the drag alone: [edit] and the + * TalkBack action below stay, since invoking a menu item can't cause the + * accidental drags the setting exists to stop. + */ + val dragEnabled: Boolean, /** False when the drop was refused outright, so nothing will be written. */ val move: (MoveRequest) -> Boolean, /** @@ -91,6 +97,17 @@ fun ghostAlpha(lifted: Boolean): Float = animateFloatAsState( label = "ghost-alpha", ).value +/** + * Whether [event] can be picked up and dragged — its calendar allows moving and + * the gesture is switched on. Not the same question as [eventMoveAction], which + * survives the setting. + */ +@Composable +fun eventDragAllowed(event: EventInstance): Boolean { + val move = LocalEventMove.current ?: return false + return move.dragEnabled && move.allows(event) +} + /** * A TalkBack action that opens [event] in the edit form, so rescheduling isn't * pointer-only. Null when this event can't be moved. diff --git a/app/src/main/java/de/jeanlucmakiola/calendula/ui/day/DayScreen.kt b/app/src/main/java/de/jeanlucmakiola/calendula/ui/day/DayScreen.kt index 05c2ef5..6b6d4fe 100644 --- a/app/src/main/java/de/jeanlucmakiola/calendula/ui/day/DayScreen.kt +++ b/app/src/main/java/de/jeanlucmakiola/calendula/ui/day/DayScreen.kt @@ -92,6 +92,7 @@ import de.jeanlucmakiola.calendula.ui.common.TimelineDragController import de.jeanlucmakiola.calendula.ui.common.TimelineDragOverlay import de.jeanlucmakiola.calendula.ui.common.TimelineDrop import de.jeanlucmakiola.calendula.ui.common.beginsOn +import de.jeanlucmakiola.calendula.ui.common.eventDragAllowed import de.jeanlucmakiola.calendula.ui.common.eventMoveAction import de.jeanlucmakiola.calendula.ui.common.rememberEventDragSource import de.jeanlucmakiola.calendula.ui.common.rememberTimelineDragController @@ -737,7 +738,7 @@ private fun EventBlock( val moveAction = eventMoveAction(block.event) // A block clipped at the top continues from the previous day: its top edge // is midnight, not the event's start, so dragging it would invent a time. - val draggable = moveAction != null && block.beginsOn(date, zone) + val draggable = eventDragAllowed(block.event) && block.beginsOn(date, zone) val dragModifier = rememberEventDragSource( enabled = draggable, key = block.event.instanceId, diff --git a/app/src/main/java/de/jeanlucmakiola/calendula/ui/month/MonthScreen.kt b/app/src/main/java/de/jeanlucmakiola/calendula/ui/month/MonthScreen.kt index 14c7628..ffcccf6 100644 --- a/app/src/main/java/de/jeanlucmakiola/calendula/ui/month/MonthScreen.kt +++ b/app/src/main/java/de/jeanlucmakiola/calendula/ui/month/MonthScreen.kt @@ -2172,7 +2172,7 @@ private fun monthChipDragModifier( rowHeightPx: Float, isRtl: Boolean, ): Modifier = rememberDragSurface( - enabled = moveScope != null && controller != null, + enabled = moveScope?.dragEnabled == true && controller != null, key = week.days.first(), onPickUp = { local, pointerInRoot, nodeInRoot, size -> val bandTop = band[0]?.takeIf { it.isAttached }?.positionInRoot()?.y 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 5894d9d..b000e70 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 @@ -302,13 +302,14 @@ private fun ReportProblemRow(position: Position) { @Composable private fun LanguageRow(position: Position) { val context = LocalContext.current + val supported = remember { AppLanguage.supportedTags(context, R.xml.locales_config) } // Setting a locale recreates the activity; mirror the choice locally so the // row updates instantly even before the recreation lands. - var current by remember { mutableStateOf(AppLanguage.currentTag()) } + var current by remember { mutableStateOf(AppLanguage.currentTag(supported)) } var showDialog by remember { mutableStateOf(false) } // null = follow the system; the rest are BCP-47 tags from locales_config.xml. - val options = remember { listOf(null) + AppLanguage.supportedTags(context, R.xml.locales_config) } + val options = remember(supported) { listOf(null) + supported } GroupedRow( title = stringResource(R.string.settings_language), 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 c3cf3fc..effeb71 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 @@ -42,6 +42,8 @@ data class SettingsUiState( val showWeekNumbers: Boolean = false, /** Whether the jump-to-today control sits in the top bar instead of the FAB (#60). */ val todayButtonInToolbar: Boolean = false, + /** Whether events can be dragged to another slot to reschedule them (#68, #173). */ + val dragToReschedule: Boolean = true, /** How far ahead the in-app Agenda screen shows events (v2.11). */ val agendaScreenRange: AgendaRange = AgendaRange.Month, /** How far ahead the agenda widget shows events (v2.11). */ 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 8b49d6e..d2b37fe 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 @@ -145,9 +145,15 @@ class SettingsViewModel @Inject constructor( prefs.showWeekNumbers, prefs.agendaShowToday, prefs.softenCalendarColors, - prefs.todayButtonInToolbar, - ) { hourLines, weekNumbers, showToday, soften, todayInToolbar -> - DisplayToggles(hourLines, weekNumbers, showToday, soften, todayInToolbar) + combine( + prefs.todayButtonInToolbar, + prefs.dragToReschedule, + ::Pair, + ), + ) { hourLines, weekNumbers, showToday, soften, (todayInToolbar, dragToMove) -> + DisplayToggles( + hourLines, weekNumbers, showToday, soften, todayInToolbar, dragToMove, + ) }, ) { view, screenRange, widgetRange, timeFormat, toggles -> ViewSettings( @@ -157,6 +163,7 @@ class SettingsViewModel @Inject constructor( agendaShowToday = toggles.agendaShowToday, softenColors = toggles.softenColors, todayButtonInToolbar = toggles.todayButtonInToolbar, + dragToReschedule = toggles.dragToReschedule, ) }, combine( @@ -189,6 +196,7 @@ class SettingsViewModel @Inject constructor( agendaShowToday = views.agendaShowToday, softenColors = views.softenColors, todayButtonInToolbar = views.todayButtonInToolbar, + dragToReschedule = views.dragToReschedule, agendaShowRangeBar = misc.showRangeBar, autofocusEventTitle = misc.autofocusEventTitle, pastEventDisplay = misc.pastEventDisplay, @@ -289,6 +297,7 @@ class SettingsViewModel @Inject constructor( val agendaShowToday: Boolean, val softenColors: Boolean, val todayButtonInToolbar: Boolean, + val dragToReschedule: Boolean, ) private data class DisplayToggles( @@ -297,6 +306,7 @@ class SettingsViewModel @Inject constructor( val agendaShowToday: Boolean, val softenColors: Boolean, val todayButtonInToolbar: Boolean, + val dragToReschedule: Boolean, ) private data class MiscSettings( @@ -534,6 +544,10 @@ class SettingsViewModel @Inject constructor( viewModelScope.launch { prefs.setTodayButtonInToolbar(enabled) } } + fun setDragToReschedule(enabled: Boolean) { + viewModelScope.launch { prefs.setDragToReschedule(enabled) } + } + /** * Switch the launcher label (#44). The card highlights at once, then settles * on what the component state reports; the writes are binder round-trips and diff --git a/app/src/main/java/de/jeanlucmakiola/calendula/ui/settings/ViewsSettings.kt b/app/src/main/java/de/jeanlucmakiola/calendula/ui/settings/ViewsSettings.kt index 18bd68f..51943d9 100644 --- a/app/src/main/java/de/jeanlucmakiola/calendula/ui/settings/ViewsSettings.kt +++ b/app/src/main/java/de/jeanlucmakiola/calendula/ui/settings/ViewsSettings.kt @@ -114,7 +114,7 @@ internal fun ViewsScreen( GroupedRow( title = stringResource(R.string.settings_dim_completed), summary = stringResource(R.string.settings_dim_completed_summary), - position = Position.Bottom, + position = Position.Middle, trailing = { Switch( checked = state.dimCompletedEvents, @@ -123,6 +123,18 @@ internal fun ViewsScreen( }, onClick = { viewModel.setDimCompletedEvents(!state.dimCompletedEvents) }, ) + GroupedRow( + title = stringResource(R.string.settings_drag_to_reschedule), + summary = stringResource(R.string.settings_drag_to_reschedule_summary), + position = Position.Bottom, + trailing = { + Switch( + checked = state.dragToReschedule, + onCheckedChange = viewModel::setDragToReschedule, + ) + }, + onClick = { viewModel.setDragToReschedule(!state.dragToReschedule) }, + ) Spacer(Modifier.height(8.dp)) SectionHeader(stringResource(R.string.settings_month_header)) diff --git a/app/src/main/java/de/jeanlucmakiola/calendula/ui/week/WeekScreen.kt b/app/src/main/java/de/jeanlucmakiola/calendula/ui/week/WeekScreen.kt index b4debbe..869c3a2 100644 --- a/app/src/main/java/de/jeanlucmakiola/calendula/ui/week/WeekScreen.kt +++ b/app/src/main/java/de/jeanlucmakiola/calendula/ui/week/WeekScreen.kt @@ -100,6 +100,7 @@ import de.jeanlucmakiola.calendula.ui.common.TimelineDragController import de.jeanlucmakiola.calendula.ui.common.TimelineDragOverlay import de.jeanlucmakiola.calendula.ui.common.TimelineDrop import de.jeanlucmakiola.calendula.ui.common.beginsOn +import de.jeanlucmakiola.calendula.ui.common.eventDragAllowed import de.jeanlucmakiola.calendula.ui.common.eventMoveAction import de.jeanlucmakiola.calendula.ui.common.rememberEventDragSource import de.jeanlucmakiola.calendula.ui.common.rememberTimelineDragController @@ -905,7 +906,7 @@ private fun EventBlock( val moveAction = eventMoveAction(block.event) // A block clipped at the top continues from the previous day: its top edge // is midnight, not the event's start, so dragging it would invent a time. - val draggable = moveAction != null && block.beginsOn(date, zone) + val draggable = eventDragAllowed(block.event) && block.beginsOn(date, zone) val dragModifier = rememberEventDragSource( enabled = draggable, key = block.event.instanceId, diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cd92955..d8c06b4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -439,6 +439,8 @@ The height you pinched the timeline to Dim completed events Fade events that have already ended in month and week view + Drag to reschedule + Move an event by dragging it to another day or time Past events Show Dim diff --git a/app/src/main/res/xml/locales_config.xml b/app/src/main/res/xml/locales_config.xml index a6949ed..e1e7784 100644 --- a/app/src/main/res/xml/locales_config.xml +++ b/app/src/main/res/xml/locales_config.xml @@ -15,5 +15,6 @@ + diff --git a/fastlane/metadata/android/ar/changelogs/21901.txt b/fastlane/metadata/android/ar/changelogs/21901.txt new file mode 100644 index 0000000..7cba81c --- /dev/null +++ b/fastlane/metadata/android/ar/changelogs/21901.txt @@ -0,0 +1,3 @@ +جديد +• صار بالإمكان إيقاف السحب لتغيير الموعد: الإعدادات ← العروض ← «السحب لتغيير الموعد». يبقى مفعّلاً افتراضياً؛ وعند إيقافه لا يمكن سحب الأحداث في عرض الشهر أو الأسبوع أو اليوم. +• صار Calendula يتحدّث البرتغالية البرازيلية بفضل ترجمة من المجتمع. اخترها من الإعدادات ← اللغة. diff --git a/fastlane/metadata/android/de-DE/changelogs/21901.txt b/fastlane/metadata/android/de-DE/changelogs/21901.txt new file mode 100644 index 0000000..d6b62c7 --- /dev/null +++ b/fastlane/metadata/android/de-DE/changelogs/21901.txt @@ -0,0 +1,3 @@ +Neu +• Verschieben per Drag & Drop lässt sich abschalten: Einstellungen → Ansichten → „Per Ziehen verschieben“. Standardmäßig bleibt es an; abgeschaltet lassen sich Termine in der Monats-, Wochen- und Tagesansicht nicht mehr aufnehmen. +• Calendula spricht jetzt brasilianisches Portugiesisch – dank einer Community-Übersetzung. Auswählbar unter Einstellungen → Sprache. diff --git a/fastlane/metadata/android/en-GB/changelogs/21901.txt b/fastlane/metadata/android/en-GB/changelogs/21901.txt new file mode 100644 index 0000000..02611ec --- /dev/null +++ b/fastlane/metadata/android/en-GB/changelogs/21901.txt @@ -0,0 +1,3 @@ +Added +• Drag to reschedule can now be turned off: Settings → Views → “Drag to reschedule”. It stays on by default; switched off, events can no longer be picked up in the month, week or day view. +• Calendula now speaks Brazilian Portuguese, thanks to a community translation. Pick it under Settings → Language. diff --git a/fastlane/metadata/android/en-US/changelogs/21901.txt b/fastlane/metadata/android/en-US/changelogs/21901.txt new file mode 100644 index 0000000..02611ec --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/21901.txt @@ -0,0 +1,3 @@ +Added +• Drag to reschedule can now be turned off: Settings → Views → “Drag to reschedule”. It stays on by default; switched off, events can no longer be picked up in the month, week or day view. +• Calendula now speaks Brazilian Portuguese, thanks to a community translation. Pick it under Settings → Language. diff --git a/fastlane/metadata/android/es-ES/changelogs/21901.txt b/fastlane/metadata/android/es-ES/changelogs/21901.txt new file mode 100644 index 0000000..8549d8f --- /dev/null +++ b/fastlane/metadata/android/es-ES/changelogs/21901.txt @@ -0,0 +1,3 @@ +Novedades +• Ahora se puede desactivar el mover eventos arrastrando: Ajustes → Vistas → «Arrastrar para reprogramar». Sigue activado por defecto; desactivado, los eventos ya no se pueden arrastrar en las vistas de mes, semana y día. +• Calendula ya habla portugués de Brasil, gracias a una traducción de la comunidad. Elígelo en Ajustes → Idioma. diff --git a/fastlane/metadata/android/fr-FR/changelogs/21901.txt b/fastlane/metadata/android/fr-FR/changelogs/21901.txt new file mode 100644 index 0000000..2aac06c --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/21901.txt @@ -0,0 +1,3 @@ +Nouveautés +• Le déplacement par glisser-déposer peut désormais être désactivé : Réglages → Vues → « Glisser pour déplacer ». Il reste activé par défaut ; désactivé, les événements ne peuvent plus être saisis en vue mois, semaine ou jour. +• Calendula parle désormais le portugais brésilien, grâce à une traduction de la communauté. À choisir dans Réglages → Langue. diff --git a/fastlane/metadata/android/it-IT/changelogs/21901.txt b/fastlane/metadata/android/it-IT/changelogs/21901.txt new file mode 100644 index 0000000..576e65b --- /dev/null +++ b/fastlane/metadata/android/it-IT/changelogs/21901.txt @@ -0,0 +1,3 @@ +Novità +• Ora lo spostamento con il trascinamento si può disattivare: Impostazioni → Viste → «Trascina per spostare». Resta attivo di default; disattivato, gli eventi non si possono più trascinare nelle viste mese, settimana e giorno. +• Calendula ora parla portoghese brasiliano, grazie a una traduzione della comunità. Si sceglie in Impostazioni → Lingua. diff --git a/fastlane/metadata/android/pl-PL/changelogs/21901.txt b/fastlane/metadata/android/pl-PL/changelogs/21901.txt new file mode 100644 index 0000000..33328ee --- /dev/null +++ b/fastlane/metadata/android/pl-PL/changelogs/21901.txt @@ -0,0 +1,3 @@ +Nowości +• Przenoszenie wydarzeń przeciąganiem można teraz wyłączyć: Ustawienia → Widoki → „Przeciągnij, aby przenieść”. Domyślnie pozostaje włączone; po wyłączeniu wydarzeń nie da się już chwycić w widoku miesiąca, tygodnia i dnia. +• Calendula mówi teraz po portugalsku (Brazylia) dzięki tłumaczeniu społeczności. Wybierzesz je w Ustawienia → Język. diff --git a/fastlane/metadata/android/pt-BR/changelogs/21901.txt b/fastlane/metadata/android/pt-BR/changelogs/21901.txt new file mode 100644 index 0000000..b3f663c --- /dev/null +++ b/fastlane/metadata/android/pt-BR/changelogs/21901.txt @@ -0,0 +1,3 @@ +Novidades +• Agora é possível desativar o mover eventos arrastando: Configurações → Visualizações → “Arrastar para reagendar”. Continua ativo por padrão; desativado, os eventos não podem mais ser arrastados nas visualizações de mês, semana e dia. +• O Calendula agora fala português do Brasil, graças a uma tradução da comunidade. Escolha em Configurações → Idioma. diff --git a/fastlane/metadata/android/pt-PT/changelogs/21901.txt b/fastlane/metadata/android/pt-PT/changelogs/21901.txt new file mode 100644 index 0000000..07aedc6 --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/21901.txt @@ -0,0 +1,3 @@ +Novidades +• Já é possível desativar o mover eventos arrastando: Definições → Vistas → «Arrastar para reagendar». Continua ativo por predefinição; desativado, os eventos deixam de poder ser arrastados nas vistas de mês, semana e dia. +• O Calendula fala agora português do Brasil, graças a uma tradução da comunidade. Escolha em Definições → Idioma. diff --git a/fastlane/metadata/android/ru-RU/changelogs/21901.txt b/fastlane/metadata/android/ru-RU/changelogs/21901.txt new file mode 100644 index 0000000..48957f6 --- /dev/null +++ b/fastlane/metadata/android/ru-RU/changelogs/21901.txt @@ -0,0 +1,3 @@ +Новое +• Перенос событий перетаскиванием теперь можно отключить: Настройки → Виды → «Перетаскивание для переноса». По умолчанию включён; при отключении события больше нельзя подхватить в видах месяца, недели и дня. +• Calendula теперь говорит на бразильском португальском — благодаря переводу сообщества. Выбрать можно в Настройки → Язык. diff --git a/fastlane/metadata/android/zh-CN/changelogs/21901.txt b/fastlane/metadata/android/zh-CN/changelogs/21901.txt new file mode 100644 index 0000000..e6b162b --- /dev/null +++ b/fastlane/metadata/android/zh-CN/changelogs/21901.txt @@ -0,0 +1,3 @@ +新增 +• 现在可以关闭拖动改期:设置 → 视图 → “拖动改期”。默认保持开启;关闭后,月、周、日视图中的事件将无法再被拖起。 +• Calendula 现已支持巴西葡萄牙语,感谢社区翻译。可在设置 → 语言中选择。 diff --git a/floret-kit b/floret-kit index 05c79f2..ad440e8 160000 --- a/floret-kit +++ b/floret-kit @@ -1 +1 @@ -Subproject commit 05c79f2afc489e9cab7f2d42cce6ba853cc1f430 +Subproject commit ad440e8cac3c54fad1cb7a897c00efe98eecde9a