package biz.bokhorst.xprivacy; import java.util.ArrayList; import java.util.List; import android.net.NetworkInfo; public class XConnectivityManager extends XHook { private Methods mMethod; private String mClassName; private static final String cClassName = "android.net.ConnectivityManager"; private XConnectivityManager(Methods method, String restrictionName, String className) { super(restrictionName, method.name(), "Connectivity." + method.name()); mMethod = method; mClassName = className; } public String getClassName() { return mClassName; } // public NetworkInfo getActiveNetworkInfo() // public NetworkInfo[] getAllNetworkInfo() // public NetworkInfo getNetworkInfo(int networkType) // frameworks/base/core/java/android/net/ConnectivityManager.java // http://developer.android.com/reference/android/net/ConnectivityManager.html private enum Methods { getActiveNetworkInfo, getAllNetworkInfo, getNetworkInfo }; public static List<XHook> getInstances(String className, boolean server) { List<XHook> listHook = new ArrayList<XHook>(); if (!cClassName.equals(className)) { if (className == null) className = cClassName; for (Methods connmgr : Methods.values()) listHook.add(new XConnectivityManager(connmgr, PrivacyManager.cInternet, className)); } return listHook; } @Override protected void before(XParam param) throws Throwable { // Do nothing } @Override protected void after(XParam param) throws Throwable { switch (mMethod) { case getActiveNetworkInfo: case getNetworkInfo: if (param.getResult() != null && isRestricted(param)) param.setResult(null); break; case getAllNetworkInfo: if (param.getResult() != null && isRestricted(param)) param.setResult(new NetworkInfo[0]); break; } } }