From 76a0139fda771a23863e0bbf4602c8068392f793 Mon Sep 17 00:00:00 2001 From: Jean-Luc Makiola Date: Sat, 27 Jun 2026 23:10:24 +0200 Subject: [PATCH] =?UTF-8?q?Rename=20app=20Floret=20=E2=86=92=20Agendula?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Floret is promoted to the family / design-language (shared-kit) name; the tasks app itself becomes Agendula (de.jeanlucmakiola.agendula) — agenda ('things to be done') + Calendula's -ula, a twin of the Calendula name. Renames the package, namespace, applicationId, rootProject.name, app_name, FloretApp/FloretNavHost/FloretTransitions classes, theme, F-Droid metadata dir, CI artifact name, and docs. The botanical word 'florets' is preserved in the name-origin prose, which is rewritten to Agendula's etymology. Clean build + unit tests green. Co-Authored-By: Claude Opus 4.8 (1M context) --- .gitea/workflows/release.yaml | 4 +- CHANGELOG.md | 2 +- CONTRIBUTING.md | 6 +-- README.md | 14 +++--- app/build.gradle.kts | 4 +- app/src/main/AndroidManifest.xml | 4 +- .../FloretApp.kt => agendula/AgendulaApp.kt} | 8 ++-- .../{floret => agendula}/MainActivity.kt | 20 ++++---- .../data/demo/DemoSeeder.kt | 20 ++++---- .../data/di/DataModule.kt | 16 +++---- .../data/di/Qualifiers.kt | 2 +- .../data/prefs/SettingsPrefs.kt | 4 +- .../data/reminders/BootReceiver.kt | 2 +- .../data/reminders/DueReminderReceiver.kt | 8 ++-- .../data/reminders/ProviderChangeReceiver.kt | 4 +- .../data/reminders/ReminderScheduler.kt | 14 +++--- .../data/reminders/ScheduledReminderStore.kt | 2 +- .../data/reminders/TaskNotifier.kt | 8 ++-- .../data/tasks/AndroidTasksDataSource.kt | 14 +++--- .../data/tasks/ColumnReader.kt | 2 +- .../data/tasks/Failures.kt | 2 +- .../data/tasks/ProviderResolver.kt | 4 +- .../data/tasks/TaskMapper.kt | 16 +++---- .../data/tasks/TaskProjections.kt | 8 ++-- .../data/tasks/TaskWriteMapper.kt | 10 ++-- .../data/tasks/TasksContract.kt | 8 ++-- .../data/tasks/TasksDataSource.kt | 8 ++-- .../data/tasks/TasksRepository.kt | 14 +++--- .../data/tasks/TasksRepositoryImpl.kt | 20 ++++---- .../{floret => agendula}/domain/DayWindow.kt | 2 +- .../{floret => agendula}/domain/Models.kt | 6 +-- .../{floret => agendula}/domain/TaskFilter.kt | 2 +- .../{floret => agendula}/domain/TaskForm.kt | 4 +- .../domain/TaskSections.kt | 2 +- .../domain/TaskSorting.kt | 2 +- .../{floret => agendula}/ui/RootScreen.kt | 18 +++---- .../ui/common/CollapsingScaffold.kt | 4 +- .../ui/common/DateTimeField.kt | 4 +- .../ui/common/DateTimeFormat.kt | 2 +- .../ui/common/GroupedList.kt | 2 +- .../ui/common/InlineTextField.kt | 4 +- .../ui/common/ListChip.kt | 4 +- .../ui/common/OptionCard.kt | 2 +- .../ui/common/OptionPicker.kt | 2 +- .../ui/common/PriorityChip.kt | 4 +- .../ui/common/ReminderFormatting.kt | 4 +- .../ui/common/ReminderLeadPicker.kt | 6 +-- .../ui/common/ShapedActionButton.kt | 4 +- .../ui/detail/TaskDetailScreen.kt | 24 +++++----- .../ui/detail/TaskDetailViewModel.kt | 10 ++-- .../ui/edit/TaskEditScreen.kt | 48 +++++++++---------- .../ui/edit/TaskEditViewModel.kt | 26 +++++----- .../ui/lists/ListsScreen.kt | 18 +++---- .../ui/lists/ListsViewModel.kt | 16 +++---- .../ui/navigation/AgendulaNavHost.kt} | 22 ++++----- .../ui/navigation/AgendulaTransitions.kt} | 2 +- .../ui/navigation/Destinations.kt | 6 +-- .../ui/permission/OnboardingScaffold.kt | 2 +- .../ui/permission/PermissionViewModel.kt | 8 ++-- .../ui/permission/ReminderOnboardingScreen.kt | 6 +-- .../permission/ReminderOnboardingViewModel.kt | 4 +- .../ui/settings/AppLanguage.kt | 4 +- .../ui/settings/SettingsScreen.kt | 26 +++++----- .../ui/settings/SettingsViewModel.kt | 16 +++---- .../ui/tasklist/TaskListScreen.kt | 30 ++++++------ .../ui/tasklist/TaskListViewModel.kt | 12 ++--- .../{floret => agendula}/ui/theme/Color.kt | 10 ++-- .../{floret => agendula}/ui/theme/Theme.kt | 12 ++--- .../{floret => agendula}/ui/theme/Type.kt | 4 +- .../res/drawable/ic_launcher_foreground.xml | 4 +- app/src/main/res/values/strings.xml | 18 +++---- app/src/main/res/values/themes.xml | 2 +- app/src/main/res/xml/locales_config.xml | 2 +- .../data/tasks/MapColumnReader.kt | 2 +- .../data/tasks/TaskMapperTest.kt | 12 ++--- .../data/tasks/TaskWriteMapperTest.kt | 10 ++-- .../domain/DayWindowTest.kt | 2 +- .../{floret => agendula}/domain/ModelsTest.kt | 2 +- .../domain/TaskFilteringTest.kt | 2 +- .../domain/TaskFormTest.kt | 2 +- .../domain/TaskSectionsTest.kt | 2 +- .../domain/TaskSortingTest.kt | 2 +- .../{floret => agendula}/domain/TestTasks.kt | 2 +- docs/ARCHITECTURE.md | 26 +++++----- docs/PLAN.md | 45 +++++++++-------- docs/README.md | 6 +-- docs/RELEASING.md | 6 +-- docs/ROADMAP.md | 8 ++-- .../de.jeanlucmakiola.agendula.yml | 10 ++++ .../en-US/description.txt | 2 +- .../en-US/summary.txt | 0 fdroid-metadata/de.jeanlucmakiola.floret.yml | 10 ---- settings.gradle.kts | 2 +- 93 files changed, 408 insertions(+), 403 deletions(-) rename app/src/main/java/de/jeanlucmakiola/{floret/FloretApp.kt => agendula/AgendulaApp.kt} (82%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/MainActivity.kt (77%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/data/demo/DemoSeeder.kt (80%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/data/di/DataModule.kt (71%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/data/di/Qualifiers.kt (81%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/data/prefs/SettingsPrefs.kt (98%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/data/reminders/BootReceiver.kt (94%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/data/reminders/DueReminderReceiver.kt (86%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/data/reminders/ProviderChangeReceiver.kt (88%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/data/reminders/ReminderScheduler.kt (89%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/data/reminders/ScheduledReminderStore.kt (96%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/data/reminders/TaskNotifier.kt (95%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/data/tasks/AndroidTasksDataSource.kt (94%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/data/tasks/ColumnReader.kt (96%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/data/tasks/Failures.kt (93%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/data/tasks/ProviderResolver.kt (95%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/data/tasks/TaskMapper.kt (82%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/data/tasks/TaskProjections.kt (81%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/data/tasks/TaskWriteMapper.kt (91%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/data/tasks/TasksContract.kt (95%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/data/tasks/TasksDataSource.kt (83%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/data/tasks/TasksRepository.kt (76%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/data/tasks/TasksRepositoryImpl.kt (90%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/domain/DayWindow.kt (94%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/domain/Models.kt (94%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/domain/TaskFilter.kt (97%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/domain/TaskForm.kt (94%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/domain/TaskSections.kt (97%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/domain/TaskSorting.kt (91%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/RootScreen.kt (86%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/common/CollapsingScaffold.kt (97%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/common/DateTimeField.kt (98%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/common/DateTimeFormat.kt (96%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/common/GroupedList.kt (99%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/common/InlineTextField.kt (95%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/common/ListChip.kt (97%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/common/OptionCard.kt (98%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/common/OptionPicker.kt (98%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/common/PriorityChip.kt (97%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/common/ReminderFormatting.kt (95%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/common/ReminderLeadPicker.kt (98%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/common/ShapedActionButton.kt (98%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/detail/TaskDetailScreen.kt (97%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/detail/TaskDetailViewModel.kt (90%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/edit/TaskEditScreen.kt (96%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/edit/TaskEditViewModel.kt (93%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/lists/ListsScreen.kt (95%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/lists/ListsViewModel.kt (87%) rename app/src/main/java/de/jeanlucmakiola/{floret/ui/navigation/FloretNavHost.kt => agendula/ui/navigation/AgendulaNavHost.kt} (88%) rename app/src/main/java/de/jeanlucmakiola/{floret/ui/navigation/FloretTransitions.kt => agendula/ui/navigation/AgendulaTransitions.kt} (94%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/navigation/Destinations.kt (95%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/permission/OnboardingScaffold.kt (99%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/permission/PermissionViewModel.kt (86%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/permission/ReminderOnboardingScreen.kt (97%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/permission/ReminderOnboardingViewModel.kt (92%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/settings/AppLanguage.kt (97%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/settings/SettingsScreen.kt (97%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/settings/SettingsViewModel.kt (83%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/tasklist/TaskListScreen.kt (98%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/tasklist/TaskListViewModel.kt (94%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/theme/Color.kt (88%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/theme/Theme.kt (87%) rename app/src/main/java/de/jeanlucmakiola/{floret => agendula}/ui/theme/Type.kt (76%) rename app/src/test/java/de/jeanlucmakiola/{floret => agendula}/data/tasks/MapColumnReader.kt (91%) rename app/src/test/java/de/jeanlucmakiola/{floret => agendula}/data/tasks/TaskMapperTest.kt (89%) rename app/src/test/java/de/jeanlucmakiola/{floret => agendula}/data/tasks/TaskWriteMapperTest.kt (93%) rename app/src/test/java/de/jeanlucmakiola/{floret => agendula}/domain/DayWindowTest.kt (96%) rename app/src/test/java/de/jeanlucmakiola/{floret => agendula}/domain/ModelsTest.kt (96%) rename app/src/test/java/de/jeanlucmakiola/{floret => agendula}/domain/TaskFilteringTest.kt (98%) rename app/src/test/java/de/jeanlucmakiola/{floret => agendula}/domain/TaskFormTest.kt (97%) rename app/src/test/java/de/jeanlucmakiola/{floret => agendula}/domain/TaskSectionsTest.kt (97%) rename app/src/test/java/de/jeanlucmakiola/{floret => agendula}/domain/TaskSortingTest.kt (96%) rename app/src/test/java/de/jeanlucmakiola/{floret => agendula}/domain/TestTasks.kt (95%) create mode 100644 fdroid-metadata/de.jeanlucmakiola.agendula.yml rename fdroid-metadata/{de.jeanlucmakiola.floret => de.jeanlucmakiola.agendula}/en-US/description.txt (87%) rename fdroid-metadata/{de.jeanlucmakiola.floret => de.jeanlucmakiola.agendula}/en-US/summary.txt (100%) delete mode 100644 fdroid-metadata/de.jeanlucmakiola.floret.yml diff --git a/.gitea/workflows/release.yaml b/.gitea/workflows/release.yaml index 450b342..2ea0bc3 100644 --- a/.gitea/workflows/release.yaml +++ b/.gitea/workflows/release.yaml @@ -225,7 +225,7 @@ jobs: if [ -z "$SAFE_REF_NAME" ]; then SAFE_REF_NAME="${GITHUB_SHA:-manual}" fi - cp app/build/outputs/apk/release/app-release.apk "fdroid/repo/floret_${SAFE_REF_NAME}.apk" + cp app/build/outputs/apk/release/app-release.apk "fdroid/repo/agendula_${SAFE_REF_NAME}.apk" - name: Copy metadata to F-Droid repo run: | @@ -248,7 +248,7 @@ jobs: if [ ! -s /tmp/changelog.txt ]; then echo "See CHANGELOG.md for $VERSION." > /tmp/changelog.txt fi - CL_DIR="fdroid/metadata/de.jeanlucmakiola.floret/en-US/changelogs" + CL_DIR="fdroid/metadata/de.jeanlucmakiola.agendula/en-US/changelogs" mkdir -p "$CL_DIR" cp /tmp/changelog.txt "$CL_DIR/${VERSION_CODE}.txt" echo "Wrote $CL_DIR/${VERSION_CODE}.txt" diff --git a/CHANGELOG.md b/CHANGELOG.md index 21827f9..747f79f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ the source of truth for version codes (see Calendula's `docs/RELEASING.md`). ### Added - M5 reminders onboarding & polish: a one-time reminder onboarding step after the - provider grant explains that Floret delivers due reminders itself and requests + provider grant explains that Agendula delivers due reminders itself and requests `POST_NOTIFICATIONS` (API 33+). A new **Settings** screen (gear on the lists overview), structured after Calendula as a category hub with sliding sub-screens (`CollapsingScaffold` + grouped category rows + full-screen `OptionPicker`): diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 417c7b8..5eef705 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ -# Contributing to Floret +# Contributing to Agendula -Thanks for your interest in Floret — a Material 3 Expressive task app that's a +Thanks for your interest in Agendula — a Material 3 Expressive task app that's a pure front-end over the OpenTasks `TaskContract` provider, with no own database or sync stack. Before diving in, skim [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) (how it's built), [`docs/ROADMAP.md`](docs/ROADMAP.md) (what's next), and @@ -80,7 +80,7 @@ push, so run these locally before opening a PR. Keep CI green. ## Scope -Floret stays true to its thesis: a front-end over **open** task backends +Agendula stays true to its thesis: a front-end over **open** task backends (CalDAV / iCalendar / DecSync via the OpenTasks provider). Proprietary backends (Google Tasks, Microsoft To Do) are out of scope by design — they'd mean owning a sync stack. v1 targets the OpenTasks contract (OpenTasks + tasks.org); jtx's diff --git a/README.md b/README.md index cce585c..5b5a127 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@
-

Floret

+

Agendula

A modern Material 3 Expressive task app for Android.
Reads, writes, and reminds — on top of an existing tasks provider, with no own @@ -13,14 +13,16 @@ sync stack.

-Floret is the task-list sibling to [Calendula](https://gitea.jeanlucmakiola.de/makiolaj/calendula). -Where Calendula is a pure front-end over Android's `CalendarContract`, Floret is +Agendula is the task-list sibling to [Calendula](https://gitea.jeanlucmakiola.de/makiolaj/calendula). +Where Calendula is a pure front-end over Android's `CalendarContract`, Agendula is a pure front-end over the **OpenTasks `TaskContract` provider** — the store that DAVx5 (and SmoothSync, DecSync, …) syncs your CalDAV `VTODO` tasks into. No own database, no reinvented sync. -A Calendula flower head is botanically made of many small *florets* — the -individual items that make up the bloom. Floret is those items: your tasks. +The name rhymes with its sibling on purpose: **Agendula** is *agenda* — Latin for +“things to be done” — given Calendula's `-ula` ending. Calendula keeps your days; +Agendula keeps your to-dos. (A Calendula flower head is botanically a cluster of +many small *florets* — so the two apps are florets of one bloom.) > **Status: data layer done, UI in progress.** The full non-visual stack over > the `TaskContract` provider — provider resolution, live-updating reads, @@ -32,7 +34,7 @@ individual items that make up the bloom. Floret is those items: your tasks. ## Sync sources (by design) -Floret works with anything that writes to the tasks provider — **DAVx5** +Agendula works with anything that writes to the tasks provider — **DAVx5** (CalDAV), **SmoothSync**, **CalDAV-Sync**, **DecSync CC**, or any Android sync adapter — because it builds on the provider, not on any one sync app. Google Tasks / Microsoft To Do are out of scope by design (proprietary; they would mean diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 301bca5..a142ec1 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -16,11 +16,11 @@ val keystoreProperties = Properties().apply { } android { - namespace = "de.jeanlucmakiola.floret" + namespace = "de.jeanlucmakiola.agendula" compileSdk = 37 defaultConfig { - applicationId = "de.jeanlucmakiola.floret" + applicationId = "de.jeanlucmakiola.agendula" minSdk = 29 targetSdk = 36 // The git tag is the single source of truth for released builds: at diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 74ed6f9..ca41302 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -30,7 +30,7 @@ false ThemeMode.DARK -> true } - FloretTheme(darkTheme = darkTheme, dynamicColor = ui.settings.dynamicColor) { + AgendulaTheme(darkTheme = darkTheme, dynamicColor = ui.settings.dynamicColor) { RootScreen(modifier = Modifier.fillMaxSize()) } } } companion object { - const val EXTRA_TASK_ID = "de.jeanlucmakiola.floret.extra.TASK_ID" - private const val EXTRA_SEED = "floret_seed" + const val EXTRA_TASK_ID = "de.jeanlucmakiola.agendula.extra.TASK_ID" + private const val EXTRA_SEED = "agendula_seed" /** Opens the app focused on a task (reminder taps). Routing lands with the UI. */ fun taskIntent(context: Context, taskId: Long): Intent = diff --git a/app/src/main/java/de/jeanlucmakiola/floret/data/demo/DemoSeeder.kt b/app/src/main/java/de/jeanlucmakiola/agendula/data/demo/DemoSeeder.kt similarity index 80% rename from app/src/main/java/de/jeanlucmakiola/floret/data/demo/DemoSeeder.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/data/demo/DemoSeeder.kt index 0b3c40c..a97ec03 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/data/demo/DemoSeeder.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/data/demo/DemoSeeder.kt @@ -1,10 +1,10 @@ -package de.jeanlucmakiola.floret.data.demo +package de.jeanlucmakiola.agendula.data.demo -import de.jeanlucmakiola.floret.data.di.IoDispatcher -import de.jeanlucmakiola.floret.data.tasks.TasksRepository -import de.jeanlucmakiola.floret.domain.DayWindow -import de.jeanlucmakiola.floret.domain.Priority -import de.jeanlucmakiola.floret.domain.TaskForm +import de.jeanlucmakiola.agendula.data.di.IoDispatcher +import de.jeanlucmakiola.agendula.data.tasks.TasksRepository +import de.jeanlucmakiola.agendula.domain.DayWindow +import de.jeanlucmakiola.agendula.domain.Priority +import de.jeanlucmakiola.agendula.domain.TaskForm import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.first import kotlinx.coroutines.withContext @@ -16,10 +16,10 @@ import kotlin.time.Instant /** * Debug-only one-shot sample data. Creates a **local, device-only** list - * ("Floret Demo") — so nothing syncs to a CalDAV server — and fills it with + * ("Agendula Demo") — so nothing syncs to a CalDAV server — and fills it with * tasks spread across overdue / today / upcoming / no-date / completed so every * smart list shows content. Idempotent: skips if the demo list already exists. - * Triggered from [de.jeanlucmakiola.floret.MainActivity] only in debug builds. + * Triggered from [de.jeanlucmakiola.agendula.MainActivity] only in debug builds. */ @Singleton class DemoSeeder @Inject constructor( @@ -47,14 +47,14 @@ class DemoSeeder @Inject constructor( repository.createTask(TaskForm(title = "Gather receipts", listId = listId, parentId = invoiceId)) repository.createTask(TaskForm(title = "Book train tickets", listId = listId, due = at(te + 6 * day), priority = Priority.LOW)) repository.createTask(TaskForm(title = "Read Compose 1.5 release notes", listId = listId)) - repository.createTask(TaskForm(title = "Sketch the Floret app icon", listId = listId)) + repository.createTask(TaskForm(title = "Sketch the Agendula app icon", listId = listId)) val done = repository.createTask(TaskForm(title = "Renew domain name", listId = listId, due = at(ts - 2 * day))) repository.setCompleted(done, completed = true) } private companion object { - const val DEMO_LIST = "Floret Demo" + const val DEMO_LIST = "Agendula Demo" const val DEMO_COLOR = 0xFF7A5C6B.toInt() } } diff --git a/app/src/main/java/de/jeanlucmakiola/floret/data/di/DataModule.kt b/app/src/main/java/de/jeanlucmakiola/agendula/data/di/DataModule.kt similarity index 71% rename from app/src/main/java/de/jeanlucmakiola/floret/data/di/DataModule.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/data/di/DataModule.kt index 251f76e..7e668e7 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/data/di/DataModule.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/data/di/DataModule.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.data.di +package de.jeanlucmakiola.agendula.data.di import android.content.Context import androidx.datastore.core.DataStore @@ -10,16 +10,16 @@ import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent -import de.jeanlucmakiola.floret.data.tasks.AndroidTasksDataSource -import de.jeanlucmakiola.floret.data.tasks.TasksDataSource -import de.jeanlucmakiola.floret.data.tasks.TasksRepository -import de.jeanlucmakiola.floret.data.tasks.TasksRepositoryImpl +import de.jeanlucmakiola.agendula.data.tasks.AndroidTasksDataSource +import de.jeanlucmakiola.agendula.data.tasks.TasksDataSource +import de.jeanlucmakiola.agendula.data.tasks.TasksRepository +import de.jeanlucmakiola.agendula.data.tasks.TasksRepositoryImpl import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Dispatchers import javax.inject.Singleton -private val Context.floretDataStore: DataStore by preferencesDataStore( - name = "floret_prefs", +private val Context.agendulaDataStore: DataStore by preferencesDataStore( + name = "agendula_prefs", ) @Module @@ -42,7 +42,7 @@ object DataProvideModule { @Provides @Singleton fun provideDataStore(@ApplicationContext context: Context): DataStore = - context.floretDataStore + context.agendulaDataStore @Provides @IoDispatcher diff --git a/app/src/main/java/de/jeanlucmakiola/floret/data/di/Qualifiers.kt b/app/src/main/java/de/jeanlucmakiola/agendula/data/di/Qualifiers.kt similarity index 81% rename from app/src/main/java/de/jeanlucmakiola/floret/data/di/Qualifiers.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/data/di/Qualifiers.kt index 509478d..6be87bc 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/data/di/Qualifiers.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/data/di/Qualifiers.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.data.di +package de.jeanlucmakiola.agendula.data.di import javax.inject.Qualifier diff --git a/app/src/main/java/de/jeanlucmakiola/floret/data/prefs/SettingsPrefs.kt b/app/src/main/java/de/jeanlucmakiola/agendula/data/prefs/SettingsPrefs.kt similarity index 98% rename from app/src/main/java/de/jeanlucmakiola/floret/data/prefs/SettingsPrefs.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/data/prefs/SettingsPrefs.kt index 01f9c44..e0e9ab2 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/data/prefs/SettingsPrefs.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/data/prefs/SettingsPrefs.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.data.prefs +package de.jeanlucmakiola.agendula.data.prefs import androidx.datastore.core.DataStore import androidx.datastore.preferences.core.Preferences @@ -8,7 +8,7 @@ import androidx.datastore.preferences.core.intPreferencesKey import androidx.datastore.preferences.core.longPreferencesKey import androidx.datastore.preferences.core.stringPreferencesKey import androidx.datastore.preferences.core.stringSetPreferencesKey -import de.jeanlucmakiola.floret.domain.TaskFormField +import de.jeanlucmakiola.agendula.domain.TaskFormField import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map import javax.inject.Inject diff --git a/app/src/main/java/de/jeanlucmakiola/floret/data/reminders/BootReceiver.kt b/app/src/main/java/de/jeanlucmakiola/agendula/data/reminders/BootReceiver.kt similarity index 94% rename from app/src/main/java/de/jeanlucmakiola/floret/data/reminders/BootReceiver.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/data/reminders/BootReceiver.kt index dc93b62..242e894 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/data/reminders/BootReceiver.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/data/reminders/BootReceiver.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.data.reminders +package de.jeanlucmakiola.agendula.data.reminders import android.content.BroadcastReceiver import android.content.Context diff --git a/app/src/main/java/de/jeanlucmakiola/floret/data/reminders/DueReminderReceiver.kt b/app/src/main/java/de/jeanlucmakiola/agendula/data/reminders/DueReminderReceiver.kt similarity index 86% rename from app/src/main/java/de/jeanlucmakiola/floret/data/reminders/DueReminderReceiver.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/data/reminders/DueReminderReceiver.kt index e3bfd44..dba31d7 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/data/reminders/DueReminderReceiver.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/data/reminders/DueReminderReceiver.kt @@ -1,11 +1,11 @@ -package de.jeanlucmakiola.floret.data.reminders +package de.jeanlucmakiola.agendula.data.reminders import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import dagger.hilt.android.AndroidEntryPoint -import de.jeanlucmakiola.floret.data.prefs.SettingsPrefs -import de.jeanlucmakiola.floret.data.tasks.TasksDataSource +import de.jeanlucmakiola.agendula.data.prefs.SettingsPrefs +import de.jeanlucmakiola.agendula.data.tasks.TasksDataSource import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob @@ -43,7 +43,7 @@ class DueReminderReceiver : BroadcastReceiver() { } companion object { - private const val EXTRA_TASK_ID = "de.jeanlucmakiola.floret.extra.TASK_ID" + private const val EXTRA_TASK_ID = "de.jeanlucmakiola.agendula.extra.TASK_ID" fun intent(context: Context, taskId: Long): Intent = Intent(context, DueReminderReceiver::class.java).putExtra(EXTRA_TASK_ID, taskId) diff --git a/app/src/main/java/de/jeanlucmakiola/floret/data/reminders/ProviderChangeReceiver.kt b/app/src/main/java/de/jeanlucmakiola/agendula/data/reminders/ProviderChangeReceiver.kt similarity index 88% rename from app/src/main/java/de/jeanlucmakiola/floret/data/reminders/ProviderChangeReceiver.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/data/reminders/ProviderChangeReceiver.kt index f97886e..82c491b 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/data/reminders/ProviderChangeReceiver.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/data/reminders/ProviderChangeReceiver.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.data.reminders +package de.jeanlucmakiola.agendula.data.reminders import android.content.BroadcastReceiver import android.content.Context @@ -12,7 +12,7 @@ import javax.inject.Inject /** * Re-syncs reminders whenever the tasks provider changes — covers external sync - * (DAVx5 pulling new/edited tasks) while Floret isn't in the foreground. The + * (DAVx5 pulling new/edited tasks) while Agendula isn't in the foreground. The * manifest filter targets both known authorities; best-effort (the in-app * ContentObserver covers the foreground case regardless). */ diff --git a/app/src/main/java/de/jeanlucmakiola/floret/data/reminders/ReminderScheduler.kt b/app/src/main/java/de/jeanlucmakiola/agendula/data/reminders/ReminderScheduler.kt similarity index 89% rename from app/src/main/java/de/jeanlucmakiola/floret/data/reminders/ReminderScheduler.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/data/reminders/ReminderScheduler.kt index 602d63d..4cea316 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/data/reminders/ReminderScheduler.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/data/reminders/ReminderScheduler.kt @@ -1,15 +1,15 @@ -package de.jeanlucmakiola.floret.data.reminders +package de.jeanlucmakiola.agendula.data.reminders import android.app.AlarmManager import android.app.PendingIntent import android.content.Context import android.os.Build import dagger.hilt.android.qualifiers.ApplicationContext -import de.jeanlucmakiola.floret.data.di.IoDispatcher -import de.jeanlucmakiola.floret.data.prefs.SettingsPrefs -import de.jeanlucmakiola.floret.data.tasks.ProviderResolver -import de.jeanlucmakiola.floret.data.tasks.TaskQuery -import de.jeanlucmakiola.floret.data.tasks.TasksDataSource +import de.jeanlucmakiola.agendula.data.di.IoDispatcher +import de.jeanlucmakiola.agendula.data.prefs.SettingsPrefs +import de.jeanlucmakiola.agendula.data.tasks.ProviderResolver +import de.jeanlucmakiola.agendula.data.tasks.TaskQuery +import de.jeanlucmakiola.agendula.data.tasks.TasksDataSource import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.first import kotlinx.coroutines.withContext @@ -18,7 +18,7 @@ import javax.inject.Singleton /** * The self-scheduled due-reminder engine. Tasks providers don't deliver - * reminders, so Floret reads upcoming due tasks and arms one exact [AlarmManager] + * reminders, so Agendula reads upcoming due tasks and arms one exact [AlarmManager] * alarm each, within a rolling window. Re-run on app start, boot and provider * change; it diffs against [ScheduledReminderStore] so only changed alarms move. */ diff --git a/app/src/main/java/de/jeanlucmakiola/floret/data/reminders/ScheduledReminderStore.kt b/app/src/main/java/de/jeanlucmakiola/agendula/data/reminders/ScheduledReminderStore.kt similarity index 96% rename from app/src/main/java/de/jeanlucmakiola/floret/data/reminders/ScheduledReminderStore.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/data/reminders/ScheduledReminderStore.kt index f903cb1..1331b0a 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/data/reminders/ScheduledReminderStore.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/data/reminders/ScheduledReminderStore.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.data.reminders +package de.jeanlucmakiola.agendula.data.reminders import androidx.datastore.core.DataStore import androidx.datastore.preferences.core.Preferences diff --git a/app/src/main/java/de/jeanlucmakiola/floret/data/reminders/TaskNotifier.kt b/app/src/main/java/de/jeanlucmakiola/agendula/data/reminders/TaskNotifier.kt similarity index 95% rename from app/src/main/java/de/jeanlucmakiola/floret/data/reminders/TaskNotifier.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/data/reminders/TaskNotifier.kt index c800ddc..4780f1c 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/data/reminders/TaskNotifier.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/data/reminders/TaskNotifier.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.data.reminders +package de.jeanlucmakiola.agendula.data.reminders import android.Manifest import android.annotation.SuppressLint @@ -12,9 +12,9 @@ import android.os.Build import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.core.content.ContextCompat -import de.jeanlucmakiola.floret.MainActivity -import de.jeanlucmakiola.floret.R -import de.jeanlucmakiola.floret.domain.Task +import de.jeanlucmakiola.agendula.MainActivity +import de.jeanlucmakiola.agendula.R +import de.jeanlucmakiola.agendula.domain.Task import dagger.hilt.android.qualifiers.ApplicationContext import java.time.Instant as JInstant import java.time.ZoneId diff --git a/app/src/main/java/de/jeanlucmakiola/floret/data/tasks/AndroidTasksDataSource.kt b/app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/AndroidTasksDataSource.kt similarity index 94% rename from app/src/main/java/de/jeanlucmakiola/floret/data/tasks/AndroidTasksDataSource.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/AndroidTasksDataSource.kt index 61c7373..1ddbfa6 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/data/tasks/AndroidTasksDataSource.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/AndroidTasksDataSource.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.data.tasks +package de.jeanlucmakiola.agendula.data.tasks import android.content.ContentResolver import android.content.ContentUris @@ -9,12 +9,12 @@ import android.net.Uri import android.os.Handler import android.os.Looper import dagger.hilt.android.qualifiers.ApplicationContext -import de.jeanlucmakiola.floret.data.tasks.TasksContract.Instances -import de.jeanlucmakiola.floret.data.tasks.TasksContract.Lists -import de.jeanlucmakiola.floret.data.tasks.TasksContract.Tasks -import de.jeanlucmakiola.floret.domain.Task -import de.jeanlucmakiola.floret.domain.TaskForm -import de.jeanlucmakiola.floret.domain.TaskList +import de.jeanlucmakiola.agendula.data.tasks.TasksContract.Instances +import de.jeanlucmakiola.agendula.data.tasks.TasksContract.Lists +import de.jeanlucmakiola.agendula.data.tasks.TasksContract.Tasks +import de.jeanlucmakiola.agendula.domain.Task +import de.jeanlucmakiola.agendula.domain.TaskForm +import de.jeanlucmakiola.agendula.domain.TaskList import java.time.ZoneId import javax.inject.Inject import javax.inject.Singleton diff --git a/app/src/main/java/de/jeanlucmakiola/floret/data/tasks/ColumnReader.kt b/app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/ColumnReader.kt similarity index 96% rename from app/src/main/java/de/jeanlucmakiola/floret/data/tasks/ColumnReader.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/ColumnReader.kt index 0da8dfd..5cd2933 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/data/tasks/ColumnReader.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/ColumnReader.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.data.tasks +package de.jeanlucmakiola.agendula.data.tasks import android.database.Cursor diff --git a/app/src/main/java/de/jeanlucmakiola/floret/data/tasks/Failures.kt b/app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/Failures.kt similarity index 93% rename from app/src/main/java/de/jeanlucmakiola/floret/data/tasks/Failures.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/Failures.kt index 6859a32..d34dae4 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/data/tasks/Failures.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/Failures.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.data.tasks +package de.jeanlucmakiola.agendula.data.tasks /** No tasks provider (OpenTasks / tasks.org) is installed on the device. */ class ProviderUnavailableException : diff --git a/app/src/main/java/de/jeanlucmakiola/floret/data/tasks/ProviderResolver.kt b/app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/ProviderResolver.kt similarity index 95% rename from app/src/main/java/de/jeanlucmakiola/floret/data/tasks/ProviderResolver.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/ProviderResolver.kt index 00fb24e..ba24eb0 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/data/tasks/ProviderResolver.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/ProviderResolver.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.data.tasks +package de.jeanlucmakiola.agendula.data.tasks import android.content.Context import android.content.pm.PackageManager @@ -8,7 +8,7 @@ import javax.inject.Inject import javax.inject.Singleton /** - * A tasks provider Floret can talk to. The same dmfs `TaskProvider` backs every + * A tasks provider Agendula can talk to. The same dmfs `TaskProvider` backs every * candidate, so the [TasksContract] columns apply regardless of which is present. */ data class TaskProvider( diff --git a/app/src/main/java/de/jeanlucmakiola/floret/data/tasks/TaskMapper.kt b/app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/TaskMapper.kt similarity index 82% rename from app/src/main/java/de/jeanlucmakiola/floret/data/tasks/TaskMapper.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/TaskMapper.kt index 40396a5..c8b36ab 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/data/tasks/TaskMapper.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/TaskMapper.kt @@ -1,12 +1,12 @@ -package de.jeanlucmakiola.floret.data.tasks +package de.jeanlucmakiola.agendula.data.tasks -import de.jeanlucmakiola.floret.data.tasks.TasksContract.Instances -import de.jeanlucmakiola.floret.data.tasks.TasksContract.Lists -import de.jeanlucmakiola.floret.data.tasks.TasksContract.Tasks -import de.jeanlucmakiola.floret.domain.Task -import de.jeanlucmakiola.floret.domain.TaskList -import de.jeanlucmakiola.floret.domain.priorityFromICal -import de.jeanlucmakiola.floret.domain.statusFromInt +import de.jeanlucmakiola.agendula.data.tasks.TasksContract.Instances +import de.jeanlucmakiola.agendula.data.tasks.TasksContract.Lists +import de.jeanlucmakiola.agendula.data.tasks.TasksContract.Tasks +import de.jeanlucmakiola.agendula.domain.Task +import de.jeanlucmakiola.agendula.domain.TaskList +import de.jeanlucmakiola.agendula.domain.priorityFromICal +import de.jeanlucmakiola.agendula.domain.statusFromInt import kotlin.time.Instant /** Maps a provider row (via [ColumnReader]) to a domain model. Pure + testable. */ diff --git a/app/src/main/java/de/jeanlucmakiola/floret/data/tasks/TaskProjections.kt b/app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/TaskProjections.kt similarity index 81% rename from app/src/main/java/de/jeanlucmakiola/floret/data/tasks/TaskProjections.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/TaskProjections.kt index 9113f56..6b6fa45 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/data/tasks/TaskProjections.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/TaskProjections.kt @@ -1,8 +1,8 @@ -package de.jeanlucmakiola.floret.data.tasks +package de.jeanlucmakiola.agendula.data.tasks -import de.jeanlucmakiola.floret.data.tasks.TasksContract.Instances -import de.jeanlucmakiola.floret.data.tasks.TasksContract.Lists -import de.jeanlucmakiola.floret.data.tasks.TasksContract.Tasks +import de.jeanlucmakiola.agendula.data.tasks.TasksContract.Instances +import de.jeanlucmakiola.agendula.data.tasks.TasksContract.Lists +import de.jeanlucmakiola.agendula.data.tasks.TasksContract.Tasks /** Column lists requested from the provider. Order is irrelevant; we read by name. */ object TaskProjections { diff --git a/app/src/main/java/de/jeanlucmakiola/floret/data/tasks/TaskWriteMapper.kt b/app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/TaskWriteMapper.kt similarity index 91% rename from app/src/main/java/de/jeanlucmakiola/floret/data/tasks/TaskWriteMapper.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/TaskWriteMapper.kt index 3045480..601ac24 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/data/tasks/TaskWriteMapper.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/TaskWriteMapper.kt @@ -1,9 +1,9 @@ -package de.jeanlucmakiola.floret.data.tasks +package de.jeanlucmakiola.agendula.data.tasks -import de.jeanlucmakiola.floret.data.tasks.TasksContract.Lists -import de.jeanlucmakiola.floret.data.tasks.TasksContract.Tasks -import de.jeanlucmakiola.floret.domain.TaskForm -import de.jeanlucmakiola.floret.domain.toICal +import de.jeanlucmakiola.agendula.data.tasks.TasksContract.Lists +import de.jeanlucmakiola.agendula.data.tasks.TasksContract.Tasks +import de.jeanlucmakiola.agendula.domain.TaskForm +import de.jeanlucmakiola.agendula.domain.toICal /** * Turns a [TaskForm] / mutation into a name→value map. Pure (no ContentValues), diff --git a/app/src/main/java/de/jeanlucmakiola/floret/data/tasks/TasksContract.kt b/app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/TasksContract.kt similarity index 95% rename from app/src/main/java/de/jeanlucmakiola/floret/data/tasks/TasksContract.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/TasksContract.kt index 8bc38d4..a400d59 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/data/tasks/TasksContract.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/TasksContract.kt @@ -1,9 +1,9 @@ -package de.jeanlucmakiola.floret.data.tasks +package de.jeanlucmakiola.agendula.data.tasks import android.net.Uri /** - * The subset of the OpenTasks `TaskContract` that Floret uses, vendored as + * The subset of the OpenTasks `TaskContract` that Agendula uses, vendored as * Kotlin constants. Derived from `org.dmfs.tasks.contract.TaskContract` * (Apache-2.0, dmfs GmbH): * https://github.com/dmfs/opentasks/blob/master/opentasks-contract/src/main/java/org/dmfs/tasks/contract/TaskContract.java @@ -25,7 +25,7 @@ object TasksContract { const val PARAM_ACCOUNT_TYPE = "account_type" const val LOAD_PROPERTIES = "load_properties" - /** Account used for local, device-only task lists Floret owns. */ + /** Account used for local, device-only task lists Agendula owns. */ const val LOCAL_ACCOUNT_NAME = "Local" const val LOCAL_ACCOUNT_TYPE = "org.dmfs.account.LOCAL" @@ -85,7 +85,7 @@ object TasksContract { * The `instances` view — one row per task occurrence, with recurrence * resolved and absolute [INSTANCE_START]/[INSTANCE_DUE] timestamps. Inherits * every [Tasks] column (title, status, …) plus the instance-only columns - * below. This is Floret's read source. + * below. This is Agendula's read source. */ object Instances { const val PATH = "instances" diff --git a/app/src/main/java/de/jeanlucmakiola/floret/data/tasks/TasksDataSource.kt b/app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/TasksDataSource.kt similarity index 83% rename from app/src/main/java/de/jeanlucmakiola/floret/data/tasks/TasksDataSource.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/TasksDataSource.kt index b6dc8a6..e73d7ee 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/data/tasks/TasksDataSource.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/TasksDataSource.kt @@ -1,8 +1,8 @@ -package de.jeanlucmakiola.floret.data.tasks +package de.jeanlucmakiola.agendula.data.tasks -import de.jeanlucmakiola.floret.domain.Task -import de.jeanlucmakiola.floret.domain.TaskForm -import de.jeanlucmakiola.floret.domain.TaskList +import de.jeanlucmakiola.agendula.domain.Task +import de.jeanlucmakiola.agendula.domain.TaskForm +import de.jeanlucmakiola.agendula.domain.TaskList /** What to fetch from the provider. Smart-list date logic is applied above this. */ data class TaskQuery( diff --git a/app/src/main/java/de/jeanlucmakiola/floret/data/tasks/TasksRepository.kt b/app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/TasksRepository.kt similarity index 76% rename from app/src/main/java/de/jeanlucmakiola/floret/data/tasks/TasksRepository.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/TasksRepository.kt index 72b226b..82c5148 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/data/tasks/TasksRepository.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/TasksRepository.kt @@ -1,14 +1,14 @@ -package de.jeanlucmakiola.floret.data.tasks +package de.jeanlucmakiola.agendula.data.tasks -import de.jeanlucmakiola.floret.domain.Task -import de.jeanlucmakiola.floret.domain.TaskDetail -import de.jeanlucmakiola.floret.domain.TaskFilter -import de.jeanlucmakiola.floret.domain.TaskForm -import de.jeanlucmakiola.floret.domain.TaskList +import de.jeanlucmakiola.agendula.domain.Task +import de.jeanlucmakiola.agendula.domain.TaskDetail +import de.jeanlucmakiola.agendula.domain.TaskFilter +import de.jeanlucmakiola.agendula.domain.TaskForm +import de.jeanlucmakiola.agendula.domain.TaskList import kotlinx.coroutines.flow.Flow import kotlin.time.Instant -/** Whether Floret can use the tasks provider right now. Drives onboarding. */ +/** Whether Agendula can use the tasks provider right now. Drives onboarding. */ enum class ProviderStatus { READY, NEEDS_PERMISSION, NO_PROVIDER } /** diff --git a/app/src/main/java/de/jeanlucmakiola/floret/data/tasks/TasksRepositoryImpl.kt b/app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/TasksRepositoryImpl.kt similarity index 90% rename from app/src/main/java/de/jeanlucmakiola/floret/data/tasks/TasksRepositoryImpl.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/TasksRepositoryImpl.kt index 15aa521..0cc8aa5 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/data/tasks/TasksRepositoryImpl.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/data/tasks/TasksRepositoryImpl.kt @@ -1,14 +1,14 @@ -package de.jeanlucmakiola.floret.data.tasks +package de.jeanlucmakiola.agendula.data.tasks -import de.jeanlucmakiola.floret.data.di.IoDispatcher -import de.jeanlucmakiola.floret.domain.DayWindow -import de.jeanlucmakiola.floret.domain.Task -import de.jeanlucmakiola.floret.domain.TaskDetail -import de.jeanlucmakiola.floret.domain.TaskFilter -import de.jeanlucmakiola.floret.domain.TaskFiltering -import de.jeanlucmakiola.floret.domain.TaskForm -import de.jeanlucmakiola.floret.domain.TaskList -import de.jeanlucmakiola.floret.domain.TaskSorting +import de.jeanlucmakiola.agendula.data.di.IoDispatcher +import de.jeanlucmakiola.agendula.domain.DayWindow +import de.jeanlucmakiola.agendula.domain.Task +import de.jeanlucmakiola.agendula.domain.TaskDetail +import de.jeanlucmakiola.agendula.domain.TaskFilter +import de.jeanlucmakiola.agendula.domain.TaskFiltering +import de.jeanlucmakiola.agendula.domain.TaskForm +import de.jeanlucmakiola.agendula.domain.TaskList +import de.jeanlucmakiola.agendula.domain.TaskSorting import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.awaitClose diff --git a/app/src/main/java/de/jeanlucmakiola/floret/domain/DayWindow.kt b/app/src/main/java/de/jeanlucmakiola/agendula/domain/DayWindow.kt similarity index 94% rename from app/src/main/java/de/jeanlucmakiola/floret/domain/DayWindow.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/domain/DayWindow.kt index 374ea36..fed4eeb 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/domain/DayWindow.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/domain/DayWindow.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.domain +package de.jeanlucmakiola.agendula.domain import java.time.ZoneId import kotlin.time.Instant diff --git a/app/src/main/java/de/jeanlucmakiola/floret/domain/Models.kt b/app/src/main/java/de/jeanlucmakiola/agendula/domain/Models.kt similarity index 94% rename from app/src/main/java/de/jeanlucmakiola/floret/domain/Models.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/domain/Models.kt index 4eeb306..47e8e68 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/domain/Models.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/domain/Models.kt @@ -1,6 +1,6 @@ -package de.jeanlucmakiola.floret.domain +package de.jeanlucmakiola.agendula.domain -import de.jeanlucmakiola.floret.data.tasks.TasksContract +import de.jeanlucmakiola.agendula.data.tasks.TasksContract import kotlin.time.Instant /** A task list (the `tasklists` table). Lists group under their account. */ @@ -14,7 +14,7 @@ data class TaskList( val isVisible: Boolean, val owner: String?, ) { - /** A device-only list Floret (or another app) created locally, not synced. */ + /** A device-only list Agendula (or another app) created locally, not synced. */ val isLocal: Boolean get() = accountType == TasksContract.LOCAL_ACCOUNT_TYPE } diff --git a/app/src/main/java/de/jeanlucmakiola/floret/domain/TaskFilter.kt b/app/src/main/java/de/jeanlucmakiola/agendula/domain/TaskFilter.kt similarity index 97% rename from app/src/main/java/de/jeanlucmakiola/floret/domain/TaskFilter.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/domain/TaskFilter.kt index 70d7858..e0e8550 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/domain/TaskFilter.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/domain/TaskFilter.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.domain +package de.jeanlucmakiola.agendula.domain import kotlin.time.Instant diff --git a/app/src/main/java/de/jeanlucmakiola/floret/domain/TaskForm.kt b/app/src/main/java/de/jeanlucmakiola/agendula/domain/TaskForm.kt similarity index 94% rename from app/src/main/java/de/jeanlucmakiola/floret/domain/TaskForm.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/domain/TaskForm.kt index 1852152..3d78fc2 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/domain/TaskForm.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/domain/TaskForm.kt @@ -1,11 +1,11 @@ -package de.jeanlucmakiola.floret.domain +package de.jeanlucmakiola.agendula.domain import kotlin.time.Instant /** * A validated create/edit form. Kept free of Android types so ViewModels and * tests can build and validate it on the JVM. The data layer turns it into - * provider ContentValues ([de.jeanlucmakiola.floret.data.tasks.TaskWriteMapper]). + * provider ContentValues ([de.jeanlucmakiola.agendula.data.tasks.TaskWriteMapper]). */ data class TaskForm( val title: String, diff --git a/app/src/main/java/de/jeanlucmakiola/floret/domain/TaskSections.kt b/app/src/main/java/de/jeanlucmakiola/agendula/domain/TaskSections.kt similarity index 97% rename from app/src/main/java/de/jeanlucmakiola/floret/domain/TaskSections.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/domain/TaskSections.kt index 167e379..f25a608 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/domain/TaskSections.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/domain/TaskSections.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.domain +package de.jeanlucmakiola.agendula.domain import kotlin.time.Instant diff --git a/app/src/main/java/de/jeanlucmakiola/floret/domain/TaskSorting.kt b/app/src/main/java/de/jeanlucmakiola/agendula/domain/TaskSorting.kt similarity index 91% rename from app/src/main/java/de/jeanlucmakiola/floret/domain/TaskSorting.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/domain/TaskSorting.kt index 98915ba..82055d4 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/domain/TaskSorting.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/domain/TaskSorting.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.domain +package de.jeanlucmakiola.agendula.domain /** Default task ordering, extracted so it's unit-testable without the repository. */ object TaskSorting { diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/RootScreen.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/RootScreen.kt similarity index 86% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/RootScreen.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/RootScreen.kt index 49290c2..e481bd7 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/RootScreen.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/RootScreen.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.ui +package de.jeanlucmakiola.agendula.ui import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts @@ -18,16 +18,16 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle -import de.jeanlucmakiola.floret.R -import de.jeanlucmakiola.floret.data.tasks.ProviderStatus -import de.jeanlucmakiola.floret.ui.navigation.FloretNavHost -import de.jeanlucmakiola.floret.ui.permission.PermissionViewModel -import de.jeanlucmakiola.floret.ui.permission.ReminderOnboardingScreen -import de.jeanlucmakiola.floret.ui.permission.ReminderOnboardingViewModel +import de.jeanlucmakiola.agendula.R +import de.jeanlucmakiola.agendula.data.tasks.ProviderStatus +import de.jeanlucmakiola.agendula.ui.navigation.AgendulaNavHost +import de.jeanlucmakiola.agendula.ui.permission.PermissionViewModel +import de.jeanlucmakiola.agendula.ui.permission.ReminderOnboardingScreen +import de.jeanlucmakiola.agendula.ui.permission.ReminderOnboardingViewModel /** * App root: gates on the tasks-provider permission, then hands off to - * [FloretNavHost] (lists → task list → detail / edit). + * [AgendulaNavHost] (lists → task list → detail / edit). */ @Composable fun RootScreen( @@ -70,7 +70,7 @@ private fun ReadyGate( val done by onboardingViewModel.onboardingDone.collectAsStateWithLifecycle() Crossfade(targetState = done, label = "reminderOnboardingGate") { state -> when (state) { - true -> FloretNavHost(modifier = modifier) + true -> AgendulaNavHost(modifier = modifier) false -> ReminderOnboardingScreen( onFinished = onboardingViewModel::finish, modifier = modifier, diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/common/CollapsingScaffold.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/CollapsingScaffold.kt similarity index 97% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/common/CollapsingScaffold.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/common/CollapsingScaffold.kt index e51999f..87754c7 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/common/CollapsingScaffold.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/CollapsingScaffold.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.ui.common +package de.jeanlucmakiola.agendula.ui.common import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column @@ -25,7 +25,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import de.jeanlucmakiola.floret.R +import de.jeanlucmakiola.agendula.R /** * Shared collapsing scaffold for the settings hub, its sub-screens and the diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/common/DateTimeField.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/DateTimeField.kt similarity index 98% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/common/DateTimeField.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/common/DateTimeField.kt index d9915ba..cfb6a1e 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/common/DateTimeField.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/DateTimeField.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.ui.common +package de.jeanlucmakiola.agendula.ui.common import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -31,7 +31,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog -import de.jeanlucmakiola.floret.R +import de.jeanlucmakiola.agendula.R import java.time.LocalDate import java.time.LocalTime import java.time.ZoneId diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/common/DateTimeFormat.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/DateTimeFormat.kt similarity index 96% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/common/DateTimeFormat.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/common/DateTimeFormat.kt index bdf347d..82898c7 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/common/DateTimeFormat.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/DateTimeFormat.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.ui.common +package de.jeanlucmakiola.agendula.ui.common import java.time.ZoneId import java.time.format.DateTimeFormatter diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/common/GroupedList.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/GroupedList.kt similarity index 99% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/common/GroupedList.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/common/GroupedList.kt index 7d74f20..7914f72 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/common/GroupedList.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/GroupedList.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.ui.common +package de.jeanlucmakiola.agendula.ui.common import androidx.compose.animation.core.animateDpAsState import androidx.compose.foundation.interaction.MutableInteractionSource diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/common/InlineTextField.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/InlineTextField.kt similarity index 95% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/common/InlineTextField.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/common/InlineTextField.kt index fa4da56..60a6f31 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/common/InlineTextField.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/InlineTextField.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.ui.common +package de.jeanlucmakiola.agendula.ui.common import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxWidth @@ -20,7 +20,7 @@ import androidx.compose.ui.unit.dp /** * The app's borderless text input: no underline, no outline, just the tonal - * card behind it. Floret uses this inside a tonal [androidx.compose.material3.Surface] + * card behind it. Agendula uses this inside a tonal [androidx.compose.material3.Surface] * for the edit form (title + cards), so anything that takes text reads as one * family rather than a boxed Material field. Ported from Calendula so the two * apps share one input style. diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/common/ListChip.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/ListChip.kt similarity index 97% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/common/ListChip.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/common/ListChip.kt index 1a987bf..7676335 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/common/ListChip.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/ListChip.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.ui.common +package de.jeanlucmakiola.agendula.ui.common import androidx.compose.foundation.background import androidx.compose.foundation.isSystemInDarkTheme @@ -39,7 +39,7 @@ fun pastelize(rawArgb: Int, dark: Boolean): Color { /** * Leading avatar for a task list: a neutral round chip holding a checklist glyph * tinted in the list's (pastelised) colour — the Calendula calendar-chip pattern, - * with a task icon for Floret. + * with a task icon for Agendula. */ @Composable fun ListColorChip(color: Int, modifier: Modifier = Modifier) { diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/common/OptionCard.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/OptionCard.kt similarity index 98% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/common/OptionCard.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/common/OptionCard.kt index dfad3da..84186aa 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/common/OptionCard.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/OptionCard.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.ui.common +package de.jeanlucmakiola.agendula.ui.common import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/common/OptionPicker.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/OptionPicker.kt similarity index 98% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/common/OptionPicker.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/common/OptionPicker.kt index a5746bf..50581a8 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/common/OptionPicker.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/OptionPicker.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.ui.common +package de.jeanlucmakiola.agendula.ui.common import androidx.compose.foundation.layout.ColumnScope import androidx.compose.material.icons.Icons diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/common/PriorityChip.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/PriorityChip.kt similarity index 97% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/common/PriorityChip.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/common/PriorityChip.kt index b659fe3..4abaca1 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/common/PriorityChip.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/PriorityChip.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.ui.common +package de.jeanlucmakiola.agendula.ui.common import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.isSystemInDarkTheme @@ -21,7 +21,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.isSpecified import androidx.compose.ui.graphics.luminance import androidx.compose.ui.unit.dp -import de.jeanlucmakiola.floret.domain.Priority +import de.jeanlucmakiola.agendula.domain.Priority /** * Priority has no semantic Material role (M3 only ships `error` for danger), so diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/common/ReminderFormatting.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/ReminderFormatting.kt similarity index 95% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/common/ReminderFormatting.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/common/ReminderFormatting.kt index 4640c16..9376a4f 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/common/ReminderFormatting.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/ReminderFormatting.kt @@ -1,10 +1,10 @@ -package de.jeanlucmakiola.floret.ui.common +package de.jeanlucmakiola.agendula.ui.common import androidx.annotation.StringRes import androidx.compose.runtime.Composable import androidx.compose.ui.res.pluralStringResource import androidx.compose.ui.res.stringResource -import de.jeanlucmakiola.floret.R +import de.jeanlucmakiola.agendula.R /** Common reminder lead times offered as quick picks in the reminder pickers. */ val REMINDER_PRESETS = listOf(0, 5, 10, 30, 60, 1_440) diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/common/ReminderLeadPicker.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/ReminderLeadPicker.kt similarity index 98% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/common/ReminderLeadPicker.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/common/ReminderLeadPicker.kt index 91bf55e..82bfe7d 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/common/ReminderLeadPicker.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/ReminderLeadPicker.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.ui.common +package de.jeanlucmakiola.agendula.ui.common import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.expandVertically @@ -30,8 +30,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp -import de.jeanlucmakiola.floret.R -import de.jeanlucmakiola.floret.data.prefs.ListReminderOverride +import de.jeanlucmakiola.agendula.R +import de.jeanlucmakiola.agendula.data.prefs.ListReminderOverride /** * Reminder lead-time picker, full-screen: the grouped list of preset lead times diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/common/ShapedActionButton.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/ShapedActionButton.kt similarity index 98% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/common/ShapedActionButton.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/common/ShapedActionButton.kt index 8a4da87..d80de66 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/common/ShapedActionButton.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/ShapedActionButton.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.ui.common +package de.jeanlucmakiola.agendula.ui.common import androidx.compose.animation.core.animateFloatAsState import androidx.compose.foundation.interaction.MutableInteractionSource @@ -26,7 +26,7 @@ import androidx.graphics.shapes.RoundedPolygon /** * A top-bar action whose icon sits in a tonal container clipped to one of the - * M3 Expressive [MaterialShapes] (cookie, clover, sunny, …) — Floret's playful + * M3 Expressive [MaterialShapes] (cookie, clover, sunny, …) — Agendula's playful * take on a plain [androidx.compose.material3.IconButton]. Each action passes * its own [shape] and [containerColor], so a row of them reads as a set of * distinct little tokens rather than identical grey glyphs. diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/detail/TaskDetailScreen.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/detail/TaskDetailScreen.kt similarity index 97% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/detail/TaskDetailScreen.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/detail/TaskDetailScreen.kt index 4368e57..ae5c97f 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/detail/TaskDetailScreen.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/detail/TaskDetailScreen.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.ui.detail +package de.jeanlucmakiola.agendula.ui.detail import androidx.compose.animation.core.animateFloatAsState import androidx.compose.foundation.background @@ -67,16 +67,16 @@ import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle -import de.jeanlucmakiola.floret.R -import de.jeanlucmakiola.floret.domain.Task -import de.jeanlucmakiola.floret.domain.TaskDetail -import de.jeanlucmakiola.floret.ui.common.GroupedSurface -import de.jeanlucmakiola.floret.ui.common.PriorityChip -import de.jeanlucmakiola.floret.ui.common.formatDate -import de.jeanlucmakiola.floret.ui.common.formatTime -import de.jeanlucmakiola.floret.ui.common.pastelize -import de.jeanlucmakiola.floret.ui.common.positionOf -import de.jeanlucmakiola.floret.ui.tasklist.priorityLabel +import de.jeanlucmakiola.agendula.R +import de.jeanlucmakiola.agendula.domain.Task +import de.jeanlucmakiola.agendula.domain.TaskDetail +import de.jeanlucmakiola.agendula.ui.common.GroupedSurface +import de.jeanlucmakiola.agendula.ui.common.PriorityChip +import de.jeanlucmakiola.agendula.ui.common.formatDate +import de.jeanlucmakiola.agendula.ui.common.formatTime +import de.jeanlucmakiola.agendula.ui.common.pastelize +import de.jeanlucmakiola.agendula.ui.common.positionOf +import de.jeanlucmakiola.agendula.ui.tasklist.priorityLabel /** * One task's detail. Each fact is its own tonal card with a leading icon (the @@ -246,7 +246,7 @@ private fun DetailBody( } // Priority — a coloured status chip in the level's hue. - if (task.priority != de.jeanlucmakiola.floret.domain.Priority.NONE) { + if (task.priority != de.jeanlucmakiola.agendula.domain.Priority.NONE) { add { DetailCard( icon = Icons.Rounded.Flag, diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/detail/TaskDetailViewModel.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/detail/TaskDetailViewModel.kt similarity index 90% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/detail/TaskDetailViewModel.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/detail/TaskDetailViewModel.kt index a43b896..2e48a3a 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/detail/TaskDetailViewModel.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/detail/TaskDetailViewModel.kt @@ -1,12 +1,12 @@ -package de.jeanlucmakiola.floret.ui.detail +package de.jeanlucmakiola.agendula.ui.detail import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import de.jeanlucmakiola.floret.data.tasks.TasksRepository -import de.jeanlucmakiola.floret.domain.Task -import de.jeanlucmakiola.floret.domain.TaskDetail -import de.jeanlucmakiola.floret.domain.TaskForm +import de.jeanlucmakiola.agendula.data.tasks.TasksRepository +import de.jeanlucmakiola.agendula.domain.Task +import de.jeanlucmakiola.agendula.domain.TaskDetail +import de.jeanlucmakiola.agendula.domain.TaskForm import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/edit/TaskEditScreen.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/edit/TaskEditScreen.kt similarity index 96% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/edit/TaskEditScreen.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/edit/TaskEditScreen.kt index 385f256..7afa13a 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/edit/TaskEditScreen.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/edit/TaskEditScreen.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.ui.edit +package de.jeanlucmakiola.agendula.ui.edit import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.expandVertically @@ -85,27 +85,27 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle -import de.jeanlucmakiola.floret.R -import de.jeanlucmakiola.floret.domain.DayWindow -import de.jeanlucmakiola.floret.domain.Priority -import de.jeanlucmakiola.floret.domain.Task -import de.jeanlucmakiola.floret.domain.TaskFormError -import de.jeanlucmakiola.floret.domain.TaskFormField -import de.jeanlucmakiola.floret.domain.TaskList -import de.jeanlucmakiola.floret.domain.TaskSection -import de.jeanlucmakiola.floret.domain.TaskSections -import de.jeanlucmakiola.floret.ui.common.GroupedRow -import de.jeanlucmakiola.floret.ui.common.InlineTextField -import de.jeanlucmakiola.floret.ui.common.OptionCard -import de.jeanlucmakiola.floret.ui.common.priorityFill -import de.jeanlucmakiola.floret.ui.common.formatDate -import de.jeanlucmakiola.floret.ui.common.formatTime -import de.jeanlucmakiola.floret.ui.common.localToInstant -import de.jeanlucmakiola.floret.ui.common.pastelize -import de.jeanlucmakiola.floret.ui.common.positionOf -import de.jeanlucmakiola.floret.ui.common.toLocalDate -import de.jeanlucmakiola.floret.ui.common.toLocalTime -import de.jeanlucmakiola.floret.ui.tasklist.priorityLabel +import de.jeanlucmakiola.agendula.R +import de.jeanlucmakiola.agendula.domain.DayWindow +import de.jeanlucmakiola.agendula.domain.Priority +import de.jeanlucmakiola.agendula.domain.Task +import de.jeanlucmakiola.agendula.domain.TaskFormError +import de.jeanlucmakiola.agendula.domain.TaskFormField +import de.jeanlucmakiola.agendula.domain.TaskList +import de.jeanlucmakiola.agendula.domain.TaskSection +import de.jeanlucmakiola.agendula.domain.TaskSections +import de.jeanlucmakiola.agendula.ui.common.GroupedRow +import de.jeanlucmakiola.agendula.ui.common.InlineTextField +import de.jeanlucmakiola.agendula.ui.common.OptionCard +import de.jeanlucmakiola.agendula.ui.common.priorityFill +import de.jeanlucmakiola.agendula.ui.common.formatDate +import de.jeanlucmakiola.agendula.ui.common.formatTime +import de.jeanlucmakiola.agendula.ui.common.localToInstant +import de.jeanlucmakiola.agendula.ui.common.pastelize +import de.jeanlucmakiola.agendula.ui.common.positionOf +import de.jeanlucmakiola.agendula.ui.common.toLocalDate +import de.jeanlucmakiola.agendula.ui.common.toLocalTime +import de.jeanlucmakiola.agendula.ui.tasklist.priorityLabel import java.time.LocalTime import java.time.ZoneId import java.time.ZoneOffset @@ -119,7 +119,7 @@ import kotlin.time.Instant * "When" card with the all-day toggle and tappable schedule rows, a tappable * list card, and the optional Description / Priority / Reminder sections that * unfold from "More fields" (which ones start open is a setting). Validated - * through the M1 [TaskEditViewModel] / [de.jeanlucmakiola.floret.domain.TaskForm]; + * through the M1 [TaskEditViewModel] / [de.jeanlucmakiola.agendula.domain.TaskForm]; * the VM flips `saved` once the write lands, which pops us back. */ @OptIn(ExperimentalMaterial3Api::class) @@ -853,7 +853,7 @@ private fun ParentPickerSheet( item(key = "none") { GroupedRow( title = stringResource(R.string.edit_parent_none), - position = de.jeanlucmakiola.floret.ui.common.Position.Alone, + position = de.jeanlucmakiola.agendula.ui.common.Position.Alone, selected = selectedId == null, minHeight = 56.dp, onClick = { choose(null) }, diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/edit/TaskEditViewModel.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/edit/TaskEditViewModel.kt similarity index 93% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/edit/TaskEditViewModel.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/edit/TaskEditViewModel.kt index 47d6d17..d25d0e5 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/edit/TaskEditViewModel.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/edit/TaskEditViewModel.kt @@ -1,20 +1,20 @@ -package de.jeanlucmakiola.floret.ui.edit +package de.jeanlucmakiola.agendula.ui.edit import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import de.jeanlucmakiola.floret.data.prefs.SettingsPrefs -import de.jeanlucmakiola.floret.data.reminders.ReminderScheduler -import de.jeanlucmakiola.floret.data.tasks.TaskConflictException -import de.jeanlucmakiola.floret.data.tasks.TasksRepository -import de.jeanlucmakiola.floret.domain.Priority -import de.jeanlucmakiola.floret.domain.Task -import de.jeanlucmakiola.floret.domain.TaskFilter -import de.jeanlucmakiola.floret.domain.TaskForm -import de.jeanlucmakiola.floret.domain.TaskFormError -import de.jeanlucmakiola.floret.domain.TaskFormField -import de.jeanlucmakiola.floret.domain.TaskList -import de.jeanlucmakiola.floret.domain.populatedFields +import de.jeanlucmakiola.agendula.data.prefs.SettingsPrefs +import de.jeanlucmakiola.agendula.data.reminders.ReminderScheduler +import de.jeanlucmakiola.agendula.data.tasks.TaskConflictException +import de.jeanlucmakiola.agendula.data.tasks.TasksRepository +import de.jeanlucmakiola.agendula.domain.Priority +import de.jeanlucmakiola.agendula.domain.Task +import de.jeanlucmakiola.agendula.domain.TaskFilter +import de.jeanlucmakiola.agendula.domain.TaskForm +import de.jeanlucmakiola.agendula.domain.TaskFormError +import de.jeanlucmakiola.agendula.domain.TaskFormField +import de.jeanlucmakiola.agendula.domain.TaskList +import de.jeanlucmakiola.agendula.domain.populatedFields import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/lists/ListsScreen.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/lists/ListsScreen.kt similarity index 95% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/lists/ListsScreen.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/lists/ListsScreen.kt index a8323c3..bf550bd 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/lists/ListsScreen.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/lists/ListsScreen.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.ui.lists +package de.jeanlucmakiola.agendula.ui.lists import androidx.compose.animation.core.animateDpAsState import androidx.compose.foundation.interaction.MutableInteractionSource @@ -45,14 +45,14 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle -import de.jeanlucmakiola.floret.R -import de.jeanlucmakiola.floret.domain.SmartList -import de.jeanlucmakiola.floret.domain.TaskFilter -import de.jeanlucmakiola.floret.ui.common.ActionShapes -import de.jeanlucmakiola.floret.ui.common.GroupedRow -import de.jeanlucmakiola.floret.ui.common.ListColorChip -import de.jeanlucmakiola.floret.ui.common.ShapedActionButton -import de.jeanlucmakiola.floret.ui.common.positionOf +import de.jeanlucmakiola.agendula.R +import de.jeanlucmakiola.agendula.domain.SmartList +import de.jeanlucmakiola.agendula.domain.TaskFilter +import de.jeanlucmakiola.agendula.ui.common.ActionShapes +import de.jeanlucmakiola.agendula.ui.common.GroupedRow +import de.jeanlucmakiola.agendula.ui.common.ListColorChip +import de.jeanlucmakiola.agendula.ui.common.ShapedActionButton +import de.jeanlucmakiola.agendula.ui.common.positionOf /** * Home: smart lists (Today / Overdue / Upcoming / All) as tonal cards with live diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/lists/ListsViewModel.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/lists/ListsViewModel.kt similarity index 87% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/lists/ListsViewModel.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/lists/ListsViewModel.kt index f1aa332..5af32fd 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/lists/ListsViewModel.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/lists/ListsViewModel.kt @@ -1,15 +1,15 @@ -package de.jeanlucmakiola.floret.ui.lists +package de.jeanlucmakiola.agendula.ui.lists import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import de.jeanlucmakiola.floret.data.tasks.TasksRepository -import de.jeanlucmakiola.floret.domain.DayWindow -import de.jeanlucmakiola.floret.domain.SmartList -import de.jeanlucmakiola.floret.domain.Task -import de.jeanlucmakiola.floret.domain.TaskFilter -import de.jeanlucmakiola.floret.domain.TaskFiltering -import de.jeanlucmakiola.floret.domain.TaskList +import de.jeanlucmakiola.agendula.data.tasks.TasksRepository +import de.jeanlucmakiola.agendula.domain.DayWindow +import de.jeanlucmakiola.agendula.domain.SmartList +import de.jeanlucmakiola.agendula.domain.Task +import de.jeanlucmakiola.agendula.domain.TaskFilter +import de.jeanlucmakiola.agendula.domain.TaskFiltering +import de.jeanlucmakiola.agendula.domain.TaskList import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.catch diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/navigation/FloretNavHost.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/navigation/AgendulaNavHost.kt similarity index 88% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/navigation/FloretNavHost.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/navigation/AgendulaNavHost.kt index b421d9a..4abcc52 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/navigation/FloretNavHost.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/navigation/AgendulaNavHost.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.ui.navigation +package de.jeanlucmakiola.agendula.ui.navigation import androidx.compose.animation.EnterTransition import androidx.compose.animation.ExitTransition @@ -12,15 +12,15 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController -import de.jeanlucmakiola.floret.domain.TaskFilter -import de.jeanlucmakiola.floret.ui.detail.TaskDetailScreen -import de.jeanlucmakiola.floret.ui.detail.TaskDetailViewModel -import de.jeanlucmakiola.floret.ui.edit.TaskEditScreen -import de.jeanlucmakiola.floret.ui.edit.TaskEditViewModel -import de.jeanlucmakiola.floret.ui.lists.ListsScreen -import de.jeanlucmakiola.floret.ui.settings.SettingsScreen -import de.jeanlucmakiola.floret.ui.tasklist.TaskListScreen -import de.jeanlucmakiola.floret.ui.tasklist.TaskListViewModel +import de.jeanlucmakiola.agendula.domain.TaskFilter +import de.jeanlucmakiola.agendula.ui.detail.TaskDetailScreen +import de.jeanlucmakiola.agendula.ui.detail.TaskDetailViewModel +import de.jeanlucmakiola.agendula.ui.edit.TaskEditScreen +import de.jeanlucmakiola.agendula.ui.edit.TaskEditViewModel +import de.jeanlucmakiola.agendula.ui.lists.ListsScreen +import de.jeanlucmakiola.agendula.ui.settings.SettingsScreen +import de.jeanlucmakiola.agendula.ui.tasklist.TaskListScreen +import de.jeanlucmakiola.agendula.ui.tasklist.TaskListViewModel /** * The single in-app back stack: lists → task list → detail / edit. @@ -32,7 +32,7 @@ import de.jeanlucmakiola.floret.ui.tasklist.TaskListViewModel * unaware of the nav library. */ @Composable -fun FloretNavHost(modifier: Modifier = Modifier) { +fun AgendulaNavHost(modifier: Modifier = Modifier) { val nav = rememberNavController() val slide = rememberNavSlideSpec() diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/navigation/FloretTransitions.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/navigation/AgendulaTransitions.kt similarity index 94% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/navigation/FloretTransitions.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/navigation/AgendulaTransitions.kt index 1b327e9..2ee421d 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/navigation/FloretTransitions.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/navigation/AgendulaTransitions.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.ui.navigation +package de.jeanlucmakiola.agendula.ui.navigation import androidx.compose.animation.core.FiniteAnimationSpec import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/navigation/Destinations.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/navigation/Destinations.kt similarity index 95% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/navigation/Destinations.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/navigation/Destinations.kt index 91bee1d..274bbbf 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/navigation/Destinations.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/navigation/Destinations.kt @@ -1,9 +1,9 @@ -package de.jeanlucmakiola.floret.ui.navigation +package de.jeanlucmakiola.agendula.ui.navigation import androidx.navigation.NavType import androidx.navigation.navArgument -import de.jeanlucmakiola.floret.domain.SmartList -import de.jeanlucmakiola.floret.domain.TaskFilter +import de.jeanlucmakiola.agendula.domain.SmartList +import de.jeanlucmakiola.agendula.domain.TaskFilter /** * String-based route table for the app's [androidx.navigation.NavHost]. diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/permission/OnboardingScaffold.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/permission/OnboardingScaffold.kt similarity index 99% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/permission/OnboardingScaffold.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/permission/OnboardingScaffold.kt index 1c37304..5e02212 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/permission/OnboardingScaffold.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/permission/OnboardingScaffold.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.ui.permission +package de.jeanlucmakiola.agendula.ui.permission import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/permission/PermissionViewModel.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/permission/PermissionViewModel.kt similarity index 86% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/permission/PermissionViewModel.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/permission/PermissionViewModel.kt index df82d63..9e6760a 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/permission/PermissionViewModel.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/permission/PermissionViewModel.kt @@ -1,10 +1,10 @@ -package de.jeanlucmakiola.floret.ui.permission +package de.jeanlucmakiola.agendula.ui.permission import androidx.lifecycle.ViewModel import dagger.hilt.android.lifecycle.HiltViewModel -import de.jeanlucmakiola.floret.data.tasks.ProviderResolver -import de.jeanlucmakiola.floret.data.tasks.ProviderStatus -import de.jeanlucmakiola.floret.data.tasks.TasksRepository +import de.jeanlucmakiola.agendula.data.tasks.ProviderResolver +import de.jeanlucmakiola.agendula.data.tasks.ProviderStatus +import de.jeanlucmakiola.agendula.data.tasks.TasksRepository import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/permission/ReminderOnboardingScreen.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/permission/ReminderOnboardingScreen.kt similarity index 97% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/permission/ReminderOnboardingScreen.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/permission/ReminderOnboardingScreen.kt index 8cb4567..be88022 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/permission/ReminderOnboardingScreen.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/permission/ReminderOnboardingScreen.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.ui.permission +package de.jeanlucmakiola.agendula.ui.permission import android.Manifest import android.os.Build @@ -21,10 +21,10 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import de.jeanlucmakiola.floret.R +import de.jeanlucmakiola.agendula.R /** - * One-time onboarding step after the tasks-provider grant: explains that Floret + * One-time onboarding step after the tasks-provider grant: explains that Agendula * delivers due reminders itself (tasks providers don't broadcast reminders) and * requests `POST_NOTIFICATIONS` (a system dialog on API 33+ only). * diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/permission/ReminderOnboardingViewModel.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/permission/ReminderOnboardingViewModel.kt similarity index 92% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/permission/ReminderOnboardingViewModel.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/permission/ReminderOnboardingViewModel.kt index 8432a15..cac8cda 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/permission/ReminderOnboardingViewModel.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/permission/ReminderOnboardingViewModel.kt @@ -1,9 +1,9 @@ -package de.jeanlucmakiola.floret.ui.permission +package de.jeanlucmakiola.agendula.ui.permission import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import de.jeanlucmakiola.floret.data.prefs.SettingsPrefs +import de.jeanlucmakiola.agendula.data.prefs.SettingsPrefs import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.map diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/settings/AppLanguage.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/settings/AppLanguage.kt similarity index 97% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/settings/AppLanguage.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/settings/AppLanguage.kt index 795cf8a..4baed11 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/settings/AppLanguage.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/settings/AppLanguage.kt @@ -1,9 +1,9 @@ -package de.jeanlucmakiola.floret.ui.settings +package de.jeanlucmakiola.agendula.ui.settings import android.content.Context import androidx.appcompat.app.AppCompatDelegate import androidx.core.os.LocaleListCompat -import de.jeanlucmakiola.floret.R +import de.jeanlucmakiola.agendula.R import org.xmlpull.v1.XmlPullParser import java.util.Locale diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/settings/SettingsScreen.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/settings/SettingsScreen.kt similarity index 97% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/settings/SettingsScreen.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/settings/SettingsScreen.kt index 6e2f1f4..e8457ca 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/settings/SettingsScreen.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/settings/SettingsScreen.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.ui.settings +package de.jeanlucmakiola.agendula.ui.settings import android.Manifest import android.app.AlarmManager @@ -83,18 +83,18 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.compose.collectAsStateWithLifecycle -import de.jeanlucmakiola.floret.R -import de.jeanlucmakiola.floret.data.prefs.ListReminderOverride -import de.jeanlucmakiola.floret.data.prefs.ThemeMode -import de.jeanlucmakiola.floret.domain.TaskFormField -import de.jeanlucmakiola.floret.ui.common.CollapsingScaffold -import de.jeanlucmakiola.floret.ui.common.GroupedRow -import de.jeanlucmakiola.floret.ui.common.OptionPicker -import de.jeanlucmakiola.floret.ui.common.Position -import de.jeanlucmakiola.floret.ui.common.ReminderLeadPicker -import de.jeanlucmakiola.floret.ui.common.pastelize -import de.jeanlucmakiola.floret.ui.common.positionOf -import de.jeanlucmakiola.floret.ui.common.reminderLeadTimeLabel +import de.jeanlucmakiola.agendula.R +import de.jeanlucmakiola.agendula.data.prefs.ListReminderOverride +import de.jeanlucmakiola.agendula.data.prefs.ThemeMode +import de.jeanlucmakiola.agendula.domain.TaskFormField +import de.jeanlucmakiola.agendula.ui.common.CollapsingScaffold +import de.jeanlucmakiola.agendula.ui.common.GroupedRow +import de.jeanlucmakiola.agendula.ui.common.OptionPicker +import de.jeanlucmakiola.agendula.ui.common.Position +import de.jeanlucmakiola.agendula.ui.common.ReminderLeadPicker +import de.jeanlucmakiola.agendula.ui.common.pastelize +import de.jeanlucmakiola.agendula.ui.common.positionOf +import de.jeanlucmakiola.agendula.ui.common.reminderLeadTimeLabel /** The settings sub-screens reached from the hub's category rows. */ private enum class SettingsSection { Appearance, TaskForm, Reminders } diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/settings/SettingsViewModel.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/settings/SettingsViewModel.kt similarity index 83% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/settings/SettingsViewModel.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/settings/SettingsViewModel.kt index 8b47058..f9171f6 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/settings/SettingsViewModel.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/settings/SettingsViewModel.kt @@ -1,15 +1,15 @@ -package de.jeanlucmakiola.floret.ui.settings +package de.jeanlucmakiola.agendula.ui.settings import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import de.jeanlucmakiola.floret.data.prefs.ListReminderOverride -import de.jeanlucmakiola.floret.data.prefs.Settings -import de.jeanlucmakiola.floret.data.prefs.SettingsPrefs -import de.jeanlucmakiola.floret.data.prefs.ThemeMode -import de.jeanlucmakiola.floret.data.tasks.TasksRepository -import de.jeanlucmakiola.floret.domain.TaskFormField -import de.jeanlucmakiola.floret.domain.TaskList +import de.jeanlucmakiola.agendula.data.prefs.ListReminderOverride +import de.jeanlucmakiola.agendula.data.prefs.Settings +import de.jeanlucmakiola.agendula.data.prefs.SettingsPrefs +import de.jeanlucmakiola.agendula.data.prefs.ThemeMode +import de.jeanlucmakiola.agendula.data.tasks.TasksRepository +import de.jeanlucmakiola.agendula.domain.TaskFormField +import de.jeanlucmakiola.agendula.domain.TaskList import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.catch diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/tasklist/TaskListScreen.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/tasklist/TaskListScreen.kt similarity index 98% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/tasklist/TaskListScreen.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/tasklist/TaskListScreen.kt index 723bcf0..9ccf40d 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/tasklist/TaskListScreen.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/tasklist/TaskListScreen.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.ui.tasklist +package de.jeanlucmakiola.agendula.ui.tasklist import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.core.animateDpAsState @@ -80,20 +80,20 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle -import de.jeanlucmakiola.floret.R -import de.jeanlucmakiola.floret.domain.DayWindow -import de.jeanlucmakiola.floret.domain.Priority -import de.jeanlucmakiola.floret.domain.SmartList -import de.jeanlucmakiola.floret.domain.Task -import de.jeanlucmakiola.floret.domain.TaskFilter -import de.jeanlucmakiola.floret.domain.TaskSection -import de.jeanlucmakiola.floret.domain.TaskSections -import de.jeanlucmakiola.floret.ui.common.ListNameChip -import de.jeanlucmakiola.floret.ui.common.Position -import de.jeanlucmakiola.floret.ui.common.PriorityChip -import de.jeanlucmakiola.floret.ui.common.formatDateTime -import de.jeanlucmakiola.floret.ui.common.pastelize -import de.jeanlucmakiola.floret.ui.common.positionOf +import de.jeanlucmakiola.agendula.R +import de.jeanlucmakiola.agendula.domain.DayWindow +import de.jeanlucmakiola.agendula.domain.Priority +import de.jeanlucmakiola.agendula.domain.SmartList +import de.jeanlucmakiola.agendula.domain.Task +import de.jeanlucmakiola.agendula.domain.TaskFilter +import de.jeanlucmakiola.agendula.domain.TaskSection +import de.jeanlucmakiola.agendula.domain.TaskSections +import de.jeanlucmakiola.agendula.ui.common.ListNameChip +import de.jeanlucmakiola.agendula.ui.common.Position +import de.jeanlucmakiola.agendula.ui.common.PriorityChip +import de.jeanlucmakiola.agendula.ui.common.formatDateTime +import de.jeanlucmakiola.agendula.ui.common.pastelize +import de.jeanlucmakiola.agendula.ui.common.positionOf import java.time.ZoneId import kotlin.time.Clock diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/tasklist/TaskListViewModel.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/tasklist/TaskListViewModel.kt similarity index 94% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/tasklist/TaskListViewModel.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/tasklist/TaskListViewModel.kt index 5114030..1f31c52 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/tasklist/TaskListViewModel.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/tasklist/TaskListViewModel.kt @@ -1,13 +1,13 @@ -package de.jeanlucmakiola.floret.ui.tasklist +package de.jeanlucmakiola.agendula.ui.tasklist import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import de.jeanlucmakiola.floret.data.prefs.SettingsPrefs -import de.jeanlucmakiola.floret.data.tasks.TasksRepository -import de.jeanlucmakiola.floret.domain.Task -import de.jeanlucmakiola.floret.domain.TaskFilter -import de.jeanlucmakiola.floret.domain.TaskForm +import de.jeanlucmakiola.agendula.data.prefs.SettingsPrefs +import de.jeanlucmakiola.agendula.data.tasks.TasksRepository +import de.jeanlucmakiola.agendula.domain.Task +import de.jeanlucmakiola.agendula.domain.TaskFilter +import de.jeanlucmakiola.agendula.domain.TaskForm import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/theme/Color.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/theme/Color.kt similarity index 88% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/theme/Color.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/theme/Color.kt index 0ec5a69..5d4cb54 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/theme/Color.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/theme/Color.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.ui.theme +package de.jeanlucmakiola.agendula.ui.theme import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme @@ -12,14 +12,14 @@ import androidx.compose.ui.graphics.Color * * Placeholder until branding lands; refine alongside the launcher icon. */ -val FloretSeed: Color = Color(0xFF7A5C6B) +val AgendulaSeed: Color = Color(0xFF7A5C6B) /** * Fallback light scheme for devices without dynamic color (API < 31) or when * the user disables it. Dynamic color (API 31+) is the real path; these are a - * hand-picked approximation of the tonal palette generated from [FloretSeed]. + * hand-picked approximation of the tonal palette generated from [AgendulaSeed]. */ -val FloretLightFallback = lightColorScheme( +val AgendulaLightFallback = lightColorScheme( primary = Color(0xFF6A4E5B), onPrimary = Color(0xFFFFFFFF), primaryContainer = Color(0xFFF6D9E5), @@ -32,7 +32,7 @@ val FloretLightFallback = lightColorScheme( onSurface = Color(0xFF1F1A1C), ) -val FloretDarkFallback = darkColorScheme( +val AgendulaDarkFallback = darkColorScheme( primary = Color(0xFFE2BAC9), onPrimary = Color(0xFF402533), primaryContainer = Color(0xFF583B49), diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/theme/Theme.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/theme/Theme.kt similarity index 87% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/theme/Theme.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/theme/Theme.kt index aef59fc..451db94 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/theme/Theme.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/theme/Theme.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.ui.theme +package de.jeanlucmakiola.agendula.ui.theme import android.os.Build import androidx.compose.foundation.isSystemInDarkTheme @@ -14,7 +14,7 @@ import androidx.compose.ui.platform.LocalContext * App theme. Honors: * - System light/dark. * - Dynamic Color on API 31+, else falls back to the hand-tuned scheme - * derived from [FloretSeed]. + * derived from [AgendulaSeed]. * * Mirrors Calendula's theme: MaterialExpressiveTheme routes all component + * custom motion through MaterialTheme.motionScheme. STANDARD over expressive() @@ -25,7 +25,7 @@ import androidx.compose.ui.platform.LocalContext */ @OptIn(ExperimentalMaterial3ExpressiveApi::class) @Composable -fun FloretTheme( +fun AgendulaTheme( darkTheme: Boolean = isSystemInDarkTheme(), dynamicColor: Boolean = true, content: @Composable () -> Unit, @@ -35,13 +35,13 @@ fun FloretTheme( val ctx = LocalContext.current if (darkTheme) dynamicDarkColorScheme(ctx) else dynamicLightColorScheme(ctx) } - darkTheme -> FloretDarkFallback - else -> FloretLightFallback + darkTheme -> AgendulaDarkFallback + else -> AgendulaLightFallback } MaterialExpressiveTheme( colorScheme = colorScheme, - typography = FloretTypography, + typography = AgendulaTypography, motionScheme = MotionScheme.standard(), content = content, ) diff --git a/app/src/main/java/de/jeanlucmakiola/floret/ui/theme/Type.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/theme/Type.kt similarity index 76% rename from app/src/main/java/de/jeanlucmakiola/floret/ui/theme/Type.kt rename to app/src/main/java/de/jeanlucmakiola/agendula/ui/theme/Type.kt index 4ed8542..1210a21 100644 --- a/app/src/main/java/de/jeanlucmakiola/floret/ui/theme/Type.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/theme/Type.kt @@ -1,4 +1,4 @@ -package de.jeanlucmakiola.floret.ui.theme +package de.jeanlucmakiola.agendula.ui.theme import androidx.compose.material3.Typography @@ -7,4 +7,4 @@ import androidx.compose.material3.Typography * land in a later UI-design iteration; the defaults keep the M0 foundation lean * (same posture as Calendula's scaffolding). */ -val FloretTypography = Typography() +val AgendulaTypography = Typography() diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml index c72b21d..676d561 100644 --- a/app/src/main/res/drawable/ic_launcher_foreground.xml +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -1,10 +1,10 @@ - Floret + Agendula A modern Material 3 Expressive task app.\nComing into bloom. @@ -136,19 +136,19 @@ A tasks app is needed - Floret shows and edits the tasks stored by OpenTasks or tasks.org, synced by DAVx5. Install one of them to get started. + Agendula shows and edits the tasks stored by OpenTasks or tasks.org, synced by DAVx5. Install one of them to get started. Allow access to your tasks - Floret needs permission to read and write your tasks. That\'s the only thing it ever asks for. + Agendula needs permission to read and write your tasks. That\'s the only thing it ever asks for. Grant task access Install OpenTasks Install tasks.org Never miss what\'s due - Tasks apps don\'t send reminders themselves, so Floret delivers them for you. Turn them on to get a notification when a task is due. + Tasks apps don\'t send reminders themselves, so Agendula delivers them for you. Turn them on to get a notification when a task is due. Enable reminders Not now - Floret reminds you + Agendula reminds you It schedules a notification for each task with a due date. On your schedule Choose how far ahead to be reminded in Settings. @@ -170,14 +170,14 @@ License Support development Version %1$s - Floret app icon + Agendula app icon App language System default Report a problem Open the issue tracker - https://gitea.jeanlucmakiola.de/makiolaj/floret - https://gitea.jeanlucmakiola.de/makiolaj/floret/issues/new - https://gitea.jeanlucmakiola.de/makiolaj/floret/src/branch/main/LICENSE + https://gitea.jeanlucmakiola.de/makiolaj/agendula + https://gitea.jeanlucmakiola.de/makiolaj/agendula/issues/new + https://gitea.jeanlucmakiola.de/makiolaj/agendula/src/branch/main/LICENSE https://ko-fi.com/jeanlucmakiola Theme Follow system diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 2b18c64..49cb7b6 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,5 +1,5 @@ -