diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..663245c --- /dev/null +++ b/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_style = space +indent_size = 4 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.{yml,yaml,toml,json,md}] +indent_size = 2 + +[*.{kt,kts}] +ij_kotlin_packages_to_use_import_on_demand = unset + +[Makefile] +indent_style = tab diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9ac4914 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,7 @@ +* text=auto eol=lf +*.bat text eol=crlf +*.jar binary +*.png binary +*.jpg binary +*.gif binary +*.webp binary diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a0fa752 --- /dev/null +++ b/.gitignore @@ -0,0 +1,57 @@ +# Built application files +*.apk +*.aar +*.ap_ +*.aab + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ +release/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log files +*.log + +# Android Studio / IntelliJ +*.iml +.idea/ +.navigation/ +captures/ +.externalNativeBuild/ +.cxx/ + +# Keystore files +*.jks +*.keystore +/key.properties + +# Google Services (e.g. APIs or Firebase) +google-services.json + +# OS files +.DS_Store +Thumbs.db + +# F-Droid local artifacts (the pipeline generates them in CI) +fdroid/repo/ +fdroid/keystore.p12 + +# KSP +.ksp/ diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..1581949 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,15 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +### Added +- Initial project scaffold with Material 3 Expressive theme +- Adaptive launcher icon (numeral "1" on slate squircle, referencing *kalendae*) +- German + English localization infrastructure +- Hilt + DataStore dependency injection and preferences setup +- Gitea CI/CD workflows for build, test, lint, and release diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..c6dd179 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Jean-Luc Makiola + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..5890769 --- /dev/null +++ b/README.md @@ -0,0 +1,43 @@ +# Calendula + +A modern Material 3 Expressive calendar app for Android. + +Calendula is named after the flower of the same name, whose name comes from +the Latin *kalendae* — the first day of the month — the same root as the +word "calendar". Calendula reads from Android's built-in `CalendarContract`, +so any calendar source synced to your device (CalDAV via DAVx5, Google, +local, WebCal subscriptions, ...) is shown. + +## Features (V1) + +- Month, Week, and Day views +- Read-only event details (write support comes in V2) +- Multi-calendar visibility toggle +- Material You Dynamic Color (Android 12+) +- Light/Dark theme follows system +- German + English UI + +## Building + +Requires Android SDK 36 and JDK 17. The Gradle wrapper is checked in, so no host Gradle install is needed: + +```bash +# Build debug APK +./gradlew assembleDebug + +# Run unit tests +./gradlew test + +# Run lint +./gradlew lint +``` + +If your default JDK is something other than 17, set `JAVA_HOME` explicitly: + +```bash +JAVA_HOME=/path/to/jdk-17 ./gradlew assembleDebug +``` + +## License + +[MIT](LICENSE) — Jean-Luc Makiola, 2026