Loading core/java/com/android/internal/widget/remotecompose/accessibility/CoreDocumentAccessibility.java +1 −1 Original line number Diff line number Diff line Loading @@ -179,7 +179,7 @@ public class CoreDocumentAccessibility implements RemoteComposeDocumentAccessibi * @return */ public boolean performClick(Component component) { mDocument.performClick(mRemoteContext, component.getComponentId()); mDocument.performClick(mRemoteContext, component.getComponentId(), ""); return true; } Loading core/java/com/android/internal/widget/remotecompose/core/CoreDocument.java +96 −3 Original line number Diff line number Diff line Loading @@ -19,8 +19,10 @@ import android.annotation.NonNull; import android.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.widget.remotecompose.core.operations.BitmapData; import com.android.internal.widget.remotecompose.core.operations.ComponentValue; import com.android.internal.widget.remotecompose.core.operations.DrawContent; import com.android.internal.widget.remotecompose.core.operations.FloatConstant; import com.android.internal.widget.remotecompose.core.operations.FloatExpression; import com.android.internal.widget.remotecompose.core.operations.Header; import com.android.internal.widget.remotecompose.core.operations.IntegerExpression; Loading @@ -29,6 +31,7 @@ import com.android.internal.widget.remotecompose.core.operations.RootContentBeha import com.android.internal.widget.remotecompose.core.operations.ShaderData; import com.android.internal.widget.remotecompose.core.operations.TextData; import com.android.internal.widget.remotecompose.core.operations.Theme; import com.android.internal.widget.remotecompose.core.operations.Utils; import com.android.internal.widget.remotecompose.core.operations.layout.CanvasOperations; import com.android.internal.widget.remotecompose.core.operations.layout.Component; import com.android.internal.widget.remotecompose.core.operations.layout.Container; Loading @@ -42,6 +45,8 @@ import com.android.internal.widget.remotecompose.core.operations.utilities.IntMa import com.android.internal.widget.remotecompose.core.operations.utilities.StringSerializer; import com.android.internal.widget.remotecompose.core.serialize.MapSerializer; import com.android.internal.widget.remotecompose.core.serialize.Serializable; import com.android.internal.widget.remotecompose.core.types.IntegerConstant; import com.android.internal.widget.remotecompose.core.types.LongConstant; import java.util.ArrayList; import java.util.HashMap; Loading @@ -68,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.4f; static final float BUILD = 0.5f; @NonNull ArrayList<Operation> mOperations = new ArrayList<>(); Loading Loading @@ -442,6 +447,94 @@ public class CoreDocument implements Serializable { return mDocProperties.get(key); } /** * Apply a collection of operations to the document * * @param delta the delta to apply */ public void applyUpdate(CoreDocument delta) { HashMap<Integer, TextData> txtData = new HashMap<Integer, TextData>(); HashMap<Integer, BitmapData> imgData = new HashMap<Integer, BitmapData>(); HashMap<Integer, FloatConstant> fltData = new HashMap<Integer, FloatConstant>(); HashMap<Integer, IntegerConstant> intData = new HashMap<Integer, IntegerConstant>(); HashMap<Integer, LongConstant> longData = new HashMap<Integer, LongConstant>(); recursiveTreverse( mOperations, (op) -> { if (op instanceof TextData) { TextData d = (TextData) op; txtData.put(d.mTextId, d); } else if (op instanceof BitmapData) { BitmapData d = (BitmapData) op; imgData.put(d.mImageId, d); } else if (op instanceof FloatConstant) { FloatConstant d = (FloatConstant) op; fltData.put(d.mId, d); } else if (op instanceof IntegerConstant) { IntegerConstant d = (IntegerConstant) op; intData.put(d.mId, d); } else if (op instanceof LongConstant) { LongConstant d = (LongConstant) op; longData.put(d.mId, d); } }); recursiveTreverse( delta.mOperations, (op) -> { if (op instanceof TextData) { TextData t = (TextData) op; TextData txtInDoc = txtData.get(t.mTextId); if (txtInDoc != null) { txtInDoc.update(t); Utils.log("update" + t.mText); txtInDoc.markDirty(); } } else if (op instanceof BitmapData) { BitmapData b = (BitmapData) op; BitmapData imgInDoc = imgData.get(b.mImageId); if (imgInDoc != null) { imgInDoc.update(b); imgInDoc.markDirty(); } } else if (op instanceof FloatConstant) { FloatConstant f = (FloatConstant) op; FloatConstant fltInDoc = fltData.get(f.mId); if (fltInDoc != null) { fltInDoc.update(f); fltInDoc.markDirty(); } } else if (op instanceof IntegerConstant) { IntegerConstant ic = (IntegerConstant) op; IntegerConstant intInDoc = intData.get(ic.mId); if (intInDoc != null) { intInDoc.update(ic); intInDoc.markDirty(); } } else if (op instanceof LongConstant) { LongConstant lc = (LongConstant) op; LongConstant longInDoc = longData.get(lc.mId); if (longInDoc != null) { longInDoc.update(lc); longInDoc.markDirty(); } } }); } private interface Visitor { void visit(Operation op); } private void recursiveTreverse(ArrayList<Operation> mOperations, Visitor visitor) { for (Operation op : mOperations) { if (op instanceof Container) { recursiveTreverse(((Component) op).mList, visitor); } visitor.visit(op); } } // ============== Haptic support ================== public interface HapticEngine { /** Loading Loading @@ -911,7 +1004,7 @@ public class CoreDocument implements Serializable { * * @param id the click area id */ public void performClick(@NonNull RemoteContext context, int id) { public void performClick(@NonNull RemoteContext context, int id, @NonNull String metadata) { for (ClickAreaRepresentation clickArea : mClickAreas) { if (clickArea.mId == id) { warnClickListeners(clickArea); Loading @@ -920,7 +1013,7 @@ public class CoreDocument implements Serializable { } for (IdActionCallback listener : mIdActionListeners) { listener.onAction(id, ""); listener.onAction(id, metadata); } Component component = getComponent(id); Loading core/java/com/android/internal/widget/remotecompose/core/Operations.java +6 −1 Original line number Diff line number Diff line Loading @@ -104,6 +104,7 @@ import com.android.internal.widget.remotecompose.core.operations.layout.managers import com.android.internal.widget.remotecompose.core.operations.layout.managers.CollapsibleRowLayout; import com.android.internal.widget.remotecompose.core.operations.layout.managers.ColumnLayout; import com.android.internal.widget.remotecompose.core.operations.layout.managers.FitBoxLayout; import com.android.internal.widget.remotecompose.core.operations.layout.managers.ImageLayout; import com.android.internal.widget.remotecompose.core.operations.layout.managers.RowLayout; import com.android.internal.widget.remotecompose.core.operations.layout.managers.StateLayout; import com.android.internal.widget.remotecompose.core.operations.layout.managers.TextLayout; Loading @@ -115,6 +116,7 @@ import com.android.internal.widget.remotecompose.core.operations.layout.modifier import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.GraphicsLayerModifierOperation; import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.HeightInModifierOperation; import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.HeightModifierOperation; import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.HostActionMetadataOperation; import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.HostActionOperation; import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.HostNamedActionOperation; import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.MarqueeModifierOperation; Loading Loading @@ -247,6 +249,7 @@ public class Operations { public static final int LAYOUT_CANVAS_CONTENT = 207; public static final int LAYOUT_TEXT = 208; public static final int LAYOUT_STATE = 217; public static final int LAYOUT_IMAGE = 234; public static final int COMPONENT_START = 2; Loading Loading @@ -278,6 +281,7 @@ public class Operations { public static final int MODIFIER_VISIBILITY = 211; public static final int HOST_ACTION = 209; public static final int HOST_METADATA_ACTION = 216; public static final int HOST_NAMED_ACTION = 210; public static final int VALUE_INTEGER_CHANGE_ACTION = 212; Loading Loading @@ -385,6 +389,7 @@ public class Operations { map.put(CONTAINER_END, ContainerEnd::read); map.put(HOST_ACTION, HostActionOperation::read); map.put(HOST_METADATA_ACTION, HostActionMetadataOperation::read); map.put(HOST_NAMED_ACTION, HostNamedActionOperation::read); map.put(VALUE_INTEGER_CHANGE_ACTION, ValueIntegerChangeActionOperation::read); map.put( Loading @@ -407,7 +412,7 @@ public class Operations { map.put(LAYOUT_CANVAS, CanvasLayout::read); map.put(LAYOUT_CANVAS_CONTENT, CanvasContent::read); map.put(LAYOUT_TEXT, TextLayout::read); map.put(LAYOUT_IMAGE, ImageLayout::read); map.put(LAYOUT_STATE, StateLayout::read); map.put(DRAW_CONTENT, DrawContent::read); Loading core/java/com/android/internal/widget/remotecompose/core/RemoteComposeBuffer.java +14 −0 Original line number Diff line number Diff line Loading @@ -102,6 +102,7 @@ import com.android.internal.widget.remotecompose.core.operations.layout.managers import com.android.internal.widget.remotecompose.core.operations.layout.managers.CollapsibleRowLayout; import com.android.internal.widget.remotecompose.core.operations.layout.managers.ColumnLayout; import com.android.internal.widget.remotecompose.core.operations.layout.managers.FitBoxLayout; import com.android.internal.widget.remotecompose.core.operations.layout.managers.ImageLayout; import com.android.internal.widget.remotecompose.core.operations.layout.managers.RowLayout; import com.android.internal.widget.remotecompose.core.operations.layout.managers.StateLayout; import com.android.internal.widget.remotecompose.core.operations.layout.managers.TextLayout; Loading Loading @@ -2093,6 +2094,19 @@ public class RemoteComposeBuffer { FitBoxLayout.apply(mBuffer, mLastComponentId, animationId, horizontal, vertical); } /** * Add an imagelayout command * * @param componentId component id * @param animationId animation id * @param bitmapId bitmap id */ public void addImage( int componentId, int animationId, int bitmapId, int scaleType, float alpha) { mLastComponentId = getComponentId(componentId); ImageLayout.apply(mBuffer, componentId, animationId, bitmapId, scaleType, alpha); } /** * Add a row start tag * Loading core/java/com/android/internal/widget/remotecompose/core/operations/BitmapData.java +15 −2 Original line number Diff line number Diff line Loading @@ -41,12 +41,12 @@ import java.util.List; public class BitmapData extends Operation implements SerializableToString, Serializable { private static final int OP_CODE = Operations.DATA_BITMAP; private static final String CLASS_NAME = "BitmapData"; int mImageId; public final int mImageId; int mImageWidth; int mImageHeight; short mType; short mEncoding; @NonNull final byte[] mBitmap; @NonNull byte[] mBitmap; /** The max size of width or height */ public static final int MAX_IMAGE_DIMENSION = 8000; Loading Loading @@ -90,6 +90,19 @@ public class BitmapData extends Operation implements SerializableToString, Seria this.mBitmap = bitmap; } /** * Update the bitmap data * * @param from the bitmap to copy */ public void update(BitmapData from) { this.mImageWidth = from.mImageWidth; this.mImageHeight = from.mImageHeight; this.mBitmap = from.mBitmap; this.mType = from.mType; this.mEncoding = from.mEncoding; } /** * The width of the image * Loading Loading
core/java/com/android/internal/widget/remotecompose/accessibility/CoreDocumentAccessibility.java +1 −1 Original line number Diff line number Diff line Loading @@ -179,7 +179,7 @@ public class CoreDocumentAccessibility implements RemoteComposeDocumentAccessibi * @return */ public boolean performClick(Component component) { mDocument.performClick(mRemoteContext, component.getComponentId()); mDocument.performClick(mRemoteContext, component.getComponentId(), ""); return true; } Loading
core/java/com/android/internal/widget/remotecompose/core/CoreDocument.java +96 −3 Original line number Diff line number Diff line Loading @@ -19,8 +19,10 @@ import android.annotation.NonNull; import android.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.widget.remotecompose.core.operations.BitmapData; import com.android.internal.widget.remotecompose.core.operations.ComponentValue; import com.android.internal.widget.remotecompose.core.operations.DrawContent; import com.android.internal.widget.remotecompose.core.operations.FloatConstant; import com.android.internal.widget.remotecompose.core.operations.FloatExpression; import com.android.internal.widget.remotecompose.core.operations.Header; import com.android.internal.widget.remotecompose.core.operations.IntegerExpression; Loading @@ -29,6 +31,7 @@ import com.android.internal.widget.remotecompose.core.operations.RootContentBeha import com.android.internal.widget.remotecompose.core.operations.ShaderData; import com.android.internal.widget.remotecompose.core.operations.TextData; import com.android.internal.widget.remotecompose.core.operations.Theme; import com.android.internal.widget.remotecompose.core.operations.Utils; import com.android.internal.widget.remotecompose.core.operations.layout.CanvasOperations; import com.android.internal.widget.remotecompose.core.operations.layout.Component; import com.android.internal.widget.remotecompose.core.operations.layout.Container; Loading @@ -42,6 +45,8 @@ import com.android.internal.widget.remotecompose.core.operations.utilities.IntMa import com.android.internal.widget.remotecompose.core.operations.utilities.StringSerializer; import com.android.internal.widget.remotecompose.core.serialize.MapSerializer; import com.android.internal.widget.remotecompose.core.serialize.Serializable; import com.android.internal.widget.remotecompose.core.types.IntegerConstant; import com.android.internal.widget.remotecompose.core.types.LongConstant; import java.util.ArrayList; import java.util.HashMap; Loading @@ -68,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.4f; static final float BUILD = 0.5f; @NonNull ArrayList<Operation> mOperations = new ArrayList<>(); Loading Loading @@ -442,6 +447,94 @@ public class CoreDocument implements Serializable { return mDocProperties.get(key); } /** * Apply a collection of operations to the document * * @param delta the delta to apply */ public void applyUpdate(CoreDocument delta) { HashMap<Integer, TextData> txtData = new HashMap<Integer, TextData>(); HashMap<Integer, BitmapData> imgData = new HashMap<Integer, BitmapData>(); HashMap<Integer, FloatConstant> fltData = new HashMap<Integer, FloatConstant>(); HashMap<Integer, IntegerConstant> intData = new HashMap<Integer, IntegerConstant>(); HashMap<Integer, LongConstant> longData = new HashMap<Integer, LongConstant>(); recursiveTreverse( mOperations, (op) -> { if (op instanceof TextData) { TextData d = (TextData) op; txtData.put(d.mTextId, d); } else if (op instanceof BitmapData) { BitmapData d = (BitmapData) op; imgData.put(d.mImageId, d); } else if (op instanceof FloatConstant) { FloatConstant d = (FloatConstant) op; fltData.put(d.mId, d); } else if (op instanceof IntegerConstant) { IntegerConstant d = (IntegerConstant) op; intData.put(d.mId, d); } else if (op instanceof LongConstant) { LongConstant d = (LongConstant) op; longData.put(d.mId, d); } }); recursiveTreverse( delta.mOperations, (op) -> { if (op instanceof TextData) { TextData t = (TextData) op; TextData txtInDoc = txtData.get(t.mTextId); if (txtInDoc != null) { txtInDoc.update(t); Utils.log("update" + t.mText); txtInDoc.markDirty(); } } else if (op instanceof BitmapData) { BitmapData b = (BitmapData) op; BitmapData imgInDoc = imgData.get(b.mImageId); if (imgInDoc != null) { imgInDoc.update(b); imgInDoc.markDirty(); } } else if (op instanceof FloatConstant) { FloatConstant f = (FloatConstant) op; FloatConstant fltInDoc = fltData.get(f.mId); if (fltInDoc != null) { fltInDoc.update(f); fltInDoc.markDirty(); } } else if (op instanceof IntegerConstant) { IntegerConstant ic = (IntegerConstant) op; IntegerConstant intInDoc = intData.get(ic.mId); if (intInDoc != null) { intInDoc.update(ic); intInDoc.markDirty(); } } else if (op instanceof LongConstant) { LongConstant lc = (LongConstant) op; LongConstant longInDoc = longData.get(lc.mId); if (longInDoc != null) { longInDoc.update(lc); longInDoc.markDirty(); } } }); } private interface Visitor { void visit(Operation op); } private void recursiveTreverse(ArrayList<Operation> mOperations, Visitor visitor) { for (Operation op : mOperations) { if (op instanceof Container) { recursiveTreverse(((Component) op).mList, visitor); } visitor.visit(op); } } // ============== Haptic support ================== public interface HapticEngine { /** Loading Loading @@ -911,7 +1004,7 @@ public class CoreDocument implements Serializable { * * @param id the click area id */ public void performClick(@NonNull RemoteContext context, int id) { public void performClick(@NonNull RemoteContext context, int id, @NonNull String metadata) { for (ClickAreaRepresentation clickArea : mClickAreas) { if (clickArea.mId == id) { warnClickListeners(clickArea); Loading @@ -920,7 +1013,7 @@ public class CoreDocument implements Serializable { } for (IdActionCallback listener : mIdActionListeners) { listener.onAction(id, ""); listener.onAction(id, metadata); } Component component = getComponent(id); Loading
core/java/com/android/internal/widget/remotecompose/core/Operations.java +6 −1 Original line number Diff line number Diff line Loading @@ -104,6 +104,7 @@ import com.android.internal.widget.remotecompose.core.operations.layout.managers import com.android.internal.widget.remotecompose.core.operations.layout.managers.CollapsibleRowLayout; import com.android.internal.widget.remotecompose.core.operations.layout.managers.ColumnLayout; import com.android.internal.widget.remotecompose.core.operations.layout.managers.FitBoxLayout; import com.android.internal.widget.remotecompose.core.operations.layout.managers.ImageLayout; import com.android.internal.widget.remotecompose.core.operations.layout.managers.RowLayout; import com.android.internal.widget.remotecompose.core.operations.layout.managers.StateLayout; import com.android.internal.widget.remotecompose.core.operations.layout.managers.TextLayout; Loading @@ -115,6 +116,7 @@ import com.android.internal.widget.remotecompose.core.operations.layout.modifier import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.GraphicsLayerModifierOperation; import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.HeightInModifierOperation; import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.HeightModifierOperation; import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.HostActionMetadataOperation; import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.HostActionOperation; import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.HostNamedActionOperation; import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.MarqueeModifierOperation; Loading Loading @@ -247,6 +249,7 @@ public class Operations { public static final int LAYOUT_CANVAS_CONTENT = 207; public static final int LAYOUT_TEXT = 208; public static final int LAYOUT_STATE = 217; public static final int LAYOUT_IMAGE = 234; public static final int COMPONENT_START = 2; Loading Loading @@ -278,6 +281,7 @@ public class Operations { public static final int MODIFIER_VISIBILITY = 211; public static final int HOST_ACTION = 209; public static final int HOST_METADATA_ACTION = 216; public static final int HOST_NAMED_ACTION = 210; public static final int VALUE_INTEGER_CHANGE_ACTION = 212; Loading Loading @@ -385,6 +389,7 @@ public class Operations { map.put(CONTAINER_END, ContainerEnd::read); map.put(HOST_ACTION, HostActionOperation::read); map.put(HOST_METADATA_ACTION, HostActionMetadataOperation::read); map.put(HOST_NAMED_ACTION, HostNamedActionOperation::read); map.put(VALUE_INTEGER_CHANGE_ACTION, ValueIntegerChangeActionOperation::read); map.put( Loading @@ -407,7 +412,7 @@ public class Operations { map.put(LAYOUT_CANVAS, CanvasLayout::read); map.put(LAYOUT_CANVAS_CONTENT, CanvasContent::read); map.put(LAYOUT_TEXT, TextLayout::read); map.put(LAYOUT_IMAGE, ImageLayout::read); map.put(LAYOUT_STATE, StateLayout::read); map.put(DRAW_CONTENT, DrawContent::read); Loading
core/java/com/android/internal/widget/remotecompose/core/RemoteComposeBuffer.java +14 −0 Original line number Diff line number Diff line Loading @@ -102,6 +102,7 @@ import com.android.internal.widget.remotecompose.core.operations.layout.managers import com.android.internal.widget.remotecompose.core.operations.layout.managers.CollapsibleRowLayout; import com.android.internal.widget.remotecompose.core.operations.layout.managers.ColumnLayout; import com.android.internal.widget.remotecompose.core.operations.layout.managers.FitBoxLayout; import com.android.internal.widget.remotecompose.core.operations.layout.managers.ImageLayout; import com.android.internal.widget.remotecompose.core.operations.layout.managers.RowLayout; import com.android.internal.widget.remotecompose.core.operations.layout.managers.StateLayout; import com.android.internal.widget.remotecompose.core.operations.layout.managers.TextLayout; Loading Loading @@ -2093,6 +2094,19 @@ public class RemoteComposeBuffer { FitBoxLayout.apply(mBuffer, mLastComponentId, animationId, horizontal, vertical); } /** * Add an imagelayout command * * @param componentId component id * @param animationId animation id * @param bitmapId bitmap id */ public void addImage( int componentId, int animationId, int bitmapId, int scaleType, float alpha) { mLastComponentId = getComponentId(componentId); ImageLayout.apply(mBuffer, componentId, animationId, bitmapId, scaleType, alpha); } /** * Add a row start tag * Loading
core/java/com/android/internal/widget/remotecompose/core/operations/BitmapData.java +15 −2 Original line number Diff line number Diff line Loading @@ -41,12 +41,12 @@ import java.util.List; public class BitmapData extends Operation implements SerializableToString, Serializable { private static final int OP_CODE = Operations.DATA_BITMAP; private static final String CLASS_NAME = "BitmapData"; int mImageId; public final int mImageId; int mImageWidth; int mImageHeight; short mType; short mEncoding; @NonNull final byte[] mBitmap; @NonNull byte[] mBitmap; /** The max size of width or height */ public static final int MAX_IMAGE_DIMENSION = 8000; Loading Loading @@ -90,6 +90,19 @@ public class BitmapData extends Operation implements SerializableToString, Seria this.mBitmap = bitmap; } /** * Update the bitmap data * * @param from the bitmap to copy */ public void update(BitmapData from) { this.mImageWidth = from.mImageWidth; this.mImageHeight = from.mImageHeight; this.mBitmap = from.mBitmap; this.mType = from.mType; this.mEncoding = from.mEncoding; } /** * The width of the image * Loading