Compare commits
10 Commits
9dc83ce15b
...
96e3bff877
| Author | SHA1 | Date | |
|---|---|---|---|
| 96e3bff877 | |||
| 2f3980f3c4 | |||
| a1582d5a91 | |||
|
|
25e3640ba0 | ||
| 3f85bac74e | |||
| 5b83b9da73 | |||
| 3c8c555b94 | |||
| a6a6c0c714 | |||
|
|
66dbdc8913 | ||
|
|
6a125b7c73 |
74
CHANGELOG.md
74
CHANGELOG.md
@@ -7,6 +7,74 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Changed
|
||||
- Month-view event titles no longer end in an ellipsis. The "…" took the width
|
||||
of a couple of characters and told you nothing you couldn't already see, so
|
||||
the title now simply runs to the edge of its chip — a few more letters per
|
||||
cell, which is often the difference between two events you can tell apart and
|
||||
two you can't ([#164]).
|
||||
|
||||
## [2.19.0] — 2026-08-10
|
||||
|
||||
### Added
|
||||
- **Drag an event to reschedule it.** Press and hold an event in the month,
|
||||
week or day view and drop it on another time or day — the only way to move an
|
||||
appointment used to be opening it and editing its start and end by hand. The
|
||||
block follows your finger, the timeline scrolls when you carry it to an edge,
|
||||
and the event's length is preserved: a 90-minute meeting dropped on 09:00 ends
|
||||
at 10:30. In week and day view the drop snaps to 15-minute steps; in month
|
||||
view it moves the event to the day you dropped it on and leaves the time
|
||||
alone. A confirmation names the new slot and offers **Undo** wherever the move
|
||||
can be taken back in one step. Events you can't edit — read-only calendars, and
|
||||
birthdays and anniversaries mirrored from your contacts — can't be picked up.
|
||||
Rescheduling isn't pointer-only: a screen reader gets a **Move…** action on
|
||||
every event that can be moved ([#68]).
|
||||
- Dragging a **recurring** event asks what it should apply to, the same *this
|
||||
event / this and following / all events* choice a save does. Where moving the
|
||||
whole series would change which weekday it falls on, the rule is rewritten to
|
||||
match — a weekly Monday event dropped on a Wednesday becomes a weekly
|
||||
Wednesday event. Where it can't be rewritten safely, the prompt says so and
|
||||
offers to move just the one occurrence, rather than quietly leaving the
|
||||
series behind ([#68]).
|
||||
- **Delete several search results at once.** Long-press a hit in search to enter
|
||||
selection mode, tap the rest (or **Select all**), and delete the lot in one
|
||||
action — finding and removing, say, every leftover event with the same title
|
||||
no longer means opening them one at a time. Recurring hits in the batch ask
|
||||
once for the whole selection instead of once each, results on read-only
|
||||
calendars can't be selected, and the deletion is confirmed before it runs
|
||||
([#80]).
|
||||
|
||||
### Changed
|
||||
- **First launch is now a short wizard** instead of a single permission screen.
|
||||
It counts its steps, each one can be stepped back out of, and beyond granting
|
||||
calendar access it offers two things worth deciding once: turning on automatic
|
||||
backup — chosen inline, folder picker and all, since events that live only on
|
||||
the phone are lost with it — and choosing which view Calendula opens on, with
|
||||
a live preview of the month, week, day and agenda layouts rather than four
|
||||
names in a list. Both are skippable, everything chosen is changeable in
|
||||
Settings afterwards, and the backup step is offered only where nothing
|
||||
writable is being synced anywhere. Existing installs are not re-onboarded —
|
||||
revoking and re-granting the calendar permission later does not restart the
|
||||
wizard ([#163]).
|
||||
- The one-time notice about calendars switched off for this device is now a step
|
||||
in the flow rather than a dialog thrown over the app on first open.
|
||||
|
||||
### Fixed
|
||||
- Removed the deprecated `statusBarColor` / `navigationBarColor` theme
|
||||
attributes the Play Console flags on Android 15 and up, where they no longer
|
||||
do anything. The launch backdrop now picks its status-bar icons from the
|
||||
light/dark resource instead, so they stay legible over it either way
|
||||
([#123]).
|
||||
|
||||
## [2.18.1] — 2026-08-06
|
||||
|
||||
### Fixed
|
||||
- Tapping an empty slot in week or day view creates the event at the hour you
|
||||
tapped, after the timeline has been zoomed. Pinching the day taller or shorter
|
||||
— or changing **Hour height** in Settings — left the tap still being measured
|
||||
against the old spacing, so the new event landed at some other hour entirely
|
||||
([#148]).
|
||||
|
||||
## [2.18.0] — 2026-07-31
|
||||
|
||||
### Added
|
||||
@@ -1323,3 +1391,9 @@ automatically, with zero telemetry and no internet permission.
|
||||
[#57]: https://codeberg.org/jlmakiola/calendula/issues/57
|
||||
[#56]: https://codeberg.org/jlmakiola/calendula/issues/56
|
||||
[#114]: https://codeberg.org/jlmakiola/calendula/issues/114
|
||||
[#148]: https://codeberg.org/jlmakiola/calendula/issues/148
|
||||
[#68]: https://codeberg.org/jlmakiola/calendula/issues/68
|
||||
[#80]: https://codeberg.org/jlmakiola/calendula/issues/80
|
||||
[#123]: https://codeberg.org/jlmakiola/calendula/issues/123
|
||||
[#163]: https://codeberg.org/jlmakiola/calendula/issues/163
|
||||
[#164]: https://codeberg.org/jlmakiola/calendula/issues/164
|
||||
|
||||
@@ -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 = 21800
|
||||
versionName = "2.18.0"
|
||||
versionCode = 21900
|
||||
versionName = "2.19.0"
|
||||
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
||||
@@ -76,6 +76,18 @@ fun TimelineScale.hourHeight(viewportHeight: Dp): Dp = when (this) {
|
||||
.coerceAtLeast(fillHourHeight(viewportHeight))
|
||||
}
|
||||
|
||||
/**
|
||||
* The minute of the day a tap [offsetY] px down a timeline column means, snapped
|
||||
* to the hour it landed in.
|
||||
*
|
||||
* [hourPx] must be the hour height the column is drawing at *now* — a tap
|
||||
* detector that captured it when it was installed maps taps to a pre-pinch grid
|
||||
* (#148). A zero or negative height (a viewport measured at nothing) has no grid
|
||||
* to read, so it answers midnight rather than dividing by it.
|
||||
*/
|
||||
fun tappedMinuteOfDay(offsetY: Float, hourPx: Float): Int =
|
||||
if (hourPx <= 0f) 0 else (offsetY / hourPx).toInt().coerceIn(0, 23) * 60
|
||||
|
||||
/**
|
||||
* Shortest an event block may render, as a fraction of an hour. Blocks keep a
|
||||
* floor so a 15-minute event stays tappable, but the floor scales with the hour
|
||||
|
||||
@@ -46,6 +46,7 @@ import androidx.compose.runtime.key
|
||||
import androidx.compose.runtime.mutableIntStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.runtime.rememberUpdatedState
|
||||
import androidx.compose.runtime.snapshotFlow
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
@@ -117,6 +118,7 @@ import de.jeanlucmakiola.calendula.ui.common.formatMinuteOfDay
|
||||
import de.jeanlucmakiola.calendula.ui.common.GUTTER_WIDTH
|
||||
import de.jeanlucmakiola.calendula.ui.common.HourGutter
|
||||
import de.jeanlucmakiola.calendula.ui.common.hourSeparatorLines
|
||||
import de.jeanlucmakiola.calendula.ui.common.tappedMinuteOfDay
|
||||
import de.jeanlucmakiola.calendula.ui.week.TimedBlock
|
||||
import kotlinx.coroutines.flow.first
|
||||
import kotlinx.coroutines.launch
|
||||
@@ -623,6 +625,12 @@ private fun DayColumnCard(
|
||||
LaunchedEffect(blocks, dragController.settling) {
|
||||
dragController.noteGrid(date, blocks)
|
||||
}
|
||||
// The tap detector outlives the composition that installed it — a pinch or a
|
||||
// Settings change moves the hour height without restarting it — so it reads
|
||||
// the height and the callback through state handles instead of capturing
|
||||
// them, or taps land on the scale the column had before the zoom (#148).
|
||||
val currentHourPx = rememberUpdatedState(hourPx)
|
||||
val currentOnCreateAt = rememberUpdatedState(onCreateAt)
|
||||
Card(
|
||||
// Plain rectangular column — the soft corners come from the outer
|
||||
// rounded scroll viewport, so inner rounding would look odd at the edges.
|
||||
@@ -643,8 +651,10 @@ private fun DayColumnCard(
|
||||
// only fires on the column background. Snaps to the tapped hour.
|
||||
.pointerInput(date) {
|
||||
detectTapGestures { offset ->
|
||||
val hour = (offset.y / hourPx).toInt().coerceIn(0, 23)
|
||||
onCreateAt(date, hour * 60)
|
||||
currentOnCreateAt.value(
|
||||
date,
|
||||
tappedMinuteOfDay(offset.y, currentHourPx.value),
|
||||
)
|
||||
}
|
||||
},
|
||||
) {
|
||||
|
||||
@@ -2356,7 +2356,12 @@ private fun MonthBar(
|
||||
text = title,
|
||||
style = MaterialTheme.typography.labelSmall,
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
// No "…" (#164): the chip is narrow enough that the ellipsis costs a
|
||||
// couple of readable characters. softWrap is off with it — left on,
|
||||
// a clipped line breaks at the last whole word instead of running to
|
||||
// the chip's edge, which reads as *less* title, not more.
|
||||
overflow = TextOverflow.Clip,
|
||||
softWrap = false,
|
||||
color = eventInk(fill),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -52,6 +52,7 @@ import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableIntStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.runtime.rememberUpdatedState
|
||||
import androidx.compose.runtime.snapshotFlow
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
@@ -128,6 +129,7 @@ import de.jeanlucmakiola.calendula.ui.common.GUTTER_CONTENT_START_INSET
|
||||
import de.jeanlucmakiola.calendula.ui.common.GUTTER_WIDTH
|
||||
import de.jeanlucmakiola.calendula.ui.common.HourGutter
|
||||
import de.jeanlucmakiola.calendula.ui.common.hourSeparatorLines
|
||||
import de.jeanlucmakiola.calendula.ui.common.tappedMinuteOfDay
|
||||
import de.jeanlucmakiola.calendula.ui.common.rememberCalendarSlideSpec
|
||||
import de.jeanlucmakiola.calendula.ui.common.next
|
||||
import de.jeanlucmakiola.floret.time.isoWeekNumber
|
||||
@@ -771,6 +773,12 @@ private fun DayColumnCard(
|
||||
LaunchedEffect(blocks, dragController.settling) {
|
||||
dragController.noteGrid(date, blocks)
|
||||
}
|
||||
// The tap detector outlives the composition that installed it — a pinch or a
|
||||
// Settings change moves the hour height without restarting it — so it reads
|
||||
// the height and the callback through state handles instead of capturing
|
||||
// them, or taps land on the scale the column had before the zoom (#148).
|
||||
val currentHourPx = rememberUpdatedState(hourPx)
|
||||
val currentOnCreateAt = rememberUpdatedState(onCreateAt)
|
||||
Card(
|
||||
// Plain rectangular columns — the soft corners come from the outer
|
||||
// rounded scroll viewport, so inner rounding would look odd at the edges.
|
||||
@@ -790,8 +798,10 @@ private fun DayColumnCard(
|
||||
// blocks are consumed by their own handler first. Snaps to hour.
|
||||
.pointerInput(date) {
|
||||
detectTapGestures { offset ->
|
||||
val hour = (offset.y / hourPx).toInt().coerceIn(0, 23)
|
||||
onCreateAt(date, hour * 60)
|
||||
currentOnCreateAt.value(
|
||||
date,
|
||||
tappedMinuteOfDay(offset.y, currentHourPx.value),
|
||||
)
|
||||
}
|
||||
},
|
||||
) {
|
||||
|
||||
@@ -491,4 +491,5 @@
|
||||
<item quantity="many">Importando %d eventos</item>
|
||||
<item quantity="other">Importando %d eventos</item>
|
||||
</plurals>
|
||||
<string name="settings_soften_colors">Armoniza los colores del calendario</string>
|
||||
</resources>
|
||||
|
||||
9
app/src/main/res/values-pt-rBR/strings.xml
Normal file
9
app/src/main/res/values-pt-rBR/strings.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string-array name="backup_interval_units">
|
||||
<item>Minutes</item>
|
||||
<item>Hours</item>
|
||||
<item>Days</item>
|
||||
<item>Weeks</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -126,4 +126,24 @@ class TimelineScaleTest {
|
||||
assertThat(parseTimelineScale(stored)).isEqualTo(TimelineScale.Regular)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `a tap creates at the hour it landed in, at whatever scale`() {
|
||||
// Same point on the same column reads as a different hour once the
|
||||
// timeline has been pinched — which is the whole of #148: the tap has to
|
||||
// be measured against the height the column is drawing at now.
|
||||
assertThat(tappedMinuteOfDay(offsetY = 500f, hourPx = 100f)).isEqualTo(5 * 60)
|
||||
assertThat(tappedMinuteOfDay(offsetY = 500f, hourPx = 50f)).isEqualTo(10 * 60)
|
||||
// Within an hour it snaps back to that hour's start.
|
||||
assertThat(tappedMinuteOfDay(offsetY = 599f, hourPx = 100f)).isEqualTo(5 * 60)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `a tap outside the day stays inside it`() {
|
||||
assertThat(tappedMinuteOfDay(offsetY = -20f, hourPx = 56f)).isEqualTo(0)
|
||||
assertThat(tappedMinuteOfDay(offsetY = 99_999f, hourPx = 56f)).isEqualTo(23 * 60)
|
||||
// A viewport measured at nothing has no grid to read — midnight, not a
|
||||
// division by zero.
|
||||
assertThat(tappedMinuteOfDay(offsetY = 500f, hourPx = 0f)).isEqualTo(0)
|
||||
}
|
||||
}
|
||||
|
||||
2
fastlane/metadata/android/ar/changelogs/21801.txt
Normal file
2
fastlane/metadata/android/ar/changelogs/21801.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
إصلاحات
|
||||
• عرض الأسبوع واليوم: النقر على مساحة فارغة يُنشئ الحدث في الساعة التي نقرت عليها، حتى بعد تكبير شريط الوقت أو تغيير ارتفاع الساعة.
|
||||
6
fastlane/metadata/android/ar/changelogs/21900.txt
Normal file
6
fastlane/metadata/android/ar/changelogs/21900.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
جديد
|
||||
• اسحب الحدث لتغيير وقته أو يومه: اضغط عليه مطولاً في عرض الشهر أو الأسبوع أو اليوم ثم أفلته في المكان الجديد. في الأحداث المتكررة يُسأل عن نطاق النقل.
|
||||
• احذف عدة نتائج بحث دفعة واحدة: اضغط مطولاً على نتيجة لبدء التحديد، ثم احذفها معاً.
|
||||
|
||||
تغييرات
|
||||
• أصبح التشغيل الأول معالجاً قصيراً. يمكنه أيضاً تفعيل النسخ الاحتياطي التلقائي واختيار العرض الافتتاحي، وكلاهما مع معاينة.
|
||||
2
fastlane/metadata/android/de-DE/changelogs/21801.txt
Normal file
2
fastlane/metadata/android/de-DE/changelogs/21801.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
Behoben
|
||||
• Wochen- und Tagesansicht: Ein Tippen auf einen freien Bereich legt den Termin jetzt zur angetippten Uhrzeit an – auch nachdem die Zeitleiste gezoomt oder die Stundenhöhe geändert wurde.
|
||||
6
fastlane/metadata/android/de-DE/changelogs/21900.txt
Normal file
6
fastlane/metadata/android/de-DE/changelogs/21900.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
Neu
|
||||
• Termine per Drag & Drop verschieben: in der Monats-, Wochen- oder Tagesansicht lange gedrückt halten und zu einer anderen Zeit oder einem anderen Tag ablegen. Bei Serienterminen wird nachgefragt, wofür sie gilt.
|
||||
• Mehrere Suchergebnisse auf einmal löschen: langer Druck auf einen Treffer startet die Auswahl.
|
||||
|
||||
Geändert
|
||||
• Der erste Start ist jetzt ein kurzer Assistent. Er kann auch die automatische Sicherung einrichten und dich die Startansicht wählen lassen – beides mit Vorschau.
|
||||
2
fastlane/metadata/android/en-GB/changelogs/21801.txt
Normal file
2
fastlane/metadata/android/en-GB/changelogs/21801.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
Fixed
|
||||
• Week and day view: tapping an empty slot now creates the event at the hour you tapped, even after zooming the timeline or changing the hour height.
|
||||
6
fastlane/metadata/android/en-GB/changelogs/21900.txt
Normal file
6
fastlane/metadata/android/en-GB/changelogs/21900.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
New
|
||||
• Drag an event to reschedule it — press and hold it in month, week or day view and drop it on another time or day. Recurring events ask what the move applies to.
|
||||
• Delete several search results at once: long-press a hit to start selecting, then delete them in one action.
|
||||
|
||||
Changed
|
||||
• First launch is now a short wizard. It can also set up automatic backup and let you pick the view Calendula opens on, both with previews.
|
||||
2
fastlane/metadata/android/en-US/changelogs/21801.txt
Normal file
2
fastlane/metadata/android/en-US/changelogs/21801.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
Fixed
|
||||
• Week and day view: tapping an empty slot now creates the event at the hour you tapped, even after zooming the timeline or changing the hour height.
|
||||
6
fastlane/metadata/android/en-US/changelogs/21900.txt
Normal file
6
fastlane/metadata/android/en-US/changelogs/21900.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
New
|
||||
• Drag an event to reschedule it — press and hold it in month, week or day view and drop it on another time or day. Recurring events ask what the move applies to.
|
||||
• Delete several search results at once: long-press a hit to start selecting, then delete them in one action.
|
||||
|
||||
Changed
|
||||
• First launch is now a short wizard. It can also set up automatic backup and let you pick the view Calendula opens on, both with previews.
|
||||
2
fastlane/metadata/android/es-ES/changelogs/21801.txt
Normal file
2
fastlane/metadata/android/es-ES/changelogs/21801.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
Corregido
|
||||
• Vista de semana y día: al tocar un hueco libre, el evento se crea a la hora que has tocado, incluso después de ampliar la línea de tiempo o cambiar la altura de la hora.
|
||||
6
fastlane/metadata/android/es-ES/changelogs/21900.txt
Normal file
6
fastlane/metadata/android/es-ES/changelogs/21900.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
Novedades
|
||||
• Arrastra un evento para cambiarlo de hora o de día: mantenlo pulsado en la vista de mes, semana o día y suéltalo donde quieras. En los eventos periódicos se pregunta a qué afecta el cambio.
|
||||
• Elimina varios resultados de búsqueda a la vez: mantén pulsado un resultado para empezar a seleccionar.
|
||||
|
||||
Cambios
|
||||
• El primer inicio es ahora un breve asistente. También puede activar la copia de seguridad automática y dejarte elegir la vista inicial, ambas con vista previa.
|
||||
2
fastlane/metadata/android/fr-FR/changelogs/21801.txt
Normal file
2
fastlane/metadata/android/fr-FR/changelogs/21801.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
Corrigé
|
||||
• Vues Semaine et Jour : appuyer sur un créneau vide crée désormais l'événement à l'heure touchée, même après avoir zoomé sur la grille ou modifié la hauteur d'une heure.
|
||||
6
fastlane/metadata/android/fr-FR/changelogs/21900.txt
Normal file
6
fastlane/metadata/android/fr-FR/changelogs/21900.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
Nouveautés
|
||||
• Déplacez un événement par glisser-déposer : appuyez longuement dessus en vue mois, semaine ou jour, puis déposez-le à une autre heure ou un autre jour. Pour un événement récurrent, la portée du déplacement est demandée.
|
||||
• Supprimez plusieurs résultats de recherche d'un coup : un appui long lance la sélection.
|
||||
|
||||
Modifié
|
||||
• Le premier lancement est désormais un court assistant. Il peut aussi activer la sauvegarde automatique et vous laisser choisir la vue d'ouverture, avec aperçu.
|
||||
2
fastlane/metadata/android/it-IT/changelogs/21801.txt
Normal file
2
fastlane/metadata/android/it-IT/changelogs/21801.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
Corretto
|
||||
• Vista settimana e giorno: toccando uno spazio libero l'evento viene creato all'ora toccata, anche dopo aver ingrandito la linea temporale o cambiato l'altezza dell'ora.
|
||||
6
fastlane/metadata/android/it-IT/changelogs/21900.txt
Normal file
6
fastlane/metadata/android/it-IT/changelogs/21900.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
Novità
|
||||
• Trascina un evento per spostarlo a un altro orario o giorno: tienilo premuto nella vista mese, settimana o giorno e rilascialo. Per gli eventi ricorrenti viene chiesto a cosa si applica lo spostamento.
|
||||
• Elimina più risultati di ricerca in una volta: tieni premuto un risultato per iniziare a selezionare.
|
||||
|
||||
Modifiche
|
||||
• Il primo avvio è ora una breve procedura guidata. Può anche attivare il backup automatico e farti scegliere la vista iniziale, entrambi con anteprima.
|
||||
2
fastlane/metadata/android/pl-PL/changelogs/21801.txt
Normal file
2
fastlane/metadata/android/pl-PL/changelogs/21801.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
Poprawki
|
||||
• Widok tygodnia i dnia: dotknięcie pustego miejsca tworzy teraz wydarzenie o dotkniętej godzinie, także po powiększeniu osi czasu lub zmianie wysokości godziny.
|
||||
6
fastlane/metadata/android/pl-PL/changelogs/21900.txt
Normal file
6
fastlane/metadata/android/pl-PL/changelogs/21900.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
Nowości
|
||||
• Przeciągnij wydarzenie, aby zmienić jego godzinę lub dzień: przytrzymaj je w widoku miesiąca, tygodnia lub dnia i upuść w nowym miejscu. Przy wydarzeniach cyklicznych pojawi się pytanie, czego dotyczy zmiana.
|
||||
• Usuwaj wiele wyników wyszukiwania naraz: przytrzymaj wynik, aby rozpocząć zaznaczanie.
|
||||
|
||||
Zmiany
|
||||
• Pierwsze uruchomienie to teraz krótki kreator. Może też włączyć automatyczną kopię zapasową i pozwolić wybrać widok startowy – oba z podglądem.
|
||||
6
fastlane/metadata/android/pt-BR/changelogs/21900.txt
Normal file
6
fastlane/metadata/android/pt-BR/changelogs/21900.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
Novidades
|
||||
• Arraste um evento para outro horário ou dia: mantenha-o pressionado na visualização de mês, semana ou dia e solte-o onde quiser. Em eventos recorrentes, você escolhe a que a alteração se aplica.
|
||||
• Exclua vários resultados da busca de uma vez: mantenha um resultado pressionado para começar a selecionar.
|
||||
|
||||
Alterações
|
||||
• A primeira execução agora é um breve assistente. Ele também pode ativar o backup automático e deixar você escolher a visualização inicial, ambos com prévia.
|
||||
2
fastlane/metadata/android/pt-PT/changelogs/21801.txt
Normal file
2
fastlane/metadata/android/pt-PT/changelogs/21801.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
Corrigido
|
||||
• Vista de semana e de dia: tocar num espaço livre cria o evento à hora tocada, mesmo depois de ampliar a linha temporal ou alterar a altura da hora.
|
||||
6
fastlane/metadata/android/pt-PT/changelogs/21900.txt
Normal file
6
fastlane/metadata/android/pt-PT/changelogs/21900.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
Novidades
|
||||
• Arraste um evento para outra hora ou dia: mantenha-o premido na vista de mês, semana ou dia e largue-o onde quiser. Nos eventos recorrentes, é perguntado a que se aplica a alteração.
|
||||
• Elimine vários resultados de pesquisa de uma vez: mantenha um resultado premido para começar a selecionar.
|
||||
|
||||
Alterações
|
||||
• O primeiro arranque é agora um breve assistente. Também pode ativar a cópia de segurança automática e deixá-lo escolher a vista inicial, ambas com pré-visualização.
|
||||
2
fastlane/metadata/android/ru-RU/changelogs/21801.txt
Normal file
2
fastlane/metadata/android/ru-RU/changelogs/21801.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
Исправлено
|
||||
• Вид недели и дня: нажатие на свободное место создаёт событие на выбранный час — в том числе после масштабирования шкалы времени или изменения высоты часа.
|
||||
6
fastlane/metadata/android/ru-RU/changelogs/21900.txt
Normal file
6
fastlane/metadata/android/ru-RU/changelogs/21900.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
Новое
|
||||
• Перетащите событие, чтобы перенести его: удерживайте его в режиме месяца, недели или дня и отпустите на другом времени или дне. Для повторяющихся событий будет предложено выбрать, к чему применить перенос.
|
||||
• Удаляйте несколько результатов поиска сразу: удержите результат, чтобы начать выделение.
|
||||
|
||||
Изменения
|
||||
• Первый запуск теперь короткий мастер. Он также может включить автоматическое резервное копирование и дать выбрать стартовый вид — и то и другое с предпросмотром.
|
||||
2
fastlane/metadata/android/zh-CN/changelogs/21801.txt
Normal file
2
fastlane/metadata/android/zh-CN/changelogs/21801.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
修复
|
||||
• 周视图和日视图:点按空白处会在所点的时间创建事件,即使在缩放时间轴或更改小时高度之后也是如此。
|
||||
6
fastlane/metadata/android/zh-CN/changelogs/21900.txt
Normal file
6
fastlane/metadata/android/zh-CN/changelogs/21900.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
新增
|
||||
• 拖动事件即可改期:在月、周或日视图中长按事件,拖到其他时间或日期后放开。重复事件会询问此次移动的适用范围。
|
||||
• 一次删除多条搜索结果:长按某条结果进入选择模式,然后一并删除。
|
||||
|
||||
变更
|
||||
• 首次启动改为简短的向导。它还可以帮你开启自动备份,并选择打开时显示的视图,两者均有预览。
|
||||
@@ -1,7 +1,7 @@
|
||||
[versions]
|
||||
agp = "9.2.1"
|
||||
kotlin = "2.3.21"
|
||||
ksp = "2.3.9"
|
||||
ksp = "2.3.10"
|
||||
hilt = "2.59.2"
|
||||
coreKtx = "1.19.0"
|
||||
appcompat = "1.7.1"
|
||||
@@ -19,15 +19,15 @@ truth = "1.4.5"
|
||||
androidxJunit = "1.3.0"
|
||||
espressoCore = "3.7.0"
|
||||
kotlinxDatetime = "0.7.0"
|
||||
kotlinxCoroutines = "1.10.2"
|
||||
kotlinxCoroutines = "1.11.0"
|
||||
turbine = "1.2.1"
|
||||
hiltNavigationCompose = "1.3.0"
|
||||
hiltNavigationCompose = "1.4.0"
|
||||
lifecycleCompose = "2.10.0"
|
||||
androidxTestRules = "1.7.0"
|
||||
# Glance: 1.1.1 is the latest stable (1.2.0 is still rc, 1.3.0 alpha).
|
||||
glance = "1.1.1"
|
||||
work = "2.10.1"
|
||||
documentfile = "1.0.1"
|
||||
documentfile = "1.1.0"
|
||||
|
||||
[libraries]
|
||||
# AndroidX core
|
||||
|
||||
Reference in New Issue
Block a user