Loading core/java/com/android/internal/widget/remotecompose/core/CoreDocument.java +35 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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 ////////////////////////////////////////////////////////////////////////// Loading @@ -493,6 +526,7 @@ public class CoreDocument { /** * Returns > 0 if it needs to repaint * * @return */ public int needsRepaint() { Loading Loading @@ -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. Loading core/java/com/android/internal/widget/remotecompose/core/Operations.java +6 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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<>(); Loading Loading @@ -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); } } core/java/com/android/internal/widget/remotecompose/core/RemoteComposeBuffer.java +25 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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); } } core/java/com/android/internal/widget/remotecompose/core/RemoteComposeState.java +28 −1 Original line number Diff line number Diff line Loading @@ -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; { Loading @@ -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 */ Loading @@ -58,6 +61,7 @@ public class RemoteComposeState { /** * true if the cache contain this id * * @param id * @return */ Loading Loading @@ -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 Loading core/java/com/android/internal/widget/remotecompose/core/RemoteContext.java +37 −0 Original line number Diff line number Diff line Loading @@ -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: Loading Loading @@ -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 Loading
core/java/com/android/internal/widget/remotecompose/core/CoreDocument.java +35 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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 ////////////////////////////////////////////////////////////////////////// Loading @@ -493,6 +526,7 @@ public class CoreDocument { /** * Returns > 0 if it needs to repaint * * @return */ public int needsRepaint() { Loading Loading @@ -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. Loading
core/java/com/android/internal/widget/remotecompose/core/Operations.java +6 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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<>(); Loading Loading @@ -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); } }
core/java/com/android/internal/widget/remotecompose/core/RemoteComposeBuffer.java +25 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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); } }
core/java/com/android/internal/widget/remotecompose/core/RemoteComposeState.java +28 −1 Original line number Diff line number Diff line Loading @@ -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; { Loading @@ -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 */ Loading @@ -58,6 +61,7 @@ public class RemoteComposeState { /** * true if the cache contain this id * * @param id * @return */ Loading Loading @@ -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 Loading
core/java/com/android/internal/widget/remotecompose/core/RemoteContext.java +37 −0 Original line number Diff line number Diff line Loading @@ -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: Loading Loading @@ -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