package biz.bokhorst.xprivacy; import java.util.ArrayList; import java.util.List; public class XCamera extends XHook { private Methods mMethod; private XCamera(Methods method, String restrictionName) { super(restrictionName, method.name(), "Camera." + method.name()); mMethod = method; } public String getClassName() { return "android.hardware.Camera"; } // @formatter:off // public void setPreviewCallback(Camera.PreviewCallback cb) // public void setPreviewCallbackWithBuffer(Camera.PreviewCallback cb) // public void setPreviewDisplay(SurfaceHolder holder) // public void setPreviewTexture(SurfaceTexture surfaceTexture) // public final void setOneShotPreviewCallback (Camera.PreviewCallback cb) // public native final void startPreview() // public void stopPreview() // public final void takePicture(ShutterCallback shutter, PictureCallback raw, PictureCallback jpeg) // public final void takePicture(ShutterCallback shutter, PictureCallback raw, PictureCallback postview, PictureCallback jpeg) // frameworks/base/core/java/android/hardware/Camera.java // http://developer.android.com/reference/android/hardware/Camera.html // @formatter:on private enum Methods { setPreviewCallback, setPreviewCallbackWithBuffer, setPreviewDisplay, setPreviewTexture, setOneShotPreviewCallback, startPreview, stopPreview, takePicture }; public static List<XHook> getInstances() { List<XHook> listHook = new ArrayList<XHook>(); for (Methods cam : Methods.values()) listHook.add(new XCamera(cam, cam == Methods.stopPreview ? null : PrivacyManager.cMedia)); return listHook; } @Override protected void before(XParam param) throws Throwable { switch (mMethod) { case setPreviewCallback: case setPreviewCallbackWithBuffer: case setPreviewDisplay: case setPreviewTexture: case setOneShotPreviewCallback: case startPreview: case takePicture: if (isRestricted(param)) param.setResult(null); break; case stopPreview: if (isRestricted(param, PrivacyManager.cMedia, "Camera.startPreview")) param.setResult(null); break; } } @Override protected void after(XParam param) throws Throwable { // Do nothing } }