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