From d4a1cb0bfb1fbb7edd886ce5e587d051b368a6a0 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Thu, 25 Sep 2025 15:48:03 -0300 Subject: [PATCH] Upgrade compose to latest stable. --- .../webrtc/v2/CallScreenController.kt | 7 +- .../webrtc/v2/CallScreenTooltipBox.kt | 3 +- core-ui/build.gradle.kts | 1 + .../java/org/signal/core/ui/compose/Icons.kt | 3 +- .../org/signal/core/ui/compose/Tooltips.kt | 55 +- gradle/libs.versions.toml | 5 +- gradle/verification-metadata.xml | 925 ++++++++++++++++++ 7 files changed, 941 insertions(+), 58 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/v2/CallScreenController.kt b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/v2/CallScreenController.kt index aa2252b96f..18bcd8ac5a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/v2/CallScreenController.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/v2/CallScreenController.kt @@ -25,6 +25,7 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.Density +import androidx.compose.ui.unit.dp import org.thoughtcrime.securesms.components.webrtc.ToggleButtonOutputState import org.thoughtcrime.securesms.components.webrtc.WebRtcAudioDevice @@ -173,9 +174,10 @@ private fun rememberCallScreenSheetState( ) { SheetState( skipPartiallyExpanded = false, - density = density, initialValue = initialValue, confirmValueChange = confirmValueChange, + positionalThreshold = { with(density) { 56.dp.toPx() } }, + velocityThreshold = { with(density) { 125.dp.toPx() } }, skipHiddenState = skipHiddenState ) } @@ -202,7 +204,8 @@ private fun saveSheetState( SheetState( skipPartiallyExpanded = false, - density = density, + positionalThreshold = { with(density) { 56.dp.toPx() } }, + velocityThreshold = { with(density) { 125.dp.toPx() } }, initialValue = value, confirmValueChange = confirmValueChange, skipHiddenState = skipHiddenState diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/v2/CallScreenTooltipBox.kt b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/v2/CallScreenTooltipBox.kt index a36a5c8b80..0194458977 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/v2/CallScreenTooltipBox.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/v2/CallScreenTooltipBox.kt @@ -7,6 +7,7 @@ package org.thoughtcrime.securesms.components.webrtc.v2 import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.DefaultTooltipCaretShape import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.PlainTooltip import androidx.compose.material3.Text @@ -42,7 +43,7 @@ fun CallScreenTooltipBox( state = state, tooltip = { PlainTooltip( - caretSize = TooltipDefaults.caretSize, + caretShape = DefaultTooltipCaretShape(), shape = TooltipDefaults.plainTooltipContainerShape, containerColor = colorResource(R.color.signal_light_colorPrimary), contentColor = colorResource(R.color.signal_light_colorOnPrimary) diff --git a/core-ui/build.gradle.kts b/core-ui/build.gradle.kts index 3aee2cfda5..daafbe2409 100644 --- a/core-ui/build.gradle.kts +++ b/core-ui/build.gradle.kts @@ -23,6 +23,7 @@ dependencies { androidTestApi(composeBom) } + api(libs.androidx.compose.material.icons.core) api(libs.androidx.compose.material3) api(libs.androidx.compose.material3.adaptive) api(libs.androidx.compose.material3.adaptive.layout) diff --git a/core-ui/src/main/java/org/signal/core/ui/compose/Icons.kt b/core-ui/src/main/java/org/signal/core/ui/compose/Icons.kt index 452e789292..ed6d0bf96a 100644 --- a/core-ui/src/main/java/org/signal/core/ui/compose/Icons.kt +++ b/core-ui/src/main/java/org/signal/core/ui/compose/Icons.kt @@ -5,7 +5,6 @@ package org.signal.core.ui.compose -import android.R import androidx.compose.material3.Icon import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -50,7 +49,7 @@ object Icons { private fun BrushedForegroundPreview() { Previews.Preview { Icons.BrushedForeground( - painter = painterResource(id = R.drawable.ic_menu_camera), + painter = painterResource(id = android.R.drawable.ic_menu_camera), contentDescription = null, foregroundBrush = Brush.linearGradient(listOf(Color.Red, Color.Blue)) ) diff --git a/core-ui/src/main/java/org/signal/core/ui/compose/Tooltips.kt b/core-ui/src/main/java/org/signal/core/ui/compose/Tooltips.kt index 45893859a1..034c718a55 100644 --- a/core-ui/src/main/java/org/signal/core/ui/compose/Tooltips.kt +++ b/core-ui/src/main/java/org/signal/core/ui/compose/Tooltips.kt @@ -8,23 +8,14 @@ package org.signal.core.ui.compose import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.material3.PlainTooltip +import androidx.compose.material3.TooltipAnchorPosition import androidx.compose.material3.TooltipBox import androidx.compose.material3.TooltipDefaults import androidx.compose.material3.rememberTooltipState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.snapshotFlow -import androidx.compose.ui.Modifier -import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.Path -import androidx.compose.ui.layout.boundsInWindow -import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.unit.IntOffset -import androidx.compose.ui.unit.IntRect -import androidx.compose.ui.unit.IntSize -import androidx.compose.ui.unit.LayoutDirection -import androidx.compose.ui.window.PopupPositionProvider import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.filterNot @@ -48,41 +39,15 @@ object Tooltips { isPersistent = true ) - val caretSize = with(LocalDensity.current) { - TooltipDefaults.caretSize.toSize() - } - TooltipBox( - positionProvider = PositionBelowAnchor, + positionProvider = TooltipDefaults.rememberTooltipPositionProvider(TooltipAnchorPosition.Below), state = tooltipState, tooltip = { PlainTooltip( shape = TooltipDefaults.plainTooltipContainerShape, + caretShape = TooltipDefaults.caretShape(), containerColor = containerColor, - contentColor = contentColor, - modifier = Modifier.drawCaret { anchorLayoutCoordinates -> - - val path = if (anchorLayoutCoordinates != null) { - val anchorBounds = anchorLayoutCoordinates.boundsInWindow() - val anchorMid = (anchorBounds.right - anchorBounds.left) / 2 - val position = Offset(size.width - anchorMid, 0f) - - Path().apply { - moveTo(x = position.x, y = position.y) - lineTo(x = position.x + caretSize.width / 2, y = position.y) - lineTo(x = position.x, y = position.y - caretSize.height) - lineTo(x = position.x - caretSize.width / 2, y = position.y) - close() - } - } else { - Path() - } - - onDrawWithContent { - drawContent() - drawPath(path = path, color = containerColor) - } - } + contentColor = contentColor ) { tooltipContent() } @@ -106,16 +71,4 @@ object Tooltips { .collect { onDismiss() } } } - - private object PositionBelowAnchor : PopupPositionProvider { - override fun calculatePosition(anchorBounds: IntRect, windowSize: IntSize, layoutDirection: LayoutDirection, popupContentSize: IntSize): IntOffset { - val x = if (layoutDirection == LayoutDirection.Ltr) { - anchorBounds.right - popupContentSize.width - } else { - anchorBounds.left - } - - return IntOffset(x, anchorBounds.bottom) - } - } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 853e48dd24..2d333b5cc5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -40,7 +40,8 @@ android-application = { module = "com.android.application:com.android.applicatio androidx-benchmark-gradle-plugin = "androidx.benchmark:benchmark-gradle-plugin:1.3.3" # Compose -androidx-compose-bom = "androidx.compose:compose-bom:2025.08.00" +androidx-compose-bom = "androidx.compose:compose-bom:2025.09.01" +androidx-compose-material-icons-core = { module = "androidx.compose.material:material-icons-core" } androidx-compose-material3 = { module = "androidx.compose.material3:material3" } androidx-compose-material3-adaptive = { module = "androidx.compose.material3.adaptive:adaptive"} androidx-compose-material3-adaptive-layout = { module = "androidx.compose.material3.adaptive:adaptive-layout"} @@ -50,7 +51,7 @@ androidx-compose-ui-tooling-core = { module = "androidx.compose.ui:ui-tooling" } androidx-compose-ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest" } androidx-compose-ui-test-junit4 = { module = "androidx.compose.ui:ui-test-junit4" } androidx-compose-runtime-livedata = { module = "androidx.compose.runtime:runtime-livedata" } -androidx-compose-rxjava3 = "androidx.compose.runtime:runtime-rxjava3:1.7.8" +androidx-compose-rxjava3 = "androidx.compose.runtime:runtime-rxjava3:1.9.2" # Accompanist accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanist" } diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index de64c2b1e6..560a43c84b 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -417,6 +417,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -433,6 +438,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -464,6 +474,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -488,6 +503,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -496,6 +519,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -512,6 +543,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -520,6 +559,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -528,6 +575,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -536,6 +591,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -549,6 +612,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -557,6 +628,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -565,6 +644,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -581,6 +668,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -589,6 +684,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -597,11 +700,24 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + @@ -610,6 +726,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -642,6 +766,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -650,6 +782,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -658,6 +798,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -666,6 +814,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -674,6 +830,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -682,6 +846,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -780,6 +952,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -788,6 +968,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -796,6 +984,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -804,6 +1000,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -812,6 +1016,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -820,6 +1032,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -836,6 +1056,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -852,6 +1080,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -873,6 +1109,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -881,6 +1125,22 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + + + + @@ -915,6 +1175,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -923,6 +1191,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -939,6 +1215,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -947,6 +1231,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -955,6 +1247,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -971,6 +1271,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -979,6 +1287,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -987,6 +1303,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -995,6 +1319,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1003,6 +1335,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1011,6 +1351,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1019,6 +1367,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1027,6 +1383,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1035,6 +1399,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1051,6 +1423,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1059,6 +1439,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1067,6 +1455,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1075,6 +1471,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1083,6 +1487,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1091,6 +1503,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1099,6 +1519,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1107,6 +1535,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1115,6 +1551,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1123,6 +1567,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1131,6 +1583,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1139,6 +1599,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1155,6 +1623,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1163,6 +1639,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1171,6 +1655,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1187,6 +1679,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1195,6 +1695,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1203,6 +1711,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1644,6 +2160,19 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + @@ -1675,6 +2204,22 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + + + + @@ -1696,6 +2241,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1738,6 +2291,22 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + + + + @@ -1780,6 +2349,22 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + + + + @@ -1817,6 +2402,22 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + + + + @@ -1833,6 +2434,22 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + + + + @@ -1867,6 +2484,22 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + + + + @@ -1883,6 +2516,22 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + + + + @@ -1899,6 +2548,22 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + + + + @@ -1954,6 +2619,19 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + @@ -1986,6 +2664,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -2007,10 +2693,26 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + + + + @@ -2020,6 +2722,22 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + + + + @@ -2046,6 +2764,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -2091,6 +2817,19 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + @@ -2123,6 +2862,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -2144,6 +2891,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -2211,6 +2966,25 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + + + + + + + @@ -2243,6 +3017,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -2272,6 +3054,19 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + @@ -2296,6 +3091,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -2312,6 +3115,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -2338,6 +3149,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -2386,6 +3205,22 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + + + + @@ -2434,6 +3269,19 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + @@ -2442,6 +3290,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -2450,6 +3306,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -2783,6 +3647,19 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + @@ -2791,6 +3668,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -2799,6 +3684,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -2807,6 +3700,22 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + + + + @@ -2823,6 +3732,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -2839,6 +3756,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + +