Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 129cf63b authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[Spa] Migrate from deprecated ClickableText" into aosp-main-future

parents fd4b3677 24675c2e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ val androidTop: String = File(rootDir, "../../../../..").canonicalPath

allprojects {
    extra["androidTop"] = androidTop
    extra["jetpackComposeVersion"] = "1.7.0-alpha03"
    extra["jetpackComposeVersion"] = "1.7.0-alpha08"
}

subprojects {
+3 −3
Original line number Diff line number Diff line
@@ -53,17 +53,17 @@ android {

dependencies {
    api(project(":SettingsLibColor"))
    api("androidx.appcompat:appcompat:1.7.0-alpha03")
    api("androidx.appcompat:appcompat:1.7.0-beta01")
    api("androidx.slice:slice-builders:1.1.0-alpha02")
    api("androidx.slice:slice-core:1.1.0-alpha02")
    api("androidx.slice:slice-view:1.1.0-alpha02")
    api("androidx.compose.material3:material3:1.3.0-alpha01")
    api("androidx.compose.material3:material3:1.3.0-alpha06")
    api("androidx.compose.material:material-icons-extended:$jetpackComposeVersion")
    api("androidx.compose.runtime:runtime-livedata:$jetpackComposeVersion")
    api("androidx.compose.ui:ui-tooling-preview:$jetpackComposeVersion")
    api("androidx.lifecycle:lifecycle-livedata-ktx")
    api("androidx.lifecycle:lifecycle-runtime-compose")
    api("androidx.navigation:navigation-compose:2.8.0-alpha02")
    api("androidx.navigation:navigation-compose:2.8.0-alpha08")
    api("com.github.PhilJay:MPAndroidChart:v3.1.0-alpha")
    api("com.google.android.material:material:1.7.0-alpha03")
    debugApi("androidx.compose.ui:ui-tooling:$jetpackComposeVersion")
+5 −9
Original line number Diff line number Diff line
@@ -27,14 +27,13 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.LinkAnnotation
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextDecoration

const val URL_SPAN_TAG = "URL_SPAN_TAG"

@Composable
fun annotatedStringResource(@StringRes id: Int): AnnotatedString {
    val resources = LocalContext.current.resources
@@ -97,12 +96,9 @@ private fun AnnotatedString.Builder.addUrlSpan(
    start: Int,
    end: Int,
) {
    addStyle(
        SpanStyle(color = urlSpanColor, textDecoration = TextDecoration.Underline),
        start,
        end,
    val url = LinkAnnotation.Url(
        url = urlSpan.url,
        style = SpanStyle(color = urlSpanColor, textDecoration = TextDecoration.Underline),
    )
    if (!urlSpan.url.isNullOrEmpty()) {
        addStringAnnotation(URL_SPAN_TAG, urlSpan.url, start, end)
    }
    addLink(url, start, end)
}
+4 −13
Original line number Diff line number Diff line
@@ -17,26 +17,17 @@
package com.android.settingslib.spa.widget.ui

import androidx.annotation.StringRes
import androidx.compose.foundation.text.ClickableText
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalUriHandler
import com.android.settingslib.spa.framework.util.URL_SPAN_TAG
import com.android.settingslib.spa.framework.util.annotatedStringResource

@Composable
fun AnnotatedText(@StringRes id: Int) {
    val uriHandler = LocalUriHandler.current
    val annotatedString = annotatedStringResource(id)
    ClickableText(
        text = annotatedString,
    Text(
        text = annotatedStringResource(id),
        style = MaterialTheme.typography.bodyMedium.copy(
            color = MaterialTheme.colorScheme.onSurfaceVariant,
        ),
    ) { offset ->
        // Gets the url at the clicked position.
        annotatedString.getStringAnnotations(URL_SPAN_TAG, offset, offset)
            .firstOrNull()
            ?.let { uriHandler.openUri(it.item) }
    }
    )
}
+10 −12
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.settingslib.spa.framework.util
import androidx.compose.material3.MaterialTheme
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.LinkAnnotation
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.text.font.FontWeight
@@ -36,18 +37,23 @@ class AnnotatedStringResourceTest {
    val composeTestRule = createComposeRule()

    @Test
    fun testAnnotatedStringResource() {
    fun annotatedStringResource() {
        composeTestRule.setContent {
            val annotatedString =
                annotatedStringResource(R.string.test_annotated_string_resource)

            val annotations = annotatedString.getStringAnnotations(0, annotatedString.length)
            val annotations = annotatedString.getLinkAnnotations(0, annotatedString.length)
            assertThat(annotations).containsExactly(
                AnnotatedString.Range(
                    item = "https://www.android.com/",
                    item = LinkAnnotation.Url(
                        url = "https://www.android.com/",
                        style = SpanStyle(
                            color = MaterialTheme.colorScheme.primary,
                            textDecoration = TextDecoration.Underline,
                        ),
                    ),
                    start = 31,
                    end = 35,
                    tag = URL_SPAN_TAG,
                )
            )

@@ -57,14 +63,6 @@ class AnnotatedStringResourceTest {
                    start = 22,
                    end = 26,
                ),
                AnnotatedString.Range(
                    item = SpanStyle(
                        color = MaterialTheme.colorScheme.primary,
                        textDecoration = TextDecoration.Underline,
                    ),
                    start = 31,
                    end = 35,
                ),
            )
        }
    }