mirror of
https://github.com/revanced/ARSCLib.git
synced 2025-05-03 15:44:27 +02:00
82 lines
2.3 KiB
Java
Executable File
82 lines
2.3 KiB
Java
Executable File
package com.reandroid.lib.arsc.item;
|
|
|
|
import com.reandroid.lib.arsc.base.Block;
|
|
import com.reandroid.lib.arsc.chunk.xml.ResXmlBlock;
|
|
import com.reandroid.lib.arsc.pool.ResXmlStringPool;
|
|
import com.reandroid.lib.json.JSONConvert;
|
|
import com.reandroid.lib.json.JSONObject;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Collection;
|
|
import java.util.List;
|
|
|
|
public class ResXmlID extends IntegerItem {
|
|
private final List<ReferenceItem> mReferencedList;
|
|
public ResXmlID(int resId){
|
|
super(resId);
|
|
this.mReferencedList=new ArrayList<>();
|
|
}
|
|
public ResXmlID(){
|
|
this(0);
|
|
}
|
|
public boolean removeReference(ReferenceItem ref){
|
|
return mReferencedList.remove(ref);
|
|
}
|
|
public boolean removeAllReference(Collection<ReferenceItem> referenceItems){
|
|
return mReferencedList.removeAll(referenceItems);
|
|
}
|
|
public void removeAllReference(){
|
|
mReferencedList.clear();
|
|
}
|
|
public List<ReferenceItem> getReferencedList(){
|
|
return mReferencedList;
|
|
}
|
|
public void addReference(ReferenceItem ref){
|
|
if(ref!=null){
|
|
mReferencedList.add(ref);
|
|
}
|
|
}
|
|
public void addReference(Collection<ReferenceItem> refList){
|
|
if(refList==null){
|
|
return;
|
|
}
|
|
for(ReferenceItem ref:refList){
|
|
addReference(ref);
|
|
}
|
|
}
|
|
private void reUpdateReferences(int newIndex){
|
|
for(ReferenceItem ref:mReferencedList){
|
|
ref.set(newIndex);
|
|
}
|
|
}
|
|
@Override
|
|
public void onIndexChanged(int oldIndex, int newIndex){
|
|
reUpdateReferences(newIndex);
|
|
}
|
|
public String getName(){
|
|
ResXmlStringPool stringPool=getXmlStringPool();
|
|
if(stringPool==null){
|
|
return null;
|
|
}
|
|
ResXmlString xmlString = stringPool.get(getIndex());
|
|
if(xmlString==null){
|
|
return null;
|
|
}
|
|
return xmlString.getHtml();
|
|
}
|
|
private ResXmlStringPool getXmlStringPool(){
|
|
Block parent=this;
|
|
while (parent!=null){
|
|
if(parent instanceof ResXmlBlock){
|
|
return ((ResXmlBlock)parent).getStringPool();
|
|
}
|
|
parent=parent.getParent();
|
|
}
|
|
return null;
|
|
}
|
|
@Override
|
|
public String toString(){
|
|
return getIndex()+": "+String.format("0x%08x", get());
|
|
}
|
|
}
|