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

Commit 52148993 authored by Nicolas Roard's avatar Nicolas Roard Committed by Android (Google) Code Review
Browse files

Merge "Add support for color theaming" into main

parents e0ee0cb7 eb957409
Loading
Loading
Loading
Loading
+35 −2
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
 */
package com.android.internal.widget.remotecompose.core;

import com.android.internal.widget.remotecompose.core.operations.NamedVariable;
import com.android.internal.widget.remotecompose.core.operations.RootContentBehavior;
import com.android.internal.widget.remotecompose.core.operations.Theme;

@@ -308,6 +309,7 @@ public class CoreDocument {

        /**
         * Returns true if x,y coordinate is within bounds
         *
         * @param x x-coordinate
         * @param y y-coordinate
         * @return x, y coordinate is within bounds
@@ -483,6 +485,37 @@ public class CoreDocument {
        return builder.toString();
    }

    /**
     * Gets the names of all named colors.
     *
     * @return array of named colors or null
     */
    public String[] getNamedColors() {
        int count = 0;
        for (Operation op : mOperations) {
            if (op instanceof NamedVariable) {
                NamedVariable n = (NamedVariable) op;
                if (n.mVarType == NamedVariable.COLOR_TYPE) {
                    count++;
                }
            }
        }
        if (count == 0) {
            return null;
        }
        String[] ret = new String[count];
        int i = 0;
        for (Operation op : mOperations) {
            if (op instanceof NamedVariable) {
                NamedVariable n = (NamedVariable) op;
                if (n.mVarType == NamedVariable.COLOR_TYPE) {
                    ret[i++] = n.mVarName;
                }
            }
        }
        return ret;
    }

    //////////////////////////////////////////////////////////////////////////
    // Painting
    //////////////////////////////////////////////////////////////////////////
@@ -493,6 +526,7 @@ public class CoreDocument {

    /**
     * Returns > 0 if it needs to repaint
     *
     * @return
     */
    public int needsRepaint() {
@@ -525,7 +559,6 @@ public class CoreDocument {
        context.loadFloat(RemoteContext.ID_WINDOW_WIDTH, getWidth());
        context.loadFloat(RemoteContext.ID_WINDOW_HEIGHT, getHeight());
        mRepaintNext = context.updateOps();

        for (Operation op : mOperations) {
            // operations will only be executed if no theme is set (ie UNSPECIFIED)
            // or the theme is equal as the one passed in argument to paint.
+6 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ import com.android.internal.widget.remotecompose.core.operations.BitmapData;
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.ColorConstant;
import com.android.internal.widget.remotecompose.core.operations.ColorExpression;
import com.android.internal.widget.remotecompose.core.operations.DrawArc;
import com.android.internal.widget.remotecompose.core.operations.DrawBitmap;
@@ -42,6 +43,7 @@ import com.android.internal.widget.remotecompose.core.operations.MatrixSave;
import com.android.internal.widget.remotecompose.core.operations.MatrixScale;
import com.android.internal.widget.remotecompose.core.operations.MatrixSkew;
import com.android.internal.widget.remotecompose.core.operations.MatrixTranslate;
import com.android.internal.widget.remotecompose.core.operations.NamedVariable;
import com.android.internal.widget.remotecompose.core.operations.PaintData;
import com.android.internal.widget.remotecompose.core.operations.PathData;
import com.android.internal.widget.remotecompose.core.operations.RootContentBehavior;
@@ -105,6 +107,8 @@ public class Operations {
    public static final int COLOR_EXPRESSIONS = 134;
    public static final int TEXT_FROM_FLOAT = 135;
    public static final int TEXT_MERGE = 136;
    public static final int NAMED_VARIABLE = 137;
    public static final int COLOR_CONSTANT = 138;

    /////////////////////////////////////////======================
    public static IntMap<CompanionOperation> map = new IntMap<>();
@@ -147,7 +151,8 @@ public class Operations {
        map.put(COLOR_EXPRESSIONS, ColorExpression.COMPANION);
        map.put(TEXT_FROM_FLOAT, TextFromFloat.COMPANION);
        map.put(TEXT_MERGE, TextMerge.COMPANION);

        map.put(NAMED_VARIABLE, NamedVariable.COMPANION);
        map.put(COLOR_CONSTANT, ColorConstant.COMPANION);
    }

}
+25 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ import com.android.internal.widget.remotecompose.core.operations.BitmapData;
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.ColorConstant;
import com.android.internal.widget.remotecompose.core.operations.ColorExpression;
import com.android.internal.widget.remotecompose.core.operations.DrawArc;
import com.android.internal.widget.remotecompose.core.operations.DrawBitmap;
@@ -42,6 +43,7 @@ import com.android.internal.widget.remotecompose.core.operations.MatrixSave;
import com.android.internal.widget.remotecompose.core.operations.MatrixScale;
import com.android.internal.widget.remotecompose.core.operations.MatrixSkew;
import com.android.internal.widget.remotecompose.core.operations.MatrixTranslate;
import com.android.internal.widget.remotecompose.core.operations.NamedVariable;
import com.android.internal.widget.remotecompose.core.operations.PaintData;
import com.android.internal.widget.remotecompose.core.operations.PathData;
import com.android.internal.widget.remotecompose.core.operations.RootContentBehavior;
@@ -898,6 +900,20 @@ public class RemoteComposeBuffer {
        return Utils.asNan(id);
    }

    /**
     * Add a simple color
     * @param color
     * @return id that represents that color
     */
    public int addColor(int color) {
        ColorConstant c = new ColorConstant(0, color);
        short id = (short) mRemoteComposeState.cache(c);
        c.mColorId = id;
        c.write(mBuffer);
        return id;
    }


    /**
     * Add a color that represents the tween between two colors
     * @param color1
@@ -1013,5 +1029,14 @@ public class RemoteComposeBuffer {
        return FloatAnimation.packToFloatArray(duration, type, spec, initialValue, wrap);
    }

    /**
     * This defines the name of the color given the id.
     * @param id of the color
     * @param name Name of the color
     */
    public void setColorName(int id, String name) {
        NamedVariable.COMPANION.apply(mBuffer, id,
                NamedVariable.COLOR_TYPE, name);
    }
}
+28 −1
Original line number Diff line number Diff line
@@ -33,11 +33,13 @@ import java.util.HashMap;
public class RemoteComposeState {
    public static final int START_ID = 42;
    private static final int MAX_FLOATS = 500;
    private static final int MAX_COLORS = 200;
    private final IntMap<Object> mIntDataMap = new IntMap<>();
    private final IntMap<Boolean> mIntWrittenMap = new IntMap<>();
    private final HashMap<Object, Integer> mDataIntMap = new HashMap();
    private final float[] mFloatMap = new float[MAX_FLOATS]; // efficient cache
    private final int[] mColorMap = new int[MAX_FLOATS]; // efficient cache
    private final int[] mColorMap = new int[MAX_COLORS]; // efficient cache
    private final boolean[] mColorOverride = new boolean[MAX_COLORS];
    private int mNextId = START_ID;

    {
@@ -49,6 +51,7 @@ public class RemoteComposeState {
    /**
     * Get Object based on id. The system will cache things like bitmaps
     * Paths etc. They can be accessed with this command
     *
     * @param id
     * @return
     */
@@ -58,6 +61,7 @@ public class RemoteComposeState {

    /**
     * true if the cache contain this id
     *
     * @param id
     * @return
     */
@@ -150,9 +154,32 @@ public class RemoteComposeState {
     * @param color
     */
    public void updateColor(int id, int color) {
        if (mColorOverride[id]) {
            return;
        }
        mColorMap[id] = color;
    }

    /**
     * Adds a colorOverride.
     * This is a list of ids and there colors optimized for playback;
     *
     * @param id
     * @param color
     */
    public void overrideColor(int id, int color) {
        mColorOverride[id] = true;
        mColorMap[id] = color;
    }

    /**
     * Clear the color Overrides
     */
    public void clearColorOverride() {
        for (int i = 0; i < mColorOverride.length; i++) {
            mColorOverride[i] = false;
        }
    }

    /**
     * Method to determine if a cached value has been written to the documents WireBuffer based on
+37 −0
Original line number Diff line number Diff line
@@ -72,6 +72,14 @@ public abstract class RemoteContext {
        return (System.nanoTime() - mStart) * 1E-9f;
    }

    /**
     * Set the value of a named Color.
     * This overrides the color in the document
     * @param colorName
     * @param color
     */
    public abstract void setNamedColorOverride(String colorName, int color);


    /**
     * The context can be used in a few different mode, allowing operations to skip being executed:
@@ -262,16 +270,45 @@ public abstract class RemoteContext {
    public static final int ID_COMPONENT_WIDTH = 7;
    public static final int ID_COMPONENT_HEIGHT = 8;
    public static final int ID_CALENDAR_MONTH = 9;
    public static final int ID_OFFSET_TO_UTC = 10;
    public static final int ID_WEEK_DAY = 11;
    public static final int ID_DAY_OF_MONTH = 12;

    /**
     * CONTINUOUS_SEC is seconds from midnight looping every hour 0-3600
     */
    public static final float FLOAT_CONTINUOUS_SEC = Utils.asNan(ID_CONTINUOUS_SEC);
    /**
     * seconds run from Midnight=0 quantized to seconds hour 0..3599
     */
    public static final float FLOAT_TIME_IN_SEC = Utils.asNan(ID_TIME_IN_SEC);
    /**
     * minutes run from Midnight=0 quantized to minutes 0..1439
     */
    public static final float FLOAT_TIME_IN_MIN = Utils.asNan(ID_TIME_IN_MIN);
    /**
     * hours run from Midnight=0 quantized to Hours 0-23
     */
    public static final float FLOAT_TIME_IN_HR = Utils.asNan(ID_TIME_IN_HR);
    /**
     * Moth of Year quantized to MONTHS 1-12. 1 = January
     */
    public static final float FLOAT_CALENDAR_MONTH = Utils.asNan(ID_CALENDAR_MONTH);
    /**
     * DAY OF THE WEEK 1-7. 1 = Monday
     */
    public static final float FLOAT_WEEK_DAY = Utils.asNan(ID_WEEK_DAY);
    /**
     * DAY OF THE MONTH 1-31
     */
    public static final float FLOAT_DAY_OF_MONTH = Utils.asNan(ID_DAY_OF_MONTH);

    public static final float FLOAT_WINDOW_WIDTH = Utils.asNan(ID_WINDOW_WIDTH);
    public static final float FLOAT_WINDOW_HEIGHT = Utils.asNan(ID_WINDOW_HEIGHT);
    public static final float FLOAT_COMPONENT_WIDTH = Utils.asNan(ID_COMPONENT_WIDTH);
    public static final float FLOAT_COMPONENT_HEIGHT = Utils.asNan(ID_COMPONENT_HEIGHT);
    // ID_OFFSET_TO_UTC is the offset from UTC in sec (typically / 3600f)
    public static final float FLOAT_OFFSET_TO_UTC = Utils.asNan(ID_OFFSET_TO_UTC);
    ///////////////////////////////////////////////////////////////////////////////////////////////
    // Click handling
    ///////////////////////////////////////////////////////////////////////////////////////////////
Loading