package biz.bokhorst.xprivacy; import java.util.ArrayList; import java.util.List; public class XMediaRecorder extends XHook { private Methods mMethod; private XMediaRecorder(Methods method, String restrictionName) { super(restrictionName, method.name(), "MediaRecorder." + method.name()); mMethod = method; } public String getClassName() { return "android.media.MediaRecorder"; } // void setOutputFile(FileDescriptor fd) // void setOutputFile(String path) // public prepare() // public native void start() // void stop() // frameworks/base/media/java/android/media/MediaRecorder.java // http://developer.android.com/reference/android/media/MediaRecorder.html private enum Methods { setOutputFile, prepare, start, stop }; public static List<XHook> getInstances() { List<XHook> listHook = new ArrayList<XHook>(); listHook.add(new XMediaRecorder(Methods.setOutputFile, PrivacyManager.cMedia)); listHook.add(new XMediaRecorder(Methods.prepare, null)); listHook.add(new XMediaRecorder(Methods.start, PrivacyManager.cMedia)); listHook.add(new XMediaRecorder(Methods.stop, null)); return listHook; } @Override protected void before(XParam param) throws Throwable { switch (mMethod) { case setOutputFile: case start: if (isRestricted(param)) param.setResult(null); break; case prepare: case stop: if (isRestricted(param, PrivacyManager.cMedia, "MediaRecorder.start")) param.setResult(null); break; } } @Override protected void after(XParam param) throws Throwable { // Do nothing } }