Renamed the `setFrameworkBaseName` extension function to
`configureTargets` to more accurately reflect its purpose of configuring
Kotlin Multiplatform targets. All Gradle build scripts across the
modules have been updated to use the new function name.
Added and updated `README.md` files for every module to provide a clear
and detailed description of their responsibilities. This includes
documenting the purpose of the `data`, `domain`, `features`,
`libraries`, and platform-specific layers, improving overall project
clarity and maintainability.
Migrated the application of custom Gradle convention plugins from
hardcoded string IDs to type-safe accessors from the version catalog
(`libs.versions.toml`). This change improves maintainability and
consistency across all modules.
Migrated unit tests for `category`, `search`, `task`, and `tracker`
features from the JVM-specific `test` source set to the `commonTest`
source set. This allows the tests to be run on all supported platforms.
Migrated Compose dependencies to the `libs` version catalog for
centralized management and consistency across all modules. This replaces
the direct `compose` object access in Gradle scripts. The existing
dependencies strings were deprecated.
Additionally, updated the import paths for Compose Preview annotations
from `org.jetbrains.compose.ui.tooling.preview` to `androidx.compose.ui
.tooling.preview`.
After upgrading to Detekt 2.0, the task was not working properly. The
results were always successful regardless of the changes in the code.
This was happening because additional configuration was needed for KMP
projects.
Migrated the Android configuration from the standalone `android {}`
block to the `kotlin { androidLibrary {} }` block across all modules.
This change aligns the project with the modern Kotlin Multiplatform
(KMP) plugin structure.
Key changes include:
- Replaced custom convention plugins with `com.escodro.multiplatform`.
- Moved dependency declarations into the appropriate source sets (e.g.,
`androidMain`).
- Renamed `androidUnitTest` and `androidInstrumentedTest` source sets to
`androidHostTest`.
- Updated the dependency scope for `compose.uiTooling` to
`androidRuntimeClasspath`.
Updated various imports and usages across the codebase to replace
`kotlinx.datetime` with `kotlin.time`. Applied `@OptIn
(ExperimentalTime::class)` annotations where necessary to accommodate
the new API changes.
Removing the library since it generates some conflicts with other
libraries, and it's only used in Alkaa to make DataStore.kt a
singleton.
For now, the code was updated to use the same sync functions from the
stdlib.
To ensure that the "select last row" will work properly after inserting
the task, the code was updated to run inside a transaction. This is
required because it "only works on the connection where the write
happened". Despite working fine in Android, this was not working on iOS.
Source: https://github.com/cashapp/sqldelight/issues/1828
Having the last inserted row in the Task table will allow the app to
schedule an alarm right after inserting the task. The lack of this
support is what is causing the bug where the alarm is not schedule when
using the botom sheet.
In the database we are storing the time in milliseconds, however, the
encoder was wrongly set as "fromEpochSeconds". The function was updated
to use the appropriate API.
Since the SQLDelight does have a callback when the database schema is
created, the solution was checking if the database is created before
inserting the categories. The library creates the database on a specific
folder, which is now checked on iOS variant.
This change also required a few structure changes, such as the place of
the strings and implementing the resource access on each platform.
The Repository module was migrated from Android/Kotlin-only module to
KMP. For now, we are not caring too much about ProGuard, so the files
were removed.
Removing Java's Calendar and adapting the logging tool to its
multiplatform version. Some work was needed for the convertions since
the Android layers will keep using Calendar for now. Future commits will
address the TODOs and make it more clear.
For some reason, Kotlin-only modules do not find the KMM modules. This
module was temporarily converted to Android to make the code work. In
the future, this module will also be a KMM one.