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
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);
|
|
}
|
|
}
|
|
}
|