package biz.bokhorst.xprivacy;
import java.util.ArrayList;
import java.util.List;
import android.appwidget.AppWidgetProviderInfo;
import android.os.Build;
public class XAppWidgetManager extends XHook {
private Methods mMethod;
private String mClassName;
private XAppWidgetManager(Methods method, String restrictionName) {
super(restrictionName, method.name().replace("Srv_", ""), method.name());
mMethod = method;
if (method.name().startsWith("Srv_"))
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
mClassName = "com.android.server.appwidget.AppWidgetServiceImpl";
else
mClassName = "com.android.server.AppWidgetService";
else
mClassName = "android.appwidget.AppWidgetManager";
}
public String getClassName() {
return mClassName;
}
// @formatter:off
// public List<AppWidgetProviderInfo> getInstalledProviders()
// public List<AppWidgetProviderInfo> getInstalledProvidersForProfile(UserHandle profile)
// frameworks/base/core/java/android/appwidget/AppWidgetManager.java
// http://developer.android.com/reference/android/appwidget/AppWidgetManager.html
// public List<AppWidgetProviderInfo> getInstalledProviders(int categoryFilter, int userId)
// http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4.4_r1/com/android/server/AppWidgetService.java
// @formatter:on
private enum Methods {
getInstalledProviders, getInstalledProvidersForProfile, Srv_getInstalledProviders, Srv_getInstalledProvidersForProfile
};
public static List<XHook> getInstances(boolean server) {
List<XHook> listHook = new ArrayList<XHook>();
if (server) {
listHook.add(new XAppWidgetManager(Methods.Srv_getInstalledProviders, PrivacyManager.cSystem));
listHook.add(new XAppWidgetManager(Methods.Srv_getInstalledProvidersForProfile, PrivacyManager.cSystem));
} else {
listHook.add(new XAppWidgetManager(Methods.getInstalledProviders, PrivacyManager.cSystem));
listHook.add(new XAppWidgetManager(Methods.getInstalledProvidersForProfile, PrivacyManager.cSystem));
}
return listHook;
}
@Override
protected void before(XParam param) throws Throwable {
// Do nothing
}
@Override
protected void after(XParam param) throws Throwable {
switch (mMethod) {
case getInstalledProviders:
case getInstalledProvidersForProfile:
case Srv_getInstalledProviders:
case Srv_getInstalledProvidersForProfile:
if (param.getResult() != null)
if (isRestricted(param))
param.setResult(new ArrayList<AppWidgetProviderInfo>());
break;
}
}
}