diff --git a/src/main/java/com/reandroid/arsc/value/ResConfig.java b/src/main/java/com/reandroid/arsc/value/ResConfig.java index 5b2f7cc..54381f2 100755 --- a/src/main/java/com/reandroid/arsc/value/ResConfig.java +++ b/src/main/java/com/reandroid/arsc/value/ResConfig.java @@ -27,7 +27,7 @@ import com.reandroid.json.JSONObject; import java.io.IOException; import java.util.Arrays; -public class ResConfig extends FixedBlockContainer + public class ResConfig extends FixedBlockContainer implements BlockLoad, JSONConvert, Comparable { private final IntegerItem configSize; @@ -458,17 +458,33 @@ public class ResConfig extends FixedBlockContainer } mValuesContainer.put(OFFSET_uiMode, b); } - public byte getUiModeValue(){ + public int getUiMode(){ if(getConfigSize() T fromQualifiers(T[] values, String qualifiers){ + if(qualifiers == null){ + return null; + } + return fromQualifiers(values, qualifiers.split("\\s*-\\s*")); + } + static T fromQualifiers(T[] values, String[] qualifiers){ + if(qualifiers == null){ + return null; + } + for(String name:qualifiers){ + T flag = Flag.valueOf(values, name); + if(flag != null){ + return flag; + } + } + return null; + } + static T valueOf(T[] values, int mask, int flagValue){ + flagValue = flagValue & mask; + for(T flag:values){ + if(flagValue == flag.getFlag()){ + return flag; + } + } + return null; + } + static T valueOf(T[] values, String name){ + if(name == null || name.length()==0){ + return null; + } + if(name.charAt(0)=='-'){ + name = name.substring(1); + } + name = name.toLowerCase(); + for(T flag:values){ + if(name.equals(flag.toString())){ + return flag; + } + } + return null; + } + } public static final int SIZE_16 = 16; public static final int SIZE_28 = 28; @@ -1214,7 +1371,8 @@ public class ResConfig extends FixedBlockContainer private static final String NAME_minorVersion = "minorVersion"; //SIZE=28 private static final String NAME_screenLayout = "screenLayout"; - private static final String NAME_uiMode = "uiMode"; + private static final String NAME_ui_mode_type = "ui_mode_type"; + private static final String NAME_ui_mode_night = "ui_mode_night"; private static final String NAME_smallestScreenWidthDp = "smallestScreenWidthDp"; //SIZE=32 = ""; private static final String NAME_screenWidthDp = "screenWidthDp"; diff --git a/src/main/java/com/reandroid/arsc/value/ResConfigHelper.java b/src/main/java/com/reandroid/arsc/value/ResConfigHelper.java index 07f6556..a7ab4fa 100755 --- a/src/main/java/com/reandroid/arsc/value/ResConfigHelper.java +++ b/src/main/java/com/reandroid/arsc/value/ResConfigHelper.java @@ -617,236 +617,18 @@ public class ResConfigHelper { return "-"+touchscreen.toString(); } private static void encodeUiMode(ResConfig resConfig, String[] split){ - int uiMode=0; - for(int i=0;i