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

Commit ea392682 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Merge cherrypicks of ['googleplex-android-review.googlesource.com/32772320',...

Merge cherrypicks of ['googleplex-android-review.googlesource.com/32772320', 'googleplex-android-review.googlesource.com/32888719'] into 25Q2-release.

Change-Id: Iab3b5b1fd7f0832d9d450ab69d17df488736a113
parents 9fe1eb72 03c576b7
Loading
Loading
Loading
Loading
+85 −30
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ 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.DataListFloat;
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;
@@ -31,7 +32,6 @@ 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;
@@ -64,16 +64,16 @@ public class CoreDocument implements Serializable {
    private static final boolean DEBUG = false;

    // Semantic version
    public static final int MAJOR_VERSION = 0;
    public static final int MINOR_VERSION = 4;
    public static final int MAJOR_VERSION = 1;
    public static final int MINOR_VERSION = 0;
    public static final int PATCH_VERSION = 0;

    // Internal version level
    public static final int DOCUMENT_API_LEVEL = 4;
    public static final int DOCUMENT_API_LEVEL = 6;

    // We also keep a more fine-grained BUILD number, exposed as
    // ID_API_LEVEL = DOCUMENT_API_LEVEL + BUILD
    static final float BUILD = 0.8f;
    static final float BUILD = 0.0f;

    private static final boolean UPDATE_VARIABLES_BEFORE_LAYOUT = false;

@@ -113,6 +113,7 @@ public class CoreDocument implements Serializable {
    private IntMap<Object> mDocProperties;

    boolean mFirstPaint = true;
    private boolean mIsUpdateDoc = false;

    /** Returns a version number that is monotonically increasing. */
    public static int getDocumentApiLevel() {
@@ -460,7 +461,8 @@ public class CoreDocument implements Serializable {
        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(
        HashMap<Integer, DataListFloat> floatListData = new HashMap<Integer, DataListFloat>();
        recursiveTraverse(
                mOperations,
                (op) -> {
                    if (op instanceof TextData) {
@@ -478,10 +480,13 @@ public class CoreDocument implements Serializable {
                    } else if (op instanceof LongConstant) {
                        LongConstant d = (LongConstant) op;
                        longData.put(d.mId, d);
                    } else if (op instanceof DataListFloat) {
                        DataListFloat d = (DataListFloat) op;
                        floatListData.put(d.mId, d);
                    }
                });

        recursiveTreverse(
        recursiveTraverse(
                delta.mOperations,
                (op) -> {
                    if (op instanceof TextData) {
@@ -489,7 +494,6 @@ public class CoreDocument implements Serializable {
                        TextData txtInDoc = txtData.get(t.mTextId);
                        if (txtInDoc != null) {
                            txtInDoc.update(t);
                            Utils.log("update" + t.mText);
                            txtInDoc.markDirty();
                        }
                    } else if (op instanceof BitmapData) {
@@ -520,6 +524,13 @@ public class CoreDocument implements Serializable {
                            longInDoc.update(lc);
                            longInDoc.markDirty();
                        }
                    } else if (op instanceof DataListFloat) {
                        DataListFloat lc = (DataListFloat) op;
                        DataListFloat longInDoc = floatListData.get(lc.mId);
                        if (longInDoc != null) {
                            longInDoc.update(lc);
                            longInDoc.markDirty();
                        }
                    }
                });
    }
@@ -528,10 +539,10 @@ public class CoreDocument implements Serializable {
        void visit(Operation op);
    }

    private void recursiveTreverse(ArrayList<Operation> mOperations, Visitor visitor) {
    private void recursiveTraverse(ArrayList<Operation> mOperations, Visitor visitor) {
        for (Operation op : mOperations) {
            if (op instanceof Container) {
                recursiveTreverse(((Component) op).mList, visitor);
                recursiveTraverse(((Container) op).getList(), visitor);
            }
            visitor.visit(op);
        }
@@ -640,6 +651,32 @@ public class CoreDocument implements Serializable {
            this.minor = minor;
            this.patchLevel = patchLevel;
        }

        /**
         * Returns true if the document has been encoded for at least the given version MAJOR.MINOR
         *
         * @param major major version number
         * @param minor minor version number
         * @param patch patch version number
         * @return true if the document was written at least with the given version
         */
        public boolean supportsVersion(int major, int minor, int patch) {
            if (major > this.major) {
                return false;
            }
            if (major < this.major) {
                return true;
            }
            // major is the same
            if (minor > this.minor) {
                return false;
            }
            if (minor < this.minor) {
                return true;
            }
            // minor is the same
            return patch <= this.patchLevel;
        }
    }

    public static class ClickAreaRepresentation {
@@ -935,12 +972,20 @@ public class CoreDocument implements Serializable {
    /**
     * Returns true if the document can be displayed given this version of the player
     *
     * @param majorVersion the max major version supported by the player
     * @param minorVersion the max minor version supported by the player
     * @param playerMajorVersion the max major version supported by the player
     * @param playerMinorVersion the max minor version supported by the player
     * @param capabilities a bitmask of capabilities the player supports (unused for now)
     */
    public boolean canBeDisplayed(int majorVersion, int minorVersion, long capabilities) {
        return mVersion.major <= majorVersion && mVersion.minor <= minorVersion;
    public boolean canBeDisplayed(
            int playerMajorVersion, int playerMinorVersion, long capabilities) {
        if (mVersion.major < playerMajorVersion) {
            return true;
        }
        if (mVersion.major > playerMajorVersion) {
            return false;
        }
        // same major version
        return mVersion.minor <= playerMinorVersion;
    }

    /**
@@ -1182,29 +1227,23 @@ public class CoreDocument implements Serializable {
     * @return array of named variables or null
     */
    public String[] getNamedVariables(int type) {
        int count = 0;
        for (Operation op : mOperations) {
            if (op instanceof NamedVariable) {
                NamedVariable n = (NamedVariable) op;
                if (n.mVarType == type) {
                    count++;
                }
            }
        }
        if (count == 0) {
            return null;
        ArrayList<String> ret = new ArrayList<>();
        getNamedVars(type, mOperations, ret);
        return ret.toArray(new String[0]);
    }
        String[] ret = new String[count];
        int i = 0;
        for (Operation op : mOperations) {

    private void getNamedVars(int type, ArrayList<Operation> ops, ArrayList<String> list) {
        for (Operation op : ops) {
            if (op instanceof NamedVariable) {
                NamedVariable n = (NamedVariable) op;
                if (n.mVarType == type) {
                    ret[i++] = n.mVarName;
                    list.add(n.mVarName);
                }
            }
            if (op instanceof Container) {
                getNamedVars(type, ((Container) op).getList(), list);
            }
        }
        return ret;
    }

    //////////////////////////////////////////////////////////////////////////
@@ -1543,4 +1582,20 @@ public class CoreDocument implements Serializable {
            }
        }
    }

    /**
     * Set if this is an update doc
     *
     * @param isUpdateDoc
     */
    public void setUpdateDoc(boolean isUpdateDoc) {
        mIsUpdateDoc = isUpdateDoc;
    }

    /**
     * @return if this is an update doc
     */
    public boolean isUpdateDoc() {
        return mIsUpdateDoc;
    }
}
+6 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import com.android.internal.widget.remotecompose.core.operations.BitmapFontData;
import com.android.internal.widget.remotecompose.core.operations.ClickArea;
import com.android.internal.widget.remotecompose.core.operations.ClipPath;
import com.android.internal.widget.remotecompose.core.operations.ClipRect;
import com.android.internal.widget.remotecompose.core.operations.ColorAttribute;
import com.android.internal.widget.remotecompose.core.operations.ColorConstant;
import com.android.internal.widget.remotecompose.core.operations.ColorExpression;
import com.android.internal.widget.remotecompose.core.operations.ComponentValue;
@@ -126,6 +127,7 @@ import com.android.internal.widget.remotecompose.core.operations.layout.modifier
import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.PaddingModifierOperation;
import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.RippleModifierOperation;
import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.RoundedClipRectModifierOperation;
import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.RunActionOperation;
import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.ScrollModifierOperation;
import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.ValueFloatChangeActionOperation;
import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.ValueFloatExpressionChangeActionOperation;
@@ -233,6 +235,7 @@ public class Operations {
    public static final int HAPTIC_FEEDBACK = 177;
    public static final int CONDITIONAL_OPERATIONS = 178;
    public static final int DEBUG_MESSAGE = 179;
    public static final int ATTRIBUTE_COLOR = 180;

    ///////////////////////////////////////// ======================

@@ -287,6 +290,7 @@ public class Operations {
    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 RUN_ACTION = 236;

    public static final int VALUE_INTEGER_CHANGE_ACTION = 212;
    public static final int VALUE_STRING_CHANGE_ACTION = 213;
@@ -393,6 +397,7 @@ public class Operations {

        map.put(CONTAINER_END, ContainerEnd::read);

        map.put(RUN_ACTION, RunActionOperation::read);
        map.put(HOST_ACTION, HostActionOperation::read);
        map.put(HOST_METADATA_ACTION, HostActionMetadataOperation::read);
        map.put(HOST_NAMED_ACTION, HostNamedActionOperation::read);
@@ -446,6 +451,7 @@ public class Operations {
        map.put(HAPTIC_FEEDBACK, HapticFeedback::read);
        map.put(CONDITIONAL_OPERATIONS, ConditionalOperations::read);
        map.put(DEBUG_MESSAGE, DebugMessage::read);
        map.put(ATTRIBUTE_COLOR, ColorAttribute::read);

        //        map.put(ACCESSIBILITY_CUSTOM_ACTION, CoreSemantics::read);
    }
+17 −22
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ import android.annotation.Nullable;

import com.android.internal.widget.remotecompose.core.operations.paint.PaintBundle;

import java.util.HashMap;

/** Specify an abstract paint context used by RemoteCompose commands to draw */
public abstract class PaintContext {
    public static final int TEXT_MEASURE_MONOSPACE_WIDTH = 0x01;
@@ -481,28 +483,9 @@ public abstract class PaintContext {
    /**
     * Starts a graphics layer
     *
     * @param scaleX
     * @param scaleY
     * @param rotationX
     * @param rotationY
     * @param rotationZ
     * @param shadowElevation
     * @param transformOriginX
     * @param transformOriginY
     * @param alpha
     * @param renderEffectId
     */
    public abstract void setGraphicsLayer(
            float scaleX,
            float scaleY,
            float rotationX,
            float rotationY,
            float rotationZ,
            float shadowElevation,
            float transformOriginX,
            float transformOriginY,
            float alpha,
            int renderEffectId);
     * @param attributes
     */
    public abstract void setGraphicsLayer(@NonNull HashMap<Integer, Object> attributes);

    /** Ends a graphics layer */
    public abstract void endGraphicsLayer();
@@ -518,4 +501,16 @@ public abstract class PaintContext {
     * @return the string if found
     */
    public abstract @Nullable String getText(int textID);

    /**
     * Returns true if the document has been encoded for at least the given version MAJOR.MINOR
     *
     * @param major major version number
     * @param minor minor version number
     * @param patch patch version number
     * @return true if the document was written at least with the given version
     */
    public boolean supportsVersion(int major, int minor, int patch) {
        return mContext.supportsVersion(major, minor, patch);
    }
}
+26 −50
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import com.android.internal.widget.remotecompose.core.operations.BitmapFontData;
import com.android.internal.widget.remotecompose.core.operations.ClickArea;
import com.android.internal.widget.remotecompose.core.operations.ClipPath;
import com.android.internal.widget.remotecompose.core.operations.ClipRect;
import com.android.internal.widget.remotecompose.core.operations.ColorAttribute;
import com.android.internal.widget.remotecompose.core.operations.ColorConstant;
import com.android.internal.widget.remotecompose.core.operations.ColorExpression;
import com.android.internal.widget.remotecompose.core.operations.ComponentValue;
@@ -116,6 +117,7 @@ import com.android.internal.widget.remotecompose.core.operations.layout.modifier
import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.PaddingModifierOperation;
import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.RippleModifierOperation;
import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.RoundedClipRectModifierOperation;
import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.RunActionOperation;
import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.ScrollModifierOperation;
import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.ZIndexModifierOperation;
import com.android.internal.widget.remotecompose.core.operations.paint.PaintBundle;
@@ -132,6 +134,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;

/** Provides an abstract buffer to encode/decode RemoteCompose operations */
public class RemoteComposeBuffer {
@@ -1333,7 +1336,7 @@ public class RemoteComposeBuffer {
     * @return the nan id of float
     */
    public float reserveFloatVariable() {
        int id = mRemoteComposeState.cacheFloat(0f);
        int id = mRemoteComposeState.nextId();
        return Utils.asNan(id);
    }

@@ -2008,55 +2011,10 @@ public class RemoteComposeBuffer {
    /**
     * Add a graphics layer
     *
     * @param scaleX scale x
     * @param scaleY scale y
     * @param rotationX rotation in X
     * @param rotationY rotation in Y
     * @param rotationZ rotation in Z
     * @param shadowElevation shadow elevation
     * @param transformOriginX transform origin x
     * @param transformOriginY transform origin y
     * @param alpha alpha value
     * @param cameraDistance camera distance
     * @param blendMode blend mode
     * @param spotShadowColorId spot shadow color
     * @param ambientShadowColorId ambient shadow color
     * @param colorFilterId id of color filter
     * @param renderEffectId id of render effect
     */
    public void addModifierGraphicsLayer(
            float scaleX,
            float scaleY,
            float rotationX,
            float rotationY,
            float rotationZ,
            float shadowElevation,
            float transformOriginX,
            float transformOriginY,
            float alpha,
            float cameraDistance,
            int blendMode,
            int spotShadowColorId,
            int ambientShadowColorId,
            int colorFilterId,
            int renderEffectId) {
        GraphicsLayerModifierOperation.apply(
                mBuffer,
                scaleX,
                scaleY,
                rotationX,
                rotationY,
                rotationZ,
                shadowElevation,
                transformOriginX,
                transformOriginY,
                alpha,
                cameraDistance,
                blendMode,
                spotShadowColorId,
                ambientShadowColorId,
                colorFilterId,
                renderEffectId);
     * @param attributes
     */
    public void addModifierGraphicsLayer(HashMap<Integer, Object> attributes) {
        GraphicsLayerModifierOperation.apply(mBuffer, attributes);
    }

    /**
@@ -2248,6 +2206,11 @@ public class RemoteComposeBuffer {
        CanvasOperations.apply(mBuffer);
    }

    /** Add container hosting actions */
    public void addRunActionsStart() {
        RunActionOperation.apply(mBuffer);
    }

    /**
     * Add a component width value
     *
@@ -2516,4 +2479,17 @@ public class RemoteComposeBuffer {
    public void addDebugMessage(int textId, float value, int flags) {
        DebugMessage.apply(mBuffer, textId, value, flags);
    }

    /**
     * Return a color attribute value on the given color
     *
     * @param baseColor
     * @param type type of attribute
     * @return
     */
    public float getColorAttribute(int baseColor, short type) {
        int id = mRemoteComposeState.nextId();
        ColorAttribute.apply(mBuffer, id, baseColor, type);
        return Utils.asNan(id);
    }
}
+17 −0
Original line number Diff line number Diff line
@@ -68,6 +68,18 @@ public abstract class RemoteContext {

    private boolean mUseChoreographer = true;

    /**
     * Returns true if the document has been encoded for at least the given version MAJOR.MINOR
     *
     * @param major major version number
     * @param minor minor version number
     * @param patch patch version number
     * @return true if the document was written at least with the given version
     */
    public boolean supportsVersion(int major, int minor, int patch) {
        return mDocument.mVersion.supportsVersion(major, minor, patch);
    }

    public float getDensity() {
        return mDensity;
    }
@@ -653,6 +665,8 @@ public abstract class RemoteContext {

    public static final int ID_EPOCH_SECOND = 32;

    public static final int ID_FONT_SIZE = 33;

    public static final float FLOAT_DENSITY = Utils.asNan(ID_DENSITY);

    /** CONTINUOUS_SEC is seconds from midnight looping every hour 0-3600 */
@@ -738,6 +752,9 @@ public abstract class RemoteContext {
    /** When was this player built */
    public static final float FLOAT_API_LEVEL = Utils.asNan(ID_API_LEVEL);

    /** The default font size */
    public static final float FLOAT_FONT_SIZE = Utils.asNan(ID_FONT_SIZE);

    /** The time in seconds since the epoch. */
    public static final long INT_EPOCH_SECOND = ((long) ID_EPOCH_SECOND) + 0x100000000L;

Loading