mirror of
https://github.com/revanced/ARSCLib.git
synced 2025-05-01 14:44:27 +02:00
avoid literal type name usage for entry bag detection
This commit is contained in:
parent
c39d3d8ad5
commit
0c8762bc64
@ -17,7 +17,7 @@ package com.reandroid.lib.arsc.value.array;
|
||||
|
||||
import com.reandroid.lib.arsc.value.EntryBlock;
|
||||
import com.reandroid.lib.arsc.value.ResValueBag;
|
||||
import com.reandroid.lib.arsc.value.attribute.AttributeBag;
|
||||
import com.reandroid.lib.arsc.value.ResValueBagItem;
|
||||
|
||||
public class ArrayBag {
|
||||
private final ArrayBagItem[] mBagItems;
|
||||
@ -61,24 +61,34 @@ public class ArrayBag {
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
/** TODO: find another method to check instead of checking type name (plurals),
|
||||
* just like {@link AttributeBag} **/
|
||||
/** The result of this is not always 100% accurate,
|
||||
* in addition to this use your methods to cross check like type-name == "array"**/
|
||||
public static boolean isArray(ResValueBag resValueBag){
|
||||
if(resValueBag==null){
|
||||
return false;
|
||||
}
|
||||
EntryBlock entryBlock= resValueBag.getEntryBlock();
|
||||
EntryBlock entryBlock = resValueBag.getEntryBlock();
|
||||
if(entryBlock==null){
|
||||
return false;
|
||||
}
|
||||
String type = entryBlock.getTypeName();
|
||||
if(type==null){
|
||||
if(resValueBag.getParentId()!=0){
|
||||
return false;
|
||||
}
|
||||
if(!type.startsWith(NAME)){
|
||||
ArrayBagItem[] arrayBagItems = ArrayBagItem.create(resValueBag.getBagItems());
|
||||
if(arrayBagItems==null || arrayBagItems.length==0){
|
||||
return false;
|
||||
}
|
||||
return ArrayBagItem.create(resValueBag.getBagItems()) != null;
|
||||
for(int i=0;i< arrayBagItems.length; i++){
|
||||
ArrayBagItem arrayBagItem = arrayBagItems[i];
|
||||
ResValueBagItem resValueBagItem = arrayBagItem.getBagItem();
|
||||
if(resValueBagItem.getIdHigh()!=0x0100){
|
||||
return false;
|
||||
}
|
||||
if(resValueBagItem.getIdLow() != (i+1)){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static ArrayBag create(ResValueBag resValueBag){
|
||||
@ -91,5 +101,4 @@ public class ArrayBag {
|
||||
}
|
||||
return new ArrayBag(bagItems);
|
||||
}
|
||||
public static final String NAME="array";
|
||||
}
|
||||
|
@ -17,7 +17,6 @@ package com.reandroid.lib.arsc.value.plurals;
|
||||
|
||||
import com.reandroid.lib.arsc.value.EntryBlock;
|
||||
import com.reandroid.lib.arsc.value.ResValueBag;
|
||||
import com.reandroid.lib.arsc.value.attribute.AttributeBag;
|
||||
|
||||
public class PluralsBag {
|
||||
private final PluralsBagItem[] mBagItems;
|
||||
@ -62,23 +61,16 @@ public class PluralsBag {
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
/** TODO: find another method to check instead of checking type name (plurals),
|
||||
* just like {@link AttributeBag} **/
|
||||
/** The result of this is not always 100% accurate,
|
||||
* in addition to this use your methods to cross check like type-name == "plurals"**/
|
||||
public static boolean isPlurals(ResValueBag resValueBag){
|
||||
if(resValueBag==null){
|
||||
return false;
|
||||
}
|
||||
EntryBlock entryBlock= resValueBag.getEntryBlock();
|
||||
EntryBlock entryBlock = resValueBag.getEntryBlock();
|
||||
if(entryBlock==null){
|
||||
return false;
|
||||
}
|
||||
String type = entryBlock.getTypeName();
|
||||
if(type==null){
|
||||
return false;
|
||||
}
|
||||
if(!type.startsWith(NAME)){
|
||||
return false;
|
||||
}
|
||||
return PluralsBagItem.create(resValueBag.getBagItems()) != null;
|
||||
}
|
||||
|
||||
@ -92,5 +84,4 @@ public class PluralsBag {
|
||||
}
|
||||
return new PluralsBag(bagItems);
|
||||
}
|
||||
public static final String NAME="plurals";
|
||||
}
|
||||
|
@ -107,7 +107,11 @@ public class PluralsBagItem {
|
||||
Set<PluralsQuantity> duplicates=new HashSet<>();
|
||||
List<PluralsBagItem> results=new ArrayList<>();
|
||||
for(int i=0;i<len;i++){
|
||||
PluralsBagItem item=create(resValueBagItems[i]);
|
||||
ResValueBagItem resValueBagItem = resValueBagItems[i];
|
||||
if(resValueBagItem.getIdHigh() != 0x0100){
|
||||
return null;
|
||||
}
|
||||
PluralsBagItem item=create(resValueBagItem);
|
||||
if(item==null){
|
||||
// If it reaches here type name is obfuscated
|
||||
return null;
|
||||
|
@ -19,8 +19,6 @@ import com.reandroid.lib.arsc.item.SpecString;
|
||||
import com.reandroid.lib.arsc.item.TypeString;
|
||||
import com.reandroid.lib.arsc.value.EntryBlock;
|
||||
import com.reandroid.lib.arsc.value.ResValueBag;
|
||||
import com.reandroid.lib.arsc.value.array.ArrayBagItem;
|
||||
import com.reandroid.lib.arsc.value.attribute.AttributeBag;
|
||||
|
||||
public class StyleBag {
|
||||
private final StyleBagItem[] mBagItems;
|
||||
@ -107,8 +105,8 @@ public class StyleBag {
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
/** TODO: find another method to check instead of checking type name (plurals),
|
||||
* just like {@link AttributeBag} **/
|
||||
/** The result of this is not always 100% accurate,
|
||||
* in addition to this use your methods to cross check like type-name == "plurals"**/
|
||||
public static boolean isStyle(ResValueBag resValueBag){
|
||||
if(resValueBag==null){
|
||||
return false;
|
||||
@ -117,14 +115,7 @@ public class StyleBag {
|
||||
if(entryBlock==null){
|
||||
return false;
|
||||
}
|
||||
String type = entryBlock.getTypeName();
|
||||
if(type==null){
|
||||
return false;
|
||||
}
|
||||
if(!type.startsWith(NAME)){
|
||||
return false;
|
||||
}
|
||||
return ArrayBagItem.create(resValueBag.getBagItems()) != null;
|
||||
return StyleBag.create(resValueBag) != null;
|
||||
}
|
||||
|
||||
public static StyleBag create(ResValueBag resValueBag){
|
||||
@ -137,5 +128,4 @@ public class StyleBag {
|
||||
}
|
||||
return new StyleBag(bagItems);
|
||||
}
|
||||
public static final String NAME="style";
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user