From a92e929812827b100e24c83a152d35e3d27a9d9e Mon Sep 17 00:00:00 2001 From: REAndroid Date: Sat, 25 Mar 2023 12:01:52 -0400 Subject: [PATCH] create new qualifier parser for ResConfig --- .../com/reandroid/arsc/value/ResConfig.java | 506 +++++++++++++++--- .../reandroid/arsc/value/ResConfigHelper.java | 496 ----------------- 2 files changed, 433 insertions(+), 569 deletions(-) delete mode 100755 src/main/java/com/reandroid/arsc/value/ResConfigHelper.java diff --git a/src/main/java/com/reandroid/arsc/value/ResConfig.java b/src/main/java/com/reandroid/arsc/value/ResConfig.java index 8b075cf..331885b 100755 --- a/src/main/java/com/reandroid/arsc/value/ResConfig.java +++ b/src/main/java/com/reandroid/arsc/value/ResConfig.java @@ -26,6 +26,8 @@ import java.io.IOException; import java.util.Arrays; + import java.util.regex.Matcher; + import java.util.regex.Pattern; public class ResConfig extends FixedBlockContainer implements BlockLoad, JSONConvert, Comparable { @@ -66,8 +68,13 @@ @Override protected void onRefreshed() { } - public void parseQualifiers(String name){ - ResConfigHelper.parseQualifiers(this, name); + /** + * returns null if parsing is ok, else returns unknown qualifiers + * */ + public String[] parseQualifiers(String qualifiers){ + QualifierParser parser = new QualifierParser(this, qualifiers); + parser.parse(); + return parser.getErrors(); } public void setConfigSize(int size){ if(!isValidSize(size)){ @@ -102,14 +109,14 @@ return true; } - public void setMcc(short sh){ + public void setMcc(int value){ if(getConfigSize() qList=new ArrayList<>(); - for(int i=0;i cmp=new Comparator() { - @Override - public int compare(String s1, String s2) { - return s1.compareTo(s2); - } - }; - qList.sort(cmp); - StringBuilder builder=new StringBuilder(); - for(String q:qList){ - builder.append('-'); - builder.append(q); - } - return builder.toString(); - } - private static void encode(ResConfig resConfig, String[] split){ - encodeDensity(resConfig, split); - encodeScreenHeightDp(resConfig, split); - encodeScreenWidthDp(resConfig, split); - encodeSmallestScreenWidthDp(resConfig, split); - encodeNavigation(resConfig, split); - encodeInputFlags(resConfig, split); - encodeSdkVersion(resConfig, split); - encodeKeyboard(resConfig, split); - encodeTouchscreen(resConfig, split); - encodeUiMode(resConfig, split); - encodeOrientation(resConfig, split); - encodeScreenLayout(resConfig, split); - encodeScreenLayout2(resConfig, split); - encodeColorMode(resConfig, split); - encodeMcc(resConfig, split); - encodeMnc(resConfig, split); - encodeScreenSize(resConfig, split); - encodeLanguageAndCountry(resConfig, split); - encodeScriptAndVariant(resConfig, split); - } - - private static void encodeLanguageAndCountry(ResConfig resConfig, String[] split){ - if(split==null){ - return; - } - String lang=null; - String country=null; - for(int i=0;i2 && country.startsWith("r")){ - country=country.substring(1); - } - char[] chs=country.toCharArray(); - resConfig.setRegion(chs); - } - private static void encodeScriptAndVariant(ResConfig resConfig, String[] split){ - if(split==null){ - return; - } - for(int i=0;ib){ - w=(short)a; - h=(short)b; - }else { - w=(short)b; - h=(short)a; - } - resConfig.setScreenSize(w, h); - split[i]=null; - break; - } - } - - private static boolean isLanguageName(String str){ - if(str==null){ - return false; - } - Matcher matcher=PATTERN_LANG_NAME.matcher(str); - return matcher.find(); - } - private static boolean isLocaleScript(String str){ - if(str==null){ - return false; - } - Matcher matcher=PATTERN_LOCALE_SCRIPT.matcher(str); - return matcher.find(); - } - private static boolean isLocaleVariant(String str){ - if(str==null){ - return false; - } - Matcher matcher=PATTERN_LOCALE_VARIANT.matcher(str); - return matcher.find(); - } - private static boolean isCountryName(String str){ - if(str==null){ - return false; - } - Matcher matcher=PATTERN_COUNTRY_NAME.matcher(str); - return matcher.find(); - } - private static boolean isNull(String[] split){ - if(split==null){ - return true; - } - if(split.length==0){ - return true; - } - boolean result=true; - for(int i=0;i