package biz.bokhorst.xprivacy; import java.util.ArrayList; import java.util.List; public class XContextImpl extends XHook { private Methods mMethod; private XContextImpl(Methods method, String restrictionName) { super(restrictionName, method.name(), null); mMethod = method; } public String getClassName() { return "android.app.ContextImpl"; } // @formatter:off // public PackageManager getPackageManager() // public Object getSystemService(String name) // frameworks/base/core/java/android/app/ContextImpl.java // @formatter:on private enum Methods { getPackageManager, getSystemService }; public static List<XHook> getInstances() { List<XHook> listHook = new ArrayList<XHook>(); listHook.add(new XContextImpl(Methods.getPackageManager, null)); listHook.add(new XContextImpl(Methods.getSystemService, null)); return listHook; } @Override protected void before(XParam param) throws Throwable { // Do nothing } @Override protected void after(XParam param) throws Throwable { switch (mMethod) { case getPackageManager: if (param.getResult() != null) XPrivacy.handleGetSystemService("PackageManager", param.getResult().getClass().getName(), getSecret()); break; case getSystemService: if (param.args.length > 0 && param.args[0] instanceof String && param.getResult() != null) { String name = (String) param.args[0]; Object instance = param.getResult(); XPrivacy.handleGetSystemService(name, instance.getClass().getName(), getSecret()); } break; } } }