From bddbd83d6cd8ce72595afd1d645d3c63fbde56a9 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Tue, 1 Aug 2023 14:08:48 +1000 Subject: [PATCH 001/124] Upgrade to Compose 1.6 --- gradle.properties | 2 +- gradle/libs.versions.toml | 2 +- .../material/BottomSheetNavigator.kt | 36 ++----------------- 3 files changed, 4 insertions(+), 36 deletions(-) diff --git a/gradle.properties b/gradle.properties index ad5eb262a..f54694bfb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -33,7 +33,7 @@ systemProp.org.gradle.internal.http.socketTimeout=120000 GROUP=com.google.accompanist # !! No longer need to update this manually when using a Compose SNAPSHOT -VERSION_NAME=0.31.7-SNAPSHOT +VERSION_NAME=0.33.0-alpha POM_DESCRIPTION=Utilities for Jetpack Compose diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 40c881d60..ed39ece04 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] -compose = "1.5.0-rc01" +compose = "1.6.0-alpha02" composeCompiler = "1.5.1" composeMaterial3 = "1.0.1" composesnapshot = "-" # a single character = no snapshot diff --git a/navigation-material/src/main/java/com/google/accompanist/navigation/material/BottomSheetNavigator.kt b/navigation-material/src/main/java/com/google/accompanist/navigation/material/BottomSheetNavigator.kt index 17fe4406c..b2049034a 100644 --- a/navigation-material/src/main/java/com/google/accompanist/navigation/material/BottomSheetNavigator.kt +++ b/navigation-material/src/main/java/com/google/accompanist/navigation/material/BottomSheetNavigator.kt @@ -18,17 +18,15 @@ package com.google.accompanist.navigation.material import android.annotation.SuppressLint import androidx.compose.animation.core.AnimationSpec +import androidx.compose.animation.core.tween import androidx.compose.foundation.layout.ColumnScope import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.material.ModalBottomSheetState import androidx.compose.material.ModalBottomSheetValue -import androidx.compose.material.SwipeProgress -import androidx.compose.material.SwipeableDefaults import androidx.compose.material.rememberModalBottomSheetState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.Stable -import androidx.compose.runtime.State import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -74,36 +72,6 @@ public class BottomSheetNavigatorSheetState(internal val sheetState: ModalBottom */ public val targetValue: ModalBottomSheetValue get() = sheetState.targetValue - - /** - * @see ModalBottomSheetState.offset - */ - @Deprecated( - message = "BottomSheetNavigatorSheetState#offset has been removed", - level = DeprecationLevel.ERROR - ) - public val offset: State - get() = error("BottomSheetNavigatorSheetState#offset has been removed") - - /** - * @see ModalBottomSheetState.direction - */ - @Deprecated( - message = "BottomSheetNavigatorSheetState#direction has been removed", - level = DeprecationLevel.ERROR - ) - public val direction: Float - get() = error("BottomSheetNavigatorSheetState#direction has been removed.") - - /** - * @see ModalBottomSheetState.progress - */ - @Deprecated( - message = "BottomSheetNavigatorSheetState#progress has been removed", - level = DeprecationLevel.ERROR - ) - public val progress: SwipeProgress - get() = error("BottomSheetNavigatorSheetState#progress has been removed") } /** @@ -113,7 +81,7 @@ public class BottomSheetNavigatorSheetState(internal val sheetState: ModalBottom @OptIn(ExperimentalMaterialApi::class) @Composable public fun rememberBottomSheetNavigator( - animationSpec: AnimationSpec = SwipeableDefaults.AnimationSpec + animationSpec: AnimationSpec = tween() ): BottomSheetNavigator { val sheetState = rememberModalBottomSheetState( ModalBottomSheetValue.Hidden, From 0bb0fe7bca8a28790c3cb152f2317e4285628706 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Tue, 1 Aug 2023 16:02:34 +1000 Subject: [PATCH 002/124] Update API --- navigation-material/api/current.api | 6 ------ 1 file changed, 6 deletions(-) diff --git a/navigation-material/api/current.api b/navigation-material/api/current.api index 1adf995f0..55af88504 100644 --- a/navigation-material/api/current.api +++ b/navigation-material/api/current.api @@ -25,16 +25,10 @@ package com.google.accompanist.navigation.material { @androidx.compose.runtime.Stable @com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi public final class BottomSheetNavigatorSheetState { ctor public BottomSheetNavigatorSheetState(androidx.compose.material.ModalBottomSheetState sheetState); method public androidx.compose.material.ModalBottomSheetValue getCurrentValue(); - method @Deprecated public float getDirection(); - method @Deprecated public androidx.compose.runtime.State getOffset(); - method @Deprecated public androidx.compose.material.SwipeProgress getProgress(); method public androidx.compose.material.ModalBottomSheetValue getTargetValue(); method public boolean isVisible(); property public final androidx.compose.material.ModalBottomSheetValue currentValue; - property @Deprecated public final float direction; property public final boolean isVisible; - property @Deprecated public final androidx.compose.runtime.State offset; - property @Deprecated public final androidx.compose.material.SwipeProgress progress; property public final androidx.compose.material.ModalBottomSheetValue targetValue; } From de1249ba23d933e51068334ed191113ebb54200f Mon Sep 17 00:00:00 2001 From: Jossi Wolf Date: Tue, 1 Aug 2023 11:55:19 +0100 Subject: [PATCH 003/124] Use SpringSpec for ModalBottomSheetState --- .../accompanist/navigation/material/BottomSheetNavigator.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/navigation-material/src/main/java/com/google/accompanist/navigation/material/BottomSheetNavigator.kt b/navigation-material/src/main/java/com/google/accompanist/navigation/material/BottomSheetNavigator.kt index b2049034a..b14685efa 100644 --- a/navigation-material/src/main/java/com/google/accompanist/navigation/material/BottomSheetNavigator.kt +++ b/navigation-material/src/main/java/com/google/accompanist/navigation/material/BottomSheetNavigator.kt @@ -18,7 +18,7 @@ package com.google.accompanist.navigation.material import android.annotation.SuppressLint import androidx.compose.animation.core.AnimationSpec -import androidx.compose.animation.core.tween +import androidx.compose.animation.core.SpringSpec import androidx.compose.foundation.layout.ColumnScope import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.material.ModalBottomSheetState @@ -81,7 +81,7 @@ public class BottomSheetNavigatorSheetState(internal val sheetState: ModalBottom @OptIn(ExperimentalMaterialApi::class) @Composable public fun rememberBottomSheetNavigator( - animationSpec: AnimationSpec = tween() + animationSpec: AnimationSpec = SpringSpec() ): BottomSheetNavigator { val sheetState = rememberModalBottomSheetState( ModalBottomSheetValue.Hidden, From 5a189cc796385071e10907cf1e271e4a50444b2b Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Mon, 7 Aug 2023 11:00:32 +1000 Subject: [PATCH 004/124] Deprecate insets-ui --- .../accompanist/insets/ui/BottomNavigation.kt | 23 +++++++++++++++++++ .../google/accompanist/insets/ui/Scaffold.kt | 7 ++++++ .../google/accompanist/insets/ui/TopAppBar.kt | 23 +++++++++++++++++++ .../google/accompanist/insets/ScaffoldTest.kt | 2 ++ 4 files changed, 55 insertions(+) diff --git a/insets-ui/src/main/java/com/google/accompanist/insets/ui/BottomNavigation.kt b/insets-ui/src/main/java/com/google/accompanist/insets/ui/BottomNavigation.kt index ffdb020f6..442aa5130 100644 --- a/insets-ui/src/main/java/com/google/accompanist/insets/ui/BottomNavigation.kt +++ b/insets-ui/src/main/java/com/google/accompanist/insets/ui/BottomNavigation.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.insets.ui import androidx.compose.foundation.layout.Arrangement @@ -45,6 +47,13 @@ import androidx.compose.ui.unit.dp * * @sample com.google.accompanist.sample.insets.BottomNavigation_Insets */ +@Deprecated( + """ + accompanist/insets-ui has been deprecated. + This functionality has been upstreamed to Material. + For more migration information, please visit https://google.github.io/accompanist/insets/#migration + """ +) @Composable public fun BottomNavigation( modifier: Modifier = Modifier, @@ -61,6 +70,13 @@ public fun BottomNavigation( } } +@Deprecated( + """ + accompanist/insets-ui has been deprecated. + This functionality has been upstreamed to Material. + For more migration information, please visit https://google.github.io/accompanist/insets/#migration + """ +) @Composable public fun BottomNavigationSurface( modifier: Modifier = Modifier, @@ -79,6 +95,13 @@ public fun BottomNavigationSurface( } } +@Deprecated( + """ + accompanist/insets-ui has been deprecated. + This functionality has been upstreamed to Material. + For more migration information, please visit https://google.github.io/accompanist/insets/#migration + """ +) @Composable public fun BottomNavigationContent( modifier: Modifier = Modifier, diff --git a/insets-ui/src/main/java/com/google/accompanist/insets/ui/Scaffold.kt b/insets-ui/src/main/java/com/google/accompanist/insets/ui/Scaffold.kt index aeee5f8c8..8390d3128 100644 --- a/insets-ui/src/main/java/com/google/accompanist/insets/ui/Scaffold.kt +++ b/insets-ui/src/main/java/com/google/accompanist/insets/ui/Scaffold.kt @@ -104,6 +104,13 @@ public val LocalScaffoldPadding: ProvidableCompositionLocal = * you're using VerticalScroller, apply this modifier to the child of the scroller, and not on * the scroller itself. */ +@Deprecated( + """ + accompanist/insets-ui has been deprecated. + This functionality has been upstreamed to Material. + For more migration information, please visit https://google.github.io/accompanist/insets/#migration + """ +) @Composable public fun Scaffold( modifier: Modifier = Modifier, diff --git a/insets-ui/src/main/java/com/google/accompanist/insets/ui/TopAppBar.kt b/insets-ui/src/main/java/com/google/accompanist/insets/ui/TopAppBar.kt index 1822e924f..d1bce921c 100644 --- a/insets-ui/src/main/java/com/google/accompanist/insets/ui/TopAppBar.kt +++ b/insets-ui/src/main/java/com/google/accompanist/insets/ui/TopAppBar.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.insets.ui import androidx.compose.foundation.layout.PaddingValues @@ -40,6 +42,13 @@ import androidx.compose.ui.unit.dp * * @sample com.google.accompanist.sample.insets.TopAppBar_Insets */ +@Deprecated( + """ + accompanist/insets-ui has been deprecated. + This functionality has been upstreamed to Material. + For more migration information, please visit https://google.github.io/accompanist/insets/#migration + """ +) @Composable public fun TopAppBar( title: @Composable () -> Unit, @@ -66,6 +75,13 @@ public fun TopAppBar( } } +@Deprecated( + """ + accompanist/insets-ui has been deprecated. + This functionality has been upstreamed to Material. + For more migration information, please visit https://google.github.io/accompanist/insets/#migration + """ +) @Composable public fun TopAppBarSurface( modifier: Modifier = Modifier, @@ -83,6 +99,13 @@ public fun TopAppBarSurface( ) } +@Deprecated( + """ + accompanist/insets-ui has been deprecated. + This functionality has been upstreamed to Material. + For more migration information, please visit https://google.github.io/accompanist/insets/#migration + """ +) @Composable public fun TopAppBarContent( title: @Composable () -> Unit, diff --git a/insets-ui/src/sharedTest/kotlin/com/google/accompanist/insets/ScaffoldTest.kt b/insets-ui/src/sharedTest/kotlin/com/google/accompanist/insets/ScaffoldTest.kt index 3c5ddf0cf..b61ef61dc 100644 --- a/insets-ui/src/sharedTest/kotlin/com/google/accompanist/insets/ScaffoldTest.kt +++ b/insets-ui/src/sharedTest/kotlin/com/google/accompanist/insets/ScaffoldTest.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.insets import android.os.Build From 564f2ba72171737ca7f82bb16555014d98d8cfe1 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Mon, 7 Aug 2023 11:06:52 +1000 Subject: [PATCH 005/124] Update docs --- docs/insets.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/insets.md b/docs/insets.md index a74bc03f7..6f8a9f0b4 100644 --- a/docs/insets.md +++ b/docs/insets.md @@ -202,6 +202,9 @@ For a more complex example, see the [`EdgeToEdgeLazyColumn`](https://github.com/ ## Inset-aware layouts (`insets-ui`) +!!! warning + **This library is deprecated, with [official support](https://android-review.git.corp.google.com/c/platform/frameworks/support/+/2667875) in androidx.compose.material.** The original documentation is below. + Unfortunately, most of Compose Material's layouts do not support the use of content padding, which means that the following code probably doesn't produce the effect you want: ``` kotlin From d07d37accc87ac4aa43f37367b2756c40f10698e Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Tue, 8 Aug 2023 08:59:27 +1000 Subject: [PATCH 006/124] Update gradle.properties Prepare for next release --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index f54694bfb..86ae52c54 100644 --- a/gradle.properties +++ b/gradle.properties @@ -33,7 +33,7 @@ systemProp.org.gradle.internal.http.socketTimeout=120000 GROUP=com.google.accompanist # !! No longer need to update this manually when using a Compose SNAPSHOT -VERSION_NAME=0.33.0-alpha +VERSION_NAME=0.33.1-SNAPSHOT POM_DESCRIPTION=Utilities for Jetpack Compose From 57a87e2c2479393be9031ac3a8b9d28d5cc75810 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Tue, 8 Aug 2023 10:55:20 +1000 Subject: [PATCH 007/124] Update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 85a87be67..33ab88c44 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,10 @@ Each [release](https://github.com/google/accompanist/releases) outlines what ver Compose UI 1.4 (1.4.x)Maven Central - Compose UI 1.5 (1.5.x)Maven Central + Compose UI 1.5 (1.5.x)Maven Central + + + Compose UI 1.6 (1.6.x)Maven Central From 6961dd5606c0e04eec5bf642217cc45923243ad6 Mon Sep 17 00:00:00 2001 From: Maxime Date: Wed, 12 Jul 2023 17:33:57 +0200 Subject: [PATCH 008/124] =?UTF-8?q?=E2=9C=A8=20Expose=20the=20postUrl=20fu?= =?UTF-8?q?nction=20via=20the=20WebView=20Composable?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/google/accompanist/web/WebView.kt | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/web/src/main/java/com/google/accompanist/web/WebView.kt b/web/src/main/java/com/google/accompanist/web/WebView.kt index 26de6b07f..0ae62b205 100644 --- a/web/src/main/java/com/google/accompanist/web/WebView.kt +++ b/web/src/main/java/com/google/accompanist/web/WebView.kt @@ -193,6 +193,13 @@ public fun WebView( ) } + is WebContent.Post -> { + wv.postUrl( + content.url, + content.postData + ) + } + is WebContent.NavigatorOnly -> { // NO-OP } @@ -322,11 +329,35 @@ public sealed class WebContent { val historyUrl: String? = null ) : WebContent() + data class Post( + val url: String, + val postData: ByteArray + ) : WebContent() { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as Post + + if (url != other.url) return false + if (!postData.contentEquals(other.postData)) return false + + return true + } + + override fun hashCode(): Int { + var result = url.hashCode() + result = 31 * result + postData.contentHashCode() + return result + } + } + @Deprecated("Use state.lastLoadedUrl instead") public fun getCurrentUrl(): String? { return when (this) { is Url -> url is Data -> baseUrl + is Post -> url is NavigatorOnly -> throw IllegalStateException("Unsupported") } } @@ -446,6 +477,29 @@ public class WebViewNavigator(private val coroutineScope: CoroutineScope) { val encoding: String? = "utf-8", val historyUrl: String? = null ) : NavigationEvent + + data class PostUrl( + val url: String, + val postData: ByteArray + ) : NavigationEvent { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as PostUrl + + if (url != other.url) return false + if (!postData.contentEquals(other.postData)) return false + + return true + } + + override fun hashCode(): Int { + var result = url.hashCode() + result = 31 * result + postData.contentHashCode() + return result + } + } } private val navigationEvents: MutableSharedFlow = MutableSharedFlow(replay = 1) @@ -469,6 +523,10 @@ public class WebViewNavigator(private val coroutineScope: CoroutineScope) { is NavigationEvent.LoadUrl -> { loadUrl(event.url, event.additionalHttpHeaders) } + + is NavigationEvent.PostUrl -> { + postUrl(event.url, event.postData) + } } } } @@ -516,6 +574,20 @@ public class WebViewNavigator(private val coroutineScope: CoroutineScope) { } } + fun postUrl( + url: String, + postData: ByteArray + ) { + coroutineScope.launch { + navigationEvents.emit( + NavigationEvent.PostUrl( + url, + postData + ) + ) + } + } + /** * Navigates the webview back to the previous page. */ @@ -618,6 +690,33 @@ public fun rememberWebViewStateWithHTMLData( ) } +/** + * Creates a WebView state that is remembered across Compositions. + * + * @param url The url to load in the WebView + * @param postData The data to be posted to the WebView with the url + */ +@Composable +fun rememberWebViewState( + url: String, + postData: ByteArray +): WebViewState = +// Rather than using .apply {} here we will recreate the state, this prevents + // a recomposition loop when the webview updates the url itself. + remember { + WebViewState( + WebContent.Post( + url = url, + postData = postData + ) + ) + }.apply { + this.content = WebContent.Post( + url = url, + postData = postData + ) + } + /** * Creates a WebView state that is remembered across Compositions and saved * across activity recreation. From f6c1b1631dbfadbfcdf4316db2b78b9c7ecdcc97 Mon Sep 17 00:00:00 2001 From: Maxime Date: Mon, 7 Aug 2023 12:06:37 +0200 Subject: [PATCH 009/124] :white_check_mark: Add PostUrl test --- .../com/google/accompanist/web/WebTest.kt | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/web/src/androidTest/kotlin/com/google/accompanist/web/WebTest.kt b/web/src/androidTest/kotlin/com/google/accompanist/web/WebTest.kt index 5b7fbfb3f..a256d2f0f 100644 --- a/web/src/androidTest/kotlin/com/google/accompanist/web/WebTest.kt +++ b/web/src/androidTest/kotlin/com/google/accompanist/web/WebTest.kt @@ -170,6 +170,26 @@ class WebTest { .check(webMatches(getText(), containsString("Test content"))) } + @Test + fun testPostUrlLoaded() { + lateinit var state: WebViewState + + rule.setContent { + state = rememberWebViewState( + url = LINK_URL, + postData = "postData".toByteArray() + ) + WebTestContent( + state, + idleResource + ) + } + + onWebView() + .withElement(findElement(Locator.ID, "content")) + .check(webMatches(getText(), containsString("Test content"))) + } + @Test fun testStateUpdated() { lateinit var state: WebViewState From d7e61b6ee60856baa08db074ffc854f6ba2547c2 Mon Sep 17 00:00:00 2001 From: Maxime Date: Tue, 8 Aug 2023 16:59:06 +0200 Subject: [PATCH 010/124] :bug: Fix missing public identifiers --- web/src/main/java/com/google/accompanist/web/WebView.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web/src/main/java/com/google/accompanist/web/WebView.kt b/web/src/main/java/com/google/accompanist/web/WebView.kt index 0ae62b205..7dc83be7a 100644 --- a/web/src/main/java/com/google/accompanist/web/WebView.kt +++ b/web/src/main/java/com/google/accompanist/web/WebView.kt @@ -329,7 +329,7 @@ public sealed class WebContent { val historyUrl: String? = null ) : WebContent() - data class Post( + public data class Post( val url: String, val postData: ByteArray ) : WebContent() { @@ -574,7 +574,7 @@ public class WebViewNavigator(private val coroutineScope: CoroutineScope) { } } - fun postUrl( + public fun postUrl( url: String, postData: ByteArray ) { @@ -697,7 +697,7 @@ public fun rememberWebViewStateWithHTMLData( * @param postData The data to be posted to the WebView with the url */ @Composable -fun rememberWebViewState( +public fun rememberWebViewState( url: String, postData: ByteArray ): WebViewState = From 71f375624b226be5ac9e1311fa4dd6122dde93c0 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Mon, 21 Aug 2023 18:49:15 +1000 Subject: [PATCH 011/124] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 33ab88c44..fa9b178ad 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ Each [release](https://github.com/google/accompanist/releases) outlines what ver Compose UI 1.4 (1.4.x)Maven Central - Compose UI 1.5 (1.5.x)Maven Central + Compose UI 1.5 (1.5.x)Maven Central Compose UI 1.6 (1.6.x)Maven Central From 7b344027fc42db6ed5daec078906787168e37dce Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Wed, 23 Aug 2023 09:47:33 +1000 Subject: [PATCH 012/124] Remove napier --- adaptive/build.gradle.kts | 3 +-- gradle/libs.versions.toml | 2 -- pager/build.gradle.kts | 1 - .../java/com/google/accompanist/pager/PagerState.kt | 11 ----------- permissions/build.gradle.kts | 1 - placeholder-material/build.gradle.kts | 2 +- placeholder-material3/build.gradle.kts | 1 - placeholder/build.gradle.kts | 1 - testharness/build.gradle.kts | 1 - 9 files changed, 2 insertions(+), 21 deletions(-) diff --git a/adaptive/build.gradle.kts b/adaptive/build.gradle.kts index 1f3d5a4a9..f402a741a 100644 --- a/adaptive/build.gradle.kts +++ b/adaptive/build.gradle.kts @@ -97,8 +97,7 @@ dependencies { api(libs.compose.foundation.foundation) api(libs.compose.ui.ui) api(libs.androidx.window) - - implementation(libs.napier) + implementation(libs.kotlin.coroutines.android) implementation(libs.compose.ui.util) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ed39ece04..8f9f00b20 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -80,8 +80,6 @@ androidx-navigation-testing = { module = "androidx.navigation:navigation-testing mdc = "com.google.android.material:material:1.8.0" -napier = "io.github.aakira:napier:1.4.1" - androidx-test-core = "androidx.test:core-ktx:1.5.0-alpha02" androidx-test-runner = "androidx.test:runner:1.5.0-alpha04" androidx-test-rules = { module = "androidx.test:rules", version.ref = "androidxtest" } diff --git a/pager/build.gradle.kts b/pager/build.gradle.kts index 1f3ab7ddf..a9a64aff0 100644 --- a/pager/build.gradle.kts +++ b/pager/build.gradle.kts @@ -98,7 +98,6 @@ dependencies { api(libs.compose.foundation.foundation) api(libs.snapper) - implementation(libs.napier) implementation(libs.kotlin.coroutines.android) // ====================== diff --git a/pager/src/main/java/com/google/accompanist/pager/PagerState.kt b/pager/src/main/java/com/google/accompanist/pager/PagerState.kt index 5b6ce3ad4..cf28028f6 100644 --- a/pager/src/main/java/com/google/accompanist/pager/PagerState.kt +++ b/pager/src/main/java/com/google/accompanist/pager/PagerState.kt @@ -37,8 +37,6 @@ import androidx.compose.runtime.saveable.Saver import androidx.compose.runtime.saveable.listSaver import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue -import io.github.aakira.napier.DebugAntilog -import io.github.aakira.napier.Napier import kotlin.math.abs import kotlin.math.absoluteValue import kotlin.math.roundToInt @@ -149,9 +147,6 @@ public class PagerState( internal set(value) { if (value != _currentPage) { _currentPage = value - if (DebugLog) { - Napier.d(message = "Current page changed: $_currentPage") - } } } @@ -379,11 +374,5 @@ public class PagerState( ) } ) - - init { - if (DebugLog) { - Napier.base(DebugAntilog(defaultTag = "Pager")) - } - } } } diff --git a/permissions/build.gradle.kts b/permissions/build.gradle.kts index f38974648..26dc1bb5a 100644 --- a/permissions/build.gradle.kts +++ b/permissions/build.gradle.kts @@ -93,7 +93,6 @@ dependencies { implementation(libs.androidx.activity.compose) implementation(libs.compose.foundation.foundation) implementation(libs.kotlin.coroutines.android) - implementation(libs.napier) lintChecks(project(":permissions-lint")) lintPublish(project(":permissions-lint")) diff --git a/placeholder-material/build.gradle.kts b/placeholder-material/build.gradle.kts index afa5eeb49..32f712cc4 100644 --- a/placeholder-material/build.gradle.kts +++ b/placeholder-material/build.gradle.kts @@ -86,7 +86,7 @@ metalava { dependencies { implementation(libs.compose.material.material) api(project(":placeholder")) - implementation(libs.napier) + implementation(libs.kotlin.coroutines.android) // ====================== diff --git a/placeholder-material3/build.gradle.kts b/placeholder-material3/build.gradle.kts index 2e9fbc359..45ab465cb 100644 --- a/placeholder-material3/build.gradle.kts +++ b/placeholder-material3/build.gradle.kts @@ -86,7 +86,6 @@ metalava { dependencies { implementation(libs.compose.material3.material3) api(project(":placeholder")) - implementation(libs.napier) implementation(libs.kotlin.coroutines.android) // ====================== diff --git a/placeholder/build.gradle.kts b/placeholder/build.gradle.kts index 213a512b6..c475e78d1 100644 --- a/placeholder/build.gradle.kts +++ b/placeholder/build.gradle.kts @@ -101,7 +101,6 @@ metalava { dependencies { implementation(libs.compose.foundation.foundation) implementation(libs.compose.ui.util) - implementation(libs.napier) implementation(libs.kotlin.coroutines.android) // ====================== diff --git a/testharness/build.gradle.kts b/testharness/build.gradle.kts index aaf90d04c..bd28d652e 100644 --- a/testharness/build.gradle.kts +++ b/testharness/build.gradle.kts @@ -109,7 +109,6 @@ dependencies { implementation(libs.compose.foundation.foundation) implementation(libs.androidx.core) testImplementation(libs.androidx.core) - implementation(libs.napier) implementation(libs.kotlin.coroutines.android) // ====================== From e85431f1e166e19309e595eb252bb92406fc5129 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Thu, 24 Aug 2023 11:37:06 +1000 Subject: [PATCH 013/124] Deprecate webview --- .../sample/webview/BasicWebViewSample.kt | 2 + .../sample/webview/WebViewSaveStateSample.kt | 2 + .../webview/WrappedContentWebViewSample.kt | 2 + .../com/google/accompanist/web/WebTest.kt | 2 + .../com/google/accompanist/web/WebView.kt | 79 +++++++++++++++++++ 5 files changed, 87 insertions(+) diff --git a/sample/src/main/java/com/google/accompanist/sample/webview/BasicWebViewSample.kt b/sample/src/main/java/com/google/accompanist/sample/webview/BasicWebViewSample.kt index 1be89d49d..a47fc1fa8 100644 --- a/sample/src/main/java/com/google/accompanist/sample/webview/BasicWebViewSample.kt +++ b/sample/src/main/java/com/google/accompanist/sample/webview/BasicWebViewSample.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.sample.webview import android.annotation.SuppressLint diff --git a/sample/src/main/java/com/google/accompanist/sample/webview/WebViewSaveStateSample.kt b/sample/src/main/java/com/google/accompanist/sample/webview/WebViewSaveStateSample.kt index dcfba3b75..a8656c7c2 100644 --- a/sample/src/main/java/com/google/accompanist/sample/webview/WebViewSaveStateSample.kt +++ b/sample/src/main/java/com/google/accompanist/sample/webview/WebViewSaveStateSample.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.sample.webview import android.os.Bundle diff --git a/sample/src/main/java/com/google/accompanist/sample/webview/WrappedContentWebViewSample.kt b/sample/src/main/java/com/google/accompanist/sample/webview/WrappedContentWebViewSample.kt index 25c945ad8..f2ac4b743 100644 --- a/sample/src/main/java/com/google/accompanist/sample/webview/WrappedContentWebViewSample.kt +++ b/sample/src/main/java/com/google/accompanist/sample/webview/WrappedContentWebViewSample.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.sample.webview import android.os.Bundle diff --git a/web/src/androidTest/kotlin/com/google/accompanist/web/WebTest.kt b/web/src/androidTest/kotlin/com/google/accompanist/web/WebTest.kt index a256d2f0f..1d0849220 100644 --- a/web/src/androidTest/kotlin/com/google/accompanist/web/WebTest.kt +++ b/web/src/androidTest/kotlin/com/google/accompanist/web/WebTest.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.web import android.content.Context diff --git a/web/src/main/java/com/google/accompanist/web/WebView.kt b/web/src/main/java/com/google/accompanist/web/WebView.kt index 7dc83be7a..13ec0fa34 100644 --- a/web/src/main/java/com/google/accompanist/web/WebView.kt +++ b/web/src/main/java/com/google/accompanist/web/WebView.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.web import android.content.Context @@ -78,6 +80,13 @@ import kotlinx.coroutines.withContext * @param factory An optional WebView factory for using a custom subclass of WebView * @sample com.google.accompanist.sample.webview.BasicWebViewSample */ +@Deprecated( + """ +accompanist/web is deprecated and the API is no longer maintained. +We recommend forking the implementation and customising it to your needs. +For more information please visit https://google.github.io/accompanist/web +""" +) @Composable public fun WebView( state: WebViewState, @@ -374,6 +383,13 @@ internal fun WebContent.withUrl(url: String) = when (this) { * Sealed class for constraining possible loading states. * See [Loading] and [Finished]. */ +@Deprecated( + """ +accompanist/web is deprecated and the API is no longer maintained. +We recommend forking the implementation and customising it to your needs. +For more information please visit https://google.github.io/accompanist/web +""" +) public sealed class LoadingState { /** * Describes a WebView that has not yet loaded for the first time. @@ -396,6 +412,13 @@ public sealed class LoadingState { * A state holder to hold the state for the WebView. In most cases this will be remembered * using the rememberWebViewState(uri) function. */ +@Deprecated( + """ +accompanist/web is deprecated and the API is no longer maintained. +We recommend forking the implementation and customising it to your needs. +For more information please visit https://google.github.io/accompanist/web +""" +) @Stable public class WebViewState(webContent: WebContent) { public var lastLoadedUrl: String? by mutableStateOf(null) @@ -458,6 +481,13 @@ public class WebViewState(webContent: WebContent) { * @see [rememberWebViewNavigator] */ @Stable +@Deprecated( + """ +accompanist/web is deprecated and the API is no longer maintained. +We recommend forking the implementation and customising it to your needs. +For more information please visit https://google.github.io/accompanist/web +""" +) public class WebViewNavigator(private val coroutineScope: CoroutineScope) { private sealed interface NavigationEvent { object Back : NavigationEvent @@ -622,6 +652,13 @@ public class WebViewNavigator(private val coroutineScope: CoroutineScope) { * override. */ @Composable +@Deprecated( + """ +accompanist/web is deprecated and the API is no longer maintained. +We recommend forking the implementation and customising it to your needs. +For more information please visit https://google.github.io/accompanist/web +""" +) public fun rememberWebViewNavigator( coroutineScope: CoroutineScope = rememberCoroutineScope() ): WebViewNavigator = remember(coroutineScope) { WebViewNavigator(coroutineScope) } @@ -630,6 +667,13 @@ public fun rememberWebViewNavigator( * A wrapper class to hold errors from the WebView. */ @Immutable +@Deprecated( + """ +accompanist/web is deprecated and the API is no longer maintained. +We recommend forking the implementation and customising it to your needs. +For more information please visit https://google.github.io/accompanist/web +""" +) public data class WebViewError( /** * The request the error came from. @@ -649,6 +693,13 @@ public data class WebViewError( * Note that these headers are used for all subsequent requests of the WebView. */ @Composable +@Deprecated( + """ +accompanist/web is deprecated and the API is no longer maintained. +We recommend forking the implementation and customising it to your needs. +For more information please visit https://google.github.io/accompanist/web +""" +) public fun rememberWebViewState( url: String, additionalHttpHeaders: Map = emptyMap() @@ -675,6 +726,13 @@ public fun rememberWebViewState( * @param data The uri to load in the WebView */ @Composable +@Deprecated( + """ +accompanist/web is deprecated and the API is no longer maintained. +We recommend forking the implementation and customising it to your needs. +For more information please visit https://google.github.io/accompanist/web +""" +) public fun rememberWebViewStateWithHTMLData( data: String, baseUrl: String? = null, @@ -697,6 +755,13 @@ public fun rememberWebViewStateWithHTMLData( * @param postData The data to be posted to the WebView with the url */ @Composable +@Deprecated( + """ +accompanist/web is deprecated and the API is no longer maintained. +We recommend forking the implementation and customising it to your needs. +For more information please visit https://google.github.io/accompanist/web +""" +) public fun rememberWebViewState( url: String, postData: ByteArray @@ -727,11 +792,25 @@ public fun rememberWebViewState( * @sample com.google.accompanist.sample.webview.WebViewSaveStateSample */ @Composable +@Deprecated( + """ +accompanist/web is deprecated and the API is no longer maintained. +We recommend forking the implementation and customising it to your needs. +For more information please visit https://google.github.io/accompanist/web +""" +) public fun rememberSaveableWebViewState(): WebViewState = rememberSaveable(saver = WebStateSaver) { WebViewState(WebContent.NavigatorOnly) } +@Deprecated( + """ +accompanist/web is deprecated and the API is no longer maintained. +We recommend forking the implementation and customising it to your needs. +For more information please visit https://google.github.io/accompanist/web +""" +) public val WebStateSaver: Saver = run { val pageTitleKey = "pagetitle" val lastLoadedUrlKey = "lastloaded" From 4a1b40134c8ebcd84b0a738573d85360bf2a3d2c Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Thu, 24 Aug 2023 15:18:21 +1000 Subject: [PATCH 014/124] Deprecate SystemUIController --- .../DialogSystemBarsColorSample.kt | 2 ++ .../sample/systemuicontroller/DocsSamples.kt | 2 ++ .../systemuicontroller/SystemBarsColorSample.kt | 2 ++ .../SystemBarsVisibilitySample.kt | 2 ++ .../systemuicontroller/SystemUiController.kt | 16 ++++++++++++++++ .../ActivityRememberSystemUiControllerTest.kt | 2 ++ .../ActivitySystemUiControllerTest.kt | 2 ++ .../DialogRememberSystemUiControllerTest.kt | 2 ++ .../DialogSystemUiControllerTest.kt | 2 ++ 9 files changed, 32 insertions(+) diff --git a/sample/src/main/java/com/google/accompanist/sample/systemuicontroller/DialogSystemBarsColorSample.kt b/sample/src/main/java/com/google/accompanist/sample/systemuicontroller/DialogSystemBarsColorSample.kt index 9601fadac..d1006cf4a 100644 --- a/sample/src/main/java/com/google/accompanist/sample/systemuicontroller/DialogSystemBarsColorSample.kt +++ b/sample/src/main/java/com/google/accompanist/sample/systemuicontroller/DialogSystemBarsColorSample.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.sample.systemuicontroller import android.os.Bundle diff --git a/sample/src/main/java/com/google/accompanist/sample/systemuicontroller/DocsSamples.kt b/sample/src/main/java/com/google/accompanist/sample/systemuicontroller/DocsSamples.kt index ad51f9c5b..3ffb7df9b 100644 --- a/sample/src/main/java/com/google/accompanist/sample/systemuicontroller/DocsSamples.kt +++ b/sample/src/main/java/com/google/accompanist/sample/systemuicontroller/DocsSamples.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.sample.systemuicontroller import androidx.compose.foundation.isSystemInDarkTheme diff --git a/sample/src/main/java/com/google/accompanist/sample/systemuicontroller/SystemBarsColorSample.kt b/sample/src/main/java/com/google/accompanist/sample/systemuicontroller/SystemBarsColorSample.kt index 0b4b5226b..cec918c54 100644 --- a/sample/src/main/java/com/google/accompanist/sample/systemuicontroller/SystemBarsColorSample.kt +++ b/sample/src/main/java/com/google/accompanist/sample/systemuicontroller/SystemBarsColorSample.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.sample.systemuicontroller import android.os.Bundle diff --git a/sample/src/main/java/com/google/accompanist/sample/systemuicontroller/SystemBarsVisibilitySample.kt b/sample/src/main/java/com/google/accompanist/sample/systemuicontroller/SystemBarsVisibilitySample.kt index ee0370d69..287b93090 100644 --- a/sample/src/main/java/com/google/accompanist/sample/systemuicontroller/SystemBarsVisibilitySample.kt +++ b/sample/src/main/java/com/google/accompanist/sample/systemuicontroller/SystemBarsVisibilitySample.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.sample.systemuicontroller import android.os.Bundle diff --git a/systemuicontroller/src/main/java/com/google/accompanist/systemuicontroller/SystemUiController.kt b/systemuicontroller/src/main/java/com/google/accompanist/systemuicontroller/SystemUiController.kt index 3a3ad8976..8f2cd4dce 100644 --- a/systemuicontroller/src/main/java/com/google/accompanist/systemuicontroller/SystemUiController.kt +++ b/systemuicontroller/src/main/java/com/google/accompanist/systemuicontroller/SystemUiController.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.systemuicontroller import android.app.Activity @@ -42,6 +44,13 @@ import androidx.core.view.WindowInsetsControllerCompat * * @sample com.google.accompanist.sample.systemuicontroller.SystemUiControllerSample */ +@Deprecated( + """ +accompanist/systemuicontroller is deprecated and the API is no longer maintained. +We recommend going edge to edge using EdgeToEdge.enableEdgeToEdge in androidx.activity. +For more information please visit https://google.github.io/accompanist/systemuicontroller +""" +) @Stable public interface SystemUiController { @@ -180,6 +189,13 @@ public interface SystemUiController { * If none of these are found (such as may happen in a preview), then the functionality of the * returned [SystemUiController] will be degraded, but won't throw an exception. */ +@Deprecated( + """ +accompanist/systemuicontroller is deprecated and the API is no longer maintained. +We recommend going edge to edge using EdgeToEdge.enableEdgeToEdge in androidx.activity. +For more information please visit https://google.github.io/accompanist/systemuicontroller +""" +) @Composable public fun rememberSystemUiController( window: Window? = findWindow(), diff --git a/systemuicontroller/src/sharedTest/kotlin/com/google/accompanist/systemuicontroller/ActivityRememberSystemUiControllerTest.kt b/systemuicontroller/src/sharedTest/kotlin/com/google/accompanist/systemuicontroller/ActivityRememberSystemUiControllerTest.kt index d50dcbc2a..f90ed7ad4 100644 --- a/systemuicontroller/src/sharedTest/kotlin/com/google/accompanist/systemuicontroller/ActivityRememberSystemUiControllerTest.kt +++ b/systemuicontroller/src/sharedTest/kotlin/com/google/accompanist/systemuicontroller/ActivityRememberSystemUiControllerTest.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.systemuicontroller import android.os.Build diff --git a/systemuicontroller/src/sharedTest/kotlin/com/google/accompanist/systemuicontroller/ActivitySystemUiControllerTest.kt b/systemuicontroller/src/sharedTest/kotlin/com/google/accompanist/systemuicontroller/ActivitySystemUiControllerTest.kt index 90d048339..58cf21ad3 100644 --- a/systemuicontroller/src/sharedTest/kotlin/com/google/accompanist/systemuicontroller/ActivitySystemUiControllerTest.kt +++ b/systemuicontroller/src/sharedTest/kotlin/com/google/accompanist/systemuicontroller/ActivitySystemUiControllerTest.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.systemuicontroller import android.os.Build diff --git a/systemuicontroller/src/sharedTest/kotlin/com/google/accompanist/systemuicontroller/DialogRememberSystemUiControllerTest.kt b/systemuicontroller/src/sharedTest/kotlin/com/google/accompanist/systemuicontroller/DialogRememberSystemUiControllerTest.kt index 10cb2d8e0..72c7594a4 100644 --- a/systemuicontroller/src/sharedTest/kotlin/com/google/accompanist/systemuicontroller/DialogRememberSystemUiControllerTest.kt +++ b/systemuicontroller/src/sharedTest/kotlin/com/google/accompanist/systemuicontroller/DialogRememberSystemUiControllerTest.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.systemuicontroller import android.os.Build diff --git a/systemuicontroller/src/sharedTest/kotlin/com/google/accompanist/systemuicontroller/DialogSystemUiControllerTest.kt b/systemuicontroller/src/sharedTest/kotlin/com/google/accompanist/systemuicontroller/DialogSystemUiControllerTest.kt index c7fe00232..eb6eab27b 100644 --- a/systemuicontroller/src/sharedTest/kotlin/com/google/accompanist/systemuicontroller/DialogSystemUiControllerTest.kt +++ b/systemuicontroller/src/sharedTest/kotlin/com/google/accompanist/systemuicontroller/DialogSystemUiControllerTest.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.systemuicontroller import android.app.Dialog From e66ed52962cb77067619cfb0aa0b2717beebce07 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Thu, 24 Aug 2023 15:18:29 +1000 Subject: [PATCH 015/124] Deprecate PagerIndicator --- .../com/google/accompanist/pager/PagerIndicator.kt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pager-indicators/src/main/java/com/google/accompanist/pager/PagerIndicator.kt b/pager-indicators/src/main/java/com/google/accompanist/pager/PagerIndicator.kt index 0d11656e0..b544fbf28 100644 --- a/pager-indicators/src/main/java/com/google/accompanist/pager/PagerIndicator.kt +++ b/pager-indicators/src/main/java/com/google/accompanist/pager/PagerIndicator.kt @@ -136,6 +136,13 @@ public fun HorizontalPagerIndicator( * @param spacing the spacing between each indicator in [Dp]. * @param indicatorShape the shape representing each indicator. This defaults to [CircleShape]. */ +@Deprecated( + """ + PagerIndicator for is deprecated, we recommend forking this implementation and + customising for your needs. +For more migration information, please visit https://google.github.io/accompanist/pager/ +""" +) @OptIn(ExperimentalFoundationApi::class) @Composable public fun HorizontalPagerIndicator( @@ -330,6 +337,13 @@ public fun VerticalPagerIndicator( * @param spacing the spacing between each indicator in [Dp]. * @param indicatorShape the shape representing each indicator. This defaults to [CircleShape]. */ +@Deprecated( + """ + PagerIndicator for is deprecated, we recommend forking this implementation and + customising for your needs. +For more migration information, please visit https://google.github.io/accompanist/pager/ +""" +) @OptIn(ExperimentalFoundationApi::class) @Composable public fun VerticalPagerIndicator( From fd403e03aa94cf413fb9273d94d16c55c66a7b7f Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Thu, 24 Aug 2023 15:20:03 +1000 Subject: [PATCH 016/124] Deprecate ThemeAdapter --- .../themeadapter/appcompat/AppCompatTheme.kt | 20 ++++++++ .../themeadapter/core/ResourceUtils.kt | 50 +++++++++++++++++++ .../themeadapter/material/MdcTheme.kt | 19 +++++++ .../themeadapter/material/BaseMdcThemeTest.kt | 2 + .../themeadapter/material/NotMdcThemeTest.kt | 2 + .../themeadapter/material3/Mdc3Theme.kt | 19 +++++++ .../material3/BaseMdc3ThemeTest.kt | 2 + .../material3/NotMdc3ThemeTest.kt | 2 + 8 files changed, 116 insertions(+) diff --git a/themeadapter-appcompat/src/main/java/com/google/accompanist/themeadapter/appcompat/AppCompatTheme.kt b/themeadapter-appcompat/src/main/java/com/google/accompanist/themeadapter/appcompat/AppCompatTheme.kt index c72657e85..c10b7ec68 100644 --- a/themeadapter-appcompat/src/main/java/com/google/accompanist/themeadapter/appcompat/AppCompatTheme.kt +++ b/themeadapter-appcompat/src/main/java/com/google/accompanist/themeadapter/appcompat/AppCompatTheme.kt @@ -15,6 +15,7 @@ */ @file:JvmName("AppCompatTheme") +@file:Suppress("DEPRECATION") package com.google.accompanist.themeadapter.appcompat @@ -98,6 +99,12 @@ import com.google.accompanist.themeadapter.core.parseFontFamily * @param readTypography whether to read the font family from [context]'s theme. * @param shapes A set of shapes to be used by the components in this hierarchy. */ +@Deprecated( + """ + AppCompat ThemeAdapter is deprecated. +For more migration information, please visit https://google.github.io/accompanist/themeadapter-appcompat/ +""" +) @Composable public fun AppCompatTheme( context: Context = LocalContext.current, @@ -131,6 +138,12 @@ public fun AppCompatTheme( * This class contains some of the individual components of a [MaterialTheme]: * [Colors] & [Typography]. */ +@Deprecated( + """ + AppCompat ThemeAdapter is deprecated. +For more migration information, please visit https://google.github.io/accompanist/themeadapter-appcompat/ +""" +) public data class ThemeParameters( val colors: Colors?, val typography: Typography? @@ -150,6 +163,13 @@ public data class ThemeParameters( * * @return [ThemeParameters] instance containing the resulting [Colors] and [Typography] */ + +@Deprecated( + """ + AppCompat ThemeAdapter is deprecated. +For more migration information, please visit https://google.github.io/accompanist/themeadapter-appcompat/ +""" +) public fun Context.createAppCompatTheme( readColors: Boolean = true, readTypography: Boolean = true diff --git a/themeadapter-core/src/main/java/com/google/accompanist/themeadapter/core/ResourceUtils.kt b/themeadapter-core/src/main/java/com/google/accompanist/themeadapter/core/ResourceUtils.kt index e834b3cb9..2a96b70e0 100644 --- a/themeadapter-core/src/main/java/com/google/accompanist/themeadapter/core/ResourceUtils.kt +++ b/themeadapter-core/src/main/java/com/google/accompanist/themeadapter/core/ResourceUtils.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.themeadapter.core import android.annotation.SuppressLint @@ -57,6 +59,12 @@ import kotlin.concurrent.getOrSet * @param fallbackColor Value to return if the attribute is not defined or can't be coerced to a * [Color]. */ +@Deprecated( + """ + ThemeAdapter is deprecated. +For more migration information, please visit https://google.github.io/accompanist/themeadapter-appcompat/ +""" +) public fun TypedArray.parseColor( index: Int, fallbackColor: Color = Color.Unspecified @@ -71,6 +79,12 @@ public fun TypedArray.parseColor( * @param setTextColors Whether to read and set text colors from the style. Defaults to `false`. * @param defaultFontFamily Optional default font family to use in [TextStyle]s. */ +@Deprecated( + """ + ThemeAdapter is deprecated. +For more migration information, please visit https://google.github.io/accompanist/themeadapter-appcompat/ +""" +) public fun parseTextAppearance( context: Context, @StyleRes id: Int, @@ -165,6 +179,12 @@ public fun parseTextAppearance( * * @param index Index of attribute to retrieve. */ +@Deprecated( + """ + ThemeAdapter is deprecated. +For more migration information, please visit https://google.github.io/accompanist/themeadapter-appcompat/ +""" +) public fun TypedArray.parseFontFamily(index: Int): FontFamilyWithWeight? { val tv = tempTypedValue.getOrSet(::TypedValue) if (getValue(index, tv) && tv.type == TypedValue.TYPE_STRING) { @@ -200,6 +220,12 @@ public fun TypedArray.parseFontFamily(index: Int): FontFamilyWithWeight? { /** * A lightweight class for storing a [FontFamily] and [FontWeight]. */ +@Deprecated( + """ + ThemeAdapter is deprecated. +For more migration information, please visit https://google.github.io/accompanist/themeadapter-appcompat/ +""" +) public data class FontFamilyWithWeight( val fontFamily: FontFamily, val weight: FontWeight = FontWeight.Normal @@ -211,6 +237,12 @@ public data class FontFamilyWithWeight( * * @param id ID of XML resource to retrieve. */ +@Deprecated( + """ + ThemeAdapter is deprecated. +For more migration information, please visit https://google.github.io/accompanist/themeadapter-appcompat/ +""" +) @SuppressLint("RestrictedApi") // FontResourcesParserCompat.* @RequiresApi(23) // XML font families with > 1 fonts are only supported on API 23+ @@ -260,6 +292,12 @@ private fun fontWeightOf(weight: Int): FontWeight = when (weight) { * @param fallbackTextUnit Value to return if the attribute is not defined or can't be coerced to a * [TextUnit]. */ +@Deprecated( + """ + ThemeAdapter is deprecated. +For more migration information, please visit https://google.github.io/accompanist/themeadapter-appcompat/ +""" +) public fun TypedArray.parseTextUnit( index: Int, density: Density, @@ -290,6 +328,12 @@ public fun TypedArray.parseTextUnit( * @param fallbackShape Value to return if the style resource ID is not defined or can't be coerced * to a [CornerBasedShape]. */ +@Deprecated( + """ + ThemeAdapter is deprecated. +For more migration information, please visit https://google.github.io/accompanist/themeadapter-appcompat/ +""" +) public fun parseShapeAppearance( context: Context, @StyleRes id: Int, @@ -350,6 +394,12 @@ public fun parseShapeAppearance( * * @param index Index of attribute to retrieve. */ +@Deprecated( + """ + ThemeAdapter is deprecated. +For more migration information, please visit https://google.github.io/accompanist/themeadapter-appcompat/ +""" +) public fun TypedArray.parseCornerSize(index: Int): CornerSize? { val tv = tempTypedValue.getOrSet { TypedValue() } if (getValue(index, tv)) { diff --git a/themeadapter-material/src/main/java/com/google/accompanist/themeadapter/material/MdcTheme.kt b/themeadapter-material/src/main/java/com/google/accompanist/themeadapter/material/MdcTheme.kt index 85594a39d..e0b8212e0 100644 --- a/themeadapter-material/src/main/java/com/google/accompanist/themeadapter/material/MdcTheme.kt +++ b/themeadapter-material/src/main/java/com/google/accompanist/themeadapter/material/MdcTheme.kt @@ -15,6 +15,7 @@ */ @file:JvmName("MdcTheme") +@file:Suppress("DEPRECATION") package com.google.accompanist.themeadapter.material @@ -72,6 +73,12 @@ import java.lang.reflect.Method * @param setDefaultFontFamily whether to read and prioritize the `fontFamily` attributes from * [context]'s theme, over any specified in the MDC text appearances. Defaults to `false`. */ +@Deprecated( + """ + Material ThemeAdapter is deprecated. +For more migration information, please visit https://google.github.io/accompanist/themeadapter-material/ +""" +) @Composable public fun MdcTheme( context: Context = LocalContext.current, @@ -123,6 +130,12 @@ public fun MdcTheme( * This class contains the individual components of a [MaterialTheme]: [Colors], [Typography] * and [Shapes]. */ +@Deprecated( + """ + Material ThemeAdapter is deprecated. +For more migration information, please visit https://google.github.io/accompanist/themeadapter-material/ +""" +) public data class ThemeParameters( val colors: Colors?, val typography: Typography?, @@ -159,6 +172,12 @@ public data class ThemeParameters( * @return [ThemeParameters] instance containing the resulting [Colors], [Typography] * and [Shapes]. */ +@Deprecated( + """ + Material ThemeAdapter is deprecated. +For more migration information, please visit https://google.github.io/accompanist/themeadapter-material/ +""" +) public fun createMdcTheme( context: Context, layoutDirection: LayoutDirection, diff --git a/themeadapter-material/src/sharedTest/kotlin/com/google/accompanist/themeadapter/material/BaseMdcThemeTest.kt b/themeadapter-material/src/sharedTest/kotlin/com/google/accompanist/themeadapter/material/BaseMdcThemeTest.kt index a5722cbd9..b4b77fdef 100644 --- a/themeadapter-material/src/sharedTest/kotlin/com/google/accompanist/themeadapter/material/BaseMdcThemeTest.kt +++ b/themeadapter-material/src/sharedTest/kotlin/com/google/accompanist/themeadapter/material/BaseMdcThemeTest.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.themeadapter.material import android.view.ContextThemeWrapper diff --git a/themeadapter-material/src/sharedTest/kotlin/com/google/accompanist/themeadapter/material/NotMdcThemeTest.kt b/themeadapter-material/src/sharedTest/kotlin/com/google/accompanist/themeadapter/material/NotMdcThemeTest.kt index be7bc1daf..076f86ffc 100644 --- a/themeadapter-material/src/sharedTest/kotlin/com/google/accompanist/themeadapter/material/NotMdcThemeTest.kt +++ b/themeadapter-material/src/sharedTest/kotlin/com/google/accompanist/themeadapter/material/NotMdcThemeTest.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.themeadapter.material import androidx.compose.ui.test.junit4.createAndroidComposeRule diff --git a/themeadapter-material3/src/main/java/com/google/accompanist/themeadapter/material3/Mdc3Theme.kt b/themeadapter-material3/src/main/java/com/google/accompanist/themeadapter/material3/Mdc3Theme.kt index 1fb5d0e7c..90c11c0ee 100644 --- a/themeadapter-material3/src/main/java/com/google/accompanist/themeadapter/material3/Mdc3Theme.kt +++ b/themeadapter-material3/src/main/java/com/google/accompanist/themeadapter/material3/Mdc3Theme.kt @@ -15,6 +15,7 @@ */ @file:JvmName("Mdc3Theme") +@file:Suppress("DEPRECATION") package com.google.accompanist.themeadapter.material3 @@ -65,6 +66,12 @@ import java.lang.reflect.Method * @param setDefaultFontFamily whether to read and prioritize the `fontFamily` attributes from * [context]'s theme, over any specified in the MDC text appearances. Defaults to `false`. */ +@Deprecated( + """ + Material ThemeAdapter is deprecated. +For more migration information, please visit https://google.github.io/accompanist/themeadapter-material/ +""" +) @Composable public fun Mdc3Theme( context: Context = LocalContext.current, @@ -116,6 +123,12 @@ public fun Mdc3Theme( * This class contains the individual components of a [MaterialTheme]: [ColorScheme] and * [Typography]. */ +@Deprecated( + """ + Material ThemeAdapter is deprecated. +For more migration information, please visit https://google.github.io/accompanist/themeadapter-material/ +""" +) public data class Theme3Parameters( val colorScheme: ColorScheme?, val typography: Typography?, @@ -151,6 +164,12 @@ public data class Theme3Parameters( * [context]'s theme, over any specified in the MDC text appearances. Defaults to `false`. * @return [Theme3Parameters] instance containing the resulting [ColorScheme] and [Typography]. */ +@Deprecated( + """ + Material ThemeAdapter is deprecated. +For more migration information, please visit https://google.github.io/accompanist/themeadapter-material/ +""" +) public fun createMdc3Theme( context: Context, layoutDirection: LayoutDirection, diff --git a/themeadapter-material3/src/sharedTest/kotlin/com/google/accompanist/themeadapter/material3/BaseMdc3ThemeTest.kt b/themeadapter-material3/src/sharedTest/kotlin/com/google/accompanist/themeadapter/material3/BaseMdc3ThemeTest.kt index e65fce198..9a31aec1f 100644 --- a/themeadapter-material3/src/sharedTest/kotlin/com/google/accompanist/themeadapter/material3/BaseMdc3ThemeTest.kt +++ b/themeadapter-material3/src/sharedTest/kotlin/com/google/accompanist/themeadapter/material3/BaseMdc3ThemeTest.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.themeadapter.material3 import androidx.appcompat.app.AppCompatActivity diff --git a/themeadapter-material3/src/sharedTest/kotlin/com/google/accompanist/themeadapter/material3/NotMdc3ThemeTest.kt b/themeadapter-material3/src/sharedTest/kotlin/com/google/accompanist/themeadapter/material3/NotMdc3ThemeTest.kt index 5f1de8eeb..4df6d2128 100644 --- a/themeadapter-material3/src/sharedTest/kotlin/com/google/accompanist/themeadapter/material3/NotMdc3ThemeTest.kt +++ b/themeadapter-material3/src/sharedTest/kotlin/com/google/accompanist/themeadapter/material3/NotMdc3ThemeTest.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.themeadapter.material3 import androidx.compose.ui.test.junit4.createAndroidComposeRule From 761af13ad27622134290d936077a5870e84908db Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Fri, 25 Aug 2023 07:33:41 +1000 Subject: [PATCH 017/124] Update docs --- README.md | 30 +++++++++++++++--------------- docs/systemuicontroller.md | 9 +++++++++ docs/themeadapter-appcompat.md | 10 ++++++++++ docs/themeadapter-core.md | 10 ++++++++++ docs/themeadapter-material.md | 10 ++++++++++ docs/themeadapter-material3.md | 9 +++++++++ docs/web.md | 3 +++ 7 files changed, 66 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index fa9b178ad..928e5df2a 100644 --- a/README.md +++ b/README.md @@ -40,18 +40,6 @@ For stable versions of Compose, we use the latest *stable* version of the Compos ## Libraries -### 🍫 [System UI Controller](./systemuicontroller/) -A library that provides easy-to-use utilities for recoloring the Android system bars from Jetpack Compose. - -### 🎨 [AppCompat Theme Adapter](./themeadapter-appcompat/) -A library that enables the reuse of [AppCompat][appcompat] XML themes, for theming in Jetpack Compose. - -### 🎨 [Material Theme Adapter](./themeadapter-material/) -A library that enables the reuse of [MDC-Android][mdc] Material 2 XML themes, for theming in Jetpack Compose. - -### 🎨 [Material 3 Theme Adapter](./themeadapter-material3/) -A library that enables the reuse of [MDC-Android][mdc] Material 3 XML themes, for theming in Jetpack Compose. - ### 📫 [Permissions](./permissions/) A library that provides [Android runtime permissions][runtimepermissions] support for Jetpack Compose. @@ -61,9 +49,6 @@ A library which provides [Compose Material](https://developer.android.com/jetpac ### 🖌️ [Drawable Painter](./drawablepainter/) A library which provides a way to use Android Drawables as Jetpack Compose Painters. -### 🌏 [Web](./web/) -A wrapper around WebView for basic WebView support in Jetpack Compose. - ### 📜 [Adaptive](./adaptive/) A library providing a collection of utilities for adaptive layouts. @@ -88,6 +73,21 @@ See our [Migration Guide](https://google.github.io/accompanist/navigation-animat ### ⏳ [Placeholder](./placeholder/) (Deprecated) A library that provides easy-to-use modifiers for displaying a placeholder UI while content is loading. +### 🍫 [System UI Controller](./systemuicontroller/) (Deprecated) +A library that provides easy-to-use utilities for recoloring the Android system bars from Jetpack Compose. + +### 🎨 [AppCompat Theme Adapter](./themeadapter-appcompat/) (Deprecated) +A library that enables the reuse of [AppCompat][appcompat] XML themes, for theming in Jetpack Compose. + +### 🎨 [Material Theme Adapter](./themeadapter-material/) (Deprecated) +A library that enables the reuse of [MDC-Android][mdc] Material 2 XML themes, for theming in Jetpack Compose. + +### 🎨 [Material 3 Theme Adapter](./themeadapter-material3/) (Deprecated) +A library that enables the reuse of [MDC-Android][mdc] Material 3 XML themes, for theming in Jetpack Compose. + +### 🌏 [Web](./web/) (Deprecated) +A wrapper around WebView for basic WebView support in Jetpack Compose. + ### 📐 [Insets](./insets/) (Deprecated & Removed) See our [Migration Guide](https://google.github.io/accompanist/insets/) for migrating to Insets in Compose. diff --git a/docs/systemuicontroller.md b/docs/systemuicontroller.md index 9c891f3cc..7f71dadad 100644 --- a/docs/systemuicontroller.md +++ b/docs/systemuicontroller.md @@ -2,6 +2,15 @@ [![Maven Central](https://img.shields.io/maven-central/v/com.google.accompanist/accompanist-systemuicontroller)](https://search.maven.org/search?q=g:com.google.accompanist) +!!! warning +**This library is deprecated, and the API is no longer maintained. We recommend forking the implementation and customising it to your needs.** The original documentation is below. + +## Migration +Recommendation: If you were using SystemUIController to go edge-to-edge in your activity and change the system bar colors and system bar icon colors, use the new [Activity.enableEdgeToEdge](https://developer.android.com/reference/androidx/activity/ComponentActivity#(androidx.activity.ComponentActivity).enableEdgeToEdge(androidx.activity.SystemBarStyle,androidx.activity.SystemBarStyle)) method available in androidx.activity 1.8.0-alpha03 and later. This method backports the scrims used on some versions of Android. [This](https://github.com/android/nowinandroid/pull/817) is a sample PR of the migration to the new method and removing the dependency on SystemUIController in Now in Android. + +For other usages, migrate to using WindowInsetsControllerCompat or window APIs directly. + +## Original Documentation System UI Controller provides easy-to-use utilities for updating the System UI bar colors within Jetpack Compose. ## Usage diff --git a/docs/themeadapter-appcompat.md b/docs/themeadapter-appcompat.md index 6b1ef3df2..8f23e9f6b 100644 --- a/docs/themeadapter-appcompat.md +++ b/docs/themeadapter-appcompat.md @@ -2,6 +2,16 @@ [![Maven Central](https://img.shields.io/maven-central/v/com.google.accompanist/accompanist-themeadapter-appcompat)](https://search.maven.org/search?q=g:com.google.accompanist) +!!! warning +**This library is deprecated, and the API is no longer maintained.** The original documentation is below. + +## Migration +Recommendation: Use the [Material Theme Builder](https://m3.material.io/theme-builder) tool, or an alternative design tool, to generate a matching XML and Compose theme implementation for your app. See [Migrating XML themes to Compose](https://developer.android.com/jetpack/compose/designsystems/views-to-compose) to learn more. + +You can checkout [Material Design 3 in Compose](https://developer.android.com/jetpack/compose/designsystems/material3#material-theming) to learn more about creating and adding theme to your app using Material Theme Builder. + +## Original Documenation + A library that enables the reuse of [AppCompat][appcompat] XML themes, for theming in [Jetpack Compose][compose]. The basis of theming in [Jetpack Compose][compose] is the [`MaterialTheme`][materialtheme] composable, where you provide [`Colors`][colors], [`Shapes`][shapes] and [`Typography`][typography] instances containing your styling parameters: diff --git a/docs/themeadapter-core.md b/docs/themeadapter-core.md index b7e804404..91d06f61a 100644 --- a/docs/themeadapter-core.md +++ b/docs/themeadapter-core.md @@ -2,6 +2,16 @@ [![Maven Central](https://img.shields.io/maven-central/v/com.google.accompanist/accompanist-themeadapter-core)](https://search.maven.org/search?q=g:com.google.accompanist) +!!! warning +**This library is deprecated, and the API is no longer maintained.** The original documentation is below. + +## Migration +Recommendation: Use the [Material Theme Builder](https://m3.material.io/theme-builder) tool, or an alternative design tool, to generate a matching XML and Compose theme implementation for your app. See [Migrating XML themes to Compose](https://developer.android.com/jetpack/compose/designsystems/views-to-compose) to learn more. + +You can checkout [Material Design 3 in Compose](https://developer.android.com/jetpack/compose/designsystems/material3#material-theming) to learn more about creating and adding theme to your app using Material Theme Builder. + +## Original Documenation + A library that includes common utilities that enable the reuse of XML themes, for theming in [Jetpack Compose][compose]. See the [API][api] for more details. diff --git a/docs/themeadapter-material.md b/docs/themeadapter-material.md index ef4c99dba..998cd086b 100644 --- a/docs/themeadapter-material.md +++ b/docs/themeadapter-material.md @@ -2,6 +2,16 @@ [![Maven Central](https://img.shields.io/maven-central/v/com.google.accompanist/accompanist-themeadapter-material)](https://search.maven.org/search?q=g:com.google.accompanist) +!!! warning +**This library is deprecated, and the API is no longer maintained.** The original documentation is below. + +## Migration +Recommendation: Use the [Material Theme Builder](https://m3.material.io/theme-builder) tool, or an alternative design tool, to generate a matching XML and Compose theme implementation for your app. See [Migrating XML themes to Compose](https://developer.android.com/jetpack/compose/designsystems/views-to-compose) to learn more. + +You can checkout [Material Design 3 in Compose](https://developer.android.com/jetpack/compose/designsystems/material3#material-theming) to learn more about creating and adding theme to your app using Material Theme Builder. + +## Original Documenation + A library that enables the reuse of [MDC-Android][mdc] Material 2 XML themes, for theming in [Jetpack Compose][compose]. ![Material Theme Adapter header](themeadapter/material-header.png) diff --git a/docs/themeadapter-material3.md b/docs/themeadapter-material3.md index 1ffb59157..eb04478b2 100644 --- a/docs/themeadapter-material3.md +++ b/docs/themeadapter-material3.md @@ -2,6 +2,15 @@ [![Maven Central](https://img.shields.io/maven-central/v/com.google.accompanist/accompanist-themeadapter-material3)](https://search.maven.org/search?q=g:com.google.accompanist) +!!! warning +**This library is deprecated, and the API is no longer maintained. We recommend generating a theme with [Material Theme Builder](https://m3.material.io/theme-builder)** The original documentation is below. + +## Migration +Recommendation: Use the [Material Theme Builder](https://m3.material.io/theme-builder) tool, or an alternative design tool, to generate a matching XML and Compose theme implementation for your app. See [Migrating XML themes to Compose](https://developer.android.com/jetpack/compose/designsystems/views-to-compose) to learn more. + +You can checkout [Material Design 3 in Compose](https://developer.android.com/jetpack/compose/designsystems/material3#material-theming) to learn more about creating and adding theme to your app using Material Theme Builder. + +## Original Documenation A library that enables the reuse of [MDC-Android][mdc] Material 3 XML themes, for theming in [Jetpack Compose][compose]. ![Material 3 Theme Adapter header](themeadapter/material3-header.png) diff --git a/docs/web.md b/docs/web.md index 948eb2a28..0df40b7f7 100644 --- a/docs/web.md +++ b/docs/web.md @@ -4,6 +4,9 @@ A library which provides a Jetpack Compose wrapper around Android's WebView. +!!! warning +**This library is deprecated, and the API is no longer maintained. We recommend forking the implementation and customising it to your needs.** The original documentation is below. + ## Usage To implement this wrapper there are two key APIs which are needed: [`WebView`](../api/web/com.google.accompanist.web/-web-view.html), which is provides the layout, and [`rememberWebViewState(url)`](../api/web/com.google.accompanist.web/remember-web-view-state.html) which provides some remembered state including the URL to display. From 5e73b95c71a671f6ea8f054236b92412817ecb67 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Fri, 25 Aug 2023 07:40:27 +1000 Subject: [PATCH 018/124] Fix sample --- .../google/accompanist/sample/themeadapter/Material3Sample.kt | 2 ++ .../google/accompanist/sample/themeadapter/MaterialSample.kt | 2 ++ 2 files changed, 4 insertions(+) diff --git a/sample/src/main/java/com/google/accompanist/sample/themeadapter/Material3Sample.kt b/sample/src/main/java/com/google/accompanist/sample/themeadapter/Material3Sample.kt index 57b98d711..14598aab5 100644 --- a/sample/src/main/java/com/google/accompanist/sample/themeadapter/Material3Sample.kt +++ b/sample/src/main/java/com/google/accompanist/sample/themeadapter/Material3Sample.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.sample.themeadapter import android.os.Bundle diff --git a/sample/src/main/java/com/google/accompanist/sample/themeadapter/MaterialSample.kt b/sample/src/main/java/com/google/accompanist/sample/themeadapter/MaterialSample.kt index cf66c8ceb..8304d62c5 100644 --- a/sample/src/main/java/com/google/accompanist/sample/themeadapter/MaterialSample.kt +++ b/sample/src/main/java/com/google/accompanist/sample/themeadapter/MaterialSample.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.sample.themeadapter import android.os.Bundle From 83577471547c4235c2366e080484b562719ad0a1 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Fri, 25 Aug 2023 07:53:36 +1000 Subject: [PATCH 019/124] Fix themeadapter tests --- .../themeadapter/appcompat/BaseAppCompatThemeTest.kt | 2 ++ .../accompanist/themeadapter/appcompat/NotAppCompatThemeTest.kt | 2 ++ 2 files changed, 4 insertions(+) diff --git a/themeadapter-appcompat/src/sharedTest/kotlin/com/google/accompanist/themeadapter/appcompat/BaseAppCompatThemeTest.kt b/themeadapter-appcompat/src/sharedTest/kotlin/com/google/accompanist/themeadapter/appcompat/BaseAppCompatThemeTest.kt index e5a9e16be..2f769982c 100644 --- a/themeadapter-appcompat/src/sharedTest/kotlin/com/google/accompanist/themeadapter/appcompat/BaseAppCompatThemeTest.kt +++ b/themeadapter-appcompat/src/sharedTest/kotlin/com/google/accompanist/themeadapter/appcompat/BaseAppCompatThemeTest.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.themeadapter.appcompat import android.view.ContextThemeWrapper diff --git a/themeadapter-appcompat/src/sharedTest/kotlin/com/google/accompanist/themeadapter/appcompat/NotAppCompatThemeTest.kt b/themeadapter-appcompat/src/sharedTest/kotlin/com/google/accompanist/themeadapter/appcompat/NotAppCompatThemeTest.kt index 19bb8652d..4aa5f0f52 100644 --- a/themeadapter-appcompat/src/sharedTest/kotlin/com/google/accompanist/themeadapter/appcompat/NotAppCompatThemeTest.kt +++ b/themeadapter-appcompat/src/sharedTest/kotlin/com/google/accompanist/themeadapter/appcompat/NotAppCompatThemeTest.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.themeadapter.appcompat import androidx.compose.ui.test.junit4.createAndroidComposeRule From a54526be3c6280154cafc3b1ac797492c5859258 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Fri, 25 Aug 2023 07:56:55 +1000 Subject: [PATCH 020/124] Update API --- insets-ui/api/current.api | 14 ++-- pager-indicators/api/current.api | 4 +- systemuicontroller/api/current.api | 42 +++++----- themeadapter-appcompat/api/current.api | 18 ++--- themeadapter-core/api/current.api | 28 +++---- themeadapter-material/api/current.api | 22 +++--- themeadapter-material3/api/current.api | 22 +++--- web/api/current.api | 103 ++++++++++++++----------- 8 files changed, 133 insertions(+), 120 deletions(-) diff --git a/insets-ui/api/current.api b/insets-ui/api/current.api index e7e7318ca..0bdcf162b 100644 --- a/insets-ui/api/current.api +++ b/insets-ui/api/current.api @@ -2,21 +2,21 @@ package com.google.accompanist.insets.ui { public final class BottomNavigationKt { - method @androidx.compose.runtime.Composable public static void BottomNavigation(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional long backgroundColor, optional long contentColor, optional float elevation, kotlin.jvm.functions.Function1 content); - method @androidx.compose.runtime.Composable public static void BottomNavigationContent(optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function1 content); - method @androidx.compose.runtime.Composable public static void BottomNavigationSurface(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional float elevation, kotlin.jvm.functions.Function0 content); + method @Deprecated @androidx.compose.runtime.Composable public static void BottomNavigation(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional long backgroundColor, optional long contentColor, optional float elevation, kotlin.jvm.functions.Function1 content); + method @Deprecated @androidx.compose.runtime.Composable public static void BottomNavigationContent(optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function1 content); + method @Deprecated @androidx.compose.runtime.Composable public static void BottomNavigationSurface(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional float elevation, kotlin.jvm.functions.Function0 content); } public final class ScaffoldKt { - method @androidx.compose.runtime.Composable public static void Scaffold(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material.ScaffoldState scaffoldState, optional kotlin.jvm.functions.Function0 topBar, optional kotlin.jvm.functions.Function0 bottomBar, optional kotlin.jvm.functions.Function1 snackbarHost, optional kotlin.jvm.functions.Function0 floatingActionButton, optional int floatingActionButtonPosition, optional boolean isFloatingActionButtonDocked, optional kotlin.jvm.functions.Function1? drawerContent, optional boolean drawerGesturesEnabled, optional androidx.compose.ui.graphics.Shape drawerShape, optional float drawerElevation, optional long drawerBackgroundColor, optional long drawerContentColor, optional long drawerScrimColor, optional long backgroundColor, optional long contentColor, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1 content); + method @Deprecated @androidx.compose.runtime.Composable public static void Scaffold(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material.ScaffoldState scaffoldState, optional kotlin.jvm.functions.Function0 topBar, optional kotlin.jvm.functions.Function0 bottomBar, optional kotlin.jvm.functions.Function1 snackbarHost, optional kotlin.jvm.functions.Function0 floatingActionButton, optional int floatingActionButtonPosition, optional boolean isFloatingActionButtonDocked, optional kotlin.jvm.functions.Function1? drawerContent, optional boolean drawerGesturesEnabled, optional androidx.compose.ui.graphics.Shape drawerShape, optional float drawerElevation, optional long drawerBackgroundColor, optional long drawerContentColor, optional long drawerScrimColor, optional long backgroundColor, optional long contentColor, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1 content); method public static androidx.compose.runtime.ProvidableCompositionLocal getLocalScaffoldPadding(); property public static final androidx.compose.runtime.ProvidableCompositionLocal LocalScaffoldPadding; } public final class TopAppBarKt { - method @androidx.compose.runtime.Composable public static void TopAppBar(kotlin.jvm.functions.Function0 title, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function0? navigationIcon, optional kotlin.jvm.functions.Function1 actions, optional long backgroundColor, optional long contentColor, optional float elevation); - method @androidx.compose.runtime.Composable public static void TopAppBarContent(kotlin.jvm.functions.Function0 title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0? navigationIcon, optional kotlin.jvm.functions.Function1 actions); - method @androidx.compose.runtime.Composable public static void TopAppBarSurface(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional float elevation, kotlin.jvm.functions.Function0 content); + method @Deprecated @androidx.compose.runtime.Composable public static void TopAppBar(kotlin.jvm.functions.Function0 title, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function0? navigationIcon, optional kotlin.jvm.functions.Function1 actions, optional long backgroundColor, optional long contentColor, optional float elevation); + method @Deprecated @androidx.compose.runtime.Composable public static void TopAppBarContent(kotlin.jvm.functions.Function0 title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0? navigationIcon, optional kotlin.jvm.functions.Function1 actions); + method @Deprecated @androidx.compose.runtime.Composable public static void TopAppBarSurface(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional float elevation, kotlin.jvm.functions.Function0 content); } } diff --git a/pager-indicators/api/current.api b/pager-indicators/api/current.api index cfa4a1372..5871e8c57 100644 --- a/pager-indicators/api/current.api +++ b/pager-indicators/api/current.api @@ -3,9 +3,9 @@ package com.google.accompanist.pager { public final class PagerIndicatorKt { method @Deprecated @androidx.compose.runtime.Composable public static void HorizontalPagerIndicator(com.google.accompanist.pager.PagerState pagerState, optional androidx.compose.ui.Modifier modifier, optional int pageCount, optional kotlin.jvm.functions.Function1 pageIndexMapping, optional long activeColor, optional long inactiveColor, optional float indicatorWidth, optional float indicatorHeight, optional float spacing, optional androidx.compose.ui.graphics.Shape indicatorShape); - method @androidx.compose.runtime.Composable public static void HorizontalPagerIndicator(androidx.compose.foundation.pager.PagerState pagerState, int pageCount, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1 pageIndexMapping, optional long activeColor, optional long inactiveColor, optional float indicatorWidth, optional float indicatorHeight, optional float spacing, optional androidx.compose.ui.graphics.Shape indicatorShape); + method @Deprecated @androidx.compose.runtime.Composable public static void HorizontalPagerIndicator(androidx.compose.foundation.pager.PagerState pagerState, int pageCount, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1 pageIndexMapping, optional long activeColor, optional long inactiveColor, optional float indicatorWidth, optional float indicatorHeight, optional float spacing, optional androidx.compose.ui.graphics.Shape indicatorShape); method @Deprecated @androidx.compose.runtime.Composable public static void VerticalPagerIndicator(com.google.accompanist.pager.PagerState pagerState, optional androidx.compose.ui.Modifier modifier, optional int pageCount, optional kotlin.jvm.functions.Function1 pageIndexMapping, optional long activeColor, optional long inactiveColor, optional float indicatorHeight, optional float indicatorWidth, optional float spacing, optional androidx.compose.ui.graphics.Shape indicatorShape); - method @androidx.compose.runtime.Composable public static void VerticalPagerIndicator(androidx.compose.foundation.pager.PagerState pagerState, int pageCount, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1 pageIndexMapping, optional long activeColor, optional long inactiveColor, optional float indicatorHeight, optional float indicatorWidth, optional float spacing, optional androidx.compose.ui.graphics.Shape indicatorShape); + method @Deprecated @androidx.compose.runtime.Composable public static void VerticalPagerIndicator(androidx.compose.foundation.pager.PagerState pagerState, int pageCount, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1 pageIndexMapping, optional long activeColor, optional long inactiveColor, optional float indicatorHeight, optional float indicatorWidth, optional float spacing, optional androidx.compose.ui.graphics.Shape indicatorShape); } public final class PagerTabKt { diff --git a/systemuicontroller/api/current.api b/systemuicontroller/api/current.api index b0000e3b6..7cc3b3d29 100644 --- a/systemuicontroller/api/current.api +++ b/systemuicontroller/api/current.api @@ -1,26 +1,26 @@ // Signature format: 4.0 package com.google.accompanist.systemuicontroller { - @androidx.compose.runtime.Stable public interface SystemUiController { - method public boolean getNavigationBarDarkContentEnabled(); - method public boolean getStatusBarDarkContentEnabled(); - method public int getSystemBarsBehavior(); - method public default boolean getSystemBarsDarkContentEnabled(); - method public boolean isNavigationBarContrastEnforced(); - method public boolean isNavigationBarVisible(); - method public boolean isStatusBarVisible(); - method public default boolean isSystemBarsVisible(); - method public void setNavigationBarColor(long color, optional boolean darkIcons, optional boolean navigationBarContrastEnforced, optional kotlin.jvm.functions.Function1 transformColorForLightContent); - method public void setNavigationBarContrastEnforced(boolean); - method public void setNavigationBarDarkContentEnabled(boolean); - method public void setNavigationBarVisible(boolean); - method public void setStatusBarColor(long color, optional boolean darkIcons, optional kotlin.jvm.functions.Function1 transformColorForLightContent); - method public void setStatusBarDarkContentEnabled(boolean); - method public void setStatusBarVisible(boolean); - method public void setSystemBarsBehavior(int); - method public default void setSystemBarsColor(long color, optional boolean darkIcons, optional boolean isNavigationBarContrastEnforced, optional kotlin.jvm.functions.Function1 transformColorForLightContent); - method public default void setSystemBarsDarkContentEnabled(boolean); - method public default void setSystemBarsVisible(boolean); + @Deprecated @androidx.compose.runtime.Stable public interface SystemUiController { + method @Deprecated public boolean getNavigationBarDarkContentEnabled(); + method @Deprecated public boolean getStatusBarDarkContentEnabled(); + method @Deprecated public int getSystemBarsBehavior(); + method @Deprecated public default boolean getSystemBarsDarkContentEnabled(); + method @Deprecated public boolean isNavigationBarContrastEnforced(); + method @Deprecated public boolean isNavigationBarVisible(); + method @Deprecated public boolean isStatusBarVisible(); + method @Deprecated public default boolean isSystemBarsVisible(); + method @Deprecated public void setNavigationBarColor(long color, optional boolean darkIcons, optional boolean navigationBarContrastEnforced, optional kotlin.jvm.functions.Function1 transformColorForLightContent); + method @Deprecated public void setNavigationBarContrastEnforced(boolean); + method @Deprecated public void setNavigationBarDarkContentEnabled(boolean); + method @Deprecated public void setNavigationBarVisible(boolean); + method @Deprecated public void setStatusBarColor(long color, optional boolean darkIcons, optional kotlin.jvm.functions.Function1 transformColorForLightContent); + method @Deprecated public void setStatusBarDarkContentEnabled(boolean); + method @Deprecated public void setStatusBarVisible(boolean); + method @Deprecated public void setSystemBarsBehavior(int); + method @Deprecated public default void setSystemBarsColor(long color, optional boolean darkIcons, optional boolean isNavigationBarContrastEnforced, optional kotlin.jvm.functions.Function1 transformColorForLightContent); + method @Deprecated public default void setSystemBarsDarkContentEnabled(boolean); + method @Deprecated public default void setSystemBarsVisible(boolean); property public abstract boolean isNavigationBarContrastEnforced; property public abstract boolean isNavigationBarVisible; property public abstract boolean isStatusBarVisible; @@ -32,7 +32,7 @@ package com.google.accompanist.systemuicontroller { } public final class SystemUiControllerKt { - method @androidx.compose.runtime.Composable public static com.google.accompanist.systemuicontroller.SystemUiController rememberSystemUiController(optional android.view.Window? window); + method @Deprecated @androidx.compose.runtime.Composable public static com.google.accompanist.systemuicontroller.SystemUiController rememberSystemUiController(optional android.view.Window? window); } } diff --git a/themeadapter-appcompat/api/current.api b/themeadapter-appcompat/api/current.api index 26e84d32d..bb8ecb450 100644 --- a/themeadapter-appcompat/api/current.api +++ b/themeadapter-appcompat/api/current.api @@ -2,20 +2,20 @@ package com.google.accompanist.themeadapter.appcompat { public final class AppCompatTheme { - method @androidx.compose.runtime.Composable public static void AppCompatTheme(optional android.content.Context context, optional boolean readColors, optional boolean readTypography, optional androidx.compose.material.Shapes shapes, kotlin.jvm.functions.Function0 content); - method public static com.google.accompanist.themeadapter.appcompat.ThemeParameters createAppCompatTheme(android.content.Context, optional boolean readColors, optional boolean readTypography); + method @Deprecated @androidx.compose.runtime.Composable public static void AppCompatTheme(optional android.content.Context context, optional boolean readColors, optional boolean readTypography, optional androidx.compose.material.Shapes shapes, kotlin.jvm.functions.Function0 content); + method @Deprecated public static com.google.accompanist.themeadapter.appcompat.ThemeParameters createAppCompatTheme(android.content.Context, optional boolean readColors, optional boolean readTypography); } public final class ColorKt { } - public final class ThemeParameters { - ctor public ThemeParameters(androidx.compose.material.Colors? colors, androidx.compose.material.Typography? typography); - method public androidx.compose.material.Colors? component1(); - method public androidx.compose.material.Typography? component2(); - method public com.google.accompanist.themeadapter.appcompat.ThemeParameters copy(androidx.compose.material.Colors? colors, androidx.compose.material.Typography? typography); - method public androidx.compose.material.Colors? getColors(); - method public androidx.compose.material.Typography? getTypography(); + @Deprecated public final class ThemeParameters { + ctor @Deprecated public ThemeParameters(androidx.compose.material.Colors? colors, androidx.compose.material.Typography? typography); + method @Deprecated public androidx.compose.material.Colors? component1(); + method @Deprecated public androidx.compose.material.Typography? component2(); + method @Deprecated public com.google.accompanist.themeadapter.appcompat.ThemeParameters copy(androidx.compose.material.Colors? colors, androidx.compose.material.Typography? typography); + method @Deprecated public androidx.compose.material.Colors? getColors(); + method @Deprecated public androidx.compose.material.Typography? getTypography(); property public final androidx.compose.material.Colors? colors; property public final androidx.compose.material.Typography? typography; } diff --git a/themeadapter-core/api/current.api b/themeadapter-core/api/current.api index 19d5373b6..04698c003 100644 --- a/themeadapter-core/api/current.api +++ b/themeadapter-core/api/current.api @@ -1,25 +1,25 @@ // Signature format: 4.0 package com.google.accompanist.themeadapter.core { - public final class FontFamilyWithWeight { - ctor public FontFamilyWithWeight(androidx.compose.ui.text.font.FontFamily fontFamily, optional androidx.compose.ui.text.font.FontWeight weight); - method public androidx.compose.ui.text.font.FontFamily component1(); - method public androidx.compose.ui.text.font.FontWeight component2(); - method public com.google.accompanist.themeadapter.core.FontFamilyWithWeight copy(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.font.FontWeight weight); - method public androidx.compose.ui.text.font.FontFamily getFontFamily(); - method public androidx.compose.ui.text.font.FontWeight getWeight(); + @Deprecated public final class FontFamilyWithWeight { + ctor @Deprecated public FontFamilyWithWeight(androidx.compose.ui.text.font.FontFamily fontFamily, optional androidx.compose.ui.text.font.FontWeight weight); + method @Deprecated public androidx.compose.ui.text.font.FontFamily component1(); + method @Deprecated public androidx.compose.ui.text.font.FontWeight component2(); + method @Deprecated public com.google.accompanist.themeadapter.core.FontFamilyWithWeight copy(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.font.FontWeight weight); + method @Deprecated public androidx.compose.ui.text.font.FontFamily getFontFamily(); + method @Deprecated public androidx.compose.ui.text.font.FontWeight getWeight(); property public final androidx.compose.ui.text.font.FontFamily fontFamily; property public final androidx.compose.ui.text.font.FontWeight weight; } public final class ResourceUtilsKt { - method public static long parseColor(android.content.res.TypedArray, int index, optional long fallbackColor); - method public static androidx.compose.foundation.shape.CornerSize? parseCornerSize(android.content.res.TypedArray, int index); - method public static com.google.accompanist.themeadapter.core.FontFamilyWithWeight? parseFontFamily(android.content.res.TypedArray, int index); - method public static androidx.compose.foundation.shape.CornerBasedShape parseShapeAppearance(android.content.Context context, @StyleRes int id, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.foundation.shape.CornerBasedShape fallbackShape); - method public static androidx.compose.ui.text.TextStyle parseTextAppearance(android.content.Context context, @StyleRes int id, androidx.compose.ui.unit.Density density, boolean setTextColors, androidx.compose.ui.text.font.FontFamily? defaultFontFamily); - method public static long parseTextUnit(android.content.res.TypedArray, int index, androidx.compose.ui.unit.Density density, optional long fallbackTextUnit); - method @RequiresApi(23) public static androidx.compose.ui.text.font.FontFamily? parseXmlFontFamily(android.content.res.Resources, int id); + method @Deprecated public static long parseColor(android.content.res.TypedArray, int index, optional long fallbackColor); + method @Deprecated public static androidx.compose.foundation.shape.CornerSize? parseCornerSize(android.content.res.TypedArray, int index); + method @Deprecated public static com.google.accompanist.themeadapter.core.FontFamilyWithWeight? parseFontFamily(android.content.res.TypedArray, int index); + method @Deprecated public static androidx.compose.foundation.shape.CornerBasedShape parseShapeAppearance(android.content.Context context, @StyleRes int id, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.foundation.shape.CornerBasedShape fallbackShape); + method @Deprecated public static androidx.compose.ui.text.TextStyle parseTextAppearance(android.content.Context context, @StyleRes int id, androidx.compose.ui.unit.Density density, boolean setTextColors, androidx.compose.ui.text.font.FontFamily? defaultFontFamily); + method @Deprecated public static long parseTextUnit(android.content.res.TypedArray, int index, androidx.compose.ui.unit.Density density, optional long fallbackTextUnit); + method @Deprecated @RequiresApi(23) public static androidx.compose.ui.text.font.FontFamily? parseXmlFontFamily(android.content.res.Resources, int id); } } diff --git a/themeadapter-material/api/current.api b/themeadapter-material/api/current.api index c087c8356..81cd24a44 100644 --- a/themeadapter-material/api/current.api +++ b/themeadapter-material/api/current.api @@ -2,19 +2,19 @@ package com.google.accompanist.themeadapter.material { public final class MdcTheme { - method @androidx.compose.runtime.Composable public static void MdcTheme(optional android.content.Context context, optional boolean readColors, optional boolean readTypography, optional boolean readShapes, optional boolean setTextColors, optional boolean setDefaultFontFamily, kotlin.jvm.functions.Function0 content); - method public static com.google.accompanist.themeadapter.material.ThemeParameters createMdcTheme(android.content.Context context, androidx.compose.ui.unit.LayoutDirection layoutDirection, optional androidx.compose.ui.unit.Density density, optional boolean readColors, optional boolean readTypography, optional boolean readShapes, optional boolean setTextColors, optional boolean setDefaultFontFamily); + method @Deprecated @androidx.compose.runtime.Composable public static void MdcTheme(optional android.content.Context context, optional boolean readColors, optional boolean readTypography, optional boolean readShapes, optional boolean setTextColors, optional boolean setDefaultFontFamily, kotlin.jvm.functions.Function0 content); + method @Deprecated public static com.google.accompanist.themeadapter.material.ThemeParameters createMdcTheme(android.content.Context context, androidx.compose.ui.unit.LayoutDirection layoutDirection, optional androidx.compose.ui.unit.Density density, optional boolean readColors, optional boolean readTypography, optional boolean readShapes, optional boolean setTextColors, optional boolean setDefaultFontFamily); } - public final class ThemeParameters { - ctor public ThemeParameters(androidx.compose.material.Colors? colors, androidx.compose.material.Typography? typography, androidx.compose.material.Shapes? shapes); - method public androidx.compose.material.Colors? component1(); - method public androidx.compose.material.Typography? component2(); - method public androidx.compose.material.Shapes? component3(); - method public com.google.accompanist.themeadapter.material.ThemeParameters copy(androidx.compose.material.Colors? colors, androidx.compose.material.Typography? typography, androidx.compose.material.Shapes? shapes); - method public androidx.compose.material.Colors? getColors(); - method public androidx.compose.material.Shapes? getShapes(); - method public androidx.compose.material.Typography? getTypography(); + @Deprecated public final class ThemeParameters { + ctor @Deprecated public ThemeParameters(androidx.compose.material.Colors? colors, androidx.compose.material.Typography? typography, androidx.compose.material.Shapes? shapes); + method @Deprecated public androidx.compose.material.Colors? component1(); + method @Deprecated public androidx.compose.material.Typography? component2(); + method @Deprecated public androidx.compose.material.Shapes? component3(); + method @Deprecated public com.google.accompanist.themeadapter.material.ThemeParameters copy(androidx.compose.material.Colors? colors, androidx.compose.material.Typography? typography, androidx.compose.material.Shapes? shapes); + method @Deprecated public androidx.compose.material.Colors? getColors(); + method @Deprecated public androidx.compose.material.Shapes? getShapes(); + method @Deprecated public androidx.compose.material.Typography? getTypography(); property public final androidx.compose.material.Colors? colors; property public final androidx.compose.material.Shapes? shapes; property public final androidx.compose.material.Typography? typography; diff --git a/themeadapter-material3/api/current.api b/themeadapter-material3/api/current.api index 1aac4b9e2..44544eafb 100644 --- a/themeadapter-material3/api/current.api +++ b/themeadapter-material3/api/current.api @@ -2,19 +2,19 @@ package com.google.accompanist.themeadapter.material3 { public final class Mdc3Theme { - method @androidx.compose.runtime.Composable public static void Mdc3Theme(optional android.content.Context context, optional boolean readColorScheme, optional boolean readTypography, optional boolean readShapes, optional boolean setTextColors, optional boolean setDefaultFontFamily, kotlin.jvm.functions.Function0 content); - method public static com.google.accompanist.themeadapter.material3.Theme3Parameters createMdc3Theme(android.content.Context context, androidx.compose.ui.unit.LayoutDirection layoutDirection, optional androidx.compose.ui.unit.Density density, optional boolean readColorScheme, optional boolean readTypography, optional boolean readShapes, optional boolean setTextColors, optional boolean setDefaultFontFamily); + method @Deprecated @androidx.compose.runtime.Composable public static void Mdc3Theme(optional android.content.Context context, optional boolean readColorScheme, optional boolean readTypography, optional boolean readShapes, optional boolean setTextColors, optional boolean setDefaultFontFamily, kotlin.jvm.functions.Function0 content); + method @Deprecated public static com.google.accompanist.themeadapter.material3.Theme3Parameters createMdc3Theme(android.content.Context context, androidx.compose.ui.unit.LayoutDirection layoutDirection, optional androidx.compose.ui.unit.Density density, optional boolean readColorScheme, optional boolean readTypography, optional boolean readShapes, optional boolean setTextColors, optional boolean setDefaultFontFamily); } - public final class Theme3Parameters { - ctor public Theme3Parameters(androidx.compose.material3.ColorScheme? colorScheme, androidx.compose.material3.Typography? typography, androidx.compose.material3.Shapes? shapes); - method public androidx.compose.material3.ColorScheme? component1(); - method public androidx.compose.material3.Typography? component2(); - method public androidx.compose.material3.Shapes? component3(); - method public com.google.accompanist.themeadapter.material3.Theme3Parameters copy(androidx.compose.material3.ColorScheme? colorScheme, androidx.compose.material3.Typography? typography, androidx.compose.material3.Shapes? shapes); - method public androidx.compose.material3.ColorScheme? getColorScheme(); - method public androidx.compose.material3.Shapes? getShapes(); - method public androidx.compose.material3.Typography? getTypography(); + @Deprecated public final class Theme3Parameters { + ctor @Deprecated public Theme3Parameters(androidx.compose.material3.ColorScheme? colorScheme, androidx.compose.material3.Typography? typography, androidx.compose.material3.Shapes? shapes); + method @Deprecated public androidx.compose.material3.ColorScheme? component1(); + method @Deprecated public androidx.compose.material3.Typography? component2(); + method @Deprecated public androidx.compose.material3.Shapes? component3(); + method @Deprecated public com.google.accompanist.themeadapter.material3.Theme3Parameters copy(androidx.compose.material3.ColorScheme? colorScheme, androidx.compose.material3.Typography? typography, androidx.compose.material3.Shapes? shapes); + method @Deprecated public androidx.compose.material3.ColorScheme? getColorScheme(); + method @Deprecated public androidx.compose.material3.Shapes? getShapes(); + method @Deprecated public androidx.compose.material3.Typography? getTypography(); property public final androidx.compose.material3.ColorScheme? colorScheme; property public final androidx.compose.material3.Shapes? shapes; property public final androidx.compose.material3.Typography? typography; diff --git a/web/api/current.api b/web/api/current.api index f91b42b04..d168665a6 100644 --- a/web/api/current.api +++ b/web/api/current.api @@ -18,22 +18,22 @@ package com.google.accompanist.web { field public com.google.accompanist.web.WebViewState state; } - public abstract sealed class LoadingState { + @Deprecated public abstract sealed class LoadingState { } - public static final class LoadingState.Finished extends com.google.accompanist.web.LoadingState { - field public static final com.google.accompanist.web.LoadingState.Finished INSTANCE; + @Deprecated public static final class LoadingState.Finished extends com.google.accompanist.web.LoadingState { + field @Deprecated public static final com.google.accompanist.web.LoadingState.Finished INSTANCE; } - public static final class LoadingState.Initializing extends com.google.accompanist.web.LoadingState { - field public static final com.google.accompanist.web.LoadingState.Initializing INSTANCE; + @Deprecated public static final class LoadingState.Initializing extends com.google.accompanist.web.LoadingState { + field @Deprecated public static final com.google.accompanist.web.LoadingState.Initializing INSTANCE; } - public static final class LoadingState.Loading extends com.google.accompanist.web.LoadingState { - ctor public LoadingState.Loading(float progress); - method public float component1(); - method public com.google.accompanist.web.LoadingState.Loading copy(float progress); - method public float getProgress(); + @Deprecated public static final class LoadingState.Loading extends com.google.accompanist.web.LoadingState { + ctor @Deprecated public LoadingState.Loading(float progress); + method @Deprecated public float component1(); + method @Deprecated public com.google.accompanist.web.LoadingState.Loading copy(float progress); + method @Deprecated public float getProgress(); property public final float progress; } @@ -65,6 +65,17 @@ package com.google.accompanist.web { field public static final com.google.accompanist.web.WebContent.NavigatorOnly INSTANCE; } + public static final class WebContent.Post extends com.google.accompanist.web.WebContent { + ctor public WebContent.Post(String url, byte[] postData); + method public String component1(); + method public byte[] component2(); + method public com.google.accompanist.web.WebContent.Post copy(String url, byte[] postData); + method public byte[] getPostData(); + method public String getUrl(); + property public final byte[] postData; + property public final String url; + } + public static final class WebContent.Url extends com.google.accompanist.web.WebContent { ctor public WebContent.Url(String url, optional java.util.Map additionalHttpHeaders); method public String component1(); @@ -76,53 +87,55 @@ package com.google.accompanist.web { property public final String url; } - @androidx.compose.runtime.Immutable public final class WebViewError { - ctor public WebViewError(android.webkit.WebResourceRequest? request, android.webkit.WebResourceError error); - method public android.webkit.WebResourceRequest? component1(); - method public android.webkit.WebResourceError component2(); - method public com.google.accompanist.web.WebViewError copy(android.webkit.WebResourceRequest? request, android.webkit.WebResourceError error); - method public android.webkit.WebResourceError getError(); - method public android.webkit.WebResourceRequest? getRequest(); + @Deprecated @androidx.compose.runtime.Immutable public final class WebViewError { + ctor @Deprecated public WebViewError(android.webkit.WebResourceRequest? request, android.webkit.WebResourceError error); + method @Deprecated public android.webkit.WebResourceRequest? component1(); + method @Deprecated public android.webkit.WebResourceError component2(); + method @Deprecated public com.google.accompanist.web.WebViewError copy(android.webkit.WebResourceRequest? request, android.webkit.WebResourceError error); + method @Deprecated public android.webkit.WebResourceError getError(); + method @Deprecated public android.webkit.WebResourceRequest? getRequest(); property public final android.webkit.WebResourceError error; property public final android.webkit.WebResourceRequest? request; } public final class WebViewKt { - method @androidx.compose.runtime.Composable public static void WebView(com.google.accompanist.web.WebViewState state, optional androidx.compose.ui.Modifier modifier, optional boolean captureBackPresses, optional com.google.accompanist.web.WebViewNavigator navigator, optional kotlin.jvm.functions.Function1 onCreated, optional kotlin.jvm.functions.Function1 onDispose, optional com.google.accompanist.web.AccompanistWebViewClient client, optional com.google.accompanist.web.AccompanistWebChromeClient chromeClient, optional kotlin.jvm.functions.Function1? factory); + method @Deprecated @androidx.compose.runtime.Composable public static void WebView(com.google.accompanist.web.WebViewState state, optional androidx.compose.ui.Modifier modifier, optional boolean captureBackPresses, optional com.google.accompanist.web.WebViewNavigator navigator, optional kotlin.jvm.functions.Function1 onCreated, optional kotlin.jvm.functions.Function1 onDispose, optional com.google.accompanist.web.AccompanistWebViewClient client, optional com.google.accompanist.web.AccompanistWebChromeClient chromeClient, optional kotlin.jvm.functions.Function1? factory); method @androidx.compose.runtime.Composable public static void WebView(com.google.accompanist.web.WebViewState state, android.widget.FrameLayout.LayoutParams layoutParams, optional androidx.compose.ui.Modifier modifier, optional boolean captureBackPresses, optional com.google.accompanist.web.WebViewNavigator navigator, optional kotlin.jvm.functions.Function1 onCreated, optional kotlin.jvm.functions.Function1 onDispose, optional com.google.accompanist.web.AccompanistWebViewClient client, optional com.google.accompanist.web.AccompanistWebChromeClient chromeClient, optional kotlin.jvm.functions.Function1? factory); - method public static androidx.compose.runtime.saveable.Saver getWebStateSaver(); - method @androidx.compose.runtime.Composable public static com.google.accompanist.web.WebViewState rememberSaveableWebViewState(); - method @androidx.compose.runtime.Composable public static com.google.accompanist.web.WebViewNavigator rememberWebViewNavigator(optional kotlinx.coroutines.CoroutineScope coroutineScope); - method @androidx.compose.runtime.Composable public static com.google.accompanist.web.WebViewState rememberWebViewState(String url, optional java.util.Map additionalHttpHeaders); - method @androidx.compose.runtime.Composable public static com.google.accompanist.web.WebViewState rememberWebViewStateWithHTMLData(String data, optional String? baseUrl, optional String encoding, optional String? mimeType, optional String? historyUrl); - property public static final androidx.compose.runtime.saveable.Saver WebStateSaver; + method @Deprecated public static androidx.compose.runtime.saveable.Saver getWebStateSaver(); + method @Deprecated @androidx.compose.runtime.Composable public static com.google.accompanist.web.WebViewState rememberSaveableWebViewState(); + method @Deprecated @androidx.compose.runtime.Composable public static com.google.accompanist.web.WebViewNavigator rememberWebViewNavigator(optional kotlinx.coroutines.CoroutineScope coroutineScope); + method @Deprecated @androidx.compose.runtime.Composable public static com.google.accompanist.web.WebViewState rememberWebViewState(String url, optional java.util.Map additionalHttpHeaders); + method @Deprecated @androidx.compose.runtime.Composable public static com.google.accompanist.web.WebViewState rememberWebViewState(String url, byte[] postData); + method @Deprecated @androidx.compose.runtime.Composable public static com.google.accompanist.web.WebViewState rememberWebViewStateWithHTMLData(String data, optional String? baseUrl, optional String encoding, optional String? mimeType, optional String? historyUrl); + property @Deprecated public static final androidx.compose.runtime.saveable.Saver WebStateSaver; } - @androidx.compose.runtime.Stable public final class WebViewNavigator { - ctor public WebViewNavigator(kotlinx.coroutines.CoroutineScope coroutineScope); - method public boolean getCanGoBack(); - method public boolean getCanGoForward(); - method public void loadHtml(String html, optional String? baseUrl, optional String? mimeType, optional String? encoding, optional String? historyUrl); - method public void loadUrl(String url, optional java.util.Map additionalHttpHeaders); - method public void navigateBack(); - method public void navigateForward(); - method public void reload(); - method public void stopLoading(); + @Deprecated @androidx.compose.runtime.Stable public final class WebViewNavigator { + ctor @Deprecated public WebViewNavigator(kotlinx.coroutines.CoroutineScope coroutineScope); + method @Deprecated public boolean getCanGoBack(); + method @Deprecated public boolean getCanGoForward(); + method @Deprecated public void loadHtml(String html, optional String? baseUrl, optional String? mimeType, optional String? encoding, optional String? historyUrl); + method @Deprecated public void loadUrl(String url, optional java.util.Map additionalHttpHeaders); + method @Deprecated public void navigateBack(); + method @Deprecated public void navigateForward(); + method @Deprecated public void postUrl(String url, byte[] postData); + method @Deprecated public void reload(); + method @Deprecated public void stopLoading(); property public final boolean canGoBack; property public final boolean canGoForward; } - @androidx.compose.runtime.Stable public final class WebViewState { - ctor public WebViewState(com.google.accompanist.web.WebContent webContent); - method public com.google.accompanist.web.WebContent getContent(); - method public androidx.compose.runtime.snapshots.SnapshotStateList getErrorsForCurrentRequest(); - method public String? getLastLoadedUrl(); - method public com.google.accompanist.web.LoadingState getLoadingState(); - method public android.graphics.Bitmap? getPageIcon(); - method public String? getPageTitle(); - method public android.os.Bundle? getViewState(); - method public boolean isLoading(); - method public void setContent(com.google.accompanist.web.WebContent); + @Deprecated @androidx.compose.runtime.Stable public final class WebViewState { + ctor @Deprecated public WebViewState(com.google.accompanist.web.WebContent webContent); + method @Deprecated public com.google.accompanist.web.WebContent getContent(); + method @Deprecated public androidx.compose.runtime.snapshots.SnapshotStateList getErrorsForCurrentRequest(); + method @Deprecated public String? getLastLoadedUrl(); + method @Deprecated public com.google.accompanist.web.LoadingState getLoadingState(); + method @Deprecated public android.graphics.Bitmap? getPageIcon(); + method @Deprecated public String? getPageTitle(); + method @Deprecated public android.os.Bundle? getViewState(); + method @Deprecated public boolean isLoading(); + method @Deprecated public void setContent(com.google.accompanist.web.WebContent); property public final com.google.accompanist.web.WebContent content; property public final androidx.compose.runtime.snapshots.SnapshotStateList errorsForCurrentRequest; property public final boolean isLoading; From f27f3ec7d157b18cbb9586d3a14785ae086d3add Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Fri, 25 Aug 2023 08:23:44 +1000 Subject: [PATCH 021/124] Deprecate missed web functions --- web/api/current.api | 82 +++++++++---------- .../com/google/accompanist/web/WebView.kt | 28 +++++++ 2 files changed, 69 insertions(+), 41 deletions(-) diff --git a/web/api/current.api b/web/api/current.api index d168665a6..87bfce444 100644 --- a/web/api/current.api +++ b/web/api/current.api @@ -1,21 +1,21 @@ // Signature format: 4.0 package com.google.accompanist.web { - public class AccompanistWebChromeClient extends android.webkit.WebChromeClient { - ctor public AccompanistWebChromeClient(); - method public com.google.accompanist.web.WebViewState getState(); + @Deprecated public class AccompanistWebChromeClient extends android.webkit.WebChromeClient { + ctor @Deprecated public AccompanistWebChromeClient(); + method @Deprecated public com.google.accompanist.web.WebViewState getState(); property public com.google.accompanist.web.WebViewState state; - field public com.google.accompanist.web.WebViewState state; + field @Deprecated public com.google.accompanist.web.WebViewState state; } - public class AccompanistWebViewClient extends android.webkit.WebViewClient { - ctor public AccompanistWebViewClient(); - method public com.google.accompanist.web.WebViewNavigator getNavigator(); - method public com.google.accompanist.web.WebViewState getState(); + @Deprecated public class AccompanistWebViewClient extends android.webkit.WebViewClient { + ctor @Deprecated public AccompanistWebViewClient(); + method @Deprecated public com.google.accompanist.web.WebViewNavigator getNavigator(); + method @Deprecated public com.google.accompanist.web.WebViewState getState(); property public com.google.accompanist.web.WebViewNavigator navigator; property public com.google.accompanist.web.WebViewState state; - field public com.google.accompanist.web.WebViewNavigator navigator; - field public com.google.accompanist.web.WebViewState state; + field @Deprecated public com.google.accompanist.web.WebViewNavigator navigator; + field @Deprecated public com.google.accompanist.web.WebViewState state; } @Deprecated public abstract sealed class LoadingState { @@ -37,23 +37,23 @@ package com.google.accompanist.web { property public final float progress; } - public abstract sealed class WebContent { + @Deprecated public abstract sealed class WebContent { method @Deprecated public final String? getCurrentUrl(); } - public static final class WebContent.Data extends com.google.accompanist.web.WebContent { - ctor public WebContent.Data(String data, optional String? baseUrl, optional String encoding, optional String? mimeType, optional String? historyUrl); - method public String component1(); - method public String? component2(); - method public String component3(); - method public String? component4(); - method public String? component5(); - method public com.google.accompanist.web.WebContent.Data copy(String data, String? baseUrl, String encoding, String? mimeType, String? historyUrl); - method public String? getBaseUrl(); - method public String getData(); - method public String getEncoding(); - method public String? getHistoryUrl(); - method public String? getMimeType(); + @Deprecated public static final class WebContent.Data extends com.google.accompanist.web.WebContent { + ctor @Deprecated public WebContent.Data(String data, optional String? baseUrl, optional String encoding, optional String? mimeType, optional String? historyUrl); + method @Deprecated public String component1(); + method @Deprecated public String? component2(); + method @Deprecated public String component3(); + method @Deprecated public String? component4(); + method @Deprecated public String? component5(); + method @Deprecated public com.google.accompanist.web.WebContent.Data copy(String data, String? baseUrl, String encoding, String? mimeType, String? historyUrl); + method @Deprecated public String? getBaseUrl(); + method @Deprecated public String getData(); + method @Deprecated public String getEncoding(); + method @Deprecated public String? getHistoryUrl(); + method @Deprecated public String? getMimeType(); property public final String? baseUrl; property public final String data; property public final String encoding; @@ -61,28 +61,28 @@ package com.google.accompanist.web { property public final String? mimeType; } - public static final class WebContent.NavigatorOnly extends com.google.accompanist.web.WebContent { - field public static final com.google.accompanist.web.WebContent.NavigatorOnly INSTANCE; + @Deprecated public static final class WebContent.NavigatorOnly extends com.google.accompanist.web.WebContent { + field @Deprecated public static final com.google.accompanist.web.WebContent.NavigatorOnly INSTANCE; } - public static final class WebContent.Post extends com.google.accompanist.web.WebContent { - ctor public WebContent.Post(String url, byte[] postData); - method public String component1(); - method public byte[] component2(); - method public com.google.accompanist.web.WebContent.Post copy(String url, byte[] postData); - method public byte[] getPostData(); - method public String getUrl(); + @Deprecated public static final class WebContent.Post extends com.google.accompanist.web.WebContent { + ctor @Deprecated public WebContent.Post(String url, byte[] postData); + method @Deprecated public String component1(); + method @Deprecated public byte[] component2(); + method @Deprecated public com.google.accompanist.web.WebContent.Post copy(String url, byte[] postData); + method @Deprecated public byte[] getPostData(); + method @Deprecated public String getUrl(); property public final byte[] postData; property public final String url; } - public static final class WebContent.Url extends com.google.accompanist.web.WebContent { - ctor public WebContent.Url(String url, optional java.util.Map additionalHttpHeaders); - method public String component1(); - method public java.util.Map component2(); - method public com.google.accompanist.web.WebContent.Url copy(String url, java.util.Map additionalHttpHeaders); - method public java.util.Map getAdditionalHttpHeaders(); - method public String getUrl(); + @Deprecated public static final class WebContent.Url extends com.google.accompanist.web.WebContent { + ctor @Deprecated public WebContent.Url(String url, optional java.util.Map additionalHttpHeaders); + method @Deprecated public String component1(); + method @Deprecated public java.util.Map component2(); + method @Deprecated public com.google.accompanist.web.WebContent.Url copy(String url, java.util.Map additionalHttpHeaders); + method @Deprecated public java.util.Map getAdditionalHttpHeaders(); + method @Deprecated public String getUrl(); property public final java.util.Map additionalHttpHeaders; property public final String url; } @@ -100,7 +100,7 @@ package com.google.accompanist.web { public final class WebViewKt { method @Deprecated @androidx.compose.runtime.Composable public static void WebView(com.google.accompanist.web.WebViewState state, optional androidx.compose.ui.Modifier modifier, optional boolean captureBackPresses, optional com.google.accompanist.web.WebViewNavigator navigator, optional kotlin.jvm.functions.Function1 onCreated, optional kotlin.jvm.functions.Function1 onDispose, optional com.google.accompanist.web.AccompanistWebViewClient client, optional com.google.accompanist.web.AccompanistWebChromeClient chromeClient, optional kotlin.jvm.functions.Function1? factory); - method @androidx.compose.runtime.Composable public static void WebView(com.google.accompanist.web.WebViewState state, android.widget.FrameLayout.LayoutParams layoutParams, optional androidx.compose.ui.Modifier modifier, optional boolean captureBackPresses, optional com.google.accompanist.web.WebViewNavigator navigator, optional kotlin.jvm.functions.Function1 onCreated, optional kotlin.jvm.functions.Function1 onDispose, optional com.google.accompanist.web.AccompanistWebViewClient client, optional com.google.accompanist.web.AccompanistWebChromeClient chromeClient, optional kotlin.jvm.functions.Function1? factory); + method @Deprecated @androidx.compose.runtime.Composable public static void WebView(com.google.accompanist.web.WebViewState state, android.widget.FrameLayout.LayoutParams layoutParams, optional androidx.compose.ui.Modifier modifier, optional boolean captureBackPresses, optional com.google.accompanist.web.WebViewNavigator navigator, optional kotlin.jvm.functions.Function1 onCreated, optional kotlin.jvm.functions.Function1 onDispose, optional com.google.accompanist.web.AccompanistWebViewClient client, optional com.google.accompanist.web.AccompanistWebChromeClient chromeClient, optional kotlin.jvm.functions.Function1? factory); method @Deprecated public static androidx.compose.runtime.saveable.Saver getWebStateSaver(); method @Deprecated @androidx.compose.runtime.Composable public static com.google.accompanist.web.WebViewState rememberSaveableWebViewState(); method @Deprecated @androidx.compose.runtime.Composable public static com.google.accompanist.web.WebViewNavigator rememberWebViewNavigator(optional kotlinx.coroutines.CoroutineScope coroutineScope); diff --git a/web/src/main/java/com/google/accompanist/web/WebView.kt b/web/src/main/java/com/google/accompanist/web/WebView.kt index 13ec0fa34..2286a0b96 100644 --- a/web/src/main/java/com/google/accompanist/web/WebView.kt +++ b/web/src/main/java/com/google/accompanist/web/WebView.kt @@ -159,6 +159,13 @@ public fun WebView( * @param chromeClient Provides access to WebChromeClient via subclassing * @param factory An optional WebView factory for using a custom subclass of WebView */ +@Deprecated( + """ +accompanist/web is deprecated and the API is no longer maintained. +We recommend forking the implementation and customising it to your needs. +For more information please visit https://google.github.io/accompanist/web +""" +) @Composable public fun WebView( state: WebViewState, @@ -254,6 +261,13 @@ public fun WebView( * As Accompanist Web needs to set its own web client to function, it provides this intermediary * class that can be overriden if further custom behaviour is required. */ +@Deprecated( + """ +accompanist/web is deprecated and the API is no longer maintained. +We recommend forking the implementation and customising it to your needs. +For more information please visit https://google.github.io/accompanist/web +""" +) public open class AccompanistWebViewClient : WebViewClient() { public open lateinit var state: WebViewState internal set @@ -303,6 +317,13 @@ public open class AccompanistWebViewClient : WebViewClient() { * As Accompanist Web needs to set its own web client to function, it provides this intermediary * class that can be overriden if further custom behaviour is required. */ +@Deprecated( + """ +accompanist/web is deprecated and the API is no longer maintained. +We recommend forking the implementation and customising it to your needs. +For more information please visit https://google.github.io/accompanist/web +""" +) public open class AccompanistWebChromeClient : WebChromeClient() { public open lateinit var state: WebViewState internal set @@ -324,6 +345,13 @@ public open class AccompanistWebChromeClient : WebChromeClient() { } } +@Deprecated( + """ +accompanist/web is deprecated and the API is no longer maintained. +We recommend forking the implementation and customising it to your needs. +For more information please visit https://google.github.io/accompanist/web +""" +) public sealed class WebContent { public data class Url( val url: String, From 768fcf9a592037bf9df194da37e6b698eab47c5b Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Fri, 25 Aug 2023 08:24:09 +1000 Subject: [PATCH 022/124] Update systemuicontroller/src/main/java/com/google/accompanist/systemuicontroller/SystemUiController.kt Co-authored-by: Alex Vanyo --- .../google/accompanist/systemuicontroller/SystemUiController.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/systemuicontroller/src/main/java/com/google/accompanist/systemuicontroller/SystemUiController.kt b/systemuicontroller/src/main/java/com/google/accompanist/systemuicontroller/SystemUiController.kt index 8f2cd4dce..acc1a1d4a 100644 --- a/systemuicontroller/src/main/java/com/google/accompanist/systemuicontroller/SystemUiController.kt +++ b/systemuicontroller/src/main/java/com/google/accompanist/systemuicontroller/SystemUiController.kt @@ -47,7 +47,7 @@ import androidx.core.view.WindowInsetsControllerCompat @Deprecated( """ accompanist/systemuicontroller is deprecated and the API is no longer maintained. -We recommend going edge to edge using EdgeToEdge.enableEdgeToEdge in androidx.activity. +We recommend going edge to edge using Activity.enableEdgeToEdge in androidx.activity. For more information please visit https://google.github.io/accompanist/systemuicontroller """ ) From 46c69c46419ae3c9b6dfddb1e7cea7feee81d557 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Fri, 25 Aug 2023 08:25:39 +1000 Subject: [PATCH 023/124] Deprecate pagerTabIndicator --- pager-indicators/api/current.api | 2 +- .../src/main/java/com/google/accompanist/pager/PagerTab.kt | 7 +++++++ .../appcompat/InstrumentedAppCompatThemeTest.kt | 2 ++ .../themeadapter/material/InstrumentedMdcThemeTest.kt | 2 ++ .../themeadapter/material3/InstrumentedMdc3ThemeTest.kt | 2 ++ 5 files changed, 14 insertions(+), 1 deletion(-) diff --git a/pager-indicators/api/current.api b/pager-indicators/api/current.api index 5871e8c57..aabbca7ef 100644 --- a/pager-indicators/api/current.api +++ b/pager-indicators/api/current.api @@ -10,7 +10,7 @@ package com.google.accompanist.pager { public final class PagerTabKt { method @Deprecated @com.google.accompanist.pager.ExperimentalPagerApi public static androidx.compose.ui.Modifier pagerTabIndicatorOffset(androidx.compose.ui.Modifier, com.google.accompanist.pager.PagerState pagerState, java.util.List tabPositions, optional kotlin.jvm.functions.Function1 pageIndexMapping); - method public static androidx.compose.ui.Modifier pagerTabIndicatorOffset(androidx.compose.ui.Modifier, androidx.compose.foundation.pager.PagerState pagerState, java.util.List tabPositions, optional kotlin.jvm.functions.Function1 pageIndexMapping); + method @Deprecated public static androidx.compose.ui.Modifier pagerTabIndicatorOffset(androidx.compose.ui.Modifier, androidx.compose.foundation.pager.PagerState pagerState, java.util.List tabPositions, optional kotlin.jvm.functions.Function1 pageIndexMapping); } } diff --git a/pager-indicators/src/main/java/com/google/accompanist/pager/PagerTab.kt b/pager-indicators/src/main/java/com/google/accompanist/pager/PagerTab.kt index 2a1fd50e1..072675cd0 100644 --- a/pager-indicators/src/main/java/com/google/accompanist/pager/PagerTab.kt +++ b/pager-indicators/src/main/java/com/google/accompanist/pager/PagerTab.kt @@ -60,6 +60,13 @@ public fun Modifier.pagerTabIndicatorOffset( * [androidx.compose.foundation.pager.VerticalPager]. */ @OptIn(ExperimentalFoundationApi::class) +@Deprecated( + """ + pagerTabIndicatorOffset for accompanist Pagers are deprecated, please use the version that takes + androidx.compose.foundation.pager.PagerState instead +For more migration information, please visit https://google.github.io/accompanist/pager/#migration +""" +) public fun Modifier.pagerTabIndicatorOffset( pagerState: androidx.compose.foundation.pager.PagerState, tabPositions: List, diff --git a/themeadapter-appcompat/src/androidTest/kotlin/com/google/accompanist/themeadapter/appcompat/InstrumentedAppCompatThemeTest.kt b/themeadapter-appcompat/src/androidTest/kotlin/com/google/accompanist/themeadapter/appcompat/InstrumentedAppCompatThemeTest.kt index 6c19b5d02..a8ae3e785 100644 --- a/themeadapter-appcompat/src/androidTest/kotlin/com/google/accompanist/themeadapter/appcompat/InstrumentedAppCompatThemeTest.kt +++ b/themeadapter-appcompat/src/androidTest/kotlin/com/google/accompanist/themeadapter/appcompat/InstrumentedAppCompatThemeTest.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.themeadapter.appcompat import androidx.appcompat.app.AppCompatActivity diff --git a/themeadapter-material/src/androidTest/kotlin/com/google/accompanist/themeadapter/material/InstrumentedMdcThemeTest.kt b/themeadapter-material/src/androidTest/kotlin/com/google/accompanist/themeadapter/material/InstrumentedMdcThemeTest.kt index 68f980c78..e2f95f5d1 100644 --- a/themeadapter-material/src/androidTest/kotlin/com/google/accompanist/themeadapter/material/InstrumentedMdcThemeTest.kt +++ b/themeadapter-material/src/androidTest/kotlin/com/google/accompanist/themeadapter/material/InstrumentedMdcThemeTest.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.themeadapter.material import androidx.appcompat.app.AppCompatActivity diff --git a/themeadapter-material3/src/androidTest/kotlin/com/google/accompanist/themeadapter/material3/InstrumentedMdc3ThemeTest.kt b/themeadapter-material3/src/androidTest/kotlin/com/google/accompanist/themeadapter/material3/InstrumentedMdc3ThemeTest.kt index ff7eeff8b..8e301bd2f 100644 --- a/themeadapter-material3/src/androidTest/kotlin/com/google/accompanist/themeadapter/material3/InstrumentedMdc3ThemeTest.kt +++ b/themeadapter-material3/src/androidTest/kotlin/com/google/accompanist/themeadapter/material3/InstrumentedMdc3ThemeTest.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.themeadapter.material3 import androidx.appcompat.app.AppCompatActivity From b3c967ec2aa57ab5dfa9cdc57313c0e8b17c14c7 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Fri, 25 Aug 2023 10:21:33 +1000 Subject: [PATCH 024/124] v0.33.1-alpha --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 86ae52c54..402de523c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -33,7 +33,7 @@ systemProp.org.gradle.internal.http.socketTimeout=120000 GROUP=com.google.accompanist # !! No longer need to update this manually when using a Compose SNAPSHOT -VERSION_NAME=0.33.1-SNAPSHOT +VERSION_NAME=0.33.1-alpha POM_DESCRIPTION=Utilities for Jetpack Compose From 45db0510a3c4c24bce805db8f4405b47128a936a Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Fri, 25 Aug 2023 10:21:53 +1000 Subject: [PATCH 025/124] Prepare for next release --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 402de523c..05f7571f2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -33,7 +33,7 @@ systemProp.org.gradle.internal.http.socketTimeout=120000 GROUP=com.google.accompanist # !! No longer need to update this manually when using a Compose SNAPSHOT -VERSION_NAME=0.33.1-alpha +VERSION_NAME=0.33.2-SNAPSHOT POM_DESCRIPTION=Utilities for Jetpack Compose From 1cc7a3ea455ebf48700268b5d78cd271501953bc Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Fri, 25 Aug 2023 13:44:20 +0530 Subject: [PATCH 026/124] [Docs] Replace corp URLs with publicly accessible ones --- docs/insets.md | 2 +- .../google/accompanist/pager/InstrumentedHorizontalPagerTest.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/insets.md b/docs/insets.md index 6f8a9f0b4..ba201aff4 100644 --- a/docs/insets.md +++ b/docs/insets.md @@ -203,7 +203,7 @@ For a more complex example, see the [`EdgeToEdgeLazyColumn`](https://github.com/ ## Inset-aware layouts (`insets-ui`) !!! warning - **This library is deprecated, with [official support](https://android-review.git.corp.google.com/c/platform/frameworks/support/+/2667875) in androidx.compose.material.** The original documentation is below. + **This library is deprecated, with [official support](https://android-review.googlesource.com/c/platform/frameworks/support/+/2667875) in androidx.compose.material.** The original documentation is below. Unfortunately, most of Compose Material's layouts do not support the use of content padding, which means that the following code probably doesn't produce the effect you want: diff --git a/pager/src/androidTest/kotlin/com/google/accompanist/pager/InstrumentedHorizontalPagerTest.kt b/pager/src/androidTest/kotlin/com/google/accompanist/pager/InstrumentedHorizontalPagerTest.kt index 0f7d6a26e..7a03c235f 100644 --- a/pager/src/androidTest/kotlin/com/google/accompanist/pager/InstrumentedHorizontalPagerTest.kt +++ b/pager/src/androidTest/kotlin/com/google/accompanist/pager/InstrumentedHorizontalPagerTest.kt @@ -28,7 +28,7 @@ import org.junit.runners.Parameterized /** * Version of [BaseHorizontalPagerTest] which is designed to be run on device/emulators. */ -@Ignore("https://buganizer.corp.google.com/issues/218668336") // To be fixed in alpha04 +@Ignore("https://issuetracker.google.com/issues/218668336") // To be fixed in alpha04 @RunWith(Parameterized::class) class InstrumentedHorizontalPagerTest( itemWidthFraction: Float, From 36ada83c9aaf8b2b87421ff163ea98ceb879982b Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Mon, 11 Sep 2023 12:13:59 +1000 Subject: [PATCH 027/124] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 928e5df2a..82ffea177 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ See our [Migration Guide](https://google.github.io/accompanist/navigation-animat A library that provides easy-to-use modifiers for displaying a placeholder UI while content is loading. ### 🍫 [System UI Controller](./systemuicontroller/) (Deprecated) -A library that provides easy-to-use utilities for recoloring the Android system bars from Jetpack Compose. +We recommend migrating to edge to edge. See our [Migration Guide](https://google.github.io/accompanist/systemuicontroller/) for more details. ### 🎨 [AppCompat Theme Adapter](./themeadapter-appcompat/) (Deprecated) A library that enables the reuse of [AppCompat][appcompat] XML themes, for theming in Jetpack Compose. From d395aa2e0e7744f1d1f3d38637d25adddfd5a343 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Mon, 25 Sep 2023 09:22:33 +1000 Subject: [PATCH 028/124] Update libs.versions.toml --- gradle/libs.versions.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8f9f00b20..2e6194266 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] -compose = "1.6.0-alpha02" -composeCompiler = "1.5.1" +compose = "1.6.0-alpha06" +composeCompiler = "1.5.3" composeMaterial3 = "1.0.1" composesnapshot = "-" # a single character = no snapshot @@ -12,7 +12,7 @@ gradlePlugin = "8.1.0" lintMinCompose = "30.0.0" ktlint = "0.45.2" -kotlin = "1.9.0" +kotlin = "1.9.10" coroutines = "1.6.4" okhttp = "3.12.13" coil = "1.3.2" From 0f115965032f0b7dbf91c4cdf52afd1a13eda783 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Mon, 25 Sep 2023 09:23:36 +1000 Subject: [PATCH 029/124] v0.33.2-alpha --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 05f7571f2..f17bffac3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -33,7 +33,7 @@ systemProp.org.gradle.internal.http.socketTimeout=120000 GROUP=com.google.accompanist # !! No longer need to update this manually when using a Compose SNAPSHOT -VERSION_NAME=0.33.2-SNAPSHOT +VERSION_NAME=0.33.2-alpha POM_DESCRIPTION=Utilities for Jetpack Compose From b9609bebdba1d0240e609d8df7524710127b28de Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Mon, 25 Sep 2023 09:53:51 +1000 Subject: [PATCH 030/124] Fix deprecation in sample --- .../sample/adaptive/NavDrawerFoldAwareColumnSample.kt | 2 -- .../accompanist/sample/adaptive/NavRailFoldAwareColumnSample.kt | 2 -- 2 files changed, 4 deletions(-) diff --git a/sample/src/main/java/com/google/accompanist/sample/adaptive/NavDrawerFoldAwareColumnSample.kt b/sample/src/main/java/com/google/accompanist/sample/adaptive/NavDrawerFoldAwareColumnSample.kt index 4b250952c..d89bf98e9 100644 --- a/sample/src/main/java/com/google/accompanist/sample/adaptive/NavDrawerFoldAwareColumnSample.kt +++ b/sample/src/main/java/com/google/accompanist/sample/adaptive/NavDrawerFoldAwareColumnSample.kt @@ -32,7 +32,6 @@ import androidx.compose.material.Text import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Done import androidx.compose.material.icons.filled.Face -import androidx.compose.material.icons.filled.List import androidx.compose.material.icons.filled.Lock import androidx.compose.material.icons.filled.Search import androidx.compose.material.icons.filled.Star @@ -68,7 +67,6 @@ class NavDrawerFoldAwareColumnSample : ComponentActivity() { @Composable fun NavDrawerExample(activity: Activity) { val icons = listOf( - Icons.Default.List, Icons.Default.Done, Icons.Default.Face, Icons.Default.Lock, diff --git a/sample/src/main/java/com/google/accompanist/sample/adaptive/NavRailFoldAwareColumnSample.kt b/sample/src/main/java/com/google/accompanist/sample/adaptive/NavRailFoldAwareColumnSample.kt index e25693f5a..8d296e126 100644 --- a/sample/src/main/java/com/google/accompanist/sample/adaptive/NavRailFoldAwareColumnSample.kt +++ b/sample/src/main/java/com/google/accompanist/sample/adaptive/NavRailFoldAwareColumnSample.kt @@ -33,7 +33,6 @@ import androidx.compose.material.Text import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Done import androidx.compose.material.icons.filled.Face -import androidx.compose.material.icons.filled.List import androidx.compose.material.icons.filled.Lock import androidx.compose.material.icons.filled.Search import androidx.compose.material.icons.filled.Star @@ -67,7 +66,6 @@ class NavRailFoldAwareColumnSample : ComponentActivity() { @Composable fun NavRail(activity: Activity) { val icons = listOf( - Icons.Default.List, Icons.Default.Done, Icons.Default.Face, Icons.Default.Lock, From a18e4d0dc7aa994cedae80a72f3dbb75d5ce0f40 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Tue, 26 Sep 2023 09:56:20 +1000 Subject: [PATCH 031/124] Prepare for next release --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index f17bffac3..2b8ae2db7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -33,7 +33,7 @@ systemProp.org.gradle.internal.http.socketTimeout=120000 GROUP=com.google.accompanist # !! No longer need to update this manually when using a Compose SNAPSHOT -VERSION_NAME=0.33.2-alpha +VERSION_NAME=0.33.3-SNAPSHOT POM_DESCRIPTION=Utilities for Jetpack Compose From b98cacd07379dd31c24f7a2a7f707f747d0566b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Odin=20Asbj=C3=B8rnsen?= Date: Thu, 18 May 2023 16:14:04 +0200 Subject: [PATCH 032/124] Prepare permission-lint for Kotlin DSL migration --- permissions-lint/build.gradle | 42 +++++++++++++++++------------------ 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/permissions-lint/build.gradle b/permissions-lint/build.gradle index e8db4072d..250ab61a0 100644 --- a/permissions-lint/build.gradle +++ b/permissions-lint/build.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2021 The Android Open Source Project + * Copyright 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,10 +15,10 @@ */ plugins { - id 'java-library' - id 'kotlin' - id 'org.jetbrains.dokka' - id 'com.android.lint' + id("java-library") + id("kotlin") + id("org.jetbrains.dokka") + id("com.android.lint") } kotlin { @@ -26,11 +26,11 @@ kotlin { } lintOptions { - htmlReport true - htmlOutput file("lint-report.html") - textReport true - absolutePaths false - ignoreTestSources true + htmlReport = true + htmlOutput = file("lint-report.html") + textReport = true + absolutePaths = false + ignoreTestSources = true } affectedTestConfiguration { @@ -67,19 +67,19 @@ tasks.named("jar").configure { task -> dependencies { // Bundle metadataJvm inside the Jar - bundleInside libs.kotlin.metadataJvm + bundleInside(libs.kotlin.metadataJvm) - compileOnly libs.android.tools.lint.api - compileOnly libs.kotlin.reflect - compileOnly libs.kotlin.stdlib - compileOnly libs.kotlin.stdlibJdk8 // Override version from transitive dependencies + compileOnly(libs.android.tools.lint.api) + compileOnly(libs.kotlin.reflect) + compileOnly(libs.kotlin.stdlib) + compileOnly(libs.kotlin.stdlibJdk8) // Override version from transitive dependencies - testImplementation libs.junit - testImplementation libs.kotlin.reflect - testImplementation libs.kotlin.stdlib - testImplementation libs.kotlin.stdlibJdk8 // Override version from transitive dependencies - testImplementation libs.android.tools.lint.lint - testImplementation libs.android.tools.lint.tests + testImplementation(libs.junit) + testImplementation(libs.kotlin.reflect) + testImplementation(libs.kotlin.stdlib) + testImplementation(libs.kotlin.stdlibJdk8) // Override version from transitive dependencies + testImplementation(libs.android.tools.lint.lint) + testImplementation(libs.android.tools.lint.tests) } java { From 5670636e1eee3cda8c5a3f0bed47f46ca9a091ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Odin=20Asbj=C3=B8rnsen?= Date: Thu, 18 May 2023 17:42:10 +0200 Subject: [PATCH 033/124] Migrate permissions-lint to Kotlin DSL --- gradle/libs.versions.toml | 2 + .../{build.gradle => build.gradle.kts} | 46 +++++++++---------- 2 files changed, 25 insertions(+), 23 deletions(-) rename permissions-lint/{build.gradle => build.gradle.kts} (69%) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2e6194266..eddac9fc8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,6 +17,7 @@ coroutines = "1.6.4" okhttp = "3.12.13" coil = "1.3.2" +androidlint = "25.3.0" androidxtest = "1.4.0" androidxnavigation = "2.7.0-alpha01" androidxWindow = "1.0.0" @@ -107,6 +108,7 @@ squareup-mockwebserver = "com.squareup.okhttp3:mockwebserver:4.9.3" android-application = { id = "com.android.application", version.ref = "gradlePlugin" } android-kotlin = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } android-library = { id = "com.android.library", version.ref = "gradlePlugin" } +android-lint = { id = "com.android.lint", version.ref = "androidlint"} jetbrains-dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } gradle-metalava = { id = "me.tylerbwong.gradle.metalava", version.ref = "metalava" } vanniktech-maven-publish = { id = "com.vanniktech.maven.publish", version.ref = "vanniktechPublish" } diff --git a/permissions-lint/build.gradle b/permissions-lint/build.gradle.kts similarity index 69% rename from permissions-lint/build.gradle rename to permissions-lint/build.gradle.kts index 250ab61a0..fa7376da1 100644 --- a/permissions-lint/build.gradle +++ b/permissions-lint/build.gradle.kts @@ -15,17 +15,17 @@ */ plugins { - id("java-library") + `java-library` id("kotlin") - id("org.jetbrains.dokka") - id("com.android.lint") + id(libs.plugins.jetbrains.dokka.get().pluginId) + id(libs.plugins.android.lint.get().pluginId) } kotlin { explicitApi() } -lintOptions { +lint { htmlReport = true htmlOutput = file("lint-report.html") textReport = true @@ -43,26 +43,26 @@ affectedTestConfiguration { * not currently support dependencies, so instead we need to bundle any dependencies with the * lint jar manually. (b/182319899) */ -def bundle = configurations.create("bundleInside") +val bundleInside: Configuration = configurations.create("bundleInside") // bundleInside dependencies should be included as compileOnly and testImplementation as well -configurations.getByName("compileOnly").setExtendsFrom([bundle]) -configurations.getByName("testImplementation").setExtendsFrom([bundle]) -tasks.named("jar").configure { task -> - def jarTask = task as Jar - jarTask.dependsOn(bundle) - jarTask.from({ - bundle - // The stdlib is already bundled with lint, so no need to include it manually - // in the lint.jar if any dependencies here depend on it - .filter { !it.name.contains("kotlin-stdlib") } - .collect { file -> - if (file.isDirectory()) { - file - } else { - zipTree(file) - } - } - }) +configurations.getByName("compileOnly").setExtendsFrom(setOf(bundleInside)) +configurations.getByName("testImplementation").setExtendsFrom(setOf(bundleInside)) + +tasks.getByName("jar") { + this.dependsOn(bundleInside) + this.from({ + bundleInside + // The stdlib is already bundled with lint, so no need to include it manually + // in the lint.jar if any dependencies here depend on it + .filter { !it.name.contains("kotlin-stdlib") } + .map { file -> + if (file.isDirectory) { + file + } else { + zipTree(file) + } + } + }) } dependencies { From b62a67a4657f80abc2155434ec7e786e8a042c76 Mon Sep 17 00:00:00 2001 From: Rebecca Franks Date: Wed, 11 Oct 2023 12:56:03 +0100 Subject: [PATCH 034/124] Update pager.md --- docs/pager.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/pager.md b/docs/pager.md index fbece2432..7dabe576a 100644 --- a/docs/pager.md +++ b/docs/pager.md @@ -34,8 +34,8 @@ The following is a mapping of the pager classes from accompanist to androidx.com | `calculateCurrentOffsetForPage` | Use `(pagerState.currentPage - page) + pagerState.currentPageOffsetFraction` | | `PagerState#currentPageOffset` | `PagerState#currentPageOffsetFraction` | | `Modifier.pagerTabIndicatorOffset()` | Implement it yourself, or still include and use `accompanist-pager-indicators`, it now supports `androidx.compose.foundation.pager.PagerState` | -| `HorizontalPagerIndicator` | Implement it yourself, or still include and use `accompanist-pager-indicators`, it now supports `androidx.compose.foundation.pager.HorizontalPager` by explicitly providing a `pageCount` param to the `HorizontalPagerIndicator` method | -| `VerticalPagerIndicator` | Implement it yourself, or still include and use `accompanist-pager-indicators`, it now supports `androidx.compose.foundation.pager.HorizontalPager` by explicitly providing a `pageCount` param to the `HorizontalPagerIndicator` method | +| `HorizontalPagerIndicator` | Implement it yourself, or fork `accompanist-pager-indicators` implementation | +| `VerticalPagerIndicator` | Implement it yourself, or fork `accompanist-pager-indicators` implementation | | `PagerDefaults.flingBehavior()` | `androidx.compose.foundation.pager.PagerDefaults.flingBehavior()` | The biggest change is that `HorizontalPager` and `VerticalPager`'s number of pages is now called `pageCount` instead of `count`. From 70f86c865282e9653eec6ac90701c37d5a8d5ffa Mon Sep 17 00:00:00 2001 From: Alex Vanyo Date: Tue, 17 Oct 2023 13:16:45 -0600 Subject: [PATCH 035/124] Update issue templates with library changes --- .../appcompat-theme-adapter-bug-report.md | 16 ---------------- .../ISSUE_TEMPLATE/flow-layouts-bug-report.md | 16 ---------------- .../navigation-animation-bug-report.md | 16 ---------------- .github/ISSUE_TEMPLATE/pager-bug-report.md | 16 ---------------- .github/ISSUE_TEMPLATE/permissions-bug-report.md | 2 +- .../swipe-to-refresh-bug-report.md | 16 ---------------- .../system-ui-controller-bug-report.md | 16 ---------------- .../theme-adapter-appcompat-bug-report.md | 16 ---------------- .../theme-adapter-core-bug-report .md | 16 ---------------- .../theme-adapter-material-bug-report.md | 16 ---------------- .../theme-adapter-material3-bug-report.md | 16 ---------------- .github/ISSUE_TEMPLATE/web-bug-report.md | 16 ---------------- 12 files changed, 1 insertion(+), 177 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/appcompat-theme-adapter-bug-report.md delete mode 100644 .github/ISSUE_TEMPLATE/flow-layouts-bug-report.md delete mode 100644 .github/ISSUE_TEMPLATE/navigation-animation-bug-report.md delete mode 100644 .github/ISSUE_TEMPLATE/pager-bug-report.md delete mode 100644 .github/ISSUE_TEMPLATE/swipe-to-refresh-bug-report.md delete mode 100644 .github/ISSUE_TEMPLATE/system-ui-controller-bug-report.md delete mode 100644 .github/ISSUE_TEMPLATE/theme-adapter-appcompat-bug-report.md delete mode 100644 .github/ISSUE_TEMPLATE/theme-adapter-core-bug-report .md delete mode 100644 .github/ISSUE_TEMPLATE/theme-adapter-material-bug-report.md delete mode 100644 .github/ISSUE_TEMPLATE/theme-adapter-material3-bug-report.md delete mode 100644 .github/ISSUE_TEMPLATE/web-bug-report.md diff --git a/.github/ISSUE_TEMPLATE/appcompat-theme-adapter-bug-report.md b/.github/ISSUE_TEMPLATE/appcompat-theme-adapter-bug-report.md deleted file mode 100644 index ec0f51bd3..000000000 --- a/.github/ISSUE_TEMPLATE/appcompat-theme-adapter-bug-report.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: AppCompat Theme Adapter bug report -about: Create a report to help us improve -title: "[AppCompat Theme Adapter]" -labels: '' -assignees: ricknout - ---- - -**Description** - -**Steps to reproduce** - -**Expected behavior** - -**Additional context** diff --git a/.github/ISSUE_TEMPLATE/flow-layouts-bug-report.md b/.github/ISSUE_TEMPLATE/flow-layouts-bug-report.md deleted file mode 100644 index 10e34614b..000000000 --- a/.github/ISSUE_TEMPLATE/flow-layouts-bug-report.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: Flow Layouts bug report -about: Create a report to help us improve -title: "[Flow layouts]" -labels: '' -assignees: '' - ---- - -**Description** - -**Steps to reproduce** - -**Expected behavior** - -**Additional context** diff --git a/.github/ISSUE_TEMPLATE/navigation-animation-bug-report.md b/.github/ISSUE_TEMPLATE/navigation-animation-bug-report.md deleted file mode 100644 index 3ed11041c..000000000 --- a/.github/ISSUE_TEMPLATE/navigation-animation-bug-report.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: Navigation Animation bug report -about: Create a report to help us improve -title: "[Navigation Animation] " -labels: '' -assignees: jbw0033 - ---- - -**Description** - -**Steps to reproduce** - -**Expected behavior** - -**Additional context** diff --git a/.github/ISSUE_TEMPLATE/pager-bug-report.md b/.github/ISSUE_TEMPLATE/pager-bug-report.md deleted file mode 100644 index eecb731b3..000000000 --- a/.github/ISSUE_TEMPLATE/pager-bug-report.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: Pager bug report -about: Create a report to help us improve -title: "[Pager]" -labels: '' -assignees: andkulikov - ---- - -**Description** - -**Steps to reproduce** - -**Expected behavior** - -**Additional context** diff --git a/.github/ISSUE_TEMPLATE/permissions-bug-report.md b/.github/ISSUE_TEMPLATE/permissions-bug-report.md index 13571160e..20f2cebc7 100644 --- a/.github/ISSUE_TEMPLATE/permissions-bug-report.md +++ b/.github/ISSUE_TEMPLATE/permissions-bug-report.md @@ -3,7 +3,7 @@ name: Permissions bug report about: Create a report to help us improve title: "[Permissions] " labels: '' -assignees: manuelvicnt +assignees: bentrengrove --- diff --git a/.github/ISSUE_TEMPLATE/swipe-to-refresh-bug-report.md b/.github/ISSUE_TEMPLATE/swipe-to-refresh-bug-report.md deleted file mode 100644 index 28b22887d..000000000 --- a/.github/ISSUE_TEMPLATE/swipe-to-refresh-bug-report.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: Swipe to Refresh bug report -about: Create a report to help us improve -title: "[Swipe to refresh]" -labels: '' -assignees: '' - ---- - -**Description** - -**Steps to reproduce** - -**Expected behavior** - -**Additional context** diff --git a/.github/ISSUE_TEMPLATE/system-ui-controller-bug-report.md b/.github/ISSUE_TEMPLATE/system-ui-controller-bug-report.md deleted file mode 100644 index e02116997..000000000 --- a/.github/ISSUE_TEMPLATE/system-ui-controller-bug-report.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: System UI Controller bug report -about: Create a report to help us improve -title: "[System UI Controller] " -labels: '' -assignees: alexvanyo - ---- - -**Description** - -**Steps to reproduce** - -**Expected behavior** - -**Additional context** diff --git a/.github/ISSUE_TEMPLATE/theme-adapter-appcompat-bug-report.md b/.github/ISSUE_TEMPLATE/theme-adapter-appcompat-bug-report.md deleted file mode 100644 index ec0f51bd3..000000000 --- a/.github/ISSUE_TEMPLATE/theme-adapter-appcompat-bug-report.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: AppCompat Theme Adapter bug report -about: Create a report to help us improve -title: "[AppCompat Theme Adapter]" -labels: '' -assignees: ricknout - ---- - -**Description** - -**Steps to reproduce** - -**Expected behavior** - -**Additional context** diff --git a/.github/ISSUE_TEMPLATE/theme-adapter-core-bug-report .md b/.github/ISSUE_TEMPLATE/theme-adapter-core-bug-report .md deleted file mode 100644 index 94c8a00a2..000000000 --- a/.github/ISSUE_TEMPLATE/theme-adapter-core-bug-report .md +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: Core Theme Adapter bug report -about: Create a report to help us improve -title: "[Core Theme Adapter]" -labels: '' -assignees: ricknout - ---- - -**Description** - -**Steps to reproduce** - -**Expected behavior** - -**Additional context** diff --git a/.github/ISSUE_TEMPLATE/theme-adapter-material-bug-report.md b/.github/ISSUE_TEMPLATE/theme-adapter-material-bug-report.md deleted file mode 100644 index 52de208c9..000000000 --- a/.github/ISSUE_TEMPLATE/theme-adapter-material-bug-report.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: Material Theme Adapter bug report -about: Create a report to help us improve -title: "[Material Theme Adapter]" -labels: '' -assignees: ricknout - ---- - -**Description** - -**Steps to reproduce** - -**Expected behavior** - -**Additional context** diff --git a/.github/ISSUE_TEMPLATE/theme-adapter-material3-bug-report.md b/.github/ISSUE_TEMPLATE/theme-adapter-material3-bug-report.md deleted file mode 100644 index 3d13aaa00..000000000 --- a/.github/ISSUE_TEMPLATE/theme-adapter-material3-bug-report.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: Material 3 Theme Adapter bug report -about: Create a report to help us improve -title: "[Material 3 Theme Adapter]" -labels: '' -assignees: ricknout - ---- - -**Description** - -**Steps to reproduce** - -**Expected behavior** - -**Additional context** diff --git a/.github/ISSUE_TEMPLATE/web-bug-report.md b/.github/ISSUE_TEMPLATE/web-bug-report.md deleted file mode 100644 index c56855460..000000000 --- a/.github/ISSUE_TEMPLATE/web-bug-report.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: WebView bug report -about: Create a report about WebView -title: "[WebView] " -labels: web -assignees: bentrengrove - ---- - -**Description** - -**Steps to reproduce** - -**Expected behavior** - -**Additional context** From bca5b1c0f83a536d9e7bb6ab67ad628f9bf53498 Mon Sep 17 00:00:00 2001 From: Mathew Smith Date: Fri, 20 Oct 2023 10:05:47 +1300 Subject: [PATCH 036/124] Show deprecated message within the warning box --- docs/placeholder.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/placeholder.md b/docs/placeholder.md index 979be7507..9fa8a76bd 100644 --- a/docs/placeholder.md +++ b/docs/placeholder.md @@ -3,7 +3,7 @@ [![Maven Central](https://img.shields.io/maven-central/v/com.google.accompanist/accompanist-placeholder)](https://search.maven.org/search?q=g:com.google.accompanist) !!! warning -**This library is deprecated, and the API is no longer maintained. We recommend forking the implementation and customising it to your needs.** The original documentation is below. + **This library is deprecated, and the API is no longer maintained. We recommend forking the implementation and customising it to your needs.** The original documentation is below. A library which provides a [modifier][modifier] for display 'placeholder' UI while content is loading. From 8458afff3e7364ce98ea481817d00305ebc3b9c5 Mon Sep 17 00:00:00 2001 From: Mathew Smith Date: Wed, 29 Nov 2023 13:51:10 +1300 Subject: [PATCH 037/124] Update flowlayout.md --- docs/flowlayout.md | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/docs/flowlayout.md b/docs/flowlayout.md index a42a657d5..3396d8e5d 100644 --- a/docs/flowlayout.md +++ b/docs/flowlayout.md @@ -2,29 +2,13 @@ [![Maven Central](https://img.shields.io/maven-central/v/com.google.accompanist/accompanist-flowlayout)](https://search.maven.org/search?q=g:com.google.accompanist) -Flow Layouts in Accompanist is now deprecated. Please see the migration guide below to begin using -Flow Layouts in Androidx. - -The official `androidx.compose.foundation` FlowLayouts support is very similar to accompanist/flowlayouts, with a few changes. - -It is most similar to `Row` and `Column` and shares similar modifiers and the scopes. -Unlike the standard `Row` and `Column` composables, if it runs out of space on the current row, -the children are placed in the next line, and this repeats until the children are fully placed. - -## Usage - -``` kotlin -FlowRow { - // row contents -} - -FlowColumn { - // column contents -} -``` +!!! warning + **This library is deprecated, with official insets support in androidx.compose.foundation.** The migration guide and original documentation is below. ## Migration Guide to the official FlowLayouts +The official `androidx.compose.foundation` FlowLayouts support is very similar to accompanist/flowlayouts, with a few changes. + 1. Replace import packages to point to Androidx.Compose ``` kotlin import androidx.compose.foundation.layout.FlowColumn @@ -126,6 +110,24 @@ FlowRow(maxItemsInEachRow = 3) { For examples, refer to the [Flow Row samples](https://android.googlesource.com/platform/frameworks/support/+/refs/heads/androidx-main/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/FlowRowSample.kt) and the [Flow Column samples](https://android.googlesource.com/platform/frameworks/support/+/refs/heads/androidx-main/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/FlowColumnSample.kt). +## Original Docs + +It is most similar to `Row` and `Column` and shares similar modifiers and the scopes. +Unlike the standard `Row` and `Column` composables, if it runs out of space on the current row, +the children are placed in the next line, and this repeats until the children are fully placed. + +## Usage + +``` kotlin +FlowRow { + // row contents +} + +FlowColumn { + // column contents +} +``` + ## Download [![Maven Central](https://img.shields.io/maven-central/v/com.google.accompanist/accompanist-flowlayout)](https://search.maven.org/search?q=g:com.google.accompanist) @@ -136,7 +138,7 @@ repositories { } dependencies { - implementation "androidx.compose.foundation:foundation:" + implementation "com.google.accompanist:accompanist-flowlayout:" } ``` From 2b2f9561f50305c01f50d9de6393630797d79844 Mon Sep 17 00:00:00 2001 From: Mathew Smith Date: Wed, 29 Nov 2023 13:56:59 +1300 Subject: [PATCH 038/124] Update flowlayout.md --- docs/flowlayout.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/flowlayout.md b/docs/flowlayout.md index 3396d8e5d..4383d3d70 100644 --- a/docs/flowlayout.md +++ b/docs/flowlayout.md @@ -3,7 +3,7 @@ [![Maven Central](https://img.shields.io/maven-central/v/com.google.accompanist/accompanist-flowlayout)](https://search.maven.org/search?q=g:com.google.accompanist) !!! warning - **This library is deprecated, with official insets support in androidx.compose.foundation.** The migration guide and original documentation is below. + **This library is deprecated, with official FlowLayout support in androidx.compose.foundation.** The migration guide and original documentation is below. ## Migration Guide to the official FlowLayouts From 9f8622a18c3ab85391971a5ac8a2dadf8587caf4 Mon Sep 17 00:00:00 2001 From: Mathew Smith Date: Wed, 29 Nov 2023 14:20:08 +1300 Subject: [PATCH 039/124] Update systemuicontroller.md --- docs/systemuicontroller.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/systemuicontroller.md b/docs/systemuicontroller.md index 7f71dadad..beb01632c 100644 --- a/docs/systemuicontroller.md +++ b/docs/systemuicontroller.md @@ -3,7 +3,7 @@ [![Maven Central](https://img.shields.io/maven-central/v/com.google.accompanist/accompanist-systemuicontroller)](https://search.maven.org/search?q=g:com.google.accompanist) !!! warning -**This library is deprecated, and the API is no longer maintained. We recommend forking the implementation and customising it to your needs.** The original documentation is below. + **This library is deprecated, and the API is no longer maintained. We recommend forking the implementation and customising it to your needs.** The original documentation is below. ## Migration Recommendation: If you were using SystemUIController to go edge-to-edge in your activity and change the system bar colors and system bar icon colors, use the new [Activity.enableEdgeToEdge](https://developer.android.com/reference/androidx/activity/ComponentActivity#(androidx.activity.ComponentActivity).enableEdgeToEdge(androidx.activity.SystemBarStyle,androidx.activity.SystemBarStyle)) method available in androidx.activity 1.8.0-alpha03 and later. This method backports the scrims used on some versions of Android. [This](https://github.com/android/nowinandroid/pull/817) is a sample PR of the migration to the new method and removing the dependency on SystemUIController in Now in Android. From c97a23e48ec025c3bf699f0e4a83fc8c48413f71 Mon Sep 17 00:00:00 2001 From: Mathew Smith Date: Wed, 29 Nov 2023 14:20:54 +1300 Subject: [PATCH 040/124] Update themeadapter-appcompat.md --- docs/themeadapter-appcompat.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/themeadapter-appcompat.md b/docs/themeadapter-appcompat.md index 8f23e9f6b..5c146c2c0 100644 --- a/docs/themeadapter-appcompat.md +++ b/docs/themeadapter-appcompat.md @@ -3,7 +3,7 @@ [![Maven Central](https://img.shields.io/maven-central/v/com.google.accompanist/accompanist-themeadapter-appcompat)](https://search.maven.org/search?q=g:com.google.accompanist) !!! warning -**This library is deprecated, and the API is no longer maintained.** The original documentation is below. + **This library is deprecated, and the API is no longer maintained.** The original documentation is below. ## Migration Recommendation: Use the [Material Theme Builder](https://m3.material.io/theme-builder) tool, or an alternative design tool, to generate a matching XML and Compose theme implementation for your app. See [Migrating XML themes to Compose](https://developer.android.com/jetpack/compose/designsystems/views-to-compose) to learn more. @@ -186,4 +186,4 @@ limitations under the License. [materialtheme]: https://developer.android.com/reference/kotlin/androidx/compose/material/MaterialTheme [colors]: https://developer.android.com/reference/kotlin/androidx/compose/material/Colors [typography]: https://developer.android.com/reference/kotlin/androidx/compose/material/Typography -[shapes]: https://developer.android.com/reference/kotlin/androidx/compose/material/Shapes \ No newline at end of file +[shapes]: https://developer.android.com/reference/kotlin/androidx/compose/material/Shapes From de57c032010c217b4f99a8cbb81965ec643a791e Mon Sep 17 00:00:00 2001 From: Mathew Smith Date: Wed, 29 Nov 2023 14:21:44 +1300 Subject: [PATCH 041/124] Update themeadapter-core.md --- docs/themeadapter-core.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/themeadapter-core.md b/docs/themeadapter-core.md index 91d06f61a..7c272a18c 100644 --- a/docs/themeadapter-core.md +++ b/docs/themeadapter-core.md @@ -3,7 +3,7 @@ [![Maven Central](https://img.shields.io/maven-central/v/com.google.accompanist/accompanist-themeadapter-core)](https://search.maven.org/search?q=g:com.google.accompanist) !!! warning -**This library is deprecated, and the API is no longer maintained.** The original documentation is below. + **This library is deprecated, and the API is no longer maintained.** The original documentation is below. ## Migration Recommendation: Use the [Material Theme Builder](https://m3.material.io/theme-builder) tool, or an alternative design tool, to generate a matching XML and Compose theme implementation for your app. See [Migrating XML themes to Compose](https://developer.android.com/jetpack/compose/designsystems/views-to-compose) to learn more. @@ -62,4 +62,4 @@ limitations under the License. ``` [compose]: https://developer.android.com/jetpack/compose -[api]: ../api/themeadapter-core \ No newline at end of file +[api]: ../api/themeadapter-core From bf1101234c5a403159f2d086b4a658810141d535 Mon Sep 17 00:00:00 2001 From: Mathew Smith Date: Wed, 29 Nov 2023 14:22:14 +1300 Subject: [PATCH 042/124] Update themeadapter-material.md --- docs/themeadapter-material.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/themeadapter-material.md b/docs/themeadapter-material.md index 998cd086b..e2430ccf7 100644 --- a/docs/themeadapter-material.md +++ b/docs/themeadapter-material.md @@ -3,7 +3,7 @@ [![Maven Central](https://img.shields.io/maven-central/v/com.google.accompanist/accompanist-themeadapter-material)](https://search.maven.org/search?q=g:com.google.accompanist) !!! warning -**This library is deprecated, and the API is no longer maintained.** The original documentation is below. + **This library is deprecated, and the API is no longer maintained.** The original documentation is below. ## Migration Recommendation: Use the [Material Theme Builder](https://m3.material.io/theme-builder) tool, or an alternative design tool, to generate a matching XML and Compose theme implementation for your app. See [Migrating XML themes to Compose](https://developer.android.com/jetpack/compose/designsystems/views-to-compose) to learn more. @@ -58,9 +58,9 @@ MdcTheme { This is especially handy when you're migrating an existing app, a `Fragment` (or other UI container) at a time. !!! caution -If you are using an AppCompat (i.e. non-MDC) theme in your app, you should use -[AppCompat Theme Adapter](https://github.com/google/accompanist/tree/main/themeadapter-appcompat) -instead, as it attempts to bridge the gap between [AppCompat][appcompat] XML themes, and M2 themes in [Jetpack Compose][compose]. + If you are using an AppCompat (i.e. non-MDC) theme in your app, you should use + [AppCompat Theme Adapter](https://github.com/google/accompanist/tree/main/themeadapter-appcompat) + instead, as it attempts to bridge the gap between [AppCompat][appcompat] XML themes, and M2 themes in [Jetpack Compose][compose]. ### Customizing the M2 theme From 87445d923e8d9ae622b16e7109630623605d0674 Mon Sep 17 00:00:00 2001 From: Mathew Smith Date: Wed, 29 Nov 2023 14:25:52 +1300 Subject: [PATCH 043/124] Update web.md --- docs/web.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/web.md b/docs/web.md index 0df40b7f7..058607029 100644 --- a/docs/web.md +++ b/docs/web.md @@ -5,7 +5,7 @@ A library which provides a Jetpack Compose wrapper around Android's WebView. !!! warning -**This library is deprecated, and the API is no longer maintained. We recommend forking the implementation and customising it to your needs.** The original documentation is below. + **This library is deprecated, and the API is no longer maintained. We recommend forking the implementation and customising it to your needs.** The original documentation is below. ## Usage @@ -71,4 +71,4 @@ repositories { dependencies { implementation "com.google.accompanist:accompanist-webview:" } -``` \ No newline at end of file +``` From c2b953593542259e05c5ce8364abc3d0b9d64c20 Mon Sep 17 00:00:00 2001 From: Osip Fatkullin Date: Mon, 18 Dec 2023 07:48:34 +0300 Subject: [PATCH 044/124] Fix warning in themeadapter-material3.md --- docs/themeadapter-material3.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/themeadapter-material3.md b/docs/themeadapter-material3.md index eb04478b2..73403826b 100644 --- a/docs/themeadapter-material3.md +++ b/docs/themeadapter-material3.md @@ -3,7 +3,7 @@ [![Maven Central](https://img.shields.io/maven-central/v/com.google.accompanist/accompanist-themeadapter-material3)](https://search.maven.org/search?q=g:com.google.accompanist) !!! warning -**This library is deprecated, and the API is no longer maintained. We recommend generating a theme with [Material Theme Builder](https://m3.material.io/theme-builder)** The original documentation is below. + **This library is deprecated, and the API is no longer maintained. We recommend generating a theme with [Material Theme Builder](https://m3.material.io/theme-builder)** The original documentation is below. ## Migration Recommendation: Use the [Material Theme Builder](https://m3.material.io/theme-builder) tool, or an alternative design tool, to generate a matching XML and Compose theme implementation for your app. See [Migrating XML themes to Compose](https://developer.android.com/jetpack/compose/designsystems/views-to-compose) to learn more. @@ -141,4 +141,4 @@ limitations under the License. [materialtheme]: https://developer.android.com/reference/kotlin/androidx/compose/material3/MaterialTheme [colorscheme]: https://developer.android.com/reference/kotlin/androidx/compose/material3/ColorScheme [typography]: https://developer.android.com/reference/kotlin/androidx/compose/material3/Typography -[shapes]: https://developer.android.com/reference/kotlin/androidx/compose/material3/Shapes \ No newline at end of file +[shapes]: https://developer.android.com/reference/kotlin/androidx/compose/material3/Shapes From c2802818656fffd625ea277eeb9fd06bad7e2480 Mon Sep 17 00:00:00 2001 From: Jeremy Woods Date: Wed, 20 Dec 2023 19:40:53 +0000 Subject: [PATCH 045/124] Ensure Navigation Material properly handles back for nested nav If there is a nested NavGraph under the current bottomSheet destination and you do a back press, instead of the bottomSheet which is the topmost destination being popped, the nested NavHost underneath will be popped instead. This is caused by bottomSheet not properly intercepting back presses. This change added a BackHandler to ensure that bottomsheets correctly respect the system back hierarchy for back events. Fixes: #1726 --- .../BottomSheetNavigatorTest.kt | 65 +++++++++++++++++++ .../material/BottomSheetNavigator.kt | 5 ++ 2 files changed, 70 insertions(+) diff --git a/navigation-material/src/androidTest/java/com/google/accompanist/navigation.material/BottomSheetNavigatorTest.kt b/navigation-material/src/androidTest/java/com/google/accompanist/navigation.material/BottomSheetNavigatorTest.kt index 915d4f392..7bad7972a 100644 --- a/navigation-material/src/androidTest/java/com/google/accompanist/navigation.material/BottomSheetNavigatorTest.kt +++ b/navigation-material/src/androidTest/java/com/google/accompanist/navigation.material/BottomSheetNavigatorTest.kt @@ -779,6 +779,71 @@ internal class BottomSheetNavigatorTest { .isEqualTo(firstSheetDestination) } + @Test + fun testBackPressWithNestedGraphBehind() { + lateinit var navigator: BottomSheetNavigator + lateinit var navController: NavHostController + lateinit var nestedNavController: NavHostController + lateinit var backDispatcher: OnBackPressedDispatcher + val homeDestination = "home" + val firstSheetDestination = "sheet1" + val firstNestedDestination = "nested1" + val secondNestedDestination = "nested2" + + composeTestRule.setContent { + backDispatcher = LocalOnBackPressedDispatcherOwner.current?.onBackPressedDispatcher!! + navigator = rememberBottomSheetNavigator() + navController = rememberNavController(navigator) + ModalBottomSheetLayout(navigator) { + NavHost(navController, homeDestination) { + composable(homeDestination) { + nestedNavController = rememberNavController() + NavHost(nestedNavController, "nested1") { + composable(firstNestedDestination) { } + composable(secondNestedDestination) { } + } + } + bottomSheet(firstSheetDestination) { + Text("SheetDestination") + } + } + } + } + + assertThat(navController.currentBackStackEntry?.destination?.route) + .isEqualTo(homeDestination) + + composeTestRule.runOnUiThread { + nestedNavController.navigate(secondNestedDestination) + } + composeTestRule.waitForIdle() + + assertThat(navController.currentBackStackEntry?.destination?.route) + .isEqualTo(homeDestination) + assertThat(nestedNavController.currentBackStackEntry?.destination?.route) + .isEqualTo(secondNestedDestination) + + composeTestRule.runOnUiThread { + navController.navigate(firstSheetDestination) + } + composeTestRule.waitForIdle() + + assertThat(navigator.sheetState.currentValue) + .isAnyOf(ModalBottomSheetValue.HalfExpanded, ModalBottomSheetValue.Expanded) + + composeTestRule.runOnUiThread { + backDispatcher.onBackPressed() + } + composeTestRule.waitForIdle() + + assertThat(navController.currentBackStackEntry?.destination?.route) + .isEqualTo(homeDestination) + assertThat(nestedNavController.currentBackStackEntry?.destination?.route) + .isEqualTo(secondNestedDestination) + + assertThat(navigator.sheetState.currentValue).isEqualTo(ModalBottomSheetValue.Hidden) + } + private fun BottomSheetNavigator.createFakeDestination() = BottomSheetNavigator.Destination(this) { Text("Fake Sheet Content") diff --git a/navigation-material/src/main/java/com/google/accompanist/navigation/material/BottomSheetNavigator.kt b/navigation-material/src/main/java/com/google/accompanist/navigation/material/BottomSheetNavigator.kt index 932fc07c5..d514747d9 100644 --- a/navigation-material/src/main/java/com/google/accompanist/navigation/material/BottomSheetNavigator.kt +++ b/navigation-material/src/main/java/com/google/accompanist/navigation/material/BottomSheetNavigator.kt @@ -17,6 +17,7 @@ package com.google.accompanist.navigation.material import android.annotation.SuppressLint +import androidx.activity.compose.BackHandler import androidx.compose.animation.core.AnimationSpec import androidx.compose.foundation.layout.ColumnScope import androidx.compose.material.ExperimentalMaterialApi @@ -212,6 +213,10 @@ class BottomSheetNavigator( LaunchedEffect(retainedEntry) { sheetState.show() } + + BackHandler { + state.popWithTransition(popUpTo = retainedEntry!!, saveState = false) + } } SheetContentHost( From 5f1b49ef738567bcda7963b95535f57c9fef9162 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Thu, 25 Jan 2024 07:27:12 +1100 Subject: [PATCH 046/124] Upgrade to Compose 1.6 stable --- gradle.properties | 2 +- gradle/libs.versions.toml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index 2b8ae2db7..9695b76de 100644 --- a/gradle.properties +++ b/gradle.properties @@ -33,7 +33,7 @@ systemProp.org.gradle.internal.http.socketTimeout=120000 GROUP=com.google.accompanist # !! No longer need to update this manually when using a Compose SNAPSHOT -VERSION_NAME=0.33.3-SNAPSHOT +VERSION_NAME=0.34.0 POM_DESCRIPTION=Utilities for Jetpack Compose diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index eddac9fc8..abda304ce 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,18 +1,18 @@ [versions] -compose = "1.6.0-alpha06" -composeCompiler = "1.5.3" +compose = "1.6.0" +composeCompiler = "1.5.7" composeMaterial3 = "1.0.1" composesnapshot = "-" # a single character = no snapshot dokka = "1.8.10" # gradlePlugin and lint need to be updated together -gradlePlugin = "8.1.0" +gradlePlugin = "8.2.2" lintMinCompose = "30.0.0" ktlint = "0.45.2" -kotlin = "1.9.10" +kotlin = "1.9.22" coroutines = "1.6.4" okhttp = "3.12.13" coil = "1.3.2" From 8ca4e843291071c985401e3ab15861ac69aec132 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Thu, 25 Jan 2024 07:34:35 +1100 Subject: [PATCH 047/124] Update gradle wrapper --- gradle/wrapper/gradle-wrapper.jar | Bin 59536 -> 62076 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 11 ++++++----- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7454180f2ae8848c63b8b4dea2cb829da983f2fa..c1962a79e29d3e0ab67b14947c167a862655af9b 100644 GIT binary patch delta 40133 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 Date: Thu, 25 Jan 2024 07:47:16 +1100 Subject: [PATCH 048/124] Fix compiler version --- 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 abda304ce..71ee34056 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] compose = "1.6.0" -composeCompiler = "1.5.7" +composeCompiler = "1.5.8" composeMaterial3 = "1.0.1" composesnapshot = "-" # a single character = no snapshot From b220675cb2f2a23e56c1269f8f98cb16e198f767 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Thu, 25 Jan 2024 09:07:51 +1100 Subject: [PATCH 049/124] Update gradle.properties --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 9695b76de..ab75d18de 100644 --- a/gradle.properties +++ b/gradle.properties @@ -33,7 +33,7 @@ systemProp.org.gradle.internal.http.socketTimeout=120000 GROUP=com.google.accompanist # !! No longer need to update this manually when using a Compose SNAPSHOT -VERSION_NAME=0.34.0 +VERSION_NAME=0.34.1-SNAPSHOT POM_DESCRIPTION=Utilities for Jetpack Compose From ac06759d98f06bcddc44f73e0ead7669812a23b2 Mon Sep 17 00:00:00 2001 From: Alex Vanyo Date: Wed, 24 Jan 2024 15:40:24 -0800 Subject: [PATCH 050/124] Deprecate testharness --- README.md | 6 +- adaptive/build.gradle.kts | 3 - .../accompanist/adaptive/TwoPaneTest.kt | 169 ++++++++++++------ docs/testharness.md | 34 ++++ gradle/libs.versions.toml | 3 +- pager/build.gradle.kts | 3 - .../pager/BaseHorizontalPagerTest.kt | 7 +- .../pager/BaseVerticalPagerTest.kt | 7 +- .../sample/testharness/TestHarnessSample.kt | 2 + testharness/api/current.api | 2 +- testharness/build.gradle.kts | 1 + .../accompanist/testharness/TestHarness.kt | 26 +++ .../testharness/TestHarnessTest.kt | 2 + .../testharness/TestHarnessTestApi23.kt | 2 + 14 files changed, 201 insertions(+), 66 deletions(-) diff --git a/README.md b/README.md index 82ffea177..49265d828 100644 --- a/README.md +++ b/README.md @@ -52,9 +52,6 @@ A library which provides a way to use Android Drawables as Jetpack Compose Paint ### 📜 [Adaptive](./adaptive/) A library providing a collection of utilities for adaptive layouts. -### 🗜 [Test Harness](./testharness/) -Utilities for testing Compose layouts. - ### ⬇️ [Swipe to Refresh](./swiperefresh/) (Deprecated) See our [Migration Guide](https://google.github.io/accompanist/swiperefresh/) for migrating to PullRefresh in Compose Material. @@ -88,6 +85,9 @@ A library that enables the reuse of [MDC-Android][mdc] Material 3 XML themes, fo ### 🌏 [Web](./web/) (Deprecated) A wrapper around WebView for basic WebView support in Jetpack Compose. +### 🗜 [Test Harness](./testharness/) (Deprecated) +Utilities for testing Compose layouts. + ### 📐 [Insets](./insets/) (Deprecated & Removed) See our [Migration Guide](https://google.github.io/accompanist/insets/) for migrating to Insets in Compose. diff --git a/adaptive/build.gradle.kts b/adaptive/build.gradle.kts index f402a741a..39b13b961 100644 --- a/adaptive/build.gradle.kts +++ b/adaptive/build.gradle.kts @@ -108,9 +108,6 @@ dependencies { androidTestImplementation(project(":internal-testutils")) testImplementation(project(":internal-testutils")) - androidTestImplementation(project(":testharness")) - testImplementation(project(":testharness")) - androidTestImplementation(libs.junit) testImplementation(libs.junit) diff --git a/adaptive/src/sharedTest/kotlin/com/google/accompanist/adaptive/TwoPaneTest.kt b/adaptive/src/sharedTest/kotlin/com/google/accompanist/adaptive/TwoPaneTest.kt index a24c83bdd..07bdeb1d1 100644 --- a/adaptive/src/sharedTest/kotlin/com/google/accompanist/adaptive/TwoPaneTest.kt +++ b/adaptive/src/sharedTest/kotlin/com/google/accompanist/adaptive/TwoPaneTest.kt @@ -19,6 +19,7 @@ package com.google.accompanist.adaptive import androidx.compose.foundation.background import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.requiredSize import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Rect @@ -26,7 +27,11 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.LayoutCoordinates import androidx.compose.ui.layout.onPlaced import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.test.DeviceConfigurationOverride +import androidx.compose.ui.test.ForcedSize +import androidx.compose.ui.test.LayoutDirection import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.then import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.DpOffset @@ -42,7 +47,6 @@ import androidx.window.core.ExperimentalWindowApi import androidx.window.layout.DisplayFeature import androidx.window.layout.FoldingFeature import androidx.window.testing.layout.FoldingFeature -import com.google.accompanist.testharness.TestHarness import com.google.common.truth.Truth.assertThat import org.junit.Rule import org.junit.Test @@ -62,9 +66,9 @@ class TwoPaneTest { lateinit var secondCoordinates: LayoutCoordinates composeTestRule.setContent { - TestHarness( - size = DpSize(900.dp, 1200.dp), - layoutDirection = LayoutDirection.Ltr + DeviceConfigurationOverride( + DeviceConfigurationOverride.ForcedSize(DpSize(900.dp, 1200.dp)) then + DeviceConfigurationOverride.LayoutDirection(LayoutDirection.Ltr) ) { density = LocalDensity.current TwoPane( @@ -88,6 +92,9 @@ class TwoPaneTest { splitFraction = 1f / 3f ), modifier = Modifier + // TODO: This should not be necessary, remove once + // https://issuetracker.google.com/issues/322354080 is fixed + .requiredSize(900.dp, 1200.dp) .onPlaced { twoPaneCoordinates = it } ) } @@ -124,9 +131,9 @@ class TwoPaneTest { lateinit var secondCoordinates: LayoutCoordinates composeTestRule.setContent { - TestHarness( - size = DpSize(900.dp, 1200.dp), - layoutDirection = LayoutDirection.Rtl + DeviceConfigurationOverride( + DeviceConfigurationOverride.ForcedSize(DpSize(900.dp, 1200.dp)) then + DeviceConfigurationOverride.LayoutDirection(LayoutDirection.Rtl) ) { density = LocalDensity.current TwoPane( @@ -150,6 +157,9 @@ class TwoPaneTest { splitFraction = 1f / 3f ), modifier = Modifier + // TODO: This should not be necessary, remove once + // https://issuetracker.google.com/issues/322354080 is fixed + .requiredSize(900.dp, 1200.dp) .onPlaced { twoPaneCoordinates = it } ) } @@ -186,9 +196,9 @@ class TwoPaneTest { lateinit var secondCoordinates: LayoutCoordinates composeTestRule.setContent { - TestHarness( - size = DpSize(900.dp, 1200.dp), - layoutDirection = LayoutDirection.Ltr + DeviceConfigurationOverride( + DeviceConfigurationOverride.ForcedSize(DpSize(900.dp, 1200.dp)) then + DeviceConfigurationOverride.LayoutDirection(LayoutDirection.Ltr) ) { density = LocalDensity.current TwoPane( @@ -213,6 +223,9 @@ class TwoPaneTest { gapWidth = 64.dp ), modifier = Modifier + // TODO: This should not be necessary, remove once + // https://issuetracker.google.com/issues/322354080 is fixed + .requiredSize(900.dp, 1200.dp) .onPlaced { twoPaneCoordinates = it } ) } @@ -249,9 +262,9 @@ class TwoPaneTest { lateinit var secondCoordinates: LayoutCoordinates composeTestRule.setContent { - TestHarness( - size = DpSize(900.dp, 1200.dp), - layoutDirection = LayoutDirection.Rtl + DeviceConfigurationOverride( + DeviceConfigurationOverride.ForcedSize(DpSize(900.dp, 1200.dp)) then + DeviceConfigurationOverride.LayoutDirection(LayoutDirection.Rtl) ) { density = LocalDensity.current TwoPane( @@ -276,6 +289,9 @@ class TwoPaneTest { gapWidth = 64.dp ), modifier = Modifier + // TODO: This should not be necessary, remove once + // https://issuetracker.google.com/issues/322354080 is fixed + .requiredSize(900.dp, 1200.dp) .onPlaced { twoPaneCoordinates = it } ) } @@ -312,8 +328,8 @@ class TwoPaneTest { lateinit var secondCoordinates: LayoutCoordinates composeTestRule.setContent { - TestHarness( - size = DpSize(900.dp, 1200.dp) + DeviceConfigurationOverride( + DeviceConfigurationOverride.ForcedSize(DpSize(900.dp, 1200.dp)) ) { density = LocalDensity.current TwoPane( @@ -337,6 +353,9 @@ class TwoPaneTest { splitFraction = 1f / 3f ), modifier = Modifier + // TODO: This should not be necessary, remove once + // https://issuetracker.google.com/issues/322354080 is fixed + .requiredSize(900.dp, 1200.dp) .onPlaced { twoPaneCoordinates = it } ) } @@ -373,8 +392,8 @@ class TwoPaneTest { lateinit var secondCoordinates: LayoutCoordinates composeTestRule.setContent { - TestHarness( - size = DpSize(900.dp, 1200.dp), + DeviceConfigurationOverride( + DeviceConfigurationOverride.ForcedSize(DpSize(900.dp, 1200.dp)) ) { density = LocalDensity.current TwoPane( @@ -399,6 +418,9 @@ class TwoPaneTest { gapHeight = 64.dp ), modifier = Modifier + // TODO: This should not be necessary, remove once + // https://issuetracker.google.com/issues/322354080 is fixed + .requiredSize(900.dp, 1200.dp) .onPlaced { twoPaneCoordinates = it } ) } @@ -435,9 +457,9 @@ class TwoPaneTest { lateinit var secondCoordinates: LayoutCoordinates composeTestRule.setContent { - TestHarness( - size = DpSize(900.dp, 1200.dp), - layoutDirection = LayoutDirection.Ltr + DeviceConfigurationOverride( + DeviceConfigurationOverride.ForcedSize(DpSize(900.dp, 1200.dp)) then + DeviceConfigurationOverride.LayoutDirection(LayoutDirection.Ltr) ) { density = LocalDensity.current TwoPane( @@ -462,6 +484,9 @@ class TwoPaneTest { offsetFromStart = true, ), modifier = Modifier + // TODO: This should not be necessary, remove once + // https://issuetracker.google.com/issues/322354080 is fixed + .requiredSize(900.dp, 1200.dp) .onPlaced { twoPaneCoordinates = it } ) } @@ -498,9 +523,9 @@ class TwoPaneTest { lateinit var secondCoordinates: LayoutCoordinates composeTestRule.setContent { - TestHarness( - size = DpSize(900.dp, 1200.dp), - layoutDirection = LayoutDirection.Rtl + DeviceConfigurationOverride( + DeviceConfigurationOverride.ForcedSize(DpSize(900.dp, 1200.dp)) then + DeviceConfigurationOverride.LayoutDirection(LayoutDirection.Rtl) ) { density = LocalDensity.current TwoPane( @@ -525,6 +550,9 @@ class TwoPaneTest { offsetFromStart = true, ), modifier = Modifier + // TODO: This should not be necessary, remove once + // https://issuetracker.google.com/issues/322354080 is fixed + .requiredSize(900.dp, 1200.dp) .onPlaced { twoPaneCoordinates = it } ) } @@ -561,9 +589,9 @@ class TwoPaneTest { lateinit var secondCoordinates: LayoutCoordinates composeTestRule.setContent { - TestHarness( - size = DpSize(900.dp, 1200.dp), - layoutDirection = LayoutDirection.Ltr + DeviceConfigurationOverride( + DeviceConfigurationOverride.ForcedSize(DpSize(900.dp, 1200.dp)) then + DeviceConfigurationOverride.LayoutDirection(LayoutDirection.Ltr) ) { density = LocalDensity.current TwoPane( @@ -589,6 +617,9 @@ class TwoPaneTest { gapWidth = 64.dp ), modifier = Modifier + // TODO: This should not be necessary, remove once + // https://issuetracker.google.com/issues/322354080 is fixed + .requiredSize(900.dp, 1200.dp) .onPlaced { twoPaneCoordinates = it } ) } @@ -625,9 +656,9 @@ class TwoPaneTest { lateinit var secondCoordinates: LayoutCoordinates composeTestRule.setContent { - TestHarness( - size = DpSize(900.dp, 1200.dp), - layoutDirection = LayoutDirection.Rtl + DeviceConfigurationOverride( + DeviceConfigurationOverride.ForcedSize(DpSize(900.dp, 1200.dp)) then + DeviceConfigurationOverride.LayoutDirection(LayoutDirection.Rtl) ) { density = LocalDensity.current TwoPane( @@ -653,6 +684,9 @@ class TwoPaneTest { gapWidth = 64.dp ), modifier = Modifier + // TODO: This should not be necessary, remove once + // https://issuetracker.google.com/issues/322354080 is fixed + .requiredSize(900.dp, 1200.dp) .onPlaced { twoPaneCoordinates = it } ) } @@ -689,8 +723,8 @@ class TwoPaneTest { lateinit var secondCoordinates: LayoutCoordinates composeTestRule.setContent { - TestHarness( - size = DpSize(900.dp, 1200.dp) + DeviceConfigurationOverride( + DeviceConfigurationOverride.ForcedSize(DpSize(900.dp, 1200.dp)) ) { density = LocalDensity.current TwoPane( @@ -715,6 +749,9 @@ class TwoPaneTest { offsetFromTop = true ), modifier = Modifier + // TODO: This should not be necessary, remove once + // https://issuetracker.google.com/issues/322354080 is fixed + .requiredSize(900.dp, 1200.dp) .onPlaced { twoPaneCoordinates = it } ) } @@ -751,8 +788,8 @@ class TwoPaneTest { lateinit var secondCoordinates: LayoutCoordinates composeTestRule.setContent { - TestHarness( - size = DpSize(900.dp, 1200.dp) + DeviceConfigurationOverride( + DeviceConfigurationOverride.ForcedSize(DpSize(900.dp, 1200.dp)) ) { density = LocalDensity.current TwoPane( @@ -778,6 +815,9 @@ class TwoPaneTest { gapHeight = 64.dp ), modifier = Modifier + // TODO: This should not be necessary, remove once + // https://issuetracker.google.com/issues/322354080 is fixed + .requiredSize(900.dp, 1200.dp) .onPlaced { twoPaneCoordinates = it } ) } @@ -814,8 +854,8 @@ class TwoPaneTest { lateinit var secondCoordinates: LayoutCoordinates composeTestRule.setContent { - TestHarness( - size = DpSize(900.dp, 1200.dp) + DeviceConfigurationOverride( + DeviceConfigurationOverride.ForcedSize(DpSize(900.dp, 1200.dp)) ) { density = LocalDensity.current TwoPane( @@ -840,6 +880,9 @@ class TwoPaneTest { offsetFromTop = false ), modifier = Modifier + // TODO: This should not be necessary, remove once + // https://issuetracker.google.com/issues/322354080 is fixed + .requiredSize(900.dp, 1200.dp) .onPlaced { twoPaneCoordinates = it } ) } @@ -876,8 +919,8 @@ class TwoPaneTest { lateinit var secondCoordinates: LayoutCoordinates composeTestRule.setContent { - TestHarness( - size = DpSize(900.dp, 1200.dp) + DeviceConfigurationOverride( + DeviceConfigurationOverride.ForcedSize(DpSize(900.dp, 1200.dp)) ) { density = LocalDensity.current TwoPane( @@ -903,6 +946,9 @@ class TwoPaneTest { gapHeight = 64.dp ), modifier = Modifier + // TODO: This should not be necessary, remove once + // https://issuetracker.google.com/issues/322354080 is fixed + .requiredSize(900.dp, 1200.dp) .onPlaced { twoPaneCoordinates = it } ) } @@ -946,8 +992,8 @@ class TwoPaneTest { } composeTestRule.setContent { - TestHarness( - size = DpSize(900.dp, 1200.dp) + DeviceConfigurationOverride( + DeviceConfigurationOverride.ForcedSize(DpSize(900.dp, 1200.dp)) ) { density = LocalDensity.current TwoPane( @@ -972,6 +1018,9 @@ class TwoPaneTest { ), displayFeatures = displayFeatures, modifier = Modifier + // TODO: This should not be necessary, remove once + // https://issuetracker.google.com/issues/322354080 is fixed + .requiredSize(900.dp, 1200.dp) .onPlaced { twoPaneCoordinates = it } ) } @@ -1022,8 +1071,8 @@ class TwoPaneTest { } composeTestRule.setContent { - TestHarness( - size = DpSize(900.dp, 1200.dp) + DeviceConfigurationOverride( + DeviceConfigurationOverride.ForcedSize(DpSize(900.dp, 1200.dp)) ) { density = LocalDensity.current TwoPane( @@ -1048,6 +1097,9 @@ class TwoPaneTest { ), displayFeatures = displayFeatures, modifier = Modifier + // TODO: This should not be necessary, remove once + // https://issuetracker.google.com/issues/322354080 is fixed + .requiredSize(900.dp, 1200.dp) .onPlaced { twoPaneCoordinates = it } ) } @@ -1098,8 +1150,8 @@ class TwoPaneTest { } composeTestRule.setContent { - TestHarness( - size = DpSize(900.dp, 1200.dp) + DeviceConfigurationOverride( + DeviceConfigurationOverride.ForcedSize(DpSize(900.dp, 1200.dp)) ) { density = LocalDensity.current TwoPane( @@ -1124,6 +1176,9 @@ class TwoPaneTest { ), displayFeatures = displayFeatures, modifier = Modifier + // TODO: This should not be necessary, remove once + // https://issuetracker.google.com/issues/322354080 is fixed + .requiredSize(900.dp, 1200.dp) .onPlaced { twoPaneCoordinates = it } ) } @@ -1174,8 +1229,8 @@ class TwoPaneTest { } composeTestRule.setContent { - TestHarness( - size = DpSize(900.dp, 1200.dp) + DeviceConfigurationOverride( + DeviceConfigurationOverride.ForcedSize(DpSize(900.dp, 1200.dp)) ) { density = LocalDensity.current TwoPane( @@ -1200,6 +1255,9 @@ class TwoPaneTest { ), displayFeatures = displayFeatures, modifier = Modifier + // TODO: This should not be necessary, remove once + // https://issuetracker.google.com/issues/322354080 is fixed + .requiredSize(900.dp, 1200.dp) .onPlaced { twoPaneCoordinates = it } ) } @@ -1250,8 +1308,8 @@ class TwoPaneTest { } composeTestRule.setContent { - TestHarness( - size = DpSize(900.dp, 1200.dp) + DeviceConfigurationOverride( + DeviceConfigurationOverride.ForcedSize(DpSize(900.dp, 1200.dp)) ) { density = LocalDensity.current TwoPane( @@ -1276,6 +1334,9 @@ class TwoPaneTest { ), displayFeatures = displayFeatures, modifier = Modifier + // TODO: This should not be necessary, remove once + // https://issuetracker.google.com/issues/322354080 is fixed + .requiredSize(900.dp, 1200.dp) .onPlaced { twoPaneCoordinates = it } ) } @@ -1326,8 +1387,8 @@ class TwoPaneTest { } composeTestRule.setContent { - TestHarness( - size = DpSize(900.dp, 1200.dp) + DeviceConfigurationOverride( + DeviceConfigurationOverride.ForcedSize(DpSize(900.dp, 1200.dp)) ) { density = LocalDensity.current TwoPane( @@ -1352,6 +1413,9 @@ class TwoPaneTest { ), displayFeatures = displayFeatures, modifier = Modifier + // TODO: This should not be necessary, remove once + // https://issuetracker.google.com/issues/322354080 is fixed + .requiredSize(900.dp, 1200.dp) .onPlaced { twoPaneCoordinates = it } ) } @@ -1402,8 +1466,8 @@ class TwoPaneTest { } composeTestRule.setContent { - TestHarness( - size = DpSize(900.dp, 1200.dp) + DeviceConfigurationOverride( + DeviceConfigurationOverride.ForcedSize(DpSize(900.dp, 1200.dp)) ) { density = LocalDensity.current @@ -1429,6 +1493,9 @@ class TwoPaneTest { ), displayFeatures = displayFeatures, modifier = Modifier + // TODO: This should not be necessary, remove once + // https://issuetracker.google.com/issues/322354080 is fixed + .requiredSize(900.dp, 1200.dp) .onPlaced { twoPaneCoordinates = it } ) } diff --git a/docs/testharness.md b/docs/testharness.md index 9c4cff07f..df81902e0 100644 --- a/docs/testharness.md +++ b/docs/testharness.md @@ -2,6 +2,40 @@ [![Maven Central](https://img.shields.io/maven-central/v/com.google.accompanist/accompanist-testharness)](https://search.maven.org/search?q=g:com.google.accompanist) +!!! warning +**This library is deprecated, with a superseding version in androidx.compose.ui.test. The migration guide and original documentation is below. + +## Migration + +`DeviceConfigurationOverride` from `ui-test` is the replacement for `TestHarness`. + +The top-level [`@Composable DeviceConfigurationOverride`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#DeviceConfigurationOverride(androidx.compose.ui.test.DeviceConfigurationOverride,kotlin.Function0)) +provides the same structure as `TestHarness`, applying overrides to a piece of `content` under test. + +Instead of all of the overrides appearing as parameters to `TestHarness`, the +`DeviceConfigurationOverride` top-level function takes a particular implementation of the +[`fun interface DeviceConfigurationOverride`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride). + +The [built-in `DeviceConfigurationOverride`s](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride.Companion) +are available as extension methods on the companion object of `DeviceConfigurationOverride`, and +the built-in overrides cover all of the parameters of `TestHarness`. + +Multiple `DeviceConfigurationOverride`s can be combined with [then](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/package-summary#(androidx.compose.ui.test.DeviceConfigurationOverride).then(androidx.compose.ui.test.DeviceConfigurationOverride)) + +## Migration steps: + +1. Replace `TestHarness()` with `DeviceConfigurationOverride()` (a deprecation replacement is + available) +1. Remove the override for any argument that was previously using a default value. + Because the overrides have been split into independent overrides, the "default" behavior can + be achieved by not specifying that override. + + Example: If you want to keep the current dark mode setting and not override it, instead of + querying for and specifying the current dark mode theme to apply in an override, don't apply the + `DeviceConfigurationOverride.DarkMode` override. + +## Original docs + A library providing a test harness for UI components. ## Background diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 71ee34056..05f7956f2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] -compose = "1.6.0" +compose = "1.7.0-alpha01" composeCompiler = "1.5.8" composeMaterial3 = "1.0.1" composesnapshot = "-" # a single character = no snapshot @@ -30,6 +30,7 @@ compose-ui-ui = { module = "androidx.compose.ui:ui", version.ref = "compose" } compose-ui-util = { module = "androidx.compose.ui:ui-util", version.ref = "compose" } compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling", version.ref = "compose" } compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview", version.ref = "compose" } +compose-ui-test = { module = "androidx.compose.ui:ui-test", version.ref = "compose" } compose-ui-test-junit4 = { module = "androidx.compose.ui:ui-test-junit4", version.ref = "compose" } compose-ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest", version.ref = "compose" } compose-foundation-foundation = { module = "androidx.compose.foundation:foundation", version.ref = "compose" } diff --git a/pager/build.gradle.kts b/pager/build.gradle.kts index a9a64aff0..432ed9207 100644 --- a/pager/build.gradle.kts +++ b/pager/build.gradle.kts @@ -107,9 +107,6 @@ dependencies { androidTestImplementation(project(":internal-testutils")) testImplementation(project(":internal-testutils")) - androidTestImplementation(project(":testharness")) - testImplementation(project(":testharness")) - androidTestImplementation(libs.junit) testImplementation(libs.junit) diff --git a/pager/src/sharedTest/kotlin/com/google/accompanist/pager/BaseHorizontalPagerTest.kt b/pager/src/sharedTest/kotlin/com/google/accompanist/pager/BaseHorizontalPagerTest.kt index d884014f3..a4ea4efd1 100644 --- a/pager/src/sharedTest/kotlin/com/google/accompanist/pager/BaseHorizontalPagerTest.kt +++ b/pager/src/sharedTest/kotlin/com/google/accompanist/pager/BaseHorizontalPagerTest.kt @@ -29,6 +29,8 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag +import androidx.compose.ui.test.DeviceConfigurationOverride +import androidx.compose.ui.test.LayoutDirection import androidx.compose.ui.test.SemanticsNodeInteraction import androidx.compose.ui.test.assertHeightIsAtLeast import androidx.compose.ui.test.assertLeftPositionInRootIsEqualTo @@ -41,7 +43,6 @@ import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.height import androidx.compose.ui.unit.width -import com.google.accompanist.testharness.TestHarness /** * Contains [HorizontalPager] tests. This class is extended @@ -125,7 +126,9 @@ abstract class BaseHorizontalPagerTest( userScrollEnabled: Boolean, onPageComposed: (Int) -> Unit ) { - TestHarness(layoutDirection = layoutDirection) { + DeviceConfigurationOverride( + DeviceConfigurationOverride.LayoutDirection(layoutDirection = layoutDirection) + ) { applierScope = rememberCoroutineScope() Box { diff --git a/pager/src/sharedTest/kotlin/com/google/accompanist/pager/BaseVerticalPagerTest.kt b/pager/src/sharedTest/kotlin/com/google/accompanist/pager/BaseVerticalPagerTest.kt index 098ac3a42..aee1c0734 100644 --- a/pager/src/sharedTest/kotlin/com/google/accompanist/pager/BaseVerticalPagerTest.kt +++ b/pager/src/sharedTest/kotlin/com/google/accompanist/pager/BaseVerticalPagerTest.kt @@ -27,6 +27,8 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag +import androidx.compose.ui.test.DeviceConfigurationOverride +import androidx.compose.ui.test.LayoutDirection import androidx.compose.ui.test.SemanticsNodeInteraction import androidx.compose.ui.test.assertHeightIsAtLeast import androidx.compose.ui.test.assertLeftPositionInRootIsEqualTo @@ -39,7 +41,6 @@ import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.height import androidx.compose.ui.unit.width -import com.google.accompanist.testharness.TestHarness /** * Contains the [VerticalPager] tests. This class is extended @@ -105,7 +106,9 @@ abstract class BaseVerticalPagerTest( userScrollEnabled: Boolean, onPageComposed: (Int) -> Unit ) { - TestHarness(layoutDirection = LayoutDirection.Ltr) { + DeviceConfigurationOverride( + DeviceConfigurationOverride.LayoutDirection(layoutDirection = LayoutDirection.Ltr) + ) { applierScope = rememberCoroutineScope() Box { diff --git a/sample/src/main/java/com/google/accompanist/sample/testharness/TestHarnessSample.kt b/sample/src/main/java/com/google/accompanist/sample/testharness/TestHarnessSample.kt index 06ad8e349..4bddef204 100644 --- a/sample/src/main/java/com/google/accompanist/sample/testharness/TestHarnessSample.kt +++ b/sample/src/main/java/com/google/accompanist/sample/testharness/TestHarnessSample.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.sample.testharness import android.os.Bundle diff --git a/testharness/api/current.api b/testharness/api/current.api index 65b9dab12..67b6d3fc8 100644 --- a/testharness/api/current.api +++ b/testharness/api/current.api @@ -2,7 +2,7 @@ package com.google.accompanist.testharness { public final class TestHarnessKt { - method @androidx.compose.runtime.Composable public static void TestHarness(optional long size, optional boolean darkMode, optional androidx.core.os.LocaleListCompat locales, optional androidx.compose.ui.unit.LayoutDirection? layoutDirection, optional float fontScale, optional Integer? fontWeightAdjustment, optional Boolean? isScreenRound, kotlin.jvm.functions.Function0 content); + method @Deprecated @androidx.compose.runtime.Composable public static void TestHarness(optional long size, optional boolean darkMode, optional androidx.core.os.LocaleListCompat locales, optional androidx.compose.ui.unit.LayoutDirection? layoutDirection, optional float fontScale, optional Integer? fontWeightAdjustment, optional Boolean? isScreenRound, kotlin.jvm.functions.Function0 content); } } diff --git a/testharness/build.gradle.kts b/testharness/build.gradle.kts index bd28d652e..8982897dd 100644 --- a/testharness/build.gradle.kts +++ b/testharness/build.gradle.kts @@ -110,6 +110,7 @@ dependencies { implementation(libs.androidx.core) testImplementation(libs.androidx.core) implementation(libs.kotlin.coroutines.android) + implementation(libs.compose.ui.test) // ====================== // Test dependencies diff --git a/testharness/src/main/java/com/google/accompanist/testharness/TestHarness.kt b/testharness/src/main/java/com/google/accompanist/testharness/TestHarness.kt index 400b17ceb..d33e3bc85 100644 --- a/testharness/src/main/java/com/google/accompanist/testharness/TestHarness.kt +++ b/testharness/src/main/java/com/google/accompanist/testharness/TestHarness.kt @@ -70,6 +70,32 @@ import kotlin.math.floor * the [isScreenRound] will be left unchanged. */ @Composable +@Deprecated( + replaceWith = ReplaceWith( + "DeviceConfigurationOverride(DeviceConfigurationOverride.ForcedSize(size) " + + "then DeviceConfigurationOverride.DarkMode(darkMode) " + + "then DeviceConfigurationOverride.Locales(LocaleList(locales.toLanguageTags()))" + + "then DeviceConfigurationOverride.LayoutDirection(layoutDirection)" + + "then DeviceConfigurationOverride.FontScale(fontScale)" + + "then DeviceConfigurationOverride.FontWeightAdjustment(fontWeightAdjustment)" + + "then DeviceConfigurationOverride.RoundScreen(isScreenRound), " + + "content)", + "androidx.compose.ui.test.DeviceConfigurationOverride", + "androidx.compose.ui.test.ForcedSize", + "androidx.compose.ui.test.DarkMode", + "androidx.compose.ui.test.Locales", + "androidx.compose.ui.test.LayoutDirection", + "androidx.compose.ui.test.FontScale", + "androidx.compose.ui.test.FontWeightAdjustment", + "androidx.compose.ui.test.RoundScreen", + "androidx.compose.ui.test.then", + "androidx.compose.ui.text.intl.LocaleList", + ), + message = "TestHarness has been superceded by DeviceConfigurationOverride in ui-test. " + + "Each argument in TestHarness have been replaced with an individual " + + "DeviceConfigurationOverride, so the suggested replacement is likely unnecessarily " + + "adding overrides for anything that was previously using the default arguments." +) public fun TestHarness( size: DpSize = DpSize.Unspecified, darkMode: Boolean = isSystemInDarkTheme(), diff --git a/testharness/src/sharedTest/kotlin/com/google/accompanist/testharness/TestHarnessTest.kt b/testharness/src/sharedTest/kotlin/com/google/accompanist/testharness/TestHarnessTest.kt index 9246c5f5a..c2d3bc004 100644 --- a/testharness/src/sharedTest/kotlin/com/google/accompanist/testharness/TestHarnessTest.kt +++ b/testharness/src/sharedTest/kotlin/com/google/accompanist/testharness/TestHarnessTest.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.testharness import android.content.res.Configuration diff --git a/testharness/src/sharedTest/kotlin/com/google/accompanist/testharness/TestHarnessTestApi23.kt b/testharness/src/sharedTest/kotlin/com/google/accompanist/testharness/TestHarnessTestApi23.kt index 2ebffce10..025062255 100644 --- a/testharness/src/sharedTest/kotlin/com/google/accompanist/testharness/TestHarnessTestApi23.kt +++ b/testharness/src/sharedTest/kotlin/com/google/accompanist/testharness/TestHarnessTestApi23.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.testharness import androidx.compose.ui.platform.LocalConfiguration From 102a0ca4b3a8c4354752201225998c3a1a37cc68 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Tue, 30 Jan 2024 12:56:20 +1100 Subject: [PATCH 051/124] Upgrade to Compose 1.7 --- .github/workflows/build.yml | 1 + README.md | 5 ++++- gradle.properties | 2 +- gradle/libs.versions.toml | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a85a5f642..dfedaf42a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,6 +11,7 @@ on: - compose-1.3 - compose-1.4 - compose-1.5 + - compose-1.6 paths-ignore: - '**.md' pull_request: diff --git a/README.md b/README.md index 82ffea177..53c6f5f58 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,10 @@ Each [release](https://github.com/google/accompanist/releases) outlines what ver Compose UI 1.5 (1.5.x)Maven Central - Compose UI 1.6 (1.6.x)Maven Central + Compose UI 1.6 (1.6.x)Maven Central + + + Compose UI 1.7 (1.7.x)Maven Central diff --git a/gradle.properties b/gradle.properties index ab75d18de..a0566d3b4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -33,7 +33,7 @@ systemProp.org.gradle.internal.http.socketTimeout=120000 GROUP=com.google.accompanist # !! No longer need to update this manually when using a Compose SNAPSHOT -VERSION_NAME=0.34.1-SNAPSHOT +VERSION_NAME=0.35.0-SNAPSHOT POM_DESCRIPTION=Utilities for Jetpack Compose diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 71ee34056..b8585e823 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] -compose = "1.6.0" +compose = "1.7.0-alpha01" composeCompiler = "1.5.8" composeMaterial3 = "1.0.1" composesnapshot = "-" # a single character = no snapshot From cc8299de50be94783a78fae31c6b60bbd503d6f9 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Tue, 30 Jan 2024 14:58:59 +1100 Subject: [PATCH 052/124] Update build.yml --- .github/workflows/build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index dfedaf42a..466689a0c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -5,7 +5,6 @@ on: branches: - main - compose-1.0 - - compose-1.0 - compose-1.1 - compose-1.2 - compose-1.3 From b48fb0219752a1469474f2ed3db9c26f03a694cd Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Wed, 31 Jan 2024 14:48:26 +1100 Subject: [PATCH 053/124] Release v0.35.0-alpha --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index a0566d3b4..836465b4b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -33,7 +33,7 @@ systemProp.org.gradle.internal.http.socketTimeout=120000 GROUP=com.google.accompanist # !! No longer need to update this manually when using a Compose SNAPSHOT -VERSION_NAME=0.35.0-SNAPSHOT +VERSION_NAME=0.35.0-alpha POM_DESCRIPTION=Utilities for Jetpack Compose From 7e722bd906628796d3817494b78c13be72458362 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Thu, 1 Feb 2024 08:31:57 +1100 Subject: [PATCH 054/124] Update gradle.properties --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 836465b4b..3078f6a99 100644 --- a/gradle.properties +++ b/gradle.properties @@ -33,7 +33,7 @@ systemProp.org.gradle.internal.http.socketTimeout=120000 GROUP=com.google.accompanist # !! No longer need to update this manually when using a Compose SNAPSHOT -VERSION_NAME=0.35.0-alpha +VERSION_NAME=0.35.1-SNAPSHOT POM_DESCRIPTION=Utilities for Jetpack Compose From b8a71f4e71450ed037a93e46113d86d57be21370 Mon Sep 17 00:00:00 2001 From: Alex Vanyo Date: Thu, 1 Feb 2024 11:22:51 -0800 Subject: [PATCH 055/124] Remove TODOs for DeviceConfigurationOverride --- .../accompanist/adaptive/TwoPaneTest.kt | 127 +++--------------- gradle/libs.versions.toml | 2 +- 2 files changed, 22 insertions(+), 107 deletions(-) diff --git a/adaptive/src/sharedTest/kotlin/com/google/accompanist/adaptive/TwoPaneTest.kt b/adaptive/src/sharedTest/kotlin/com/google/accompanist/adaptive/TwoPaneTest.kt index 07bdeb1d1..d32573adb 100644 --- a/adaptive/src/sharedTest/kotlin/com/google/accompanist/adaptive/TwoPaneTest.kt +++ b/adaptive/src/sharedTest/kotlin/com/google/accompanist/adaptive/TwoPaneTest.kt @@ -19,7 +19,6 @@ package com.google.accompanist.adaptive import androidx.compose.foundation.background import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.requiredSize import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Rect @@ -91,11 +90,7 @@ class TwoPaneTest { strategy = FractionHorizontalTwoPaneStrategy( splitFraction = 1f / 3f ), - modifier = Modifier - // TODO: This should not be necessary, remove once - // https://issuetracker.google.com/issues/322354080 is fixed - .requiredSize(900.dp, 1200.dp) - .onPlaced { twoPaneCoordinates = it } + modifier = Modifier.onPlaced { twoPaneCoordinates = it } ) } } @@ -156,11 +151,7 @@ class TwoPaneTest { strategy = FractionHorizontalTwoPaneStrategy( splitFraction = 1f / 3f ), - modifier = Modifier - // TODO: This should not be necessary, remove once - // https://issuetracker.google.com/issues/322354080 is fixed - .requiredSize(900.dp, 1200.dp) - .onPlaced { twoPaneCoordinates = it } + modifier = Modifier.onPlaced { twoPaneCoordinates = it } ) } } @@ -222,11 +213,7 @@ class TwoPaneTest { splitFraction = 1f / 3f, gapWidth = 64.dp ), - modifier = Modifier - // TODO: This should not be necessary, remove once - // https://issuetracker.google.com/issues/322354080 is fixed - .requiredSize(900.dp, 1200.dp) - .onPlaced { twoPaneCoordinates = it } + modifier = Modifier.onPlaced { twoPaneCoordinates = it } ) } } @@ -288,11 +275,7 @@ class TwoPaneTest { splitFraction = 1f / 3f, gapWidth = 64.dp ), - modifier = Modifier - // TODO: This should not be necessary, remove once - // https://issuetracker.google.com/issues/322354080 is fixed - .requiredSize(900.dp, 1200.dp) - .onPlaced { twoPaneCoordinates = it } + modifier = Modifier.onPlaced { twoPaneCoordinates = it } ) } } @@ -352,11 +335,7 @@ class TwoPaneTest { strategy = FractionVerticalTwoPaneStrategy( splitFraction = 1f / 3f ), - modifier = Modifier - // TODO: This should not be necessary, remove once - // https://issuetracker.google.com/issues/322354080 is fixed - .requiredSize(900.dp, 1200.dp) - .onPlaced { twoPaneCoordinates = it } + modifier = Modifier.onPlaced { twoPaneCoordinates = it } ) } } @@ -417,11 +396,7 @@ class TwoPaneTest { splitFraction = 1f / 3f, gapHeight = 64.dp ), - modifier = Modifier - // TODO: This should not be necessary, remove once - // https://issuetracker.google.com/issues/322354080 is fixed - .requiredSize(900.dp, 1200.dp) - .onPlaced { twoPaneCoordinates = it } + modifier = Modifier.onPlaced { twoPaneCoordinates = it } ) } } @@ -483,11 +458,7 @@ class TwoPaneTest { splitOffset = 200.dp, offsetFromStart = true, ), - modifier = Modifier - // TODO: This should not be necessary, remove once - // https://issuetracker.google.com/issues/322354080 is fixed - .requiredSize(900.dp, 1200.dp) - .onPlaced { twoPaneCoordinates = it } + modifier = Modifier.onPlaced { twoPaneCoordinates = it } ) } } @@ -549,11 +520,7 @@ class TwoPaneTest { splitOffset = 200.dp, offsetFromStart = true, ), - modifier = Modifier - // TODO: This should not be necessary, remove once - // https://issuetracker.google.com/issues/322354080 is fixed - .requiredSize(900.dp, 1200.dp) - .onPlaced { twoPaneCoordinates = it } + modifier = Modifier.onPlaced { twoPaneCoordinates = it } ) } } @@ -616,11 +583,7 @@ class TwoPaneTest { offsetFromStart = true, gapWidth = 64.dp ), - modifier = Modifier - // TODO: This should not be necessary, remove once - // https://issuetracker.google.com/issues/322354080 is fixed - .requiredSize(900.dp, 1200.dp) - .onPlaced { twoPaneCoordinates = it } + modifier = Modifier.onPlaced { twoPaneCoordinates = it } ) } } @@ -683,11 +646,7 @@ class TwoPaneTest { offsetFromStart = true, gapWidth = 64.dp ), - modifier = Modifier - // TODO: This should not be necessary, remove once - // https://issuetracker.google.com/issues/322354080 is fixed - .requiredSize(900.dp, 1200.dp) - .onPlaced { twoPaneCoordinates = it } + modifier = Modifier.onPlaced { twoPaneCoordinates = it } ) } } @@ -748,11 +707,7 @@ class TwoPaneTest { splitOffset = 300.dp, offsetFromTop = true ), - modifier = Modifier - // TODO: This should not be necessary, remove once - // https://issuetracker.google.com/issues/322354080 is fixed - .requiredSize(900.dp, 1200.dp) - .onPlaced { twoPaneCoordinates = it } + modifier = Modifier.onPlaced { twoPaneCoordinates = it } ) } } @@ -814,11 +769,7 @@ class TwoPaneTest { offsetFromTop = true, gapHeight = 64.dp ), - modifier = Modifier - // TODO: This should not be necessary, remove once - // https://issuetracker.google.com/issues/322354080 is fixed - .requiredSize(900.dp, 1200.dp) - .onPlaced { twoPaneCoordinates = it } + modifier = Modifier.onPlaced { twoPaneCoordinates = it } ) } } @@ -879,11 +830,7 @@ class TwoPaneTest { splitOffset = 300.dp, offsetFromTop = false ), - modifier = Modifier - // TODO: This should not be necessary, remove once - // https://issuetracker.google.com/issues/322354080 is fixed - .requiredSize(900.dp, 1200.dp) - .onPlaced { twoPaneCoordinates = it } + modifier = Modifier.onPlaced { twoPaneCoordinates = it } ) } } @@ -945,11 +892,7 @@ class TwoPaneTest { offsetFromTop = false, gapHeight = 64.dp ), - modifier = Modifier - // TODO: This should not be necessary, remove once - // https://issuetracker.google.com/issues/322354080 is fixed - .requiredSize(900.dp, 1200.dp) - .onPlaced { twoPaneCoordinates = it } + modifier = Modifier.onPlaced { twoPaneCoordinates = it } ) } } @@ -1017,11 +960,7 @@ class TwoPaneTest { splitFraction = 1f / 3f ), displayFeatures = displayFeatures, - modifier = Modifier - // TODO: This should not be necessary, remove once - // https://issuetracker.google.com/issues/322354080 is fixed - .requiredSize(900.dp, 1200.dp) - .onPlaced { twoPaneCoordinates = it } + modifier = Modifier.onPlaced { twoPaneCoordinates = it } ) } } @@ -1096,11 +1035,7 @@ class TwoPaneTest { splitFraction = 1f / 3f ), displayFeatures = displayFeatures, - modifier = Modifier - // TODO: This should not be necessary, remove once - // https://issuetracker.google.com/issues/322354080 is fixed - .requiredSize(900.dp, 1200.dp) - .onPlaced { twoPaneCoordinates = it } + modifier = Modifier.onPlaced { twoPaneCoordinates = it } ) } } @@ -1175,11 +1110,7 @@ class TwoPaneTest { splitFraction = 1f / 3f ), displayFeatures = displayFeatures, - modifier = Modifier - // TODO: This should not be necessary, remove once - // https://issuetracker.google.com/issues/322354080 is fixed - .requiredSize(900.dp, 1200.dp) - .onPlaced { twoPaneCoordinates = it } + modifier = Modifier.onPlaced { twoPaneCoordinates = it } ) } } @@ -1254,11 +1185,7 @@ class TwoPaneTest { splitFraction = 1f / 3f ), displayFeatures = displayFeatures, - modifier = Modifier - // TODO: This should not be necessary, remove once - // https://issuetracker.google.com/issues/322354080 is fixed - .requiredSize(900.dp, 1200.dp) - .onPlaced { twoPaneCoordinates = it } + modifier = Modifier.onPlaced { twoPaneCoordinates = it } ) } } @@ -1333,11 +1260,7 @@ class TwoPaneTest { splitFraction = 1f / 3f ), displayFeatures = displayFeatures, - modifier = Modifier - // TODO: This should not be necessary, remove once - // https://issuetracker.google.com/issues/322354080 is fixed - .requiredSize(900.dp, 1200.dp) - .onPlaced { twoPaneCoordinates = it } + modifier = Modifier.onPlaced { twoPaneCoordinates = it } ) } } @@ -1412,11 +1335,7 @@ class TwoPaneTest { splitFraction = 1f / 3f ), displayFeatures = displayFeatures, - modifier = Modifier - // TODO: This should not be necessary, remove once - // https://issuetracker.google.com/issues/322354080 is fixed - .requiredSize(900.dp, 1200.dp) - .onPlaced { twoPaneCoordinates = it } + modifier = Modifier.onPlaced { twoPaneCoordinates = it } ) } } @@ -1492,11 +1411,7 @@ class TwoPaneTest { splitFraction = 1f / 3f ), displayFeatures = displayFeatures, - modifier = Modifier - // TODO: This should not be necessary, remove once - // https://issuetracker.google.com/issues/322354080 is fixed - .requiredSize(900.dp, 1200.dp) - .onPlaced { twoPaneCoordinates = it } + modifier = Modifier.onPlaced { twoPaneCoordinates = it } ) } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 05f7956f2..307fcd00f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] -compose = "1.7.0-alpha01" +compose = "1.7.0-alpha02" composeCompiler = "1.5.8" composeMaterial3 = "1.0.1" composesnapshot = "-" # a single character = no snapshot From 5a052c3c1250c11e2b03cb6c65ce2d2608dfa63a Mon Sep 17 00:00:00 2001 From: Alex Vanyo Date: Wed, 14 Feb 2024 20:34:19 +0100 Subject: [PATCH 056/124] Update testharness docs to fix warning --- docs/testharness.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/testharness.md b/docs/testharness.md index df81902e0..84ab4c31d 100644 --- a/docs/testharness.md +++ b/docs/testharness.md @@ -3,7 +3,7 @@ [![Maven Central](https://img.shields.io/maven-central/v/com.google.accompanist/accompanist-testharness)](https://search.maven.org/search?q=g:com.google.accompanist) !!! warning -**This library is deprecated, with a superseding version in androidx.compose.ui.test. The migration guide and original documentation is below. + **This library is deprecated, with a superseding version in androidx.compose.ui.test**. The migration guide and original documentation is below. ## Migration @@ -185,4 +185,4 @@ repositories { dependencies { implementation "com.google.accompanist:accompanist-testharness:" } -``` \ No newline at end of file +``` From a780eaac6b125c7b7b25fdcefc71296400793e32 Mon Sep 17 00:00:00 2001 From: Philipp Keck Date: Sun, 18 Feb 2024 11:44:15 +0100 Subject: [PATCH 057/124] Drop false-positive deprecation of pagerTabIndicatorOffset() Fixes #1744. The deprecation was intended to apply only to the old overload above, but was presumably copy-pasted by accident. --- .../src/main/java/com/google/accompanist/pager/PagerTab.kt | 7 ------- 1 file changed, 7 deletions(-) diff --git a/pager-indicators/src/main/java/com/google/accompanist/pager/PagerTab.kt b/pager-indicators/src/main/java/com/google/accompanist/pager/PagerTab.kt index 072675cd0..2a1fd50e1 100644 --- a/pager-indicators/src/main/java/com/google/accompanist/pager/PagerTab.kt +++ b/pager-indicators/src/main/java/com/google/accompanist/pager/PagerTab.kt @@ -60,13 +60,6 @@ public fun Modifier.pagerTabIndicatorOffset( * [androidx.compose.foundation.pager.VerticalPager]. */ @OptIn(ExperimentalFoundationApi::class) -@Deprecated( - """ - pagerTabIndicatorOffset for accompanist Pagers are deprecated, please use the version that takes - androidx.compose.foundation.pager.PagerState instead -For more migration information, please visit https://google.github.io/accompanist/pager/#migration -""" -) public fun Modifier.pagerTabIndicatorOffset( pagerState: androidx.compose.foundation.pager.PagerState, tabPositions: List, From dbf4c46ac4b5822ee0be6f1cd6834ab27930f15a Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Tue, 27 Feb 2024 12:31:09 +1100 Subject: [PATCH 058/124] Revert "[pager-indicators] Drop false-positive deprecation of pagerTabIndicatorOffset()" --- .../src/main/java/com/google/accompanist/pager/PagerTab.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pager-indicators/src/main/java/com/google/accompanist/pager/PagerTab.kt b/pager-indicators/src/main/java/com/google/accompanist/pager/PagerTab.kt index 2a1fd50e1..072675cd0 100644 --- a/pager-indicators/src/main/java/com/google/accompanist/pager/PagerTab.kt +++ b/pager-indicators/src/main/java/com/google/accompanist/pager/PagerTab.kt @@ -60,6 +60,13 @@ public fun Modifier.pagerTabIndicatorOffset( * [androidx.compose.foundation.pager.VerticalPager]. */ @OptIn(ExperimentalFoundationApi::class) +@Deprecated( + """ + pagerTabIndicatorOffset for accompanist Pagers are deprecated, please use the version that takes + androidx.compose.foundation.pager.PagerState instead +For more migration information, please visit https://google.github.io/accompanist/pager/#migration +""" +) public fun Modifier.pagerTabIndicatorOffset( pagerState: androidx.compose.foundation.pager.PagerState, tabPositions: List, From 6b43791c5bcbc807b93506da3c63587e5c9c91ad Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Tue, 27 Feb 2024 12:34:40 +1100 Subject: [PATCH 059/124] Update pager.md --- docs/pager.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pager.md b/docs/pager.md index 7dabe576a..48cd16da4 100644 --- a/docs/pager.md +++ b/docs/pager.md @@ -33,7 +33,7 @@ The following is a mapping of the pager classes from accompanist to androidx.com | `PagerState#pageCount` | Use `canScrollForward` or `canScrollBackward` | | `calculateCurrentOffsetForPage` | Use `(pagerState.currentPage - page) + pagerState.currentPageOffsetFraction` | | `PagerState#currentPageOffset` | `PagerState#currentPageOffsetFraction` | -| `Modifier.pagerTabIndicatorOffset()` | Implement it yourself, or still include and use `accompanist-pager-indicators`, it now supports `androidx.compose.foundation.pager.PagerState` | +| `Modifier.pagerTabIndicatorOffset()` | Implement it yourself, or fork `accompanist-pager-indicators` implementation | | `HorizontalPagerIndicator` | Implement it yourself, or fork `accompanist-pager-indicators` implementation | | `VerticalPagerIndicator` | Implement it yourself, or fork `accompanist-pager-indicators` implementation | | `PagerDefaults.flingBehavior()` | `androidx.compose.foundation.pager.PagerDefaults.flingBehavior()` | From b317087362c42a3570b6a1674b78a28609f8c001 Mon Sep 17 00:00:00 2001 From: Jeremy Woods Date: Sat, 9 Mar 2024 00:57:05 +0000 Subject: [PATCH 060/124] [Navigation Material] Deprecate navigation-material APIs Now that Compose Material 1.7.0-alpha04 is out it offers the same functionality as Accompanist Navigation Material. This deprecates all of the classes and functions Test: ./gradlew navigation-material:cc --- docs/navigation-material.md | 22 ++++++++++++-- navigation-material/api/current.api | 30 +++++++++---------- .../BottomSheetNavigatorTest.kt | 1 + .../NavGraphBuilderTest.kt | 1 + .../SheetContentHostTest.kt | 1 + .../navigation/material/BottomSheet.kt | 7 +++++ .../material/BottomSheetNavigator.kt | 20 +++++++++++++ .../navigation/material/NavGraphBuilder.kt | 7 +++++ .../navigation/material/SheetContentHost.kt | 4 +-- .../material/BottomSheetNavSample.kt | 2 ++ 10 files changed, 76 insertions(+), 19 deletions(-) diff --git a/docs/navigation-material.md b/docs/navigation-material.md index 987684a4d..892714899 100644 --- a/docs/navigation-material.md +++ b/docs/navigation-material.md @@ -6,8 +6,26 @@ A library which provides [Compose Material](https://developer.android.com/jetpac This features composable bottom sheet destinations. !!! warning - The navigation APIs are currently experimental and they could change at any time. - All of the APIs are marked with the `@ExperimentalMaterialNavigationApi` annotation. + **This library is deprecated, with official material-navigation support in +[androidx.compose.material.navigation](https://developer.android.com/jetpack/androidx/releases/compose-material#1.7.0-alpha04).** +The original documentation is below the migration guide. + +## Migration + +The official `androidx.compose.material.navigation` version 1.7.0-alpha04+ offers all of the same functionality as Accompanist Navigation Material. + +All class names are the same, the only needed changes are import related. + +1. Replace dependency `com.google.accompanist:accompanist-navigation-material:` with `androidx.compose.material:material-navigation:` +2. Change import for ModalBottomSheetLayout from `com.google.accompanist.navigation.material.ModalBottomSheetLayout` to `androidx.compose.material.navigation.ModalBottomSheetLayout` +3. Change import for bottomSheet from `com.google.accompanist.navigation.material.bottomSheet` to `androidx.compose.material.navigation.bottomSheet` +4. Change import for rememberBottomSheetNavigator from `com.google.accompanist.navigation.material.rememberBottomSheetNavigator` to `androidx.compose.material.navigation.rememberBottomSheetNavigator` +5. Change import for BottomSheetNavigator from `com.google.accompanist.navigation.material.BottomSheetNavigator` to `androidx.compose.material.navigation.BottomSheetNavigator` +6. Change import for BottomSheetNavigatorSheetState from `com.google.accompanist.navigation.material.BottomSheetNavigatorSheetState` to `androidx.compose.material.navigation.BottomSheetNavigatorSheetState` + +# Deprecated Guidance for Accompanist Navigation Material + +The following is the deprecated guide for using Navigation Material in Accompanist. Please see above migration section for how to use the `androidx.compose.material.navigation` Material Navigation. ## Usage diff --git a/navigation-material/api/current.api b/navigation-material/api/current.api index 55af88504..11662059c 100644 --- a/navigation-material/api/current.api +++ b/navigation-material/api/current.api @@ -2,31 +2,31 @@ package com.google.accompanist.navigation.material { public final class BottomSheetKt { - method @androidx.compose.runtime.Composable @com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi public static void ModalBottomSheetLayout(com.google.accompanist.navigation.material.BottomSheetNavigator bottomSheetNavigator, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape sheetShape, optional float sheetElevation, optional long sheetBackgroundColor, optional long sheetContentColor, optional long scrimColor, kotlin.jvm.functions.Function0 content); + method @Deprecated @androidx.compose.runtime.Composable @com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi public static void ModalBottomSheetLayout(com.google.accompanist.navigation.material.BottomSheetNavigator bottomSheetNavigator, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape sheetShape, optional float sheetElevation, optional long sheetBackgroundColor, optional long sheetContentColor, optional long scrimColor, kotlin.jvm.functions.Function0 content); } - @androidx.navigation.Navigator.Name("BottomSheetNavigator") @com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi public final class BottomSheetNavigator extends androidx.navigation.Navigator { - ctor public BottomSheetNavigator(androidx.compose.material.ModalBottomSheetState sheetState); - method public com.google.accompanist.navigation.material.BottomSheetNavigator.Destination createDestination(); - method public com.google.accompanist.navigation.material.BottomSheetNavigatorSheetState getNavigatorSheetState(); - method public kotlin.jvm.functions.Function1 getSheetContent(); + @Deprecated @androidx.navigation.Navigator.Name("BottomSheetNavigator") @com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi public final class BottomSheetNavigator extends androidx.navigation.Navigator { + ctor @Deprecated public BottomSheetNavigator(androidx.compose.material.ModalBottomSheetState sheetState); + method @Deprecated public com.google.accompanist.navigation.material.BottomSheetNavigator.Destination createDestination(); + method @Deprecated public com.google.accompanist.navigation.material.BottomSheetNavigatorSheetState getNavigatorSheetState(); + method @Deprecated public kotlin.jvm.functions.Function1 getSheetContent(); property public final com.google.accompanist.navigation.material.BottomSheetNavigatorSheetState navigatorSheetState; property public final kotlin.jvm.functions.Function1 sheetContent; } - @androidx.navigation.NavDestination.ClassType(Composable::class) public static final class BottomSheetNavigator.Destination extends androidx.navigation.NavDestination implements androidx.navigation.FloatingWindow { - ctor public BottomSheetNavigator.Destination(com.google.accompanist.navigation.material.BottomSheetNavigator navigator, kotlin.jvm.functions.Function2 content); + @Deprecated @androidx.navigation.NavDestination.ClassType(Composable::class) public static final class BottomSheetNavigator.Destination extends androidx.navigation.NavDestination implements androidx.navigation.FloatingWindow { + ctor @Deprecated public BottomSheetNavigator.Destination(com.google.accompanist.navigation.material.BottomSheetNavigator navigator, kotlin.jvm.functions.Function2 content); } public final class BottomSheetNavigatorKt { - method @androidx.compose.runtime.Composable @com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi public static com.google.accompanist.navigation.material.BottomSheetNavigator rememberBottomSheetNavigator(optional androidx.compose.animation.core.AnimationSpec animationSpec); + method @Deprecated @androidx.compose.runtime.Composable @com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi public static com.google.accompanist.navigation.material.BottomSheetNavigator rememberBottomSheetNavigator(optional androidx.compose.animation.core.AnimationSpec animationSpec); } - @androidx.compose.runtime.Stable @com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi public final class BottomSheetNavigatorSheetState { - ctor public BottomSheetNavigatorSheetState(androidx.compose.material.ModalBottomSheetState sheetState); - method public androidx.compose.material.ModalBottomSheetValue getCurrentValue(); - method public androidx.compose.material.ModalBottomSheetValue getTargetValue(); - method public boolean isVisible(); + @Deprecated @androidx.compose.runtime.Stable @com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi public final class BottomSheetNavigatorSheetState { + ctor @Deprecated public BottomSheetNavigatorSheetState(androidx.compose.material.ModalBottomSheetState sheetState); + method @Deprecated public androidx.compose.material.ModalBottomSheetValue getCurrentValue(); + method @Deprecated public androidx.compose.material.ModalBottomSheetValue getTargetValue(); + method @Deprecated public boolean isVisible(); property public final androidx.compose.material.ModalBottomSheetValue currentValue; property public final boolean isVisible; property public final androidx.compose.material.ModalBottomSheetValue targetValue; @@ -36,7 +36,7 @@ package com.google.accompanist.navigation.material { } public final class NavGraphBuilderKt { - method @com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi public static void bottomSheet(androidx.navigation.NavGraphBuilder, String route, optional java.util.List arguments, optional java.util.List deepLinks, kotlin.jvm.functions.Function2 content); + method @Deprecated @com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi public static void bottomSheet(androidx.navigation.NavGraphBuilder, String route, optional java.util.List arguments, optional java.util.List deepLinks, kotlin.jvm.functions.Function2 content); } public final class SheetContentHostKt { diff --git a/navigation-material/src/androidTest/java/com/google/accompanist/navigation.material/BottomSheetNavigatorTest.kt b/navigation-material/src/androidTest/java/com/google/accompanist/navigation.material/BottomSheetNavigatorTest.kt index c37ae9506..a8ad92875 100644 --- a/navigation-material/src/androidTest/java/com/google/accompanist/navigation.material/BottomSheetNavigatorTest.kt +++ b/navigation-material/src/androidTest/java/com/google/accompanist/navigation.material/BottomSheetNavigatorTest.kt @@ -68,6 +68,7 @@ import org.junit.Test import org.junit.runner.RunWith import kotlin.math.roundToLong +@Suppress("DEPRECATION") @LargeTest @RunWith(AndroidJUnit4::class) @OptIn(ExperimentalMaterialApi::class, ExperimentalMaterialNavigationApi::class) diff --git a/navigation-material/src/androidTest/java/com/google/accompanist/navigation.material/NavGraphBuilderTest.kt b/navigation-material/src/androidTest/java/com/google/accompanist/navigation.material/NavGraphBuilderTest.kt index 7d5bfa04a..d1797c889 100644 --- a/navigation-material/src/androidTest/java/com/google/accompanist/navigation.material/NavGraphBuilderTest.kt +++ b/navigation-material/src/androidTest/java/com/google/accompanist/navigation.material/NavGraphBuilderTest.kt @@ -36,6 +36,7 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith +@Suppress("DEPRECATION") @OptIn(ExperimentalMaterialApi::class, ExperimentalMaterialNavigationApi::class) @LargeTest @RunWith(AndroidJUnit4::class) diff --git a/navigation-material/src/androidTest/java/com/google/accompanist/navigation.material/SheetContentHostTest.kt b/navigation-material/src/androidTest/java/com/google/accompanist/navigation.material/SheetContentHostTest.kt index 303ceaf2a..bf41d7a2d 100644 --- a/navigation-material/src/androidTest/java/com/google/accompanist/navigation.material/SheetContentHostTest.kt +++ b/navigation-material/src/androidTest/java/com/google/accompanist/navigation.material/SheetContentHostTest.kt @@ -49,6 +49,7 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith +@Suppress("DEPRECATION") @LargeTest @RunWith(AndroidJUnit4::class) @OptIn( diff --git a/navigation-material/src/main/java/com/google/accompanist/navigation/material/BottomSheet.kt b/navigation-material/src/main/java/com/google/accompanist/navigation/material/BottomSheet.kt index f0618ad12..f80ef402b 100644 --- a/navigation-material/src/main/java/com/google/accompanist/navigation/material/BottomSheet.kt +++ b/navigation-material/src/main/java/com/google/accompanist/navigation/material/BottomSheet.kt @@ -32,8 +32,15 @@ import androidx.compose.ui.unit.Dp * * @see [ModalBottomSheetLayout] */ +@Deprecated( + "Migrate to Androidx compose.material.navigation ModalBottomSheetLayout with the same " + + "parameters. To migrate, change import from " + + "com.google.accompanist.navigation.material.ModalBottomSheetLayout to " + + "androidx.compose.material.navigation.ModalBottomSheetLayout." +) @ExperimentalMaterialNavigationApi @OptIn(ExperimentalMaterialApi::class) +@Suppress("DEPRECATION") @Composable public fun ModalBottomSheetLayout( bottomSheetNavigator: BottomSheetNavigator, diff --git a/navigation-material/src/main/java/com/google/accompanist/navigation/material/BottomSheetNavigator.kt b/navigation-material/src/main/java/com/google/accompanist/navigation/material/BottomSheetNavigator.kt index 85ab18876..1b663d3e5 100644 --- a/navigation-material/src/main/java/com/google/accompanist/navigation/material/BottomSheetNavigator.kt +++ b/navigation-material/src/main/java/com/google/accompanist/navigation/material/BottomSheetNavigator.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.navigation.material import android.annotation.SuppressLint @@ -52,6 +54,12 @@ import kotlinx.coroutines.flow.transform * * @param sheetState The sheet state that is driven by the [BottomSheetNavigator] */ +@Deprecated( + "Migrate to Androidx compose.material.navigation BottomSheetNavigatorSheetState " + + "with the same parameters. To migrate, change import from " + + "com.google.accompanist.navigation.material.BottomSheetNavigatorSheetState to " + + "androidx.compose.material.navigation.BottomSheetNavigatorSheetState." +) @ExperimentalMaterialNavigationApi @OptIn(ExperimentalMaterialApi::class) @Stable @@ -78,6 +86,12 @@ public class BottomSheetNavigatorSheetState(internal val sheetState: ModalBottom /** * Create and remember a [BottomSheetNavigator] */ +@Deprecated( + "Migrate to Androidx compose.material.navigation rememberBottomSheetNavigator " + + "with the same parameters. To migrate, change import from " + + "com.google.accompanist.navigation.material.rememberBottomSheetNavigator to " + + "androidx.compose.material.navigation.rememberBottomSheetNavigator." +) @ExperimentalMaterialNavigationApi @OptIn(ExperimentalMaterialApi::class) @Composable @@ -110,6 +124,12 @@ public fun rememberBottomSheetNavigator( * @param sheetState The [ModalBottomSheetState] that the [BottomSheetNavigator] will use to * drive the sheet state */ +@Deprecated( + "Migrate to Androidx compose.material.navigation BottomSheetNavigator " + + "with the same parameters. To migrate, change import from " + + "com.google.accompanist.navigation.material.BottomSheetNavigator to " + + "androidx.compose.material.navigation.BottomSheetNavigator." +) @ExperimentalMaterialNavigationApi @OptIn(ExperimentalMaterialApi::class) @Navigator.Name("BottomSheetNavigator") diff --git a/navigation-material/src/main/java/com/google/accompanist/navigation/material/NavGraphBuilder.kt b/navigation-material/src/main/java/com/google/accompanist/navigation/material/NavGraphBuilder.kt index 55d8e205c..9b43b38bf 100644 --- a/navigation-material/src/main/java/com/google/accompanist/navigation/material/NavGraphBuilder.kt +++ b/navigation-material/src/main/java/com/google/accompanist/navigation/material/NavGraphBuilder.kt @@ -33,6 +33,13 @@ import androidx.navigation.get * @param deepLinks list of deep links to associate with the destinations * @param content the sheet content at the given destination */ +@Deprecated( + "Migrate to Androidx compose.material.navigation NavGraphBuilder.bottomSheet with the " + + "same parameters. To migrate, change import from " + + "com.google.accompanist.navigation.material.bottomSheet to " + + "androidx.compose.material.navigation.bottomSheet." +) +@Suppress("DEPRECATION") @SuppressLint("NewApi") // b/187418647 @ExperimentalMaterialNavigationApi public fun NavGraphBuilder.bottomSheet( diff --git a/navigation-material/src/main/java/com/google/accompanist/navigation/material/SheetContentHost.kt b/navigation-material/src/main/java/com/google/accompanist/navigation/material/SheetContentHost.kt index 5803ba1b5..0f6a0f927 100644 --- a/navigation-material/src/main/java/com/google/accompanist/navigation/material/SheetContentHost.kt +++ b/navigation-material/src/main/java/com/google/accompanist/navigation/material/SheetContentHost.kt @@ -70,8 +70,8 @@ internal fun ColumnScope.SheetContentHost( } } backStackEntry.LocalOwnersProvider(saveableStateHolder) { - val content = - (backStackEntry.destination as BottomSheetNavigator.Destination).content + @Suppress("DEPRECATION") + val content = (backStackEntry.destination as BottomSheetNavigator.Destination).content content(backStackEntry) } } diff --git a/sample/src/main/java/com/google/accompanist/sample/navigation/material/BottomSheetNavSample.kt b/sample/src/main/java/com/google/accompanist/sample/navigation/material/BottomSheetNavSample.kt index 5a6355977..b0bbc12a9 100644 --- a/sample/src/main/java/com/google/accompanist/sample/navigation/material/BottomSheetNavSample.kt +++ b/sample/src/main/java/com/google/accompanist/sample/navigation/material/BottomSheetNavSample.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("DEPRECATION") + package com.google.accompanist.sample.navigation.material import android.os.Bundle From f4dd29abc2175a3dc59ccce37b14a352c6e1f431 Mon Sep 17 00:00:00 2001 From: dongjinlong Date: Tue, 26 Mar 2024 22:16:10 +0800 Subject: [PATCH 061/124] chore: fix some comments Signed-off-by: dongjinlong --- docs/themeadapter-appcompat.md | 3 ++- docs/themeadapter-core.md | 2 +- docs/themeadapter-material.md | 2 +- docs/themeadapter-material3.md | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/themeadapter-appcompat.md b/docs/themeadapter-appcompat.md index 5c146c2c0..c8ed8575f 100644 --- a/docs/themeadapter-appcompat.md +++ b/docs/themeadapter-appcompat.md @@ -10,12 +10,13 @@ Recommendation: Use the [Material Theme Builder](https://m3.material.io/theme-bu You can checkout [Material Design 3 in Compose](https://developer.android.com/jetpack/compose/designsystems/material3#material-theming) to learn more about creating and adding theme to your app using Material Theme Builder. -## Original Documenation +## Original Documentation A library that enables the reuse of [AppCompat][appcompat] XML themes, for theming in [Jetpack Compose][compose]. The basis of theming in [Jetpack Compose][compose] is the [`MaterialTheme`][materialtheme] composable, where you provide [`Colors`][colors], [`Shapes`][shapes] and [`Typography`][typography] instances containing your styling parameters: +
``` kotlin MaterialTheme( typography = type, diff --git a/docs/themeadapter-core.md b/docs/themeadapter-core.md index 7c272a18c..cdc4e4eba 100644 --- a/docs/themeadapter-core.md +++ b/docs/themeadapter-core.md @@ -10,7 +10,7 @@ Recommendation: Use the [Material Theme Builder](https://m3.material.io/theme-bu You can checkout [Material Design 3 in Compose](https://developer.android.com/jetpack/compose/designsystems/material3#material-theming) to learn more about creating and adding theme to your app using Material Theme Builder. -## Original Documenation +## Original Documentation A library that includes common utilities that enable the reuse of XML themes, for theming in [Jetpack Compose][compose]. diff --git a/docs/themeadapter-material.md b/docs/themeadapter-material.md index e2430ccf7..e14d0acdf 100644 --- a/docs/themeadapter-material.md +++ b/docs/themeadapter-material.md @@ -10,7 +10,7 @@ Recommendation: Use the [Material Theme Builder](https://m3.material.io/theme-bu You can checkout [Material Design 3 in Compose](https://developer.android.com/jetpack/compose/designsystems/material3#material-theming) to learn more about creating and adding theme to your app using Material Theme Builder. -## Original Documenation +## Original Documentation A library that enables the reuse of [MDC-Android][mdc] Material 2 XML themes, for theming in [Jetpack Compose][compose]. diff --git a/docs/themeadapter-material3.md b/docs/themeadapter-material3.md index 73403826b..c0d13b6e9 100644 --- a/docs/themeadapter-material3.md +++ b/docs/themeadapter-material3.md @@ -10,7 +10,7 @@ Recommendation: Use the [Material Theme Builder](https://m3.material.io/theme-bu You can checkout [Material Design 3 in Compose](https://developer.android.com/jetpack/compose/designsystems/material3#material-theming) to learn more about creating and adding theme to your app using Material Theme Builder. -## Original Documenation +## Original Documentation A library that enables the reuse of [MDC-Android][mdc] Material 3 XML themes, for theming in [Jetpack Compose][compose]. ![Material 3 Theme Adapter header](themeadapter/material3-header.png) From 64503879cc6ffb16720aaaf47b85bea1f237b0d7 Mon Sep 17 00:00:00 2001 From: Alex Vanyo Date: Mon, 29 Apr 2024 15:54:58 -0700 Subject: [PATCH 062/124] Update README.md to deprecate navigation-material --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 3719df9fb..008e3f517 100644 --- a/README.md +++ b/README.md @@ -46,9 +46,6 @@ For stable versions of Compose, we use the latest *stable* version of the Compos ### 📫 [Permissions](./permissions/) A library that provides [Android runtime permissions][runtimepermissions] support for Jetpack Compose. -### 🧭🎨️ [Navigation-Material](./navigation-material/) -A library which provides [Compose Material](https://developer.android.com/jetpack/androidx/releases/compose-material) support, such as modal bottom sheets, for Jetpack Navigation Compose. - ### 🖌️ [Drawable Painter](./drawablepainter/) A library which provides a way to use Android Drawables as Jetpack Compose Painters. @@ -70,6 +67,9 @@ See our [Migration Guide](https://google.github.io/accompanist/flowlayout/) for ### 🧭✨[Navigation-Animation](./navigation-animation/) (Deprecated) See our [Migration Guide](https://google.github.io/accompanist/navigation-animation/) for migrating to using built in support for animations in Jetpack Navigation Compose. +### 🧭🎨️ [Navigation-Material](./navigation-material/) (Deprecated) +See our [Migration Guide](https://google.github.io/accompanist/navigation-material/) for migrating to using built in material-navigation support. + ### ⏳ [Placeholder](./placeholder/) (Deprecated) A library that provides easy-to-use modifiers for displaying a placeholder UI while content is loading. From 3e33d6e26b42972e229dd8ed30d97542861bf6ba Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Fri, 17 May 2024 14:28:58 -0700 Subject: [PATCH 063/124] Release 0.35.1-alpha --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 3078f6a99..7b8406018 100644 --- a/gradle.properties +++ b/gradle.properties @@ -33,7 +33,7 @@ systemProp.org.gradle.internal.http.socketTimeout=120000 GROUP=com.google.accompanist # !! No longer need to update this manually when using a Compose SNAPSHOT -VERSION_NAME=0.35.1-SNAPSHOT +VERSION_NAME=0.35.1-alpha POM_DESCRIPTION=Utilities for Jetpack Compose From 7b3c66a396c862cf929bcc1681dadc282561487c Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Fri, 17 May 2024 15:03:39 -0700 Subject: [PATCH 064/124] Switch test runner to ubuntu --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 466689a0c..912060fc9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -73,7 +73,7 @@ jobs: run: release/signing-cleanup.sh test: - runs-on: macos-latest + runs-on: ubuntu-latest needs: build timeout-minutes: 70 From 57907e1c9aadef1f70e51889c04048693e983f21 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Fri, 17 May 2024 15:38:55 -0700 Subject: [PATCH 065/124] Prepare for next release --- .idea/kotlinc.xml | 2 +- gradle.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml index 14b5512fa..8491b65fe 100644 --- a/.idea/kotlinc.xml +++ b/.idea/kotlinc.xml @@ -4,6 +4,6 @@