All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Refactor: Remove unused code in build-logic tasks
- CI: Update Release.yml
- Refactor: Separate changelog update into new task
- Refactor: Automate CHANGELOG.md updates in SetVersionTagTask
1.2.19 - 2025-08-24
- Refactor: Update baseline profile generation workflow
- Docs: Update app version in badging file
- Refactor: Simplify email functionality in ReportBugScreen
- Refactor: Complete SettingDetailScreenTest
- Refactor: Enhance SettingDetailScreenTest and add test tags
- Fix: Update license URL and email address, add missing test assertion
- Add pressHome() call in startActivity() to ensure home screen is active before starting activity
- Add missing 'runs-on' specification for update-baseline-profile job
- Fix indentation for 'Copy CI gradle.properties' step in workflow
- Add GitHub Actions workflow to update baseline profile
- Refactor: Make getPlatform() public and update tests
- Refactor Release and PreRelease workflows
- Update version information and reset revision
- Refactor: Remove version management tasks
- Refactor: Remove unused test tags from AboutScreenTestTags
- Refactor: Use Platform specific version in SettingScreen
- Refactor: Use BRAND_NAME from BuildConfig in MainScreen
- Update KmtApp to use BuildConfig for version check
- Refactor: Remove unused imports and trailing spaces
- Refactor: Update SettingViewModel to use Platform model
- Refactor: Update version handling in Gradle tasks
- Refactor: Use BuildConfig for app constants
- feat: Centralize build config and update Platform model
- Refactor: Update AboutScreen to use BuildConfig and Platform for dynamic data
- feat: Add SetVersionTagTask to update version info
- Update REVISION_CODE in UpdateBuildVersionsTask
- Refactor: Improve version update logic in UpdateBuildVersionsTask
- Update
UpdateBuildVersionsTaskto handle version names - feat: Add task to update versions for pre-releases
- feat: Add UpdateBuildVersionsTask
- Add BuildConfig with version details
- Use desktopCode for app version
- Refactor KmtButton and update ReportBugScreen
- Refactor TextField and NoteCard content
- Update Build.yaml to run Codecov and Spotless on failure
- Refactor: Move SplashScreenTestTags to designsystem module
- Refactor: Move SplashScreen to designsystem module
- Update Build.yaml to run Codecov and Spotless on failure
- Refactor: Move SplashScreenTestTags to designsystem module
- Refactor: Move SplashScreen to designsystem module
- chore(deps): update codecov/codecov-action action to v5.5.0
- chore(deps): update github/codeql-action action to v3.29.11
- Update libs.versions.toml
- Update release instructions
- UI tests for
SplashScreen.ktto verify its display and content.
1.2.18 - 2025-08-21
1.2.17 - 2025-08-21
- UI tests for
KmtSnackBarto verify its display for different states (Default,Error,Success,Warning). - Baseline profile generation support.
showUpdateDialogsetting toUserPreferencesandUserDataRepositoryto control update notification visibility.updateFromPreReleasesetting toUserDataRepositoryto control whether pre-release versions are considered for updates.- Corresponding tests for the new user preference settings in relevant test files.
- Refined version checking in
RealNetworkRepositoryto correctly returnReleaseInfo.UpToDatewhen the installed version is identical to the latest online version. UpdatedNetworkRepositoryTestaccordingly. - Added a
Modifierparameter and atestTag("KmtSnackBar")to theKmtSnackBarcomposable to facilitate UI testing. - Updated the Play Store full description file (
fastlane/metadata/android/en-US/full_description.txt) to use HTML tags for formatting instead of Markdown. - Updated Android Gradle Plugin to 8.12.0.
- Refactored version check to use version name.
- Enhanced version validation logic in
RealNetworkRepository. - Updated F-Droid metadata for Kmtemplate.
- CI: Enabled
setVersionFromTagtask in the Release GitHub Actions workflow. - Documentation:
- Updated and reformatted development commands.
- Removed Detekt Compose configuration and module graph from documentation.
- Updated
UserPreferencesDataSourceand its implementations (RealUserPreferencesDataSourcefor nonJsMain and wasmJsMain) to includesetShowUpdateDialog. - Updated
UserDataRepositoryand its implementations (RealUserDataRepository,FakeUserDataRepository) to includesetUpdateFromPreReleaseandsetShowUpdateDialog. MainAppViewModelTest: Adjusted tests to reflect new user settings (showUpdateDialog,updateFromPreRelease) and their impact on update checks.ParsedVersion: ModifiedfromStringto allow parsing of version strings with trailing characters by making the fallbacksimplerRegexmore lenient (e.g., "1.2.3.4" is now parsed as "1.2.3").ParsedVersionTest: Updated tests to align with the modified parsing behavior inParsedVersion.fromString.
1.2.16 - 2025-08-14
WideNavigationRailItemcomposable for displaying a wider navigation item, typically used when the navigation rail is expanded. (Conceptual addition, assuming it was newly created or significantly fleshed out based on our discussion).
- Refactored
ReleaseUpdateDialog.kt:- Moved hardcoded strings ("New Update Available", "Download", "Cancel") to
core/ui/src/commonMain/composeResources/values/strings_ui.xml. - Updated
ReleaseUpdateDialogcomposable to usestringResourcefor these texts.
- Moved hardcoded strings ("New Update Available", "Download", "Cancel") to
- Suppressed
ktlint(standard:class-naming)lint warning forexternal object windowinapp/src/wasmJsMain/kotlin/com/mshdabiola/kmtemplate/LocalizationWrapper.wasmJs.ktto allow lowercase naming for JavaScript interop.
1.2.15 - 2025-08-12
1.2.14 - 2025-08-11
PrependUnreleasedToChangelogTask: New Gradle task to add an "Unreleased" section toCHANGELOG.mdafter a release, preparing for the next development cycle.- Integrated
PrependUnreleasedToChangelogTaskintoCiTaskPlugin.
SetVersionFromTagTask:- Now updates
CHANGELOG.mdto set the release version and date for the "Unreleased" section. - Correctly updates and adds link definitions for the released version and the new "Unreleased" section.
- Now updates
CiTaskPlugin:setVersionFromTagtask now correctly passes thechangelogFileparameter.- Added and configured
prependUnreleasedChangelogtask.
0.0.5 - 2025-08-10
- New
benchmarksmodule for generating baseline profiles GenerateBaselineProfileclass for baseline profile collectionStartupBaselineProfileclass for startup-specific profile generation- Managed virtual device configuration (
pixel6Api33) with Pixel 6 device profile, API level 33 - Baseline profile plugin integration in app module
- AndroidJUnitRunner configuration for instrumentation tests in benchmarks
- Self-instrumenting experimental property enabled for baseline profiles
- Baseline profile dependencies (AndroidX Benchmark Macro, Test Runner, UI Automator, Profile Installer)
- JVM toolchain version set to 21 for benchmarks module
- Simplified
app/build.gradle.ktsdependencies:- Replaced multiple project and library dependencies with single
projects.librarydependency - Removed platform-specific desktop dependencies (commented out)
- Removed Android-specific dependencies (koin.android, androidx.core.ktx, androidx.lifecycle.runtimeCompose, androidx.window.core, kermit.koin)
- Removed
androidMainandjvmTestsource set dependencies entirely jvmMainno longer includes kermit.koin dependency
- Replaced multiple project and library dependencies with single
SamApplicationclass simplified - removed all initialization logic (Logger, Koin DI startup)SamAppcomposable now displaysNoteCardwith fixed "Title" and "Content" instead of simple "Texting" text- Main entry points simplified:
- JVM:
mainApp()renamed tomain(), removed Koin and logging setup - WASM/JS: Removed Koin DI and logging from
main()function - Removed platform detection logic (
getPlatform()function)
- JVM:
AndroidLibraryConventionPlugin: Removed all dependency declarations from Kotlin multiplatform source setsKoverConventionPlugin: Changed excluded subprojects from ["core", "model", "testing"] to ["benchmarks"]- Root
build.gradle.kts: Removed plugin aliases forkotlin.serialization,ksp, androom
- Benchmarks README: Changed from "Network Module Graph" to "Benchmarks Module Graph" with simplified bidirectional relationship between benchmarks and app
- Entire module with build configuration, ProGuard rules
- Repository interfaces:
NetworkRepository,NoteRepository,UserDataRepository - Repository implementations:
RealNetworkRepository,RealNoteRepository,RealUserDataRepository,RealModelRepository - Model extensions for converting between
UserPreferencesandUserSettings - Dependency injection modules:
DataModulewith platform-specific implementations - Platform-specific implementations for Android, JVM, and WASM/JS
- Test classes:
NetworkRepositoryTest,NoteRepositoryTest,UserDataRepositoryTest - Test doubles:
TestNetworkDataSource,TestNoteDao,TestUserPreferenceDataSource - Network monitoring utilities:
ConnectivityManagerNetworkMonitor,NetworkMonitorinterface
- Entire module with Room database configuration
SamDatabaseabstract class with Room annotationsNoteDaointerface with CRUD operationsNoteEntitydata class for database table- Database migrations and constants
- Platform-specific database builders for Android and JVM
- Database schemas for versions 1 of
KmtDatabase,SamDatabase, andSkeletonDatabase - Test class:
NoteDaoTest
- Entire module for user preferences persistence
UserPreferencesDataSourceinterfaceRealUserPreferencesDataSourceimplementations for different platformsUserPreferencesdata modelUserDataJsonSerializerfor JSON serialization- Platform-specific DataStore configurations
- Test class:
RealUserPreferencesRepositoryTest
- Entire module with domain models
DarkThemeConfigenum (FOLLOW_SYSTEM, LIGHT, DARK)Platformsealed class with Web, Desktop, and Android subclassesFlavorenum (GooglePlay, FossReliant) andBuildTypeenum (Release, Debug)ReleaseInfosealed class with Error and Success subclassesResultsealed interface with Success, Error, and Loading statesUserSettingsdata class- Extension function
Flow<T>.asResult()
- Entire module with Ktor HTTP client setup
NetworkDataSourceinterfaceRealNetworkDataSourceimplementation- HTTP client configuration with platform-specific implementations
- Network models:
Asset,GitHubReleaseInfo - Network module dependency injection
- ProGuard consumer rules for network serialization
- Test class:
NetworkSourceTest
- Entire module with testing utilities
- Fake data and repositories:
FakeNetworkRepository,FakeNoteRepository,FakeUserDataRepository - Test data module for dependency injection
- Test dispatcher module with
UnconfinedTestDispatcher MainDispatcherRulefor JVM coroutine testing- Test logger configuration using Kermit
- Sample test data (list of 10 Note objects)
- Directory structure removed (only .gitignore was present)
MainAppViewModelclass with UI state managementMainActivityUiStatesealed interface with Loading and Success statesApplicationModuleproviding ViewModel dependencies
- All Koin-related code and modules removed throughout the project
- Kermit logging initialization removed from all entry points
- Koin (core, android, test)
- Kermit logging library
- Room database
- KSP (Kotlin Symbol Processing)
- Kotlin serialization
- Ktor client libraries
- AndroidX DataStore
- Okio
- Various AndroidX libraries (core.ktx, lifecycle.runtimeCompose, window.core)
- SLF4J
- Kotlinx coroutines test libraries
- Multiple
.gitignorefiles in core modules - ProGuard rules for various modules
- AndroidManifest.xml files in core modules (were mostly empty)