From 0d56e97669165b4e59615faf3627b3217c7c49ca Mon Sep 17 00:00:00 2001 From: Nico Wiedemann Date: Wed, 22 Jul 2026 16:40:14 +0200 Subject: [PATCH 1/2] build: update toolchain to AGP 9.1.1, Kotlin 2.1.10, SDK 36; add edge-to-edge support Migrate kapt to KSP, bump Hilt to 2.60.1 and Gradle wrapper to 9.3.1, and enable edge-to-edge display on MainActivity, SettingsScreen, and ProfileEditScreen (with insets-aware padding). CHANGELOG.md: added a Changed entry under [Unreleased] for the SDK 36, toolchain, and edge-to-edge updates. Co-Authored-By: Claude Sonnet 5 --- CHANGELOG.md | 6 ++++++ app/build.gradle.kts | 18 +++++++++++------- app/src/main/AndroidManifest.xml | 3 ++- .../main/java/de/autosugar/ui/MainActivity.kt | 2 ++ .../ui/settings/ProfileEditScreen.kt | 10 +++++++--- .../autosugar/ui/settings/SettingsScreen.kt | 19 ++++++++++++++----- build.gradle.kts | 2 +- gradle.properties | 10 ++++++++++ gradle/gradle-daemon-jvm.properties | 13 +++++++++++++ gradle/libs.versions.toml | 10 ++++++---- gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle.kts | 3 +++ 12 files changed, 76 insertions(+), 22 deletions(-) create mode 100644 gradle/gradle-daemon-jvm.properties diff --git a/CHANGELOG.md b/CHANGELOG.md index 65cde5a..5db049e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ## [Unreleased] +### Changed + +- Updated to the latest Android SDK version (API 36) +- Updated toolchain: Kotlin 2.1.10, Hilt 2.60.1, Gradle Plugin 9.1.1 +- Added edge-to-edge support for mobile settings and profile edit screens + ### Fixed - Google Play release notes: shortened v1.2.0 what's new text in all 11 languages to stay under 500-character limit (was 672 chars in Arabic) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 4d6cb7d..9d4e253 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -2,18 +2,18 @@ plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) - alias(libs.plugins.kotlin.kapt) + alias(libs.plugins.google.ksp) alias(libs.plugins.hilt.android) } android { namespace = "de.autosugar" - compileSdk = 35 + compileSdk = 36 defaultConfig { applicationId = "de.autosugar" minSdk = 26 - targetSdk = 35 + targetSdk = 36 versionCode = 5 versionName = "1.2.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" @@ -41,8 +41,12 @@ android { } compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 + } + + kotlinOptions { + jvmTarget = "21" } buildFeatures { @@ -87,14 +91,14 @@ dependencies { implementation(libs.retrofit.moshi) implementation(libs.okhttp.logging) implementation(libs.moshi.kotlin) - kapt(libs.moshi.codegen) + ksp(libs.moshi.codegen) // Storage implementation(libs.datastore.preferences) // DI implementation(libs.hilt.android) - kapt(libs.hilt.compiler) + ksp(libs.hilt.compiler) implementation(libs.hilt.navigation.compose) // Testing diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 07458ed..512ed33 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -28,7 +28,8 @@ + android:exported="true" + android:foregroundServiceType="connectedDevice"> diff --git a/app/src/main/java/de/autosugar/ui/MainActivity.kt b/app/src/main/java/de/autosugar/ui/MainActivity.kt index 4b1b035..bf10e7c 100644 --- a/app/src/main/java/de/autosugar/ui/MainActivity.kt +++ b/app/src/main/java/de/autosugar/ui/MainActivity.kt @@ -3,6 +3,7 @@ package de.autosugar.ui import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent +import androidx.activity.enableEdgeToEdge import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController @@ -20,6 +21,7 @@ class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + enableEdgeToEdge() setContent { AutoSugarTheme { val navController = rememberNavController() diff --git a/app/src/main/java/de/autosugar/ui/settings/ProfileEditScreen.kt b/app/src/main/java/de/autosugar/ui/settings/ProfileEditScreen.kt index 9130a03..34ceb8e 100644 --- a/app/src/main/java/de/autosugar/ui/settings/ProfileEditScreen.kt +++ b/app/src/main/java/de/autosugar/ui/settings/ProfileEditScreen.kt @@ -151,11 +151,13 @@ fun ProfileEditScreen( ) { padding -> Column( modifier = Modifier - .padding(padding) - .padding(16.dp) - .verticalScroll(rememberScrollState()), + .fillMaxSize() + .verticalScroll(rememberScrollState()) + .padding(horizontal = 16.dp), verticalArrangement = Arrangement.spacedBy(12.dp), ) { + Spacer(Modifier.height(padding.calculateTopPadding() + 4.dp)) + // ── Connection fields ───────────────────────────────────────── OutlinedTextField( value = displayName, @@ -306,6 +308,8 @@ fun ProfileEditScreen( Text(stringResource(R.string.btn_delete)) } } + + Spacer(Modifier.height(padding.calculateBottomPadding() + 16.dp)) } } } diff --git a/app/src/main/java/de/autosugar/ui/settings/SettingsScreen.kt b/app/src/main/java/de/autosugar/ui/settings/SettingsScreen.kt index 6a1fca4..d86227c 100644 --- a/app/src/main/java/de/autosugar/ui/settings/SettingsScreen.kt +++ b/app/src/main/java/de/autosugar/ui/settings/SettingsScreen.kt @@ -84,10 +84,15 @@ fun SettingsScreen( Scaffold( topBar = { - TopAppBar(title = { Text(stringResource(R.string.label_settings)) }) + TopAppBar( + title = { Text(stringResource(R.string.label_settings)) } + ) }, floatingActionButton = { - FloatingActionButton(onClick = onAddProfile) { + FloatingActionButton( + onClick = onAddProfile, + modifier = Modifier.padding(bottom = 8.dp) // Extra spacing from nav bar + ) { Icon(Icons.Default.Add, contentDescription = stringResource(R.string.btn_add_profile)) } }, @@ -95,12 +100,11 @@ fun SettingsScreen( Box( modifier = Modifier .fillMaxSize() - .padding(padding) .pointerInput(Unit) { detectDragGesturesAfterLongPress( onDragStart = { offset -> isDragging = true - dragState.onDragStart(offset.y) + dragState.onDragStart(offset.y - padding.calculateTopPadding().toPx()) }, onDrag = { change, dragAmount -> change.consume() @@ -123,7 +127,12 @@ fun SettingsScreen( LazyColumn( state = lazyListState, modifier = Modifier.fillMaxSize(), - contentPadding = PaddingValues(16.dp), + contentPadding = PaddingValues( + top = padding.calculateTopPadding() + 16.dp, + bottom = padding.calculateBottomPadding() + 80.dp, // Space for FAB + start = 16.dp, + end = 16.dp + ), verticalArrangement = Arrangement.spacedBy(8.dp), ) { item { diff --git a/build.gradle.kts b/build.gradle.kts index f7ff043..ef92179 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,7 @@ plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.kotlin.android) apply false - alias(libs.plugins.kotlin.kapt) apply false alias(libs.plugins.hilt.android) apply false alias(libs.plugins.kotlin.compose) apply false + alias(libs.plugins.google.ksp) apply false } diff --git a/gradle.properties b/gradle.properties index e696167..aa2a77a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,13 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 android.useAndroidX=true kotlin.code.style=official +android.defaults.buildfeatures.resvalues=true +android.sdk.defaultTargetSdkToCompileSdkIfUnset=false +android.enableAppCompileTimeRClass=false +android.usesSdkInManifest.disallowed=false +android.uniquePackageNames=false +android.dependency.useConstraints=true +android.r8.strictFullModeForKeepRules=false +android.r8.optimizedResourceShrinking=false +android.builtInKotlin=false +android.newDsl=false diff --git a/gradle/gradle-daemon-jvm.properties b/gradle/gradle-daemon-jvm.properties new file mode 100644 index 0000000..baa28d1 --- /dev/null +++ b/gradle/gradle-daemon-jvm.properties @@ -0,0 +1,13 @@ +#This file is generated by updateDaemonJvm +toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/491f83666ae7f4d6ebb28fee72ebb035/redirect +toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/0d1a1acdc708062093673f65aa9aba4b/redirect +toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/491f83666ae7f4d6ebb28fee72ebb035/redirect +toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/0d1a1acdc708062093673f65aa9aba4b/redirect +toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/7083b89563e7ce20943037b8cd2b8cc2/redirect +toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/060bbb778a1f55ea705fdebd2ccfeab9/redirect +toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/491f83666ae7f4d6ebb28fee72ebb035/redirect +toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/0d1a1acdc708062093673f65aa9aba4b/redirect +toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/d09679dc60fe5aa05ef7d03efdefac20/redirect +toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/ed4e3bf2f5e7c5d9aabc4cbd8acd555e/redirect +toolchainVendor=JETBRAINS +toolchainVersion=21 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 41b49c1..ef39cb7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,18 +1,19 @@ [versions] -agp = "8.13.2" -kotlin = "2.0.21" +agp = "9.1.1" +kotlin = "2.1.10" compose-bom = "2024.09.03" car-app = "1.4.0" retrofit = "2.11.0" okhttp = "4.12.0" -moshi = "1.15.1" +moshi = "1.15.2" datastore = "1.2.1" lifecycle = "2.8.7" coroutines = "1.10.2" -hilt = "2.57" +hilt = "2.60.1" androidx-core = "1.13.1" activity-compose = "1.9.3" navigation-compose = "2.8.4" +ksp = "2.1.10-1.0.29" [libraries] androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "androidx-core" } @@ -51,3 +52,4 @@ kotlin-android = { id = "org.jetbrains.kotlin.android", version.re kotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" } hilt-android = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } +google-ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 37f853b..37f78a6 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/settings.gradle.kts b/settings.gradle.kts index 2dcff11..b9b68c5 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -5,6 +5,9 @@ pluginManagement { gradlePluginPortal() } } +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "0.10.0" +} dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { From 20117662a9f7e2a6c5148745c85150d87388500e Mon Sep 17 00:00:00 2001 From: Nico Wiedemann Date: Wed, 22 Jul 2026 18:10:36 +0200 Subject: [PATCH 2/2] chore(release): bump version to 1.2.1 Co-Authored-By: Claude Sonnet 5 --- CHANGELOG.md | 2 ++ app/build.gradle.kts | 4 ++-- docs/whatsnew/1.2.1-ar | 1 + docs/whatsnew/1.2.1-de-DE | 1 + docs/whatsnew/1.2.1-en-US | 1 + docs/whatsnew/1.2.1-es-ES | 1 + docs/whatsnew/1.2.1-fr-FR | 1 + docs/whatsnew/1.2.1-hi-IN | 1 + docs/whatsnew/1.2.1-it-IT | 1 + docs/whatsnew/1.2.1-ja-JP | 1 + docs/whatsnew/1.2.1-nl-NL | 1 + docs/whatsnew/1.2.1-pt-PT | 1 + docs/whatsnew/1.2.1-zh-CN | 1 + 13 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 docs/whatsnew/1.2.1-ar create mode 100644 docs/whatsnew/1.2.1-de-DE create mode 100644 docs/whatsnew/1.2.1-en-US create mode 100644 docs/whatsnew/1.2.1-es-ES create mode 100644 docs/whatsnew/1.2.1-fr-FR create mode 100644 docs/whatsnew/1.2.1-hi-IN create mode 100644 docs/whatsnew/1.2.1-it-IT create mode 100644 docs/whatsnew/1.2.1-ja-JP create mode 100644 docs/whatsnew/1.2.1-nl-NL create mode 100644 docs/whatsnew/1.2.1-pt-PT create mode 100644 docs/whatsnew/1.2.1-zh-CN diff --git a/CHANGELOG.md b/CHANGELOG.md index 5db049e..9726909 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ## [Unreleased] +## [1.2.1] - 2026-07-22 + ### Changed - Updated to the latest Android SDK version (API 36) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9d4e253..34924c6 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -14,8 +14,8 @@ android { applicationId = "de.autosugar" minSdk = 26 targetSdk = 36 - versionCode = 5 - versionName = "1.2.0" + versionCode = 6 + versionName = "1.2.1" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } diff --git a/docs/whatsnew/1.2.1-ar b/docs/whatsnew/1.2.1-ar new file mode 100644 index 0000000..4611313 --- /dev/null +++ b/docs/whatsnew/1.2.1-ar @@ -0,0 +1 @@ +• تحديث إلى أحدث إصدار Android SDK (API 36) وأدوات التطوير diff --git a/docs/whatsnew/1.2.1-de-DE b/docs/whatsnew/1.2.1-de-DE new file mode 100644 index 0000000..b74fbff --- /dev/null +++ b/docs/whatsnew/1.2.1-de-DE @@ -0,0 +1 @@ +• Update auf das neueste Android SDK (API 36) und Toolchain diff --git a/docs/whatsnew/1.2.1-en-US b/docs/whatsnew/1.2.1-en-US new file mode 100644 index 0000000..e205eb4 --- /dev/null +++ b/docs/whatsnew/1.2.1-en-US @@ -0,0 +1 @@ +• Updated to the latest Android SDK (API 36) and toolchain diff --git a/docs/whatsnew/1.2.1-es-ES b/docs/whatsnew/1.2.1-es-ES new file mode 100644 index 0000000..70527e6 --- /dev/null +++ b/docs/whatsnew/1.2.1-es-ES @@ -0,0 +1 @@ +• Actualizado al último SDK de Android (API 36) y herramientas diff --git a/docs/whatsnew/1.2.1-fr-FR b/docs/whatsnew/1.2.1-fr-FR new file mode 100644 index 0000000..61ce6c8 --- /dev/null +++ b/docs/whatsnew/1.2.1-fr-FR @@ -0,0 +1 @@ +• Mise à jour vers le dernier SDK Android (API 36) et la chaîne d'outils diff --git a/docs/whatsnew/1.2.1-hi-IN b/docs/whatsnew/1.2.1-hi-IN new file mode 100644 index 0000000..506e2e6 --- /dev/null +++ b/docs/whatsnew/1.2.1-hi-IN @@ -0,0 +1 @@ +• नवीनतम Android SDK (API 36) और टूलचेन में अपडेट किया गया diff --git a/docs/whatsnew/1.2.1-it-IT b/docs/whatsnew/1.2.1-it-IT new file mode 100644 index 0000000..4682fdb --- /dev/null +++ b/docs/whatsnew/1.2.1-it-IT @@ -0,0 +1 @@ +• Aggiornato all'ultimo SDK Android (API 36) e alla toolchain diff --git a/docs/whatsnew/1.2.1-ja-JP b/docs/whatsnew/1.2.1-ja-JP new file mode 100644 index 0000000..f456101 --- /dev/null +++ b/docs/whatsnew/1.2.1-ja-JP @@ -0,0 +1 @@ +• 最新のAndroid SDK(API 36)およびツールチェーンにアップデート diff --git a/docs/whatsnew/1.2.1-nl-NL b/docs/whatsnew/1.2.1-nl-NL new file mode 100644 index 0000000..b3ebf02 --- /dev/null +++ b/docs/whatsnew/1.2.1-nl-NL @@ -0,0 +1 @@ +• Bijgewerkt naar de nieuwste Android SDK (API 36) en toolchain diff --git a/docs/whatsnew/1.2.1-pt-PT b/docs/whatsnew/1.2.1-pt-PT new file mode 100644 index 0000000..56ca0ef --- /dev/null +++ b/docs/whatsnew/1.2.1-pt-PT @@ -0,0 +1 @@ +• Atualizado para o mais recente Android SDK (API 36) e ferramentas diff --git a/docs/whatsnew/1.2.1-zh-CN b/docs/whatsnew/1.2.1-zh-CN new file mode 100644 index 0000000..c4b8318 --- /dev/null +++ b/docs/whatsnew/1.2.1-zh-CN @@ -0,0 +1 @@ +• 更新至最新的 Android SDK (API 36) 和工具链