You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
2.7 KiB
Java

package com.langerhans.one.utils;
import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
import static de.robv.android.xposed.XposedHelpers.findClass;
import static de.robv.android.xposed.XposedHelpers.getObjectField;
import static de.robv.android.xposed.XposedHelpers.setObjectField;
import java.util.ArrayList;
import com.langerhans.one.mods.XMain;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
public class PackagePermissions {
public static void initHooks() {
try {
final Class<?> clsPMS = findClass("com.android.server.pm.PackageManagerService", XMain.class.getClassLoader());
findAndHookMethod(clsPMS, "grantPermissionsLPw", "android.content.pm.PackageParser$Package", boolean.class, new XC_MethodHook() {
@SuppressWarnings("unchecked")
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
String pkgName = (String) getObjectField(param.args[0], "packageName");
if (pkgName.equalsIgnoreCase("com.htc.launcher")){
ArrayList<String> requestedPermissions = (ArrayList<String>) getObjectField(param.args[0], "requestedPermissions");
param.setObjectExtra("orig_requested_permissions", requestedPermissions);
requestedPermissions.add("android.permission.EXPAND_STATUS_BAR");
requestedPermissions.add("com.htc.home.personalize.permission.LAUNCH_MAIN");
setObjectField(param.args[0], "requestedPermissions", requestedPermissions);
try {
ArrayList<Boolean> requestedPermissionsRequired = (ArrayList<Boolean>) getObjectField(param.args[0], "requestedPermissionsRequired");
param.setObjectExtra("orig_requested_permissions_required", requestedPermissionsRequired);
requestedPermissionsRequired.add(true);
requestedPermissionsRequired.add(true);
setObjectField(param.args[0], "requestedPermissionsRequired", requestedPermissionsRequired);
} catch (Throwable e) {
e.printStackTrace();
}
}
}
@SuppressWarnings("unchecked")
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
ArrayList<String> origRequestedPermissions = (ArrayList<String>) param.getObjectExtra("orig_requested_permissions");
if (origRequestedPermissions != null) setObjectField(param.args[0], "requestedPermissions", origRequestedPermissions);
ArrayList<Boolean> origRequestedPermissionsRequired = (ArrayList<Boolean>) param.getObjectExtra("orig_requested_permissions_required");
if (origRequestedPermissionsRequired != null) setObjectField(param.args[0], "requestedPermissionsRequired", origRequestedPermissionsRequired);
}
});
} catch (Throwable t) {
XposedBridge.log(t);
}
}
}