From 2fac1b223529e6aa7538fd1364eadb36adc77664 Mon Sep 17 00:00:00 2001 From: Ax333l Date: Sun, 16 Apr 2023 20:03:39 +0200 Subject: [PATCH] convenient attribute methods for style bags --- .../reandroid/arsc/value/style/StyleBag.java | 3 ++ .../arsc/value/style/StyleBagItem.java | 28 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/main/java/com/reandroid/arsc/value/style/StyleBag.java b/src/main/java/com/reandroid/arsc/value/style/StyleBag.java index 8704a74..752749b 100644 --- a/src/main/java/com/reandroid/arsc/value/style/StyleBag.java +++ b/src/main/java/com/reandroid/arsc/value/style/StyleBag.java @@ -40,6 +40,9 @@ public int getParentId() { return getTableEntry().getParentId(); } + public void setParentId(int id) { + getTableEntry().setParentId(id); + } public int getResourceId() { com.reandroid.arsc.value.Entry entry = getEntry(); diff --git a/src/main/java/com/reandroid/arsc/value/style/StyleBagItem.java b/src/main/java/com/reandroid/arsc/value/style/StyleBagItem.java index 12d98c0..996533e 100644 --- a/src/main/java/com/reandroid/arsc/value/style/StyleBagItem.java +++ b/src/main/java/com/reandroid/arsc/value/style/StyleBagItem.java @@ -18,10 +18,13 @@ import com.reandroid.arsc.decoder.ValueDecoder; import com.reandroid.arsc.item.StringItem; import com.reandroid.arsc.item.TableString; + import com.reandroid.arsc.value.attribute.AttributeBag; + import com.reandroid.arsc.value.attribute.AttributeBagItem; import com.reandroid.arsc.value.bag.BagItem; import com.reandroid.arsc.value.Entry; import com.reandroid.arsc.value.ResValueMap; import com.reandroid.arsc.value.ValueType; + import com.reandroid.common.EntryStore; public class StyleBagItem extends BagItem { private StyleBagItem(ResValueMap bagItem) { @@ -47,6 +50,12 @@ char prefix = 0; return block.buildResourceName(mBagItem.getName(), prefix, false); } + public Entry getAttributeEntry(EntryStore entryStore) { + if (mBagItem == null) { + return null; + } + return entryStore.getEntryGroup(mBagItem.getName()).pickOne(); + } public int getNameId() { if (mBagItem == null) { @@ -58,6 +67,10 @@ public boolean hasAttributeValue() { return getValueType() == ValueType.ATTRIBUTE; } + public boolean hasIntValue() { + ValueType valueType = getValueType(); + return valueType == ValueType.INT_DEC || valueType == ValueType.INT_HEX; + } public String getValueAsReference() { ValueType valueType = getValueType(); @@ -77,6 +90,18 @@ int id = getValue(); return entry.buildResourceName(id, prefix, includeType); } + public String decodeAttributeValue(AttributeBag attr, EntryStore entryStore) { + if (!hasIntValue()) { + return null; + } + return attr.decodeAttributeValue(entryStore, getValue()); + } + public AttributeBagItem[] getFlagsOrEnum(AttributeBag attr) { + if (!hasIntValue()) { + return null; + } + return attr.searchValue(getValue()); + } @Override public String toString() { @@ -158,4 +183,7 @@ public static StyleBagItem createFloat(float n) { return new StyleBagItem(ValueType.FLOAT, Float.floatToIntBits(n)); } + public static StyleBagItem enumOrFlag(AttributeBag attr, String valueString) { + return encoded(attr.encodeEnumOrFlagValue(valueString)); + } }