Skip to content
This repository has been archived by the owner on Sep 6, 2019. It is now read-only.

Commit

Permalink
Dynamically hook clipboard manager
Browse files Browse the repository at this point in the history
Refs #857
  • Loading branch information
M66B committed Dec 2, 2013
1 parent 770af59 commit ae43d15
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 8 deletions.
11 changes: 7 additions & 4 deletions src/biz/bokhorst/xprivacy/XClipboardManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,16 @@

public class XClipboardManager extends XHook {
private Methods mMethod;
private String mClassName;

private XClipboardManager(Methods method, String restrictionName) {
private XClipboardManager(Methods method, String restrictionName, String className) {
super(restrictionName, method.name(), null);
mMethod = method;
mClassName = className;
}

public String getClassName() {
return "android.content.ClipboardManager";
return mClassName;
}

// @formatter:off
Expand All @@ -42,10 +44,11 @@ private enum Methods {
addPrimaryClipChangedListener, getPrimaryClip, getPrimaryClipDescription, getText, hasPrimaryClip, hasText, removePrimaryClipChangedListener
};

public static List<XHook> getInstances() {
public static List<XHook> getInstances(Object instance) {
String className = instance.getClass().getName();
List<XHook> listHook = new ArrayList<XHook>();
for (Methods clip : Methods.values())
listHook.add(new XClipboardManager(clip, PrivacyManager.cClipboard));
listHook.add(new XClipboardManager(clip, PrivacyManager.cClipboard, className));
return listHook;
}

Expand Down
9 changes: 8 additions & 1 deletion src/biz/bokhorst/xprivacy/XContextWrapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

public class XContextWrapper extends XHook {
private Methods mMethod;
private static boolean mClipboardManagerHooked = false;
private static boolean mWindowManagerHooked = false;

private XContextWrapper(Methods method, String restrictionName) {
Expand Down Expand Up @@ -57,7 +58,13 @@ protected void after(MethodHookParam param) throws Throwable {
Object result = param.getResultOrThrowable();
if (name != null && result != null) {
Util.log(this, Log.INFO, "getSystemService " + name + "=" + result.getClass().getName());
if (name.equals(Context.WINDOW_SERVICE)) {
if (name.equals(Context.CLIPBOARD_SERVICE)) {
// Clipboard service
if (!mClipboardManagerHooked) {
XPrivacy.hookAll(XClipboardManager.getInstances(result));
mClipboardManagerHooked = true;
}
} else if (name.equals(Context.WINDOW_SERVICE)) {
// Windows service
if (!mWindowManagerHooked) {
XPrivacy.hookAll(XWindowManager.getInstances(result));
Expand Down
3 changes: 0 additions & 3 deletions src/biz/bokhorst/xprivacy/XPrivacy.java
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,6 @@ public void initZygote(StartupParam startupParam) throws Throwable {
// Camera
hookAll(XCamera.getInstances());

// Clipboard manager
hookAll(XClipboardManager.getInstances());

// Connectivity manager
hookAll(XConnectivityManager.getInstances());

Expand Down

0 comments on commit ae43d15

Please sign in to comment.