From 63478aaa1b95a4920ef6938596b1552998ec0c51 Mon Sep 17 00:00:00 2001 From: REAndroid Date: Sun, 26 Mar 2023 11:18:07 -0400 Subject: [PATCH] accessible parent chunk from Value --- .../java/com/reandroid/arsc/chunk/PackageBlock.java | 4 ++++ .../java/com/reandroid/arsc/chunk/ParentChunk.java | 1 + .../com/reandroid/arsc/chunk/xml/ResXmlAttribute.java | 9 +++++++++ src/main/java/com/reandroid/arsc/value/ResValue.java | 11 +++++++++++ .../java/com/reandroid/arsc/value/ResValueMap.java | 9 +++++++++ src/main/java/com/reandroid/arsc/value/Value.java | 11 +++++++++++ 6 files changed, 45 insertions(+) diff --git a/src/main/java/com/reandroid/arsc/chunk/PackageBlock.java b/src/main/java/com/reandroid/arsc/chunk/PackageBlock.java index 18f60d9..cc3bd96 100755 --- a/src/main/java/com/reandroid/arsc/chunk/PackageBlock.java +++ b/src/main/java/com/reandroid/arsc/chunk/PackageBlock.java @@ -170,6 +170,10 @@ package com.reandroid.arsc.chunk; public SpecStringPool getSpecStringPool(){ return mSpecStringPool; } + @Override + public TableBlock getMainChunk(){ + return getTableBlock(); + } public PackageBody getPackageBody() { return mBody; } diff --git a/src/main/java/com/reandroid/arsc/chunk/ParentChunk.java b/src/main/java/com/reandroid/arsc/chunk/ParentChunk.java index 63eaa3a..d456eaa 100644 --- a/src/main/java/com/reandroid/arsc/chunk/ParentChunk.java +++ b/src/main/java/com/reandroid/arsc/chunk/ParentChunk.java @@ -19,4 +19,5 @@ import com.reandroid.arsc.pool.StringPool; public interface ParentChunk { public StringPool getSpecStringPool(); + public MainChunk getMainChunk(); } diff --git a/src/main/java/com/reandroid/arsc/chunk/xml/ResXmlAttribute.java b/src/main/java/com/reandroid/arsc/chunk/xml/ResXmlAttribute.java index 6942e10..df5be99 100755 --- a/src/main/java/com/reandroid/arsc/chunk/xml/ResXmlAttribute.java +++ b/src/main/java/com/reandroid/arsc/chunk/xml/ResXmlAttribute.java @@ -237,6 +237,15 @@ setValueStringReference(-1); } } + @Override + public ResXmlDocument getParentChunk() { + ResXmlElement element = getParentResXmlElement(); + if(element!=null){ + return element.getParentDocument(); + } + return null; + } + private void linkNameId(){ ResXmlID xmlID = getResXmlID(); if(xmlID==null){ diff --git a/src/main/java/com/reandroid/arsc/value/ResValue.java b/src/main/java/com/reandroid/arsc/value/ResValue.java index 1fdae9f..d6e7676 100755 --- a/src/main/java/com/reandroid/arsc/value/ResValue.java +++ b/src/main/java/com/reandroid/arsc/value/ResValue.java @@ -15,6 +15,8 @@ */ package com.reandroid.arsc.value; + import com.reandroid.arsc.chunk.PackageBlock; + public class ResValue extends ValueItem { public ResValue() { super(8, OFFSET_SIZE); @@ -24,5 +26,14 @@ package com.reandroid.arsc.value; return getParent(Entry.class); } + @Override + public PackageBlock getParentChunk(){ + Entry entry = getEntry(); + if(entry != null){ + return entry.getPackageBlock(); + } + return null; + } + private static final int OFFSET_SIZE = 0; } diff --git a/src/main/java/com/reandroid/arsc/value/ResValueMap.java b/src/main/java/com/reandroid/arsc/value/ResValueMap.java index ccad1a5..68f02e7 100755 --- a/src/main/java/com/reandroid/arsc/value/ResValueMap.java +++ b/src/main/java/com/reandroid/arsc/value/ResValueMap.java @@ -16,6 +16,7 @@ package com.reandroid.arsc.value; import com.reandroid.arsc.base.Block; +import com.reandroid.arsc.chunk.PackageBlock; import com.reandroid.json.JSONObject; public class ResValueMap extends ValueItem{ @@ -27,6 +28,14 @@ public class ResValueMap extends ValueItem{ public Entry getEntry(){ return getParent(Entry.class); } + @Override + public PackageBlock getParentChunk(){ + Entry entry = getEntry(); + if(entry!=null){ + return entry.getPackageBlock(); + } + return null; + } public ResTableMapEntry getParentMapEntry(){ Block parent=getParent(); diff --git a/src/main/java/com/reandroid/arsc/value/Value.java b/src/main/java/com/reandroid/arsc/value/Value.java index 1bc3293..c2c6889 100644 --- a/src/main/java/com/reandroid/arsc/value/Value.java +++ b/src/main/java/com/reandroid/arsc/value/Value.java @@ -15,9 +15,20 @@ */ package com.reandroid.arsc.value; + import com.reandroid.arsc.chunk.MainChunk; + import com.reandroid.arsc.chunk.ParentChunk; + public interface Value { void setValueType(ValueType valueType); ValueType getValueType(); int getData(); void setData(int data); + ParentChunk getParentChunk(); + default MainChunk getMainChunk(){ + ParentChunk parentChunk = getParentChunk(); + if(parentChunk!=null){ + return parentChunk.getMainChunk(); + } + return null; + } }