From 480e66e5981cb18e297919f3bd0d8b63eaa77d4a Mon Sep 17 00:00:00 2001 From: REAndroid Date: Thu, 20 Apr 2023 14:26:24 +0200 Subject: [PATCH] ignore updating existing key --- .../com/reandroid/arsc/value/ValueHeader.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/reandroid/arsc/value/ValueHeader.java b/src/main/java/com/reandroid/arsc/value/ValueHeader.java index f03acea..6913e9a 100644 --- a/src/main/java/com/reandroid/arsc/value/ValueHeader.java +++ b/src/main/java/com/reandroid/arsc/value/ValueHeader.java @@ -73,6 +73,9 @@ public class ValueHeader extends BlockItem implements JSONConvert { linkStringReference(); } public void setKey(StringItem stringItem){ + if(ignoreUpdateKey(stringItem)){ + return; + } unLinkStringReference(); int key = -1; if(stringItem!=null){ @@ -81,6 +84,17 @@ public class ValueHeader extends BlockItem implements JSONConvert { putInteger(getBytesInternal(), OFFSET_SPEC_REFERENCE, key); linkStringReference(stringItem); } + private boolean ignoreUpdateKey(StringItem stringItem){ + int key = getKey(); + ReferenceItem referenceItem = this.mStringReference; + if(stringItem == null){ + return referenceItem == null && key == -1; + } + if(referenceItem == null || key != stringItem.getIndex()){ + return false; + } + return getSpecString(key) == stringItem; + } public void setSize(int size){ super.setBytesLength(size, false); writeSize(); @@ -126,11 +140,17 @@ public class ValueHeader extends BlockItem implements JSONConvert { stringItem.removeReference(stringReference); } public StringItem getNameString(){ + return getSpecString(getKey()); + } + private StringItem getSpecString(int key){ + if(key < 0){ + return null; + } StringPool specStringPool = getSpecStringPool(); if(specStringPool==null){ return null; } - return specStringPool.get(getKey()); + return specStringPool.get(key); } private StringPool getSpecStringPool(){ Block parent = getParent();