Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a569fddd authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Update to ToT RemoteCompose" into main

parents 1f79db5d 0545ca4f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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;
    }

+96 −3
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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;
@@ -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<>();

@@ -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 {
        /**
@@ -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);
@@ -920,7 +1013,7 @@ public class CoreDocument implements Serializable {
        }

        for (IdActionCallback listener : mIdActionListeners) {
            listener.onAction(id, "");
            listener.onAction(id, metadata);
        }

        Component component = getComponent(id);
+6 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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;

@@ -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;
@@ -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(
@@ -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);

+14 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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
     *
+15 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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