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

Commit 0545ca4f authored by Nicolas Roard's avatar Nicolas Roard
Browse files

Update to ToT RemoteCompose

Bug: 339721781
Flag: EXEMPT External Libraries
Test: in GoB
Change-Id: I04ad7e5905395350cb84f9a062d1ae0b325fdb28
parent d829342e
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