Loading packages/SettingsLib/Spa/build.gradle.kts +1 −1 Original line number Diff line number Diff line Loading @@ -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 { Loading packages/SettingsLib/Spa/spa/build.gradle.kts +3 −3 Original line number Diff line number Diff line Loading @@ -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") Loading packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/AnnotatedStringResource.kt +5 −9 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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) } packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/AnnotatedText.kt +4 −13 Original line number Diff line number Diff line Loading @@ -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) } } ) } packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/framework/util/AnnotatedStringResourceTest.kt +10 −12 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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, ) ) Loading @@ -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, ), ) } } Loading Loading
packages/SettingsLib/Spa/build.gradle.kts +1 −1 Original line number Diff line number Diff line Loading @@ -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 { Loading
packages/SettingsLib/Spa/spa/build.gradle.kts +3 −3 Original line number Diff line number Diff line Loading @@ -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") Loading
packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/AnnotatedStringResource.kt +5 −9 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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) }
packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/AnnotatedText.kt +4 −13 Original line number Diff line number Diff line Loading @@ -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) } } ) }
packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/framework/util/AnnotatedStringResourceTest.kt +10 −12 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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, ) ) Loading @@ -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, ), ) } } Loading