refactor(ui): Migrate from Fragments to Jetpack Compose

Replace Fragment-based UI with Jetpack Compose screens, adopting
Navigation3 for type-safe routing and Material3 theming throughout.

- Replace all Fragments/ViewHolders with Compose screens and cards
- Introduce NavigationController with Navigation3 runtime
- Add CapodTheme with Material3 design system
- Migrate PopUpWindow overlay to ComposeView with proper lifecycle
- Rewrite WidgetConfigurationActivity in Compose
- Add reusable settings composables (switch, slider, list preference)
- Update Kotlin to 2.2.10, add Compose BOM 2025.06.01
- Fix reactive state for unmatched devices toggle
- Add safety timeout for BT device enumeration
- Fix profile name validation error message
This commit is contained in:
darken
2026-02-24 15:05:09 +01:00
committed by Matthias Urhahn
parent 576c6db8d0
commit 63692595a8
166 changed files with 6328 additions and 7229 deletions
+2
View File
@@ -20,5 +20,7 @@ repositories {
dependencies {
implementation("com.android.tools.build:gradle:9.0.1")
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:2.2.10")
implementation("org.jetbrains.kotlin:compose-compiler-gradle-plugin:2.2.10")
implementation("org.jetbrains.kotlin:kotlin-serialization:2.2.10")
implementation("com.squareup:javapoet:1.13.0")
}
+34 -4
View File
@@ -71,9 +71,7 @@ fun DependencyHandlerScope.addOkio() {
}
fun DependencyHandlerScope.addNavigation() {
implementation("androidx.navigation:navigation-fragment-ktx:${Versions.AndroidX.Navigation.core}")
implementation("androidx.navigation:navigation-ui-ktx:${Versions.AndroidX.Navigation.core}")
androidTestImplementation("androidx.navigation:navigation-testing:${Versions.AndroidX.Navigation.core}")
implementation("androidx.navigation:navigation-common:${Versions.AndroidX.Navigation.core}")
}
fun DependencyHandlerScope.addBaseAndroid() {
@@ -84,7 +82,7 @@ fun DependencyHandlerScope.addBaseAndroid() {
}
fun DependencyHandlerScope.addBaseAndroidUi() {
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("androidx.appcompat:appcompat:1.7.1")
implementation("androidx.constraintlayout:constraintlayout:2.1.3")
implementation("androidx.activity:activity-ktx:1.8.0")
@@ -100,6 +98,38 @@ fun DependencyHandlerScope.addBaseAndroidUi() {
implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycleVers")
}
fun DependencyHandlerScope.addCompose() {
val composeBom = platform("androidx.compose:compose-bom:${Versions.Compose.bom}")
implementation(composeBom)
androidTestImplementation(composeBom)
implementation("androidx.compose.material3:material3")
implementation("androidx.compose.material:material-icons-extended")
implementation("androidx.compose.ui:ui-tooling-preview")
debugImplementation("androidx.compose.ui:ui-tooling")
androidTestImplementation("androidx.compose.ui:ui-test-junit4")
debugImplementation("androidx.compose.ui:ui-test-manifest")
implementation("androidx.activity:activity-compose:1.12.1")
implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.5")
implementation("androidx.hilt:hilt-navigation-compose:1.3.0-alpha01")
}
fun DependencyHandlerScope.addNavigation3() {
implementation("androidx.navigation3:navigation3-runtime:${Versions.Navigation3.core}")
implementation("androidx.navigation3:navigation3-ui:${Versions.Navigation3.core}")
implementation("androidx.lifecycle:lifecycle-viewmodel-navigation3:2.10.0")
implementation("androidx.compose.material3.adaptive:adaptive-navigation3:1.3.0-alpha06")
}
fun DependencyHandlerScope.addSerialization() {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:${Versions.Serialization.core}")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:${Versions.Serialization.core}")
}
fun DependencyHandlerScope.addTesting() {
testImplementation("junit:junit:4.13.2")
+13 -1
View File
@@ -1,6 +1,6 @@
object Versions {
object Kotlin {
const val core = "2.1.20"
const val core = "2.2.10"
const val coroutines = "1.8.0"
}
@@ -13,4 +13,16 @@ object Versions {
const val core = "2.9.3"
}
}
object Compose {
const val bom = "2025.06.01"
}
object Navigation3 {
const val core = "1.0.0"
}
object Serialization {
const val core = "1.9.0"
}
}