mirror of
https://github.com/revanced/ARSCLib.git
synced 2025-05-01 22:54:26 +02:00
simplify config ui mode
This commit is contained in:
parent
43f299cc79
commit
6c4e4f08f6
@ -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<JSONObject>, Comparable<ResConfig> {
|
||||
|
||||
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()<SIZE_32){
|
||||
return 0;
|
||||
}
|
||||
return mValuesContainer.get(OFFSET_uiMode);
|
||||
return mValuesContainer.get(OFFSET_uiMode) & 0xff;
|
||||
}
|
||||
public String getUiMode(){
|
||||
return ResConfigHelper.decodeUiMode(getUiModeValue());
|
||||
public UiModeType getUiModeType(){
|
||||
return UiModeType.valueOf(getUiMode());
|
||||
}
|
||||
public void setUiMode(String uiMode){
|
||||
setUiMode(ResConfigHelper.encodeUiMode(uiMode));
|
||||
public void setUiModeType(UiModeType uiModeType){
|
||||
int flip = (~UiModeType.MASK_UI_MODE_TYPE) & 0xff;
|
||||
int value = getUiMode() & flip;
|
||||
if(uiModeType!=null){
|
||||
value = value | uiModeType.getFlag();
|
||||
}
|
||||
setUiMode((byte) value);
|
||||
}
|
||||
public UiModeNight getUiModeNight(){
|
||||
return UiModeNight.valueOf(getUiMode());
|
||||
}
|
||||
public void setUiModeNight(UiModeNight uiModeNight){
|
||||
int flip = (~UiModeNight.MASK_UI_MODE_NIGHT) & 0xff;
|
||||
int value = getUiMode() & flip;
|
||||
if(uiModeNight != null){
|
||||
value = value | uiModeNight.getFlag();
|
||||
}
|
||||
setUiMode((byte) value);
|
||||
}
|
||||
public void setSmallestScreenWidthDp(short sh){
|
||||
if(getConfigSize()<SIZE_32){
|
||||
@ -732,9 +748,13 @@ public class ResConfig extends FixedBlockContainer
|
||||
if(str!=null){
|
||||
jsonObject.put(NAME_screenLayout, str);
|
||||
}
|
||||
str = getUiMode();
|
||||
if(str!=null){
|
||||
jsonObject.put(NAME_uiMode, str);
|
||||
UiModeType uiModeType = getUiModeType();
|
||||
if(uiModeType!=null){
|
||||
jsonObject.put(NAME_ui_mode_type, uiModeType.toString());
|
||||
}
|
||||
UiModeNight uiModeNight = getUiModeNight();
|
||||
if(uiModeNight!=null){
|
||||
jsonObject.put(NAME_ui_mode_night, uiModeNight.toString());
|
||||
}
|
||||
val = getSmallestScreenWidthDp();
|
||||
if(val!=0){
|
||||
@ -781,7 +801,8 @@ public class ResConfig extends FixedBlockContainer
|
||||
setSdkVersion((short) json.optInt(NAME_sdkVersion));
|
||||
setMinorVersion((short) json.optInt(NAME_minorVersion));
|
||||
setScreenLayout(json.optString(NAME_screenLayout));
|
||||
setUiMode(json.optString(NAME_uiMode));
|
||||
setUiModeType(UiModeType.valueOf(json.optString(NAME_ui_mode_type)));
|
||||
setUiModeNight(UiModeNight.valueOf(json.optString(NAME_ui_mode_night)));
|
||||
setSmallestScreenWidthDp((short) json.optInt(NAME_smallestScreenWidthDp));
|
||||
setScreenWidthDp((short) json.optInt(NAME_screenWidthDp));
|
||||
setScreenHeightDp((short) json.optInt(NAME_screenHeightDp));
|
||||
@ -1150,6 +1171,142 @@ public class ResConfig extends FixedBlockContainer
|
||||
return null;
|
||||
}
|
||||
}
|
||||
public static final class UiModeType extends Flag{
|
||||
public static final int MASK_UI_MODE_TYPE = 0x0f;
|
||||
|
||||
public static final UiModeType NORMAL = new UiModeType("normal", 0x01);
|
||||
public static final UiModeType DESK = new UiModeType("desk", 0x02);
|
||||
public static final UiModeType CAR = new UiModeType("car", 0x03);
|
||||
public static final UiModeType TELEVISION = new UiModeType("television", 0x04);
|
||||
public static final UiModeType APPLIANCE = new UiModeType("appliance", 0x05);
|
||||
public static final UiModeType WATCH = new UiModeType("watch", 0x06);
|
||||
public static final UiModeType VRHEADSET = new UiModeType("vrheadset", 0x07);
|
||||
public static final UiModeType GODZILLAUI = new UiModeType("godzillaui", 0x0b);
|
||||
public static final UiModeType SMALLUI = new UiModeType("smallui", 0x0c);
|
||||
public static final UiModeType MEDIUMUI = new UiModeType("mediumui", 0x0d);
|
||||
public static final UiModeType LARGEUI = new UiModeType("largeui", 0x0e);
|
||||
public static final UiModeType HUGEUI = new UiModeType("hugeui", 0x0f);
|
||||
|
||||
private static final UiModeType[] VALUES = new UiModeType[]{
|
||||
NORMAL,
|
||||
DESK,
|
||||
CAR,
|
||||
TELEVISION,
|
||||
APPLIANCE,
|
||||
WATCH,
|
||||
VRHEADSET,
|
||||
GODZILLAUI,
|
||||
SMALLUI,
|
||||
MEDIUMUI,
|
||||
LARGEUI,
|
||||
HUGEUI
|
||||
};
|
||||
|
||||
private UiModeType(String name, int flag) {
|
||||
super(name, flag);
|
||||
}
|
||||
public static UiModeType valueOf(int flag){
|
||||
return Flag.valueOf(VALUES, MASK_UI_MODE_TYPE, flag);
|
||||
}
|
||||
public static UiModeType valueOf(String name){
|
||||
return Flag.valueOf(VALUES, name);
|
||||
}
|
||||
public static UiModeType fromQualifiers(String qualifiers){
|
||||
return Flag.fromQualifiers(VALUES, qualifiers);
|
||||
}
|
||||
public static UiModeType fromQualifiers(String[] qualifiers){
|
||||
return Flag.fromQualifiers(VALUES, qualifiers);
|
||||
}
|
||||
}
|
||||
public static final class UiModeNight extends Flag{
|
||||
public static final int MASK_UI_MODE_NIGHT = 0x30;
|
||||
public static final UiModeNight NIGHT = new UiModeNight("night",0x20);
|
||||
public static final UiModeNight NONIGHT = new UiModeNight("nonight",0x20);
|
||||
private static final UiModeNight[] VALUES = new UiModeNight[]{
|
||||
NIGHT,
|
||||
NONIGHT
|
||||
};
|
||||
private UiModeNight(String name, int flag) {
|
||||
super(name, flag);
|
||||
}
|
||||
public static UiModeNight valueOf(int flag){
|
||||
return Flag.valueOf(VALUES, MASK_UI_MODE_NIGHT, flag);
|
||||
}
|
||||
public static UiModeNight valueOf(String name){
|
||||
return Flag.valueOf(VALUES, name);
|
||||
}
|
||||
public static UiModeNight fromQualifiers(String qualifiers){
|
||||
return Flag.fromQualifiers(VALUES, qualifiers);
|
||||
}
|
||||
public static UiModeNight fromQualifiers(String[] qualifiers){
|
||||
return Flag.fromQualifiers(VALUES, qualifiers);
|
||||
}
|
||||
}
|
||||
static class Flag{
|
||||
private final String name;
|
||||
private final int flag;
|
||||
Flag(String name, int flag){
|
||||
this.name = name;
|
||||
this.flag = flag;
|
||||
}
|
||||
public int getFlag() {
|
||||
return flag;
|
||||
}
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
return obj == this;
|
||||
}
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return super.hashCode();
|
||||
}
|
||||
@Override
|
||||
public String toString() {
|
||||
return name;
|
||||
}
|
||||
static<T extends Flag> T fromQualifiers(T[] values, String qualifiers){
|
||||
if(qualifiers == null){
|
||||
return null;
|
||||
}
|
||||
return fromQualifiers(values, qualifiers.split("\\s*-\\s*"));
|
||||
}
|
||||
static<T extends Flag> 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 extends Flag> 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 extends Flag> 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";
|
||||
|
@ -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<split.length;i++){
|
||||
String s=split[i];
|
||||
if(s==null){
|
||||
continue;
|
||||
}
|
||||
int val;
|
||||
switch (s) {
|
||||
case "car":
|
||||
val = (UI_MODE_TYPE_CAR);
|
||||
break;
|
||||
case "desk":
|
||||
val = (UI_MODE_TYPE_DESK);
|
||||
break;
|
||||
case "television":
|
||||
val = (UI_MODE_TYPE_TELEVISION);
|
||||
break;
|
||||
case "smallui":
|
||||
val = (UI_MODE_TYPE_SMALLUI);
|
||||
break;
|
||||
case "mediumui":
|
||||
val = (UI_MODE_TYPE_MEDIUMUI);
|
||||
break;
|
||||
case "largeui":
|
||||
val = (UI_MODE_TYPE_LARGEUI);
|
||||
break;
|
||||
case "godzillaui":
|
||||
val = (UI_MODE_TYPE_GODZILLAUI);
|
||||
break;
|
||||
case "hugeui":
|
||||
val = (UI_MODE_TYPE_HUGEUI);
|
||||
break;
|
||||
case "appliance":
|
||||
val = (UI_MODE_TYPE_APPLIANCE);
|
||||
break;
|
||||
case "watch":
|
||||
val = (UI_MODE_TYPE_WATCH);
|
||||
break;
|
||||
case "vrheadset":
|
||||
val = (UI_MODE_TYPE_VR_HEADSET);
|
||||
break;
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
uiMode=(uiMode | val);
|
||||
split[i]=null;
|
||||
}
|
||||
for(int i=0;i<split.length;i++){
|
||||
String s=split[i];
|
||||
if(s==null){
|
||||
continue;
|
||||
}
|
||||
int val;
|
||||
if("night".equals(s)){
|
||||
val = (UI_MODE_NIGHT_YES);
|
||||
}else if("notnight".equals(s)){
|
||||
val = (UI_MODE_NIGHT_NO);
|
||||
}else {
|
||||
continue;
|
||||
}
|
||||
uiMode=(uiMode | val);
|
||||
split[i]=null;
|
||||
}
|
||||
resConfig.setUiMode((byte)uiMode);
|
||||
}
|
||||
public static byte encodeUiMode(String uiMode){
|
||||
if(uiMode==null){
|
||||
return 0;
|
||||
}
|
||||
String[] split=uiMode.split("-");
|
||||
int result=0;
|
||||
for(int i=0;i<split.length;i++){
|
||||
String s=split[i];
|
||||
if(s==null){
|
||||
continue;
|
||||
}
|
||||
int val;
|
||||
switch (s) {
|
||||
case "car":
|
||||
val = (UI_MODE_TYPE_CAR);
|
||||
break;
|
||||
case "desk":
|
||||
val = (UI_MODE_TYPE_DESK);
|
||||
break;
|
||||
case "television":
|
||||
val = (UI_MODE_TYPE_TELEVISION);
|
||||
break;
|
||||
case "smallui":
|
||||
val = (UI_MODE_TYPE_SMALLUI);
|
||||
break;
|
||||
case "mediumui":
|
||||
val = (UI_MODE_TYPE_MEDIUMUI);
|
||||
break;
|
||||
case "largeui":
|
||||
val = (UI_MODE_TYPE_LARGEUI);
|
||||
break;
|
||||
case "godzillaui":
|
||||
val = (UI_MODE_TYPE_GODZILLAUI);
|
||||
break;
|
||||
case "hugeui":
|
||||
val = (UI_MODE_TYPE_HUGEUI);
|
||||
break;
|
||||
case "appliance":
|
||||
val = (UI_MODE_TYPE_APPLIANCE);
|
||||
break;
|
||||
case "watch":
|
||||
val = (UI_MODE_TYPE_WATCH);
|
||||
break;
|
||||
case "vrheadset":
|
||||
val = (UI_MODE_TYPE_VR_HEADSET);
|
||||
break;
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
result=(result | val);
|
||||
split[i]=null;
|
||||
}
|
||||
for(int i=0;i<split.length;i++){
|
||||
String s=split[i];
|
||||
if(s==null){
|
||||
continue;
|
||||
}
|
||||
int val;
|
||||
if("night".equals(s)){
|
||||
val = (UI_MODE_NIGHT_YES);
|
||||
}else if("notnight".equals(s)){
|
||||
val = (UI_MODE_NIGHT_NO);
|
||||
}else {
|
||||
continue;
|
||||
}
|
||||
result=(result | val);
|
||||
split[i]=null;
|
||||
}
|
||||
return (byte)result;
|
||||
}
|
||||
public static String decodeUiMode(byte uiMode){
|
||||
StringBuilder ret=new StringBuilder();
|
||||
switch (uiMode & MASK_UI_MODE_TYPE) {
|
||||
case UI_MODE_TYPE_CAR:
|
||||
ret.append("-car");
|
||||
break;
|
||||
case UI_MODE_TYPE_DESK:
|
||||
ret.append("-desk");
|
||||
break;
|
||||
case UI_MODE_TYPE_TELEVISION:
|
||||
ret.append("-television");
|
||||
break;
|
||||
case UI_MODE_TYPE_SMALLUI:
|
||||
ret.append("-smallui");
|
||||
break;
|
||||
case UI_MODE_TYPE_MEDIUMUI:
|
||||
ret.append("-mediumui");
|
||||
break;
|
||||
case UI_MODE_TYPE_LARGEUI:
|
||||
ret.append("-largeui");
|
||||
break;
|
||||
case UI_MODE_TYPE_GODZILLAUI:
|
||||
ret.append("-godzillaui");
|
||||
break;
|
||||
case UI_MODE_TYPE_HUGEUI:
|
||||
ret.append("-hugeui");
|
||||
break;
|
||||
case UI_MODE_TYPE_APPLIANCE:
|
||||
ret.append("-appliance");
|
||||
break;
|
||||
case UI_MODE_TYPE_WATCH:
|
||||
ret.append("-watch");
|
||||
break;
|
||||
case UI_MODE_TYPE_VR_HEADSET:
|
||||
ret.append("-vrheadset");
|
||||
break;
|
||||
}
|
||||
switch (uiMode & MASK_UI_MODE_NIGHT) {
|
||||
case UI_MODE_NIGHT_YES:
|
||||
ret.append("-night");
|
||||
break;
|
||||
case UI_MODE_NIGHT_NO:
|
||||
ret.append("-notnight");
|
||||
break;
|
||||
}
|
||||
if(ret.length()==0){
|
||||
return null;
|
||||
}
|
||||
return ret.toString();
|
||||
resConfig.setUiModeNight(ResConfig.UiModeNight.fromQualifiers(split));
|
||||
resConfig.setUiModeType(ResConfig.UiModeType.fromQualifiers(split));
|
||||
}
|
||||
private static String decodeUiMode(ResConfig resConfig){
|
||||
StringBuilder ret=new StringBuilder();
|
||||
byte uiMode=resConfig.getUiModeValue();
|
||||
switch (uiMode & MASK_UI_MODE_TYPE) {
|
||||
case UI_MODE_TYPE_CAR:
|
||||
ret.append("-car");
|
||||
break;
|
||||
case UI_MODE_TYPE_DESK:
|
||||
ret.append("-desk");
|
||||
break;
|
||||
case UI_MODE_TYPE_TELEVISION:
|
||||
ret.append("-television");
|
||||
break;
|
||||
case UI_MODE_TYPE_SMALLUI:
|
||||
ret.append("-smallui");
|
||||
break;
|
||||
case UI_MODE_TYPE_MEDIUMUI:
|
||||
ret.append("-mediumui");
|
||||
break;
|
||||
case UI_MODE_TYPE_LARGEUI:
|
||||
ret.append("-largeui");
|
||||
break;
|
||||
case UI_MODE_TYPE_GODZILLAUI:
|
||||
ret.append("-godzillaui");
|
||||
break;
|
||||
case UI_MODE_TYPE_HUGEUI:
|
||||
ret.append("-hugeui");
|
||||
break;
|
||||
case UI_MODE_TYPE_APPLIANCE:
|
||||
ret.append("-appliance");
|
||||
break;
|
||||
case UI_MODE_TYPE_WATCH:
|
||||
ret.append("-watch");
|
||||
break;
|
||||
case UI_MODE_TYPE_VR_HEADSET:
|
||||
ret.append("-vrheadset");
|
||||
break;
|
||||
ResConfig.UiModeType uiModeType = resConfig.getUiModeType();
|
||||
if(uiModeType!=null){
|
||||
ret.append('-').append(uiModeType.toString());
|
||||
}
|
||||
switch (uiMode & MASK_UI_MODE_NIGHT) {
|
||||
case UI_MODE_NIGHT_YES:
|
||||
ret.append("-night");
|
||||
break;
|
||||
case UI_MODE_NIGHT_NO:
|
||||
ret.append("-notnight");
|
||||
break;
|
||||
ResConfig.UiModeNight uiModeNight = resConfig.getUiModeNight();
|
||||
if(uiModeNight!=null){
|
||||
ret.append('-').append(uiModeNight.toString());
|
||||
}
|
||||
return ret.toString();
|
||||
}
|
||||
@ -1406,30 +1188,6 @@ public class ResConfigHelper {
|
||||
public final static short SCREENLAYOUT_ROUND_NO = 0x1;
|
||||
public final static short SCREENLAYOUT_ROUND_YES = 0x2;
|
||||
|
||||
|
||||
public final static byte MASK_UI_MODE_TYPE = 0x0f;
|
||||
public final static byte UI_MODE_TYPE_ANY = 0x00;
|
||||
public final static byte UI_MODE_TYPE_NORMAL = 0x01;
|
||||
public final static byte UI_MODE_TYPE_DESK = 0x02;
|
||||
public final static byte UI_MODE_TYPE_CAR = 0x03;
|
||||
public final static byte UI_MODE_TYPE_TELEVISION = 0x04;
|
||||
public final static byte UI_MODE_TYPE_APPLIANCE = 0x05;
|
||||
public final static byte UI_MODE_TYPE_WATCH = 0x06;
|
||||
public final static byte UI_MODE_TYPE_VR_HEADSET = 0x07;
|
||||
|
||||
|
||||
public final static byte MASK_UI_MODE_NIGHT = 0x30;
|
||||
public final static byte UI_MODE_NIGHT_ANY = 0x00;
|
||||
public final static byte UI_MODE_NIGHT_NO = 0x10;
|
||||
public final static byte UI_MODE_NIGHT_YES = 0x20;
|
||||
|
||||
|
||||
public final static byte UI_MODE_TYPE_GODZILLAUI = 0x0b;
|
||||
public final static byte UI_MODE_TYPE_SMALLUI = 0x0c;
|
||||
public final static byte UI_MODE_TYPE_MEDIUMUI = 0x0d;
|
||||
public final static byte UI_MODE_TYPE_LARGEUI = 0x0e;
|
||||
public final static byte UI_MODE_TYPE_HUGEUI = 0x0f;
|
||||
|
||||
public final static byte MASK_KEYSHIDDEN = 0x3;
|
||||
public final static byte KEYSHIDDEN_ANY = 0x0;
|
||||
public final static byte KEYSHIDDEN_NO = 0x1;
|
||||
|
Loading…
x
Reference in New Issue
Block a user