diff --git a/android/build.gradle.kts b/android/build.gradle.kts index 684f931f..ffdb907f 100644 --- a/android/build.gradle.kts +++ b/android/build.gradle.kts @@ -67,6 +67,7 @@ composeCompiler { licensee { allow("Apache-2.0") allow("MIT") + allow("BSD-3-Clause") ignoreDependencies("com.michael-bull.kotlin-result") { because("kotlin-result is ISC licensed") } ignoreDependencies("org.commonmark") { because("Commonmark is BSD licensed") } allowUrl("https://jsoup.org/license") { because("Jsoup is MIT licensed") } diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/BaseActivity.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/BaseActivity.kt index d92855e9..183d761c 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/BaseActivity.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/BaseActivity.kt @@ -8,7 +8,6 @@ package dev.msfjarvis.claw.android import android.app.assist.AssistContent import android.graphics.Color -import android.net.Uri import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.SystemBarStyle @@ -17,6 +16,7 @@ import androidx.activity.enableEdgeToEdge import androidx.compose.runtime.Composable import androidx.compose.runtime.Stable import androidx.compose.ui.platform.LocalUriHandler +import androidx.core.net.toUri import com.deliveryhero.whetstone.Whetstone import dev.msfjarvis.claw.android.viewmodel.ClawViewModel import dev.msfjarvis.claw.common.comments.HTMLConverter @@ -59,9 +59,10 @@ abstract class BaseActivity : ComponentActivity() { override fun onProvideAssistContent(outContent: AssistContent?) { super.onProvideAssistContent(outContent) + val uri = webUri if (outContent != null) { - if (webUri != null) { - outContent.webUri = Uri.parse(webUri) + if (uri != null) { + outContent.webUri = uri.toUri() } else { outContent.webUri = null } diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/glance/WidgetListEntry.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/glance/WidgetListEntry.kt index a9ea0c52..50a26420 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/glance/WidgetListEntry.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/glance/WidgetListEntry.kt @@ -7,10 +7,10 @@ package dev.msfjarvis.claw.android.glance import android.content.Intent -import android.net.Uri import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.unit.dp +import androidx.core.net.toUri import androidx.glance.GlanceComposable import androidx.glance.GlanceModifier import androidx.glance.GlanceTheme @@ -46,7 +46,7 @@ fun WidgetListEntry(post: UIPost, modifier: GlanceModifier = GlanceModifier) { // If the URL starts with a /, it's a relative URL and we should open the comments page directly. val postAction = if (post.url.startsWith('/')) commentsAction - else actionStartActivity(Intent(Intent.ACTION_VIEW, Uri.parse(post.url))) + else actionStartActivity(Intent(Intent.ACTION_VIEW, post.url.toUri())) Box(modifier.padding(8.dp)) { Row( verticalAlignment = Alignment.CenterVertically, diff --git a/build-logic/lint-baseline.xml b/build-logic/lint-baseline.xml index 24615278..6d710e20 100644 --- a/build-logic/lint-baseline.xml +++ b/build-logic/lint-baseline.xml @@ -1,5 +1,5 @@ - + { project.configureSlimTests() project.pluginManager.apply(AndroidCacheFixPlugin::class) project.extensions.configure { - compileSdkVersion(35) + compileSdkVersion(36) defaultConfig { minSdk = 26 - targetSdk = 35 + targetSdk = 36 } packagingOptions { diff --git a/common/src/main/kotlin/dev/msfjarvis/claw/common/urllauncher/UrlLauncher.kt b/common/src/main/kotlin/dev/msfjarvis/claw/common/urllauncher/UrlLauncher.kt index dbf7167c..00282459 100644 --- a/common/src/main/kotlin/dev/msfjarvis/claw/common/urllauncher/UrlLauncher.kt +++ b/common/src/main/kotlin/dev/msfjarvis/claw/common/urllauncher/UrlLauncher.kt @@ -8,11 +8,11 @@ package dev.msfjarvis.claw.common.urllauncher import android.content.ActivityNotFoundException import android.content.Context -import android.net.Uri import android.widget.Toast import androidx.browser.customtabs.CustomTabsIntent import androidx.compose.runtime.Stable import androidx.compose.ui.platform.UriHandler +import androidx.core.net.toUri import io.github.aakira.napier.Napier @Stable @@ -25,7 +25,7 @@ class UrlLauncher(private val context: Context) : UriHandler { .setColorScheme(CustomTabsIntent.COLOR_SCHEME_SYSTEM) .build() try { - customTabsIntent.launchUrl(context, Uri.parse(uri)) + customTabsIntent.launchUrl(context, uri.toUri()) } catch (e: ActivityNotFoundException) { val error = "Failed to open URL: $uri" Napier.d(throwable = e, tag = "UrlLauncher") { error } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8868ce1d..547bff7a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ aboutLibraries = "11.2.3" agp = "8.8.2" android-junit5 = "1.12.0.0" -androidx-test = "1.6.1" +androidx-test = "1.7.0-alpha01" benchmark = "1.4.0-alpha10" coil3 = "3.1.0" coroutines = "1.10.1" @@ -28,9 +28,9 @@ workmanager = "2.10.0" [libraries] aboutLibraries-m3 = { module = "com.mikepenz:aboutlibraries-compose-m3", version.ref = "aboutLibraries" } android-security-lints = "com.android.security.lint:lint:1.0.3" -androidx-activity-compose = "androidx.activity:activity-compose:1.10.1" +androidx-activity-compose = "androidx.activity:activity-compose:1.11.0-alpha02" androidx-benchmark-macro-junit4 = { module = "androidx.benchmark:benchmark-macro-junit4", version.ref = "benchmark" } -androidx-browser = "androidx.browser:browser:1.8.0" +androidx-browser = "androidx.browser:browser:1.9.0-alpha01" androidx-compose-animation = { module = "androidx.compose.animation:animation" } androidx-compose-bom = "androidx.compose:compose-bom-alpha:2025.03.01" androidx-compose-foundation = { module = "androidx.compose.foundation:foundation" } @@ -58,10 +58,10 @@ androidx-navigation-compose = { module = "androidx.navigation:navigation-compose androidx-paging-compose = "androidx.paging:paging-compose:3.3.6" androidx-profileinstaller = "androidx.profileinstaller:profileinstaller:1.4.1" androidx-test-core = { module = "androidx.test:core", version.ref = "androidx-test" } -androidx-test-espresso-core = "androidx.test.espresso:espresso-core:3.6.1" -androidx-test-ext-junit = "androidx.test.ext:junit:1.2.1" +androidx-test-espresso-core = "androidx.test.espresso:espresso-core:3.7.0-alpha01" +androidx-test-ext-junit = "androidx.test.ext:junit:1.3.0-alpha01" androidx-test-rules = { module = "androidx.test:rules", version.ref = "androidx-test" } -androidx-test-runner = "androidx.test:runner:1.6.2" +androidx-test-runner = { module = "androidx.test:runner", version.ref = "androidx-test" } androidx-test-uiautomator = "androidx.test.uiautomator:uiautomator:2.4.0-alpha01" androidx-work-runtime = { module = "androidx.work:work-runtime", version.ref = "workmanager" } build-agp = { module = "com.android.tools.build:gradle", version.ref = "agp" } @@ -70,7 +70,7 @@ build-kotlin-gradle = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", ve build-semver = "com.github.zafarkhaja:java-semver:0.10.2" build-sentry = "io.sentry.android.gradle:io.sentry.android.gradle.gradle.plugin:5.3.0" build-spotless = "com.diffplug.spotless:spotless-plugin-gradle:7.0.2" -build-vcu = "nl.littlerobots.version-catalog-update:nl.littlerobots.version-catalog-update.gradle.plugin:0.8.5" +build-vcu = "nl.littlerobots.version-catalog-update:nl.littlerobots.version-catalog-update.gradle.plugin:1.0.0" coil3 = { module = "io.coil-kt.coil3:coil", version.ref = "coil3" } coil3-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil3" } coil3-network-okhttp = { module = "io.coil-kt.coil3:coil-network-okhttp", version.ref = "coil3" }