diff options
| author | 2025-03-12 11:16:22 -0700 | |
|---|---|---|
| committer | 2025-03-12 11:16:22 -0700 | |
| commit | dc3414db419cea803e625d1be355fd5ed5a432de (patch) | |
| tree | 3e1ea8d3c8e20bf2d0474c0455bd2142247b4d85 | |
| parent | b66fa5ec457badd30bd9fb8da0ce5c49cb631f70 (diff) | |
| parent | 514fba16a3a0c705d3cacfee32eb3afb5ffd3fef (diff) | |
Merge "Update to ToT RemoteCompose" into main
8 files changed, 76 insertions, 30 deletions
diff --git a/core/java/com/android/internal/widget/remotecompose/core/CoreDocument.java b/core/java/com/android/internal/widget/remotecompose/core/CoreDocument.java index e5c20eb7ce18..766fbf1a80f5 100644 --- a/core/java/com/android/internal/widget/remotecompose/core/CoreDocument.java +++ b/core/java/com/android/internal/widget/remotecompose/core/CoreDocument.java @@ -73,7 +73,7 @@ public class CoreDocument implements Serializable { // We also keep a more fine-grained BUILD number, exposed as // ID_API_LEVEL = DOCUMENT_API_LEVEL + BUILD - static final float BUILD = 0.6f; + static final float BUILD = 0.7f; private static final boolean UPDATE_VARIABLES_BEFORE_LAYOUT = false; @@ -842,18 +842,25 @@ public class CoreDocument implements Serializable { @NonNull private HashMap<Integer, Component> mComponentMap = new HashMap<Integer, Component>(); + /** + * Register all the operations recursively + * + * @param context + * @param list + */ private void registerVariables( @NonNull RemoteContext context, @NonNull ArrayList<Operation> list) { for (Operation op : list) { if (op instanceof VariableSupport) { - ((VariableSupport) op).updateVariables(context); ((VariableSupport) op).registerListening(context); } if (op instanceof Component) { mComponentMap.put(((Component) op).getComponentId(), (Component) op); - registerVariables(context, ((Component) op).getList()); ((Component) op).registerVariables(context); } + if (op instanceof Container) { + registerVariables(context, ((Container) op).getList()); + } if (op instanceof ComponentValue) { ComponentValue v = (ComponentValue) op; Component component = mComponentMap.get(v.getComponentId()); @@ -866,14 +873,34 @@ public class CoreDocument implements Serializable { if (op instanceof ComponentModifiers) { for (ModifierOperation modifier : ((ComponentModifiers) op).getList()) { if (modifier instanceof VariableSupport) { - ((VariableSupport) modifier).updateVariables(context); ((VariableSupport) modifier).registerListening(context); } } } + } + } + + /** + * Apply the operations recursively, for the original initialization pass with mode == DATA + * + * @param context + * @param list + */ + private void applyOperations( + @NonNull RemoteContext context, @NonNull ArrayList<Operation> list) { + for (Operation op : list) { + if (op instanceof VariableSupport) { + ((VariableSupport) op).updateVariables(context); + } + if (op instanceof Component) { // for componentvalues... + ((Component) op).updateVariables(context); + } op.markNotDirty(); op.apply(context); context.incrementOpCount(); + if (op instanceof Container) { + applyOperations(context, ((Container) op).getList()); + } } } @@ -893,6 +920,7 @@ public class CoreDocument implements Serializable { mTimeVariables.updateTime(context); registerVariables(context, mOperations); + applyOperations(context, mOperations); context.mMode = RemoteContext.ContextMode.UNSET; if (UPDATE_VARIABLES_BEFORE_LAYOUT) { diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/FloatExpression.java b/core/java/com/android/internal/widget/remotecompose/core/operations/FloatExpression.java index eba201bfb216..0901ae3eca75 100644 --- a/core/java/com/android/internal/widget/remotecompose/core/operations/FloatExpression.java +++ b/core/java/com/android/internal/widget/remotecompose/core/operations/FloatExpression.java @@ -149,7 +149,6 @@ public class FloatExpression extends Operation implements VariableSupport, Seria @Override public void apply(@NonNull RemoteContext context) { - updateVariables(context); float t = context.getAnimationTime(); if (Float.isNaN(mLastChange)) { mLastChange = t; diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/ParticlesCreate.java b/core/java/com/android/internal/widget/remotecompose/core/operations/ParticlesCreate.java index ee9e7a4045cb..e86eabffbeaf 100644 --- a/core/java/com/android/internal/widget/remotecompose/core/operations/ParticlesCreate.java +++ b/core/java/com/android/internal/widget/remotecompose/core/operations/ParticlesCreate.java @@ -23,6 +23,8 @@ import android.annotation.NonNull; import com.android.internal.widget.remotecompose.core.Operation; import com.android.internal.widget.remotecompose.core.Operations; +import com.android.internal.widget.remotecompose.core.PaintContext; +import com.android.internal.widget.remotecompose.core.PaintOperation; import com.android.internal.widget.remotecompose.core.RemoteContext; import com.android.internal.widget.remotecompose.core.VariableSupport; import com.android.internal.widget.remotecompose.core.WireBuffer; @@ -30,6 +32,7 @@ import com.android.internal.widget.remotecompose.core.documentation.Documentatio import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation; import com.android.internal.widget.remotecompose.core.operations.utilities.AnimatedFloatExpression; import com.android.internal.widget.remotecompose.core.operations.utilities.NanMap; +import com.android.internal.widget.remotecompose.core.serialize.MapSerializer; import java.util.Arrays; import java.util.List; @@ -38,7 +41,7 @@ import java.util.List; * This creates a particle system. which consist of id, particleCount, array of id's and equations * for constructing the particles */ -public class ParticlesCreate extends Operation implements VariableSupport { +public class ParticlesCreate extends PaintOperation implements VariableSupport { private static final int OP_CODE = Operations.PARTICLE_DEFINE; private static final String CLASS_NAME = "ParticlesCreate"; private final int mId; @@ -214,6 +217,13 @@ public class ParticlesCreate extends Operation implements VariableSupport { return indent + toString(); } + @Override + public void paint(@NonNull PaintContext context) { + for (int i = 0; i < mParticles.length; i++) { + initializeParticle(i); + } + } + void initializeParticle(int pNo) { for (int j = 0; j < mParticles[pNo].length; j++) { for (int k = 0; k < mIndexeVars.length; k++) { @@ -226,13 +236,6 @@ public class ParticlesCreate extends Operation implements VariableSupport { } } - @Override - public void apply(@NonNull RemoteContext context) { - for (int i = 0; i < mParticles.length; i++) { - initializeParticle(i); - } - } - public float[][] getParticles() { return mParticles; } @@ -244,4 +247,7 @@ public class ParticlesCreate extends Operation implements VariableSupport { public float[][] getEquations() { return mOutEquations; } + + @Override + public void serialize(MapSerializer serializer) {} } diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/PathAppend.java b/core/java/com/android/internal/widget/remotecompose/core/operations/PathAppend.java index 8a747e134897..31d21c4d539c 100644 --- a/core/java/com/android/internal/widget/remotecompose/core/operations/PathAppend.java +++ b/core/java/com/android/internal/widget/remotecompose/core/operations/PathAppend.java @@ -258,6 +258,6 @@ public class PathAppend extends PaintOperation implements VariableSupport, Seria @Override public void serialize(MapSerializer serializer) { - serializer.addType(CLASS_NAME).add("id", mInstanceId).add("path", pathString(mFloatPath)); + serializer.addType(CLASS_NAME).add("id", mInstanceId).addPath("path", mFloatPath); } } diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/PathCreate.java b/core/java/com/android/internal/widget/remotecompose/core/operations/PathCreate.java index 78e3b9eac110..7a28992496b4 100644 --- a/core/java/com/android/internal/widget/remotecompose/core/operations/PathCreate.java +++ b/core/java/com/android/internal/widget/remotecompose/core/operations/PathCreate.java @@ -242,6 +242,6 @@ public class PathCreate extends PaintOperation implements VariableSupport, Seria @Override public void serialize(MapSerializer serializer) { - serializer.addType(CLASS_NAME).add("id", mInstanceId).add("path", pathString(mFloatPath)); + serializer.addType(CLASS_NAME).add("id", mInstanceId).addPath("path", mFloatPath); } } diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/PathData.java b/core/java/com/android/internal/widget/remotecompose/core/operations/PathData.java index cedc4f3b0e45..8b01722aea86 100644 --- a/core/java/com/android/internal/widget/remotecompose/core/operations/PathData.java +++ b/core/java/com/android/internal/widget/remotecompose/core/operations/PathData.java @@ -243,6 +243,6 @@ public class PathData extends Operation implements VariableSupport, Serializable @Override public void serialize(MapSerializer serializer) { - serializer.addType(CLASS_NAME).add("id", mInstanceId).add("path", pathString(mFloatPath)); + serializer.addType(CLASS_NAME).add("id", mInstanceId).addPath("path", mFloatPath); } } diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/Component.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/Component.java index 2a809c6f0a2a..425c61b636c4 100644 --- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/Component.java +++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/Component.java @@ -175,20 +175,25 @@ public class Component extends PaintOperation + mComponentId); } for (ComponentValue v : mComponentValues) { - switch (v.getType()) { - case ComponentValue.WIDTH: - context.loadFloat(v.getValueId(), mWidth); - if (DEBUG) { - System.out.println("Updating WIDTH for " + mComponentId + " to " + mWidth); - } - break; - case ComponentValue.HEIGHT: - context.loadFloat(v.getValueId(), mHeight); - if (DEBUG) { - System.out.println( - "Updating HEIGHT for " + mComponentId + " to " + mHeight); - } - break; + if (context.getMode() == RemoteContext.ContextMode.DATA) { + context.loadFloat(v.getValueId(), 1f); + } else { + switch (v.getType()) { + case ComponentValue.WIDTH: + context.loadFloat(v.getValueId(), mWidth); + if (DEBUG) { + System.out.println( + "Updating WIDTH for " + mComponentId + " to " + mWidth); + } + break; + case ComponentValue.HEIGHT: + context.loadFloat(v.getValueId(), mHeight); + if (DEBUG) { + System.out.println( + "Updating HEIGHT for " + mComponentId + " to " + mHeight); + } + break; + } } } } diff --git a/core/java/com/android/internal/widget/remotecompose/core/serialize/MapSerializer.java b/core/java/com/android/internal/widget/remotecompose/core/serialize/MapSerializer.java index 20e94ab5d898..32a0ccc01738 100644 --- a/core/java/com/android/internal/widget/remotecompose/core/serialize/MapSerializer.java +++ b/core/java/com/android/internal/widget/remotecompose/core/serialize/MapSerializer.java @@ -49,6 +49,14 @@ public interface MapSerializer { MapSerializer addIntExpressionSrc(String key, int[] value, int mask); /** + * Add a path + * + * @param key The key + * @param path The path + */ + MapSerializer addPath(String key, float[] path); + + /** * Add metadata to this map for filtering by the data format generator. * * @param value A set of tags to add |