diff --git a/build.gradle b/build.gradle index 20994bab..4ba5c105 100644 --- a/build.gradle +++ b/build.gradle @@ -9,6 +9,7 @@ buildscript { // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files + classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:4.1.0' } } @@ -23,7 +24,7 @@ task clean(type: Delete) { } ext { - buildToolsVersion = '25.0.2' + buildToolsVersion = '25.0.1' compileSdkVersion = 25 minSdkVersion = 9 targetSdkVersion = 25 diff --git a/library/build.gradle b/library/build.gradle index 30b53bd8..3dfeaba2 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -13,6 +13,8 @@ // limitations under the License. apply plugin: 'com.android.library' +apply plugin: 'com.jfrog.artifactory' +apply plugin: 'maven-publish' android { compileSdkVersion rootProject.ext.compileSdkVersion @@ -38,6 +40,35 @@ android { } } +artifactory { + contextUrl = "${System.env.ARTIFACTORY_URL}" + publish { + repository { + repoKey = 'private-local' + username = "${System.env.ARTIFACTORY_USERNAME}" + password = "${System.env.ARTIFACTORY_PASSWORD}" + maven = true + } + defaults { + publications('aar') + } + } +} + + + +publishing { + publications { + aar(MavenPublication) { + groupId 'premise.android.cameraview' + version '0.2.9' + artifactId 'cameraview' + + artifact("$buildDir/outputs/aar/${project.getName()}-release.aar") + } + } +} + dependencies { compile "com.android.support:support-annotations:$supportLibraryVersion" compile "com.android.support:support-v4:$supportLibraryVersion" diff --git a/library/src/main/api14/com/google/android/cameraview/Camera1.java b/library/src/main/api14/com/google/android/cameraview/Camera1.java index 1830c185..920ef5d6 100644 --- a/library/src/main/api14/com/google/android/cameraview/Camera1.java +++ b/library/src/main/api14/com/google/android/cameraview/Camera1.java @@ -423,9 +423,13 @@ private boolean setFlashInternal(int flash) { mCameraParameters.setFlashMode(mode); mFlash = flash; return true; - } + } String currentMode = FLASH_MODES.get(mFlash); - if (modes == null || !modes.contains(currentMode)) { + /** + * kkawai, fix for 1st gen Nexus 7 that only has front facing + * camera with no flash + */ + if (modes != null && !modes.contains(currentMode)) { mCameraParameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); mFlash = Constants.FLASH_OFF; return true; diff --git a/library/src/main/api14/com/google/android/cameraview/TextureViewPreview.java b/library/src/main/api14/com/google/android/cameraview/TextureViewPreview.java index d2f6dc61..8d3d550c 100644 --- a/library/src/main/api14/com/google/android/cameraview/TextureViewPreview.java +++ b/library/src/main/api14/com/google/android/cameraview/TextureViewPreview.java @@ -134,6 +134,8 @@ void configureTransform() { 0.f, height, // bottom right }, 0, 4); + } else if (mDisplayOrientation == 180) { + matrix.postRotate(180, getWidth() / 2, getHeight() / 2); } mTextureView.setTransform(matrix); } diff --git a/library/src/main/java/com/google/android/cameraview/CameraView.java b/library/src/main/java/com/google/android/cameraview/CameraView.java index 04826d84..a2ef8d37 100644 --- a/library/src/main/java/com/google/android/cameraview/CameraView.java +++ b/library/src/main/java/com/google/android/cameraview/CameraView.java @@ -33,6 +33,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Set; @@ -96,13 +97,13 @@ public CameraView(Context context, AttributeSet attrs, int defStyleAttr) { } // Internal setup final PreviewImpl preview = createPreviewImpl(context); - mCallbacks = new CallbackBridge(); + mCallbacks = new CallbackBridge(this); if (Build.VERSION.SDK_INT < 21) { mImpl = new Camera1(mCallbacks, preview); } else if (Build.VERSION.SDK_INT < 23) { - mImpl = new Camera2(mCallbacks, preview, context); + mImpl = new Camera2(mCallbacks, preview, context.getApplicationContext()); } else { - mImpl = new Camera2Api23(mCallbacks, preview, context); + mImpl = new Camera2Api23(mCallbacks, preview, context.getApplicationContext()); } // Attributes TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CameraView, defStyleAttr, @@ -152,6 +153,9 @@ protected void onDetachedFromWindow() { mDisplayOrientationDetector.disable(); } super.onDetachedFromWindow(); + if (mCallbacks != null && mCallbacks.mCallbacks != null) { + mCallbacks.mCallbacks.clear(); + } } @Override @@ -407,13 +411,16 @@ public void takePicture() { mImpl.takePicture(); } - private class CallbackBridge implements CameraViewImpl.Callback { + private static class CallbackBridge implements CameraViewImpl.Callback { private final ArrayList mCallbacks = new ArrayList<>(); private boolean mRequestLayoutOnOpen; - CallbackBridge() { + private WeakReference cameraView; + + CallbackBridge(CameraView cameraView) { + this.cameraView = new WeakReference<>(cameraView); } public void add(Callback callback) { @@ -428,24 +435,26 @@ public void remove(Callback callback) { public void onCameraOpened() { if (mRequestLayoutOnOpen) { mRequestLayoutOnOpen = false; - requestLayout(); + if (cameraView.get() != null) { + cameraView.get().requestLayout(); + } } for (Callback callback : mCallbacks) { - callback.onCameraOpened(CameraView.this); + callback.onCameraOpened(cameraView.get()); } } @Override public void onCameraClosed() { for (Callback callback : mCallbacks) { - callback.onCameraClosed(CameraView.this); + callback.onCameraClosed(cameraView.get()); } } @Override public void onPictureTaken(byte[] data) { for (Callback callback : mCallbacks) { - callback.onPictureTaken(CameraView.this, data); + callback.onPictureTaken(cameraView.get(), data); } } @@ -488,7 +497,7 @@ public void writeToParcel(Parcel out, int flags) { out.writeInt(flash); } - public static final Parcelable.Creator CREATOR + public static final Creator CREATOR = ParcelableCompat.newCreator(new ParcelableCompatCreatorCallbacks() { @Override