Skip to content

Commit 905a10f

Browse files
committed
Refactor MediaQuality and ReflectionUtils to improve enum handling and type safety
1 parent 37b9688 commit 905a10f

File tree

2 files changed

+15
-13
lines changed

2 files changed

+15
-13
lines changed

app/src/main/java/com/wmods/wppenhacer/xposed/features/media/MediaQuality.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,12 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
9090
var resizeVideo = param.getResult();
9191
boolean isHighResolution;
9292
boolean isEnum = false;
93-
if (param.args[0] instanceof Enum<?>) {
93+
var enumObj = ReflectionUtils.getArg(param.args, Enum.class, 0);
94+
var intParams = ReflectionUtils.findArrayOfType(param.args, Integer.class);
95+
if (enumObj != null) {
9496
isEnum = true;
95-
var hightResolution = Enum.valueOf((Class<Enum>) param.args[0].getClass(), "RESOLUTION_1080P");
96-
isHighResolution = hightResolution == param.args[0];
97+
var hightResolution = Enum.valueOf((Class<Enum>) enumObj.getClass(), "RESOLUTION_1080P");
98+
isHighResolution = hightResolution == enumObj;
9799
} else {
98100
isHighResolution = (int) param.args[1] == 3;
99101
}
@@ -106,9 +108,9 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
106108

107109
if (mediaFields.isEmpty()) {
108110
if (isEnum) {
109-
width = (int) param.args[3];
110-
height = (int) param.args[4];
111-
rotationAngle = (int) param.args[5];
111+
width = intParams.get(2).second;
112+
height = intParams.get(3).second;
113+
rotationAngle = intParams.get(4).second;
112114
} else {
113115
JSONObject mediaFields = (JSONObject) XposedHelpers.callMethod(param.args[0], "A00");
114116
width = mediaFields.getInt("widthPx");

app/src/main/java/com/wmods/wppenhacer/xposed/utils/ReflectionUtils.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -267,19 +267,19 @@ public static int findIndexOfType(Object[] args, Class<?> type) {
267267
return -1;
268268
}
269269

270-
public static List<Pair<Integer, Object>> findArrayOfType(Object[] args, Class<?> type) {
271-
var result = new ArrayList<Pair<Integer, Object>>();
270+
public static <T> List<Pair<Integer, T>> findArrayOfType(Object[] args, Class<T> type) {
271+
var result = new ArrayList<Pair<Integer, T>>();
272272
for (int i = 0; i < args.length; i++) {
273273
var arg = args[i];
274274
if (arg == null) continue;
275-
if (arg instanceof Class) {
276-
if (type.isAssignableFrom((Class) arg)) {
277-
result.add(new Pair<>(i, arg));
275+
if (arg instanceof Class clazz) {
276+
if (type.isAssignableFrom(clazz)) {
277+
result.add(new Pair<>(i, type.cast(clazz)));
278278
}
279279
continue;
280280
}
281281
if (type.isAssignableFrom(arg.getClass()) || type.isInstance(arg)) {
282-
result.add(new Pair<>(i, arg));
282+
result.add(new Pair<>(i, type.cast(arg)));
283283
}
284284
}
285285
return result;
@@ -334,7 +334,7 @@ public synchronized static boolean isCalledFromMethod(Method method) {
334334
public static <T> T getArg(Object[] args, Class<T> typeClass, int i) {
335335
var list = findArrayOfType(args, typeClass);
336336
if (list.size() <= i) return null;
337-
return typeClass.cast(list.get(i).second);
337+
return list.get(i).second;
338338
}
339339

340340
public static void setObjectField(Field field, Object instance, Object value) {

0 commit comments

Comments
 (0)