better permission handling with customizability with ck_permissions attr

pull/1/head
Dylan McIntyre 8 years ago
parent 9df0a1b032
commit 01928b48a7
  1. 15
      camerakit/src/main/java/com/flurgle/camerakit/CameraKit.java
  2. 55
      camerakit/src/main/java/com/flurgle/camerakit/CameraView.java
  3. 6
      camerakit/src/main/res/values/attrs.xml
  4. 15
      camerakit/src/main/types/com/flurgle/camerakit/Permissions.java

@ -22,10 +22,6 @@ public class CameraKit {
public static final int FLASH_ON = 1; public static final int FLASH_ON = 1;
public static final int FLASH_AUTO = 2; public static final int FLASH_AUTO = 2;
public static final int METHOD_STANDARD = 0;
public static final int METHOD_STILL = 1;
public static final int METHOD_SPEED = 2;
public static final int FOCUS_OFF = 0; public static final int FOCUS_OFF = 0;
public static final int FOCUS_CONTINUOUS = 1; public static final int FOCUS_CONTINUOUS = 1;
public static final int FOCUS_TAP = 2; public static final int FOCUS_TAP = 2;
@ -34,6 +30,14 @@ public class CameraKit {
public static final int ZOOM_OFF = 0; public static final int ZOOM_OFF = 0;
public static final int ZOOM_PINCH = 1; public static final int ZOOM_PINCH = 1;
public static final int METHOD_STANDARD = 0;
public static final int METHOD_STILL = 1;
public static final int METHOD_SPEED = 2;
public static final int PERMISSIONS_STRICT = 0;
public static final int PERMISSIONS_LAZY = 1;
public static final int PERMISSIONS_PICTURE = 2;
} }
static class Defaults { static class Defaults {
@ -41,8 +45,9 @@ public class CameraKit {
static final int DEFAULT_FACING = Constants.FACING_BACK; static final int DEFAULT_FACING = Constants.FACING_BACK;
static final int DEFAULT_FLASH = Constants.FLASH_OFF; static final int DEFAULT_FLASH = Constants.FLASH_OFF;
static final int DEFAULT_FOCUS = Constants.FOCUS_CONTINUOUS; static final int DEFAULT_FOCUS = Constants.FOCUS_CONTINUOUS;
static final int DEFAULT_METHOD = Constants.METHOD_STANDARD;
static final int DEFAULT_ZOOM = Constants.ZOOM_OFF; static final int DEFAULT_ZOOM = Constants.ZOOM_OFF;
static final int DEFAULT_METHOD = Constants.METHOD_STANDARD;
static final int DEFAULT_PERMISSIONS = Constants.PERMISSIONS_STRICT;
static final int DEFAULT_JPEG_QUALITY = 100; static final int DEFAULT_JPEG_QUALITY = 100;
static final boolean DEFAULT_CROP_OUTPUT = false; static final boolean DEFAULT_CROP_OUTPUT = false;

@ -29,6 +29,9 @@ import static com.flurgle.camerakit.CameraKit.Constants.FLASH_AUTO;
import static com.flurgle.camerakit.CameraKit.Constants.FLASH_OFF; import static com.flurgle.camerakit.CameraKit.Constants.FLASH_OFF;
import static com.flurgle.camerakit.CameraKit.Constants.FLASH_ON; import static com.flurgle.camerakit.CameraKit.Constants.FLASH_ON;
import static com.flurgle.camerakit.CameraKit.Constants.METHOD_STANDARD; import static com.flurgle.camerakit.CameraKit.Constants.METHOD_STANDARD;
import static com.flurgle.camerakit.CameraKit.Constants.PERMISSIONS_LAZY;
import static com.flurgle.camerakit.CameraKit.Constants.PERMISSIONS_PICTURE;
import static com.flurgle.camerakit.CameraKit.Constants.PERMISSIONS_STRICT;
public class CameraView extends FrameLayout { public class CameraView extends FrameLayout {
@ -47,6 +50,9 @@ public class CameraView extends FrameLayout {
@Zoom @Zoom
private int mZoom; private int mZoom;
@Permissions
private int mPermissions;
private int mJpegQuality; private int mJpegQuality;
private boolean mCropOutput; private boolean mCropOutput;
private boolean mAdjustViewBounds; private boolean mAdjustViewBounds;
@ -76,6 +82,7 @@ public class CameraView extends FrameLayout {
mFocus = a.getInteger(R.styleable.CameraView_ckFocus, CameraKit.Defaults.DEFAULT_FOCUS); mFocus = a.getInteger(R.styleable.CameraView_ckFocus, CameraKit.Defaults.DEFAULT_FOCUS);
mMethod = a.getInteger(R.styleable.CameraView_ckMethod, CameraKit.Defaults.DEFAULT_METHOD); mMethod = a.getInteger(R.styleable.CameraView_ckMethod, CameraKit.Defaults.DEFAULT_METHOD);
mZoom = a.getInteger(R.styleable.CameraView_ckZoom, CameraKit.Defaults.DEFAULT_ZOOM); mZoom = a.getInteger(R.styleable.CameraView_ckZoom, CameraKit.Defaults.DEFAULT_ZOOM);
mPermissions = a.getInteger(R.styleable.CameraView_ckPermissions, CameraKit.Defaults.DEFAULT_PERMISSIONS);
mJpegQuality = a.getInteger(R.styleable.CameraView_ckJpegQuality, CameraKit.Defaults.DEFAULT_JPEG_QUALITY); mJpegQuality = a.getInteger(R.styleable.CameraView_ckJpegQuality, CameraKit.Defaults.DEFAULT_JPEG_QUALITY);
mCropOutput = a.getBoolean(R.styleable.CameraView_ckCropOutput, CameraKit.Defaults.DEFAULT_CROP_OUTPUT); mCropOutput = a.getBoolean(R.styleable.CameraView_ckCropOutput, CameraKit.Defaults.DEFAULT_CROP_OUTPUT);
mAdjustViewBounds = a.getBoolean(R.styleable.CameraView_android_adjustViewBounds, CameraKit.Defaults.DEFAULT_ADJUST_VIEW_BOUNDS); mAdjustViewBounds = a.getBoolean(R.styleable.CameraView_android_adjustViewBounds, CameraKit.Defaults.DEFAULT_ADJUST_VIEW_BOUNDS);
@ -139,7 +146,7 @@ public class CameraView extends FrameLayout {
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (mAdjustViewBounds) { if (mAdjustViewBounds) {
Size previewSize = getPreviewSize(); Size previewSize = getPreviewSize();
if(previewSize != null) { if (previewSize != null) {
if (getLayoutParams().width == LayoutParams.WRAP_CONTENT) { if (getLayoutParams().width == LayoutParams.WRAP_CONTENT) {
int height = MeasureSpec.getSize(heightMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec);
float ratio = (float) height / (float) previewSize.getWidth(); float ratio = (float) height / (float) previewSize.getWidth();
@ -159,7 +166,7 @@ public class CameraView extends FrameLayout {
); );
return; return;
} }
}else{ } else {
super.onMeasure(widthMeasureSpec, heightMeasureSpec); super.onMeasure(widthMeasureSpec, heightMeasureSpec);
return; return;
} }
@ -169,24 +176,46 @@ public class CameraView extends FrameLayout {
} }
public void start() { public void start() {
int permissionCheck = ContextCompat.checkSelfPermission(getContext(), Manifest.permission.CAMERA); int cameraCheck = ContextCompat.checkSelfPermission(getContext(), Manifest.permission.CAMERA);
if (permissionCheck == PackageManager.PERMISSION_GRANTED) { int audioCheck = ContextCompat.checkSelfPermission(getContext(), Manifest.permission.RECORD_AUDIO);
new Thread(new Runnable() {
@Override switch (mPermissions) {
public void run() { case PERMISSIONS_STRICT:
mCameraImpl.start(); if (cameraCheck != PackageManager.PERMISSION_GRANTED || audioCheck != PackageManager.PERMISSION_GRANTED) {
requestPermissions(true, true);
return;
}
break;
case PERMISSIONS_LAZY:
if (cameraCheck != PackageManager.PERMISSION_GRANTED) {
requestPermissions(true, true);
return;
} }
}).start(); break;
} else {
requestCameraPermission(); case PERMISSIONS_PICTURE:
if (cameraCheck != PackageManager.PERMISSION_GRANTED) {
requestPermissions(true, false);
return;
}
break;
} }
new Thread(new Runnable() {
@Override
public void run() {
mCameraImpl.start();
}
}).start();
} }
public void stop() { public void stop() {
mCameraImpl.stop(); mCameraImpl.stop();
} }
public void setFacing(@Facing final int facing) { public void setFacing(@Facing
final int facing) {
this.mFacing = facing; this.mFacing = facing;
new Thread(new Runnable() { new Thread(new Runnable() {
@ -288,7 +317,7 @@ public class CameraView extends FrameLayout {
return mCameraImpl != null ? mCameraImpl.getCaptureResolution() : null; return mCameraImpl != null ? mCameraImpl.getCaptureResolution() : null;
} }
private void requestCameraPermission() { private void requestPermissions(boolean requestCamera, boolean requestAudio) {
Activity activity = null; Activity activity = null;
Context context = getContext(); Context context = getContext();
while (context instanceof ContextWrapper) { while (context instanceof ContextWrapper) {

@ -37,6 +37,12 @@
<enum name="speed" value="0" /> <enum name="speed" value="0" />
</attr> </attr>
<attr name="ckPermissions" format="enum">
<enum name="strict" value="0" />
<enum name="lazy" value="1" />
<enum name="picture" value="2" />
</attr>
<attr name="ckJpegQuality" format="integer" /> <attr name="ckJpegQuality" format="integer" />
<attr name="ckCropOutput" format="boolean" /> <attr name="ckCropOutput" format="boolean" />

@ -0,0 +1,15 @@
package com.flurgle.camerakit;
import android.support.annotation.IntDef;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import static com.flurgle.camerakit.CameraKit.Constants.PERMISSIONS_LAZY;
import static com.flurgle.camerakit.CameraKit.Constants.PERMISSIONS_PICTURE;
import static com.flurgle.camerakit.CameraKit.Constants.PERMISSIONS_STRICT;
@Retention(RetentionPolicy.SOURCE)
@IntDef({PERMISSIONS_STRICT, PERMISSIONS_LAZY, PERMISSIONS_PICTURE})
public @interface Permissions {
}
Loading…
Cancel
Save