Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
b11899c
Address feedback for FormWidgetInfo model class
Jan 7, 2026
829b918
Make FormWidgetInfo constructor private and update tests.
Jan 7, 2026
b827163
Reset paint of RemoteIcon after drawing
yingmak Jan 12, 2026
e565df1
Allow override in RemoteColorScheme
yschimke Jan 12, 2026
5a3e84d
Revert "Revert "feat(view): Implement robust drag-and-drop touch..."
Jan 13, 2026
286fe48
Revert "Revert "feat(view): Make AnnotationToolbar draggable and..."
Jan 13, 2026
ed5b289
Revert "Revert "feat(view): Add ToolbarCoordinator for drag-and-..."
Jan 13, 2026
161bf32
Revert "Revert "feat(fragment): Integrate ToolbarCoordinator in ..."
Jan 13, 2026
fa6b5b9
Fix: account for navigation bar insets in test container
Jan 13, 2026
fabbbfa
Add Press and Release interaction first frame benchmark for Glimmer.s…
tolgacanunal Jan 8, 2026
ff783a8
Merge "Add Press and Release interaction first frame benchmark for Gl…
tolgacanunal Jan 13, 2026
11b12a1
Shader use RemoteColor and RemoteFloat
yschimke Jan 12, 2026
26f4fbc
Merge changes from topic "revert-3912621-revert-3907980-drag-and-drop…
Jan 13, 2026
1697043
Merge changes from topic "revert-3912621-revert-3907980-drag-and-drop…
Jan 13, 2026
c52d6c1
Merge changes from topic "form-filling-processing-layer" into android…
Jan 13, 2026
f98012e
Merge "Reset paint of RemoteIcon after drawing" into androidx-main
yschimke Jan 13, 2026
e009b8f
fix(toolbar): Fixes minor UI glitches for annotation toolbar
Jan 13, 2026
8ec9c8f
Merge "Allow override in RemoteColorScheme" into androidx-main
yschimke Jan 13, 2026
7375f3c
Merge "fix(toolbar): Fixes minor UI glitches for annotation toolbar" …
Jan 13, 2026
271814c
Adds the `ProjectedDeviceCapabilityProvider` and an implementation of…
idzkowski-google Jan 8, 2026
cda0a41
Merge "Shader use RemoteColor and RemoteFloat" into androidx-main
yschimke Jan 13, 2026
8f3b233
Ignore material3 experimental APIs for BCV
fsladkey Jan 8, 2026
305f16b
Merge "Ignore material3 experimental APIs for BCV" into androidx-main
fsladkey Jan 13, 2026
804a6be
Merge "Adds the `ProjectedDeviceCapabilityProvider` and an implementa…
idzkowski-google Jan 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -389,6 +389,7 @@ private val nonPublicMarkers =
"androidx.wear.compose.foundation.ExperimentalWearFoundationApi",
"androidx.wear.compose.material.ExperimentalWearMaterialApi",
"androidx.window.core.ExperimentalWindowApi",
"androidx.compose.material3.ExperimentalMaterial3Api",
)

const val NEW_ISSUE_URL = "https://b.corp.google.com/issues/new?component=1102332"
Expand Down
71 changes: 68 additions & 3 deletions compose/material3/material3/bcv/native/current.ignore

Large diffs are not rendered by default.

499 changes: 1 addition & 498 deletions compose/material3/material3/bcv/native/current.txt

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -1137,7 +1137,7 @@ ROOT [-2:-1] = [0.0, 0.0, 715.0, 825.0] VISIBLE
"""
testLayout(result) {
val colors =
listOf((Color.Red).copy(alpha = 0.5f).compositeOver(Color.Green), Color.Black)
listOf((Color.Red).copy(alpha = 0.5f).compositeOver(Color.Green).rc, Color.Black.rc)
RemoteBox(
modifier =
RemoteModifier.fillMaxSize()
Expand Down Expand Up @@ -1186,7 +1186,7 @@ ROOT [-2:-1] = [0.0, 0.0, 715.0, 825.0] VISIBLE
"""
testLayout(result) {
val colors =
listOf((Color.Red).copy(alpha = 0.5f).compositeOver(Color.Green), Color.Black)
listOf((Color.Red).copy(alpha = 0.5f).compositeOver(Color.Green).rc, Color.Black.rc)
RemoteBox(
modifier =
RemoteModifier.fillMaxSize()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.Rect
import android.graphics.Shader
import android.graphics.Typeface
import androidx.compose.remote.core.CoreDocument
import androidx.compose.remote.core.Operation
Expand All @@ -47,13 +46,16 @@ import androidx.compose.remote.creation.compose.state.RemoteFloat
import androidx.compose.remote.creation.compose.state.RemoteMatrix3x3
import androidx.compose.remote.creation.compose.state.RemotePaint
import androidx.compose.remote.creation.compose.state.RemoteString
import androidx.compose.remote.creation.compose.state.rc
import androidx.compose.remote.creation.compose.state.rf
import androidx.compose.remote.creation.compose.state.tween
import androidx.compose.remote.creation.compose.test.R
import androidx.compose.remote.creation.platform.AndroidxRcPlatformServices
import androidx.compose.remote.creation.profile.Profile
import androidx.compose.remote.player.core.platform.AndroidRemoteContext
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.Color as ComposeColor
import androidx.compose.ui.graphics.TileMode
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
Expand All @@ -65,7 +67,6 @@ import java.time.Clock
import java.time.LocalDateTime
import java.time.ZoneId
import java.time.ZonedDateTime
import java.util.ArrayList
import org.junit.Before
import org.junit.Rule
import org.junit.Test
Expand Down Expand Up @@ -565,33 +566,38 @@ class RecordingCanvasTest {
@Test
fun setShaderMatrixCalledOnce() {
val remoteShader =
RemoteSweepShader(100f, 100f, intArrayOf(Color.RED, Color.GREEN, Color.BLUE), null)
.apply { remoteMatrix3x3 = RemoteMatrix3x3.createRotate(RemoteFloat(90f)) }
RemoteSweepShader(
100f.rf,
100f.rf,
listOf(ComposeColor.Red.rc, ComposeColor.Green.rc, ComposeColor.Blue.rc),
null,
)
.apply { remoteMatrix3x3 = RemoteMatrix3x3.createRotate(90f.rf) }
val paintWithShader = RemotePaint().apply { shader = remoteShader }
val paintWithShader2 =
RemotePaint().apply {
shader =
RemoteLinearShader(
10f,
100f,
200f,
200f,
intArrayOf(Color.RED, Color.GREEN, Color.BLUE),
10f.rf,
100f.rf,
200f.rf,
200f.rf,
listOf(ComposeColor.Red.rc, ComposeColor.Green.rc, ComposeColor.Blue.rc),
null,
Shader.TileMode.REPEAT,
TileMode.Repeated,
)
}
val paintWithShader3 =
RemotePaint().apply {
shader =
RemoteLinearShader(
10f,
100f,
100f,
200f,
intArrayOf(Color.RED, Color.BLUE),
10f.rf,
100f.rf,
100f.rf,
200f.rf,
listOf(ComposeColor.Red.rc, ComposeColor.Blue.rc),
null,
Shader.TileMode.REPEAT,
TileMode.Repeated,
)
}
recordingCanvas.usePaint(paintWithShader)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ import androidx.compose.remote.creation.compose.shaders.linearGradient
import androidx.compose.remote.creation.compose.shaders.radialGradient
import androidx.compose.remote.creation.compose.shaders.sweepGradient
import androidx.compose.remote.creation.compose.shaders.verticalGradient
import androidx.compose.remote.creation.compose.state.RemoteColor
import androidx.compose.remote.creation.compose.state.rc
import androidx.compose.remote.creation.compose.state.rdp
import androidx.compose.remote.creation.compose.state.rf
import androidx.compose.remote.player.compose.test.utils.screenshot.TargetPlayer
Expand Down Expand Up @@ -62,10 +64,26 @@ class RemoteBrushTest {
)
}

private val colors = listOf(Color.Red, Color.Blue)
private val colors = listOf(Color.Red.rc, Color.Blue.rc)
private val dynamicColors =
listOf(
// Force non constant values with createReference()
RemoteColor(
alpha = 1f.rf.createReference(),
red = 1f.rf,
green = 0f.rf,
blue = 0f.rf,
), // Red
RemoteColor(
alpha = 1f.rf.createReference(),
red = 0f.rf,
green = 0f.rf,
blue = 1f.rf,
), // Blue
)

private val tests =
listOf<Pair<String, @Composable () -> Unit>>(
listOf<Pair<String, @Composable @RemoteComposable () -> Unit>>(
"LinearGradient_Infinite" to
{
RemoteBox(
Expand All @@ -74,7 +92,7 @@ class RemoteBrushTest {
.background(
RemoteBrush.linearGradient(
colors = colors,
start = RemoteOffset(0f, 0f),
start = RemoteOffset(0f.rf, 0f.rf),
end = RemoteOffset(Offset.Infinite),
)
)
Expand Down Expand Up @@ -135,6 +153,30 @@ class RemoteBrushTest {
)
)
},
"LinearGradient_DynamicColors" to
{
RemoteBox(
modifier =
RemoteModifier.fillMaxSize()
.background(RemoteBrush.linearGradient(colors = dynamicColors))
)
},
"RadialGradient_DynamicColors" to
{
RemoteBox(
modifier =
RemoteModifier.fillMaxSize()
.background(RemoteBrush.radialGradient(colors = dynamicColors))
)
},
"SweepGradient_DynamicColors" to
{
RemoteBox(
modifier =
RemoteModifier.fillMaxSize()
.background(RemoteBrush.sweepGradient(colors = dynamicColors))
)
},
)

@Test
Expand Down Expand Up @@ -172,6 +214,6 @@ class RemoteBrushTest {
private companion object {
val Padding = 24.rdp
val ContainerSize = 100.rdp
val ContainerColor = Color(0xFFCFD8DC.toInt())
val ContainerColor = Color(0xFFCFD8DC.toInt()).rc
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,16 @@
* limitations under the License.
*/

package androidx.compose.remote.creation.compose.layout

import androidx.compose.remote.core.RemoteContext
import androidx.compose.remote.creation.compose.SCREENSHOT_GOLDEN_DIRECTORY
import androidx.compose.remote.creation.compose.layout.RemoteAlignment
import androidx.compose.remote.creation.compose.layout.RemoteArrangement
import androidx.compose.remote.creation.compose.layout.RemoteBox
import androidx.compose.remote.creation.compose.layout.RemoteCanvas
import androidx.compose.remote.creation.compose.layout.RemoteColumn
import androidx.compose.remote.creation.compose.layout.RemoteComposable
import androidx.compose.remote.creation.compose.layout.RemoteOffset
import androidx.compose.remote.creation.compose.layout.RemoteRow
import androidx.compose.remote.creation.compose.layout.RemoteSize
import androidx.compose.remote.creation.compose.modifier.RemoteModifier
import androidx.compose.remote.creation.compose.modifier.background
import androidx.compose.remote.creation.compose.modifier.fillMaxSize
Expand All @@ -29,6 +35,7 @@ import androidx.compose.remote.creation.compose.shaders.solidColor
import androidx.compose.remote.creation.compose.state.RemoteColor
import androidx.compose.remote.creation.compose.state.RemotePaint
import androidx.compose.remote.creation.compose.state.RemoteString
import androidx.compose.remote.creation.compose.state.rc
import androidx.compose.remote.creation.compose.state.rdp
import androidx.compose.remote.creation.compose.state.rf
import androidx.compose.remote.creation.compose.state.rs
Expand Down Expand Up @@ -172,7 +179,7 @@ class RemoteCanvasTest {
anchorY = 40f.rf,
paint =
RemotePaint().apply {
applyRemoteBrush(RemoteBrush.solidColor(Color.Red), remoteSize)
applyRemoteBrush(RemoteBrush.solidColor(Color.Red.rc), remoteSize)
textSize = SMALL_FONT_SIZE.rf.id
},
)
Expand All @@ -182,7 +189,7 @@ class RemoteCanvasTest {
anchorY = 80f.rf,
paint =
RemotePaint().apply {
applyRemoteBrush(RemoteBrush.solidColor(Color.Green), remoteSize)
applyRemoteBrush(RemoteBrush.solidColor(Color.Green.rc), remoteSize)
textSize = MEDIUM_FONT_SIZE.rf.id
},
)
Expand All @@ -192,7 +199,7 @@ class RemoteCanvasTest {
anchorY = 120f.rf,
paint =
RemotePaint().apply {
applyRemoteBrush(RemoteBrush.solidColor(Color.Blue), remoteSize)
applyRemoteBrush(RemoteBrush.solidColor(Color.Blue.rc), remoteSize)
textSize = LARGE_FONT_SIZE.rf.id
},
)
Expand All @@ -202,9 +209,7 @@ class RemoteCanvasTest {
@RemoteComposable
@Composable
fun TestDrawAnchoredText_colorExpression() {
// this would be animated, but screenshots are frozen.
val color =
RemoteColor.fromARGB(0.5f.rf, 0.8f.rf, RemoteContext.FLOAT_CONTINUOUS_SEC.rf, 0.9f.rf)
val color = RemoteColor.fromARGB(0.9f.rf.createReference(), 0.8f.rf, 0.9f.rf, 0.9f.rf)
val text = "Visible Hello".rs
RemoteCanvas(modifier = RemoteModifier.fillMaxSize()) {
val w = remoteWidth
Expand All @@ -214,7 +219,7 @@ class RemoteCanvasTest {
anchorY = 40f.rf,
paint =
RemotePaint().apply {
applyRemoteBrush(RemoteBrush.solidColor(color), remoteSize)
remoteColor = color
textSize = SMALL_FONT_SIZE.rf.id
},
)
Expand Down Expand Up @@ -284,7 +289,7 @@ class RemoteCanvasTest {
private companion object {
val Padding = 24.rdp
val ContainerSize = 100.rdp
val ContainerColor = Color(0xFFCFD8DC)
val ContainerColor = Color(0xFFCFD8DC.toInt()).rc
const val SMALL_FONT_SIZE = 16f
const val MEDIUM_FONT_SIZE = 32f
const val LARGE_FONT_SIZE = 48f
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,9 @@ class BackgroundModifierTest {
RemoteBox(
modifier =
RemoteModifier.fillMaxSize()
.background(RemoteBrush.verticalGradient(listOf(Color.Blue, Color.Red)))
.background(
RemoteBrush.verticalGradient(listOf(Color.Blue.rc, Color.Red.rc))
)
)
}
}
Expand All @@ -183,7 +185,7 @@ class BackgroundModifierTest {
modifier =
RemoteModifier.fillMaxSize()
.background(
RemoteBrush.horizontalGradient(listOf(Color.Blue, Color.Red))
RemoteBrush.horizontalGradient(listOf(Color.Blue.rc, Color.Red.rc))
)
)
}
Expand All @@ -200,7 +202,9 @@ class BackgroundModifierTest {
RemoteBox(
modifier =
RemoteModifier.fillMaxSize()
.background(RemoteBrush.radialGradient(listOf(Color.Blue, Color.Red)))
.background(
RemoteBrush.radialGradient(listOf(Color.Blue.rc, Color.Red.rc))
)
)
}
}
Expand All @@ -216,7 +220,9 @@ class BackgroundModifierTest {
RemoteBox(
modifier =
RemoteModifier.fillMaxSize()
.background(RemoteBrush.sweepGradient(listOf(Color.Blue, Color.Red)))
.background(
RemoteBrush.sweepGradient(listOf(Color.Blue.rc, Color.Red.rc))
)
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,7 @@ public open class RecordingCanvas(bitmap: Bitmap) : Canvas(bitmap) {
val shader = paint.shader as? RemoteShader
if (forceSendingPaint || shader != lastRemoteShader) {
if (shader != null) {
shader.apply(paintBundle)
shader.apply(creationState, paintBundle)
if (usingShaderMatrix || shader.remoteMatrix3x3 != null) {
usingShaderMatrix = true
val remoteMatrix3x3 = shader.remoteMatrix3x3
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,11 @@ package androidx.compose.remote.creation.compose.shaders

import androidx.annotation.RestrictTo
import androidx.compose.remote.core.operations.paint.PaintBundle
import androidx.compose.remote.creation.compose.capture.RemoteComposeCreationState
import androidx.compose.remote.creation.compose.layout.RemoteSize
import androidx.compose.remote.creation.compose.state.RemoteFloat
import androidx.compose.remote.creation.compose.state.RemoteMatrix3x3
import androidx.compose.remote.creation.compose.state.rc
import androidx.compose.runtime.Immutable
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.Brush
Expand Down Expand Up @@ -52,10 +54,10 @@ public abstract class RemoteBrush {
public companion object {
public fun fromComposeUi(brush: Brush): RemoteBrush {
return when (brush) {
is SolidColor -> RemoteBrush.solidColor(brush.value)
is SolidColor -> RemoteBrush.solidColor(brush.value.rc)
else -> {
println("RemoteBrush.fromComposeUi not implemented for $brush")
RemoteBrush.solidColor(Color.Transparent)
RemoteBrush.solidColor(Color.Transparent.rc)
}
}
}
Expand All @@ -72,8 +74,8 @@ public abstract class RemoteBrush {

@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@Suppress("DEPRECATION")
public interface RemoteShader {
public abstract fun apply(paintBundle: PaintBundle)
public abstract class RemoteShader : android.graphics.Shader() {
public abstract fun apply(creationState: RemoteComposeCreationState, paintBundle: PaintBundle)

/**
* The [RemoteMatrix3x3] if any to apply to the shader. Note not all profiles will support
Expand Down
Loading
Loading