From 2f2e76bea2d4e12a821f71656aad374e1f0a8afa Mon Sep 17 00:00:00 2001 From: Arnau Mora Date: Tue, 17 Sep 2024 16:37:08 +0200 Subject: [PATCH 01/13] Upgrade dependencies Signed-off-by: Arnau Mora Gras --- gradle/libs.versions.toml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 868f93c..b942af4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,20 +1,20 @@ [versions] -agp = "8.3.1" -androidx-activityCompose = "1.8.2" -androidx-appcompat = "1.6.1" -androidx-core = "1.12.0" -androidx-lifecycle = "2.7.0" -androidx-test-core = "1.5.0" -androidx-test-runner = "1.5.2" -androidx-test-rules = "1.5.0" +agp = "8.3.2" +androidx-activityCompose = "1.9.2" +androidx-appcompat = "1.7.0" +androidx-core = "1.13.1" +androidx-lifecycle = "2.8.5" +androidx-test-core = "1.6.1" +androidx-test-runner = "1.6.2" +androidx-test-rules = "1.6.1" conscrypt = "2.5.2" -compose-bom = "2024.03.00" +compose-bom = "2024.09.01" # https://developer.android.com/jetpack/androidx/releases/compose-kotlin compose-compiler = "1.5.11" dokka = "1.9.10" junit = "4.13.2" -kotlin = "1.9.23" -mockk = "1.13.10" +kotlin = "2.0.20" +mockk = "1.13.12" okhttp3 = "4.12.0" [libraries] From 182e34a58e8e5618b382081f8d1eee9df725fad6 Mon Sep 17 00:00:00 2001 From: Arnau Mora Date: Tue, 17 Sep 2024 16:43:26 +0200 Subject: [PATCH 02/13] Using new Compose Compiler plugin Signed-off-by: Arnau Mora Gras --- build.gradle.kts | 1 + gradle/libs.versions.toml | 3 +-- lib/build.gradle.kts | 5 +---- sample-app/build.gradle.kts | 4 +--- 4 files changed, 4 insertions(+), 9 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index bafb196..681f891 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,6 +2,7 @@ plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.android.library) apply false + alias(libs.plugins.compose.compiler) apply false alias(libs.plugins.dokka) apply false alias(libs.plugins.kotlin.android) apply false } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b942af4..a0d316a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,8 +9,6 @@ androidx-test-runner = "1.6.2" androidx-test-rules = "1.6.1" conscrypt = "2.5.2" compose-bom = "2024.09.01" -# https://developer.android.com/jetpack/androidx/releases/compose-kotlin -compose-compiler = "1.5.11" dokka = "1.9.10" junit = "4.13.2" kotlin = "2.0.20" @@ -43,5 +41,6 @@ okttp3-mockwebserver = { module = "com.squareup.okhttp3:mockwebserver", version. [plugins] android-application = { id = "com.android.application", version.ref = "agp" } android-library = { id = "com.android.library", version.ref = "agp" } +compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } \ No newline at end of file diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index bb09000..dc08b21 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -1,5 +1,6 @@ plugins { alias(libs.plugins.android.library) + alias(libs.plugins.compose.compiler) alias(libs.plugins.dokka) alias(libs.plugins.kotlin.android) `maven-publish` @@ -33,10 +34,6 @@ android { compose = true } - composeOptions { - kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get() - } - lint { disable += listOf("MissingTranslation", "ExtraTranslation") } diff --git a/sample-app/build.gradle.kts b/sample-app/build.gradle.kts index d0824a1..4554538 100644 --- a/sample-app/build.gradle.kts +++ b/sample-app/build.gradle.kts @@ -1,5 +1,6 @@ plugins { alias(libs.plugins.android.application) + alias(libs.plugins.compose.compiler) alias(libs.plugins.kotlin.android) } @@ -37,9 +38,6 @@ android { buildFeatures { compose = true } - composeOptions { - kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get() // keep in sync with Kotlin version in top-level build.gradle - } packaging { resources { excludes.add("/META-INF/{AL2.0,LGPL2.1}") From 88d028cf23b89da10344b6b9f80619b846a0c02c Mon Sep 17 00:00:00 2001 From: Arnau Mora Date: Tue, 17 Sep 2024 17:01:06 +0200 Subject: [PATCH 03/13] Upgrade AGP Signed-off-by: Arnau Mora Gras --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a0d316a..982013a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -agp = "8.3.2" +agp = "8.6.0" androidx-activityCompose = "1.9.2" androidx-appcompat = "1.7.0" androidx-core = "1.13.1" From 7401ae5479289ce4c90a32948671bd3a6314c2fb Mon Sep 17 00:00:00 2001 From: Arnau Mora Date: Tue, 17 Sep 2024 17:09:09 +0200 Subject: [PATCH 04/13] Migrated to M3 Signed-off-by: Arnau Mora Gras --- gradle/libs.versions.toml | 2 +- lib/build.gradle.kts | 2 +- .../cert4android/TrustCertificateActivity.kt | 38 +++++++++---------- sample-app/build.gradle.kts | 3 +- .../bitfire/cert4android/demo/MainActivity.kt | 11 ++++-- 5 files changed, 31 insertions(+), 25 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 982013a..f5f1883 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -26,7 +26,7 @@ androidx-test-core = { module = "androidx.test:core-ktx", version.ref = "android androidx-test-runner = { module = "androidx.test:runner", version.ref = "androidx-test-runner" } androidx-test-rules = { module = "androidx.test:rules", version.ref = "androidx-test-rules" } compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "compose-bom" } -compose-material = { module = "androidx.compose.material:material" } +compose-material3 = { module = "androidx.compose.material3:material3" } compose-runtime-livedata = { module = "androidx.compose.runtime:runtime-livedata" } compose-ui-base = { module = "androidx.compose.ui:ui" } compose-ui-graphics = { module = "androidx.compose.ui:ui-graphics" } diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index dc08b21..97c5222 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -95,7 +95,7 @@ dependencies { // Jetpack Compose implementation(libs.androidx.activityCompose) implementation(platform(libs.compose.bom)) - implementation(libs.compose.material) + implementation(libs.compose.material3) implementation(libs.compose.runtime.livedata) debugImplementation(libs.compose.ui.tooling) implementation(libs.compose.ui.toolingPreview) diff --git a/lib/src/main/java/at/bitfire/cert4android/TrustCertificateActivity.kt b/lib/src/main/java/at/bitfire/cert4android/TrustCertificateActivity.kt index e15d69b..c69409c 100644 --- a/lib/src/main/java/at/bitfire/cert4android/TrustCertificateActivity.kt +++ b/lib/src/main/java/at/bitfire/cert4android/TrustCertificateActivity.kt @@ -19,14 +19,14 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll -import androidx.compose.material.Card -import androidx.compose.material.Checkbox -import androidx.compose.material.MaterialTheme -import androidx.compose.material.Scaffold -import androidx.compose.material.SnackbarHost -import androidx.compose.material.SnackbarHostState -import androidx.compose.material.Text -import androidx.compose.material.TextButton +import androidx.compose.material3.Card +import androidx.compose.material3.Checkbox +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.SnackbarHost +import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue @@ -42,8 +42,6 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.viewModelScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch import java.io.ByteArrayInputStream import java.security.cert.CertificateFactory import java.security.cert.CertificateParsingException @@ -52,6 +50,8 @@ import java.security.spec.MGF1ParameterSpec.SHA1 import java.security.spec.MGF1ParameterSpec.SHA256 import java.text.DateFormat import java.util.logging.Level +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch class TrustCertificateActivity : ComponentActivity() { @@ -136,7 +136,7 @@ class TrustCertificateActivity : ComponentActivity() { ) { Text( text = stringResource(R.string.trust_certificate_unknown_certificate_found), - style = MaterialTheme.typography.body1, + style = MaterialTheme.typography.bodySmall, modifier = Modifier .fillMaxWidth() .padding(bottom = 16.dp) @@ -149,7 +149,7 @@ class TrustCertificateActivity : ComponentActivity() { Text( text = stringResource(R.string.trust_certificate_reset_info), - style = MaterialTheme.typography.body1, + style = MaterialTheme.typography.bodySmall, modifier = Modifier .fillMaxWidth() .padding(top = 16.dp), @@ -174,7 +174,7 @@ class TrustCertificateActivity : ComponentActivity() { ) { Text( text = stringResource(R.string.trust_certificate_x509_certificate_details), - style = MaterialTheme.typography.h5, + style = MaterialTheme.typography.titleMedium, modifier = Modifier .fillMaxWidth() .padding(bottom = 16.dp), @@ -201,14 +201,14 @@ class TrustCertificateActivity : ComponentActivity() { if (sha1 != null || sha256 != null) { Text( text = stringResource(R.string.trust_certificate_fingerprints).uppercase(), - style = MaterialTheme.typography.body2, + style = MaterialTheme.typography.bodyMedium, modifier = Modifier.fillMaxWidth(), ) if (sha1 != null) Text( text = sha1, - style = MaterialTheme.typography.body2, + style = MaterialTheme.typography.bodyMedium, modifier = Modifier .fillMaxWidth() .padding(bottom = 16.dp, top = 4.dp), @@ -217,7 +217,7 @@ class TrustCertificateActivity : ComponentActivity() { if (sha256 != null) Text( text = sha256, - style = MaterialTheme.typography.body2, + style = MaterialTheme.typography.bodyMedium, modifier = Modifier .fillMaxWidth() .padding(bottom = 16.dp, top = 4.dp), @@ -242,7 +242,7 @@ class TrustCertificateActivity : ComponentActivity() { } .weight(1f) .padding(bottom = 8.dp), - style = MaterialTheme.typography.body2 + style = MaterialTheme.typography.bodyMedium ) } @@ -274,13 +274,13 @@ class TrustCertificateActivity : ComponentActivity() { fun InfoPack(@StringRes labelStringRes: Int, text: String) { Text( text = stringResource(labelStringRes).uppercase(), - style = MaterialTheme.typography.body2, + style = MaterialTheme.typography.bodyMedium, modifier = Modifier .fillMaxWidth(), ) Text( text = text, - style = MaterialTheme.typography.body1, + style = MaterialTheme.typography.bodySmall, modifier = Modifier .fillMaxWidth() .padding(bottom = 16.dp), diff --git a/sample-app/build.gradle.kts b/sample-app/build.gradle.kts index 4554538..c5d25f7 100644 --- a/sample-app/build.gradle.kts +++ b/sample-app/build.gradle.kts @@ -52,7 +52,8 @@ dependencies { implementation(libs.androidx.appcompat) implementation(libs.androidx.activityCompose) - implementation(libs.compose.material) + implementation(platform(libs.compose.bom)) + implementation(libs.compose.material3) implementation(libs.compose.ui.base) implementation(libs.compose.ui.graphics) debugImplementation(libs.compose.ui.toolingPreview) diff --git a/sample-app/src/main/java/at/bitfire/cert4android/demo/MainActivity.kt b/sample-app/src/main/java/at/bitfire/cert4android/demo/MainActivity.kt index fa80552..a05b71d 100644 --- a/sample-app/src/main/java/at/bitfire/cert4android/demo/MainActivity.kt +++ b/sample-app/src/main/java/at/bitfire/cert4android/demo/MainActivity.kt @@ -16,7 +16,12 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll -import androidx.compose.material.* +import androidx.compose.material3.Button +import androidx.compose.material3.Checkbox +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.SnackbarHost +import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.Text import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.livedata.observeAsState @@ -30,13 +35,13 @@ import androidx.lifecycle.viewModelScope import at.bitfire.cert4android.Cert4Android import at.bitfire.cert4android.CustomCertManager import at.bitfire.cert4android.CustomCertStore +import java.net.URL +import javax.net.ssl.HttpsURLConnection import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.launch import org.apache.http.conn.ssl.AllowAllHostnameVerifier import org.apache.http.conn.ssl.StrictHostnameVerifier -import java.net.URL -import javax.net.ssl.HttpsURLConnection class MainActivity : ComponentActivity() { From 7c1ba81a0b84e97a1ce1da074c8a3095aeba5d8f Mon Sep 17 00:00:00 2001 From: Arnau Mora Gras Date: Sun, 8 Dec 2024 18:17:38 +0100 Subject: [PATCH 05/13] Upgrade dependency versions --- gradle/libs.versions.toml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 63664ca..cafc673 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,17 +1,17 @@ [versions] -agp = "8.7.1" +agp = "8.7.3" androidx-activityCompose = "1.9.3" androidx-appcompat = "1.7.0" -androidx-core = "1.13.1" -androidx-lifecycle = "2.8.6" +androidx-core = "1.15.0" +androidx-lifecycle = "2.8.7" androidx-test-core = "1.6.1" androidx-test-runner = "1.6.2" androidx-test-rules = "1.6.1" conscrypt = "2.5.2" -compose-bom = "2024.10.00" +compose-bom = "2024.11.00" dokka = "1.9.20" junit = "4.13.2" -kotlin = "2.0.21" +kotlin = "2.1.0" mockk = "1.13.13" okhttp3 = "4.12.0" From e6b3e6ff26c4bbff913b47b4191460a8dd45b60f Mon Sep 17 00:00:00 2001 From: Arnau Mora Gras Date: Sun, 8 Dec 2024 18:17:59 +0100 Subject: [PATCH 06/13] Got rid of Matrix --- .github/workflows/test-dev.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/test-dev.yml b/.github/workflows/test-dev.yml index 218b949..48dab4a 100644 --- a/.github/workflows/test-dev.yml +++ b/.github/workflows/test-dev.yml @@ -23,9 +23,6 @@ jobs: test_on_emulator: name: Tests with emulator runs-on: ubuntu-latest - strategy: - matrix: - api-level: [ 31 ] steps: - uses: actions/checkout@v4 - uses: actions/setup-java@v4 From ff316e1c958ba0225b8bc0ffb9e939c7d0c9c498 Mon Sep 17 00:00:00 2001 From: Arnau Mora Gras Date: Sun, 8 Dec 2024 18:18:40 +0100 Subject: [PATCH 07/13] Upgrade JDK to 21 --- .github/workflows/build-kdoc.yml | 2 +- .github/workflows/codeql.yml | 2 +- .github/workflows/test-dev.yml | 4 ++-- lib/build.gradle.kts | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-kdoc.yml b/.github/workflows/build-kdoc.yml index 89af090..f97cfb0 100644 --- a/.github/workflows/build-kdoc.yml +++ b/.github/workflows/build-kdoc.yml @@ -18,7 +18,7 @@ jobs: - uses: actions/setup-java@v4 with: distribution: temurin - java-version: 17 + java-version: 21 cache: gradle - uses: gradle/actions/setup-gradle@v3 diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 8d56eab..4908195 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -31,7 +31,7 @@ jobs: - uses: actions/setup-java@v4 with: distribution: temurin - java-version: 17 + java-version: 21 cache: gradle - uses: gradle/actions/setup-gradle@v3 diff --git a/.github/workflows/test-dev.yml b/.github/workflows/test-dev.yml index 48dab4a..a4cd405 100644 --- a/.github/workflows/test-dev.yml +++ b/.github/workflows/test-dev.yml @@ -13,7 +13,7 @@ jobs: - uses: actions/setup-java@v4 with: distribution: temurin - java-version: 17 + java-version: 21 cache: gradle - uses: gradle/actions/setup-gradle@v3 @@ -28,7 +28,7 @@ jobs: - uses: actions/setup-java@v4 with: distribution: temurin - java-version: 17 + java-version: 21 cache: gradle - uses: gradle/actions/setup-gradle@v3 diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index 30a2625..54a812e 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -22,8 +22,8 @@ android { } compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 } kotlin { jvmToolchain(17) From 20ec54621ec26cb23d7d0cd606611d202e596cc3 Mon Sep 17 00:00:00 2001 From: Arnau Mora Gras Date: Sun, 8 Dec 2024 18:19:21 +0100 Subject: [PATCH 08/13] Upgrade Conscrypt --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index cafc673..c7e922d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,7 +7,7 @@ androidx-lifecycle = "2.8.7" androidx-test-core = "1.6.1" androidx-test-runner = "1.6.2" androidx-test-rules = "1.6.1" -conscrypt = "2.5.2" +conscrypt = "2.5.3" compose-bom = "2024.11.00" dokka = "1.9.20" junit = "4.13.2" From 59cca245422aaf10bda457fa325ae62627c9a3c1 Mon Sep 17 00:00:00 2001 From: Arnau Mora Gras Date: Sun, 8 Dec 2024 18:21:05 +0100 Subject: [PATCH 09/13] Missing JDK upgrade --- lib/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index 54a812e..46d57a0 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -26,7 +26,7 @@ android { targetCompatibility = JavaVersion.VERSION_21 } kotlin { - jvmToolchain(17) + jvmToolchain(21) } buildFeatures { From 6f6f2545fd8311fd895f4eab075ca5cfeb9f108c Mon Sep 17 00:00:00 2001 From: Arnau Mora Gras Date: Sun, 8 Dec 2024 18:22:19 +0100 Subject: [PATCH 10/13] Upgrade Gradle Wrapper --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 627b8f4..f202fe2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Wed May 17 11:37:23 CEST 2023 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From 7ec9bbe2cb78fe69081b94d77117c7381fce39d1 Mon Sep 17 00:00:00 2001 From: Arnau Mora Gras Date: Sun, 8 Dec 2024 18:54:58 +0100 Subject: [PATCH 11/13] Fixed theme --- lib/src/main/java/at/bitfire/cert4android/Cert4Android.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/main/java/at/bitfire/cert4android/Cert4Android.kt b/lib/src/main/java/at/bitfire/cert4android/Cert4Android.kt index 3d6a9dd..f55ec8b 100644 --- a/lib/src/main/java/at/bitfire/cert4android/Cert4Android.kt +++ b/lib/src/main/java/at/bitfire/cert4android/Cert4Android.kt @@ -5,7 +5,7 @@ package at.bitfire.cert4android import android.util.Log -import androidx.compose.material.MaterialTheme +import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import java.util.logging.Level import java.util.logging.Logger From 8be7d43394bf5b899af329afa332f73c2396c38e Mon Sep 17 00:00:00 2001 From: Arnau Mora Gras Date: Sun, 8 Dec 2024 18:55:25 +0100 Subject: [PATCH 12/13] Upgrade SDK level --- sample-app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sample-app/build.gradle.kts b/sample-app/build.gradle.kts index 979017b..514e93e 100644 --- a/sample-app/build.gradle.kts +++ b/sample-app/build.gradle.kts @@ -6,7 +6,7 @@ plugins { android { namespace = "at.bitfire.cert4android.demo" - compileSdk = 34 + compileSdk = 35 defaultConfig { applicationId = "at.bitfire.cert4android.demo" @@ -14,7 +14,7 @@ android { versionName = "1.0.0" minSdk = 21 - targetSdk = 34 + targetSdk = 35 testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { From e69ce5558812db9e523c36168d8fdcdc87859ba2 Mon Sep 17 00:00:00 2001 From: Ricki Hirner Date: Thu, 12 Dec 2024 14:01:35 +0100 Subject: [PATCH 13/13] Add safe drawing padding (edge-to-edge) --- .../at/bitfire/cert4android/Cert4Android.kt | 9 ++- .../cert4android/TrustCertificateActivity.kt | 71 ++++++++++--------- .../bitfire/cert4android/demo/MainActivity.kt | 2 +- 3 files changed, 46 insertions(+), 36 deletions(-) diff --git a/lib/src/main/java/at/bitfire/cert4android/Cert4Android.kt b/lib/src/main/java/at/bitfire/cert4android/Cert4Android.kt index f55ec8b..31ce279 100644 --- a/lib/src/main/java/at/bitfire/cert4android/Cert4Android.kt +++ b/lib/src/main/java/at/bitfire/cert4android/Cert4Android.kt @@ -5,8 +5,11 @@ package at.bitfire.cert4android import android.util.Log +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.safeDrawingPadding import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier import java.util.logging.Level import java.util.logging.Logger @@ -28,7 +31,11 @@ object Cert4Android { // theme var theme: @Composable (content: @Composable () -> Unit) -> Unit = { content -> - MaterialTheme(content = content) + MaterialTheme { + Box(Modifier.safeDrawingPadding()) { + content() + } + } } } \ No newline at end of file diff --git a/lib/src/main/java/at/bitfire/cert4android/TrustCertificateActivity.kt b/lib/src/main/java/at/bitfire/cert4android/TrustCertificateActivity.kt index c69409c..daa2087 100644 --- a/lib/src/main/java/at/bitfire/cert4android/TrustCertificateActivity.kt +++ b/lib/src/main/java/at/bitfire/cert4android/TrustCertificateActivity.kt @@ -10,6 +10,7 @@ import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.BackHandler import androidx.activity.compose.setContent +import androidx.activity.enableEdgeToEdge import androidx.activity.viewModels import androidx.annotation.StringRes import androidx.compose.foundation.clickable @@ -42,6 +43,8 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.viewModelScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch import java.io.ByteArrayInputStream import java.security.cert.CertificateFactory import java.security.cert.CertificateParsingException @@ -50,8 +53,6 @@ import java.security.spec.MGF1ParameterSpec.SHA1 import java.security.spec.MGF1ParameterSpec.SHA256 import java.text.DateFormat import java.util.logging.Level -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch class TrustCertificateActivity : ComponentActivity() { @@ -74,11 +75,15 @@ class TrustCertificateActivity : ComponentActivity() { processIntent(newIntent) } + enableEdgeToEdge() + setContent { - MainLayout( - onRegisterDecision = { trusted -> model.registerDecision(trusted) }, - onFinish = { finish() } - ) + Cert4Android.theme { + MainLayout( + onRegisterDecision = { trusted -> model.registerDecision(trusted) }, + onFinish = { finish() } + ) + } } } @@ -124,37 +129,35 @@ class TrustCertificateActivity : ComponentActivity() { backPressedCounter = newBackPressedCounter } - Cert4Android.theme { - Scaffold( - snackbarHost = { SnackbarHost(snackbarHostState) }, - modifier = Modifier.padding(16.dp) - ) { paddingValues -> - Column( + Scaffold( + snackbarHost = { SnackbarHost(snackbarHostState) }, + modifier = Modifier.padding(16.dp) + ) { paddingValues -> + Column( + modifier = Modifier + .padding(paddingValues) + .verticalScroll(rememberScrollState()), + ) { + Text( + text = stringResource(R.string.trust_certificate_unknown_certificate_found), + style = MaterialTheme.typography.bodySmall, modifier = Modifier - .padding(paddingValues) - .verticalScroll(rememberScrollState()), - ) { - Text( - text = stringResource(R.string.trust_certificate_unknown_certificate_found), - style = MaterialTheme.typography.bodySmall, - modifier = Modifier - .fillMaxWidth() - .padding(bottom = 16.dp) - ) + .fillMaxWidth() + .padding(bottom = 16.dp) + ) - CertificateCard( - uiState = uiState, - onRegisterDecision = onRegisterDecision - ) + CertificateCard( + uiState = uiState, + onRegisterDecision = onRegisterDecision + ) - Text( - text = stringResource(R.string.trust_certificate_reset_info), - style = MaterialTheme.typography.bodySmall, - modifier = Modifier - .fillMaxWidth() - .padding(top = 16.dp), - ) - } + Text( + text = stringResource(R.string.trust_certificate_reset_info), + style = MaterialTheme.typography.bodySmall, + modifier = Modifier + .fillMaxWidth() + .padding(top = 16.dp), + ) } } } diff --git a/sample-app/src/main/java/at/bitfire/cert4android/demo/MainActivity.kt b/sample-app/src/main/java/at/bitfire/cert4android/demo/MainActivity.kt index a05b71d..fbf33c6 100644 --- a/sample-app/src/main/java/at/bitfire/cert4android/demo/MainActivity.kt +++ b/sample-app/src/main/java/at/bitfire/cert4android/demo/MainActivity.kt @@ -55,7 +55,7 @@ class MainActivity : ComponentActivity() { ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.POST_NOTIFICATIONS), 0) setContent { - MaterialTheme { + Cert4Android.theme { Column(Modifier .padding(8.dp) .verticalScroll(rememberScrollState())) {