From ff57e605ae5b5d7604f21fe53b2902dc87a845ce Mon Sep 17 00:00:00 2001 From: REAndroid Date: Fri, 5 May 2023 21:19:49 +0200 Subject: [PATCH] fix ResConfig parse three digit region --- .../com/reandroid/arsc/value/ResConfig.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/reandroid/arsc/value/ResConfig.java b/src/main/java/com/reandroid/arsc/value/ResConfig.java index 3a08d18..f176836 100755 --- a/src/main/java/com/reandroid/arsc/value/ResConfig.java +++ b/src/main/java/com/reandroid/arsc/value/ResConfig.java @@ -2126,13 +2126,14 @@ return false; } Matcher matcher = PATTERN_REGION.matcher(qualifier); - if(!matcher.matches()){ + if(!matcher.matches() && !isRegionNumber(qualifier)){ return false; } this.mConfig.setRegion(qualifier); return true; } + private boolean isEmpty(){ if(!mEmpty){ mEmpty = isEmpty(mQualifiers); @@ -2172,6 +2173,25 @@ } return qualifier.split("-"); } + private static boolean isRegionNumber(String qualifier){ + if(qualifier==null || qualifier.length()==0){ + return false; + } + return qualifier.length() == 3 && isAllDigit(qualifier); + } + private static boolean isAllDigit(String qualifier){ + if(qualifier == null || qualifier.length()==0){ + return false; + } + char[] chars = qualifier.toCharArray(); + for(int i = 0; i < chars.length; i++){ + char ch = chars[i]; + if(ch > '9' || ch < '0'){ + return false; + } + } + return true; + } private static final Pattern PATTERN_PREFIX_NUMBER = Pattern.compile("^([mcnv]+)([0-9]+)$"); private static final Pattern PATTERN_DP = Pattern.compile("^([swh]+)([0-9]+)dp$");