mirror of
https://github.com/revanced/ARSCLib.git
synced 2025-05-08 01:34:25 +02:00
[XML] handle type '^attr-private'
This commit is contained in:
parent
37df67c027
commit
6a83ddd59d
@ -241,7 +241,7 @@ import java.util.*;
|
||||
xmlDocument.save(file, false);
|
||||
}
|
||||
private XMLElement decodeValue(EntryStore entryStore, Entry entry){
|
||||
XMLElement element=new XMLElement(entry.getTypeName());
|
||||
XMLElement element=new XMLElement(XmlHelper.toXMLTagName(entry.getTypeName()));
|
||||
int resourceId= entry.getResourceId();
|
||||
XMLAttribute attribute=new XMLAttribute("name", entry.getName());
|
||||
element.addAttribute(attribute);
|
||||
|
@ -30,4 +30,11 @@ public class XmlHelper {
|
||||
element.setSpannableText(stringItem.getXml());
|
||||
}
|
||||
}
|
||||
public static String toXMLTagName(String typeName){
|
||||
// e.g ^attr-private
|
||||
if(typeName.length()>0 && typeName.charAt(0)=='^'){
|
||||
typeName = typeName.substring(1);
|
||||
}
|
||||
return typeName;
|
||||
}
|
||||
}
|
||||
|
@ -50,8 +50,16 @@
|
||||
.get(0);
|
||||
}
|
||||
public Entry getAttributeBlock(String refString){
|
||||
String packageName = null;
|
||||
String type = "attr";
|
||||
Entry entry = getAttributeBlock(type, refString);
|
||||
if(entry == null){
|
||||
type = "^attr-private";
|
||||
entry = getAttributeBlock(type, refString);
|
||||
}
|
||||
return entry;
|
||||
}
|
||||
private Entry getAttributeBlock(String type, String refString){
|
||||
String packageName = null;
|
||||
String name = refString;
|
||||
int i=refString.lastIndexOf(':');
|
||||
if(i>=0){
|
||||
|
@ -128,6 +128,9 @@ package com.reandroid.apk.xmlencoder;
|
||||
return name;
|
||||
}
|
||||
public static String sanitizeType(String type){
|
||||
if(type.startsWith("^attr")){
|
||||
return type;
|
||||
}
|
||||
Matcher matcher=PATTERN_TYPE.matcher(type);
|
||||
if(!matcher.find()){
|
||||
return "";
|
||||
|
@ -44,7 +44,9 @@ class ValuesEncoder {
|
||||
this.commonEncoder=new XMLValuesEncoderCommon(materials);
|
||||
|
||||
Map<String, XMLValuesEncoderBag> mapBag=new HashMap<>();
|
||||
mapBag.put("attr", new XMLValuesEncoderAttr(materials));
|
||||
XMLValuesEncoderAttr encoderAttr = new XMLValuesEncoderAttr(materials);
|
||||
mapBag.put("attr", encoderAttr);
|
||||
mapBag.put("^attr-private", encoderAttr);
|
||||
mapBag.put("plurals", new XMLValuesEncoderPlurals(materials));
|
||||
mapBag.put("array", new XMLValuesEncoderArray(materials));
|
||||
mapBag.put("style", new XMLValuesEncoderStyle(materials));
|
||||
@ -79,6 +81,9 @@ class ValuesEncoder {
|
||||
if(type.startsWith("attr")){
|
||||
return true;
|
||||
}
|
||||
if(type.startsWith("^attr")){
|
||||
return true;
|
||||
}
|
||||
if(type.startsWith("style")){
|
||||
return true;
|
||||
}
|
||||
@ -117,6 +122,9 @@ class ValuesEncoder {
|
||||
if(type.endsWith("-array")){
|
||||
return "array";
|
||||
}
|
||||
if(type.startsWith("attr-private")){
|
||||
return "^attr-private";
|
||||
}
|
||||
if(type.equals("item")){
|
||||
return def;
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ package com.reandroid.apk.xmlencoder;
|
||||
|
||||
import com.reandroid.arsc.array.ResValueMapArray;
|
||||
import com.reandroid.arsc.decoder.ValueDecoder;
|
||||
import com.reandroid.arsc.value.EntryHeaderMap;
|
||||
import com.reandroid.arsc.value.ResTableMapEntry;
|
||||
import com.reandroid.arsc.value.ResValueMap;
|
||||
import com.reandroid.arsc.value.ValueType;
|
||||
@ -42,8 +43,10 @@ class XMLValuesEncoderAttr extends XMLValuesEncoderBag{
|
||||
void encodeChildes(XMLElement parentElement, ResTableMapEntry mapEntry){
|
||||
encodeAttributes(parentElement, mapEntry);
|
||||
encodeEnumOrFlag(parentElement, mapEntry);
|
||||
// TODO: re-check if this is necessary
|
||||
mapEntry.getHeader().setPublic(true);
|
||||
EntryHeaderMap header = mapEntry.getHeader();
|
||||
boolean is_public = !mapEntry.getParentEntry()
|
||||
.getTypeName().contains("private");
|
||||
header.setPublic(is_public);
|
||||
}
|
||||
private void encodeAttributes(XMLElement parentElement, ResTableMapEntry mapEntry){
|
||||
ResValueMapArray mapArray = mapEntry.getValue();
|
||||
|
Loading…
x
Reference in New Issue
Block a user