Add tests in CameraViewTest

pull/502/head
Mattia Iavarone 6 years ago
parent 6ba45ed1d7
commit 3e6bfbdea0
  1. 55
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraViewTest.java
  2. 6
      cameraview/src/androidTest/res/layout/not_overlay.xml
  3. 9
      cameraview/src/androidTest/res/layout/overlay.xml
  4. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java
  5. 24
      cameraview/src/main/java/com/otaliastudios/cameraview/overlay/OverlayLayout.java
  6. 7
      demo/src/main/java/com/otaliastudios/cameraview/demo/CameraActivity.java

@ -8,7 +8,12 @@ import android.location.Location;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.MediumTest; import androidx.test.filters.MediumTest;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.otaliastudios.cameraview.controls.Audio; import com.otaliastudios.cameraview.controls.Audio;
@ -36,6 +41,7 @@ import com.otaliastudios.cameraview.internal.utils.Op;
import com.otaliastudios.cameraview.markers.AutoFocusMarker; import com.otaliastudios.cameraview.markers.AutoFocusMarker;
import com.otaliastudios.cameraview.markers.DefaultAutoFocusMarker; import com.otaliastudios.cameraview.markers.DefaultAutoFocusMarker;
import com.otaliastudios.cameraview.markers.MarkerLayout; import com.otaliastudios.cameraview.markers.MarkerLayout;
import com.otaliastudios.cameraview.overlay.OverlayLayout;
import com.otaliastudios.cameraview.preview.MockCameraPreview; import com.otaliastudios.cameraview.preview.MockCameraPreview;
import com.otaliastudios.cameraview.preview.CameraPreview; import com.otaliastudios.cameraview.preview.CameraPreview;
import com.otaliastudios.cameraview.size.Size; import com.otaliastudios.cameraview.size.Size;
@ -48,6 +54,7 @@ import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.invocation.InvocationOnMock; import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer; import org.mockito.stubbing.Answer;
import org.w3c.dom.Attr;
import static org.junit.Assert.*; import static org.junit.Assert.*;
@ -777,5 +784,53 @@ public class CameraViewTest extends BaseTest {
//endregion //endregion
//region Overlays
@Test
public void testOverlays_generateLayoutParams() {
cameraView.mOverlayLayout = spy(cameraView.mOverlayLayout);
LayoutInflater inflater = LayoutInflater.from(context());
View overlay = inflater.inflate(com.otaliastudios.cameraview.test.R.layout.overlay, cameraView, false);
assertTrue(overlay.getLayoutParams() instanceof OverlayLayout.LayoutParams);
verify(cameraView.mOverlayLayout, times(1)).isOverlay(any(AttributeSet.class));
verify(cameraView.mOverlayLayout, times(1)).generateLayoutParams(any(AttributeSet.class));
}
@Test
public void testOverlays_dontGenerateLayoutParams() {
cameraView.mOverlayLayout = spy(cameraView.mOverlayLayout);
LayoutInflater inflater = LayoutInflater.from(context());
View overlay = inflater.inflate(com.otaliastudios.cameraview.test.R.layout.not_overlay, cameraView, false);
assertFalse(overlay.getLayoutParams() instanceof OverlayLayout.LayoutParams);
verify(cameraView.mOverlayLayout, times(1)).isOverlay(any(AttributeSet.class));
verify(cameraView.mOverlayLayout, never()).generateLayoutParams(any(AttributeSet.class));
}
@Test
public void testOverlays_addOverlayView() {
cameraView.mOverlayLayout = spy(cameraView.mOverlayLayout);
View overlay = new View(context());
OverlayLayout.LayoutParams params = new OverlayLayout.LayoutParams(10, 10, Gravity.CENTER);
int count = cameraView.getChildCount();
cameraView.addView(overlay, 0, params);
assertEquals(count, cameraView.getChildCount()); // Not added to CameraView
verify(cameraView.mOverlayLayout, times(1)).isOverlay(params);
verify(cameraView.mOverlayLayout, times(1)).addView(overlay, params);
}
@Test
public void testOverlays_dontAddOverlayView() {
cameraView.mOverlayLayout = spy(cameraView.mOverlayLayout);
View overlay = new View(context());
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(10, 10);
int count = cameraView.getChildCount();
cameraView.addView(overlay, 0, params);
assertEquals(count + 1, cameraView.getChildCount());
verify(cameraView.mOverlayLayout, times(1)).isOverlay(params);
verify(cameraView.mOverlayLayout, never()).addView(overlay, params);
}
//endregion
// TODO: test permissions // TODO: test permissions
} }

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:layout_isOverlay="false"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:layout_isOverlay="true"
app:layout_drawOnPreview="true"
app:layout_drawOnPictureSnapshot="true"
app:layout_drawOnVideoSnapshot="true"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

@ -127,14 +127,14 @@ public class CameraView extends FrameLayout implements LifecycleObserver {
@VisibleForTesting ScrollGestureFinder mScrollGestureFinder; @VisibleForTesting ScrollGestureFinder mScrollGestureFinder;
// Views // Views
GridLinesLayout mGridLinesLayout; @VisibleForTesting GridLinesLayout mGridLinesLayout;
MarkerLayout mMarkerLayout; @VisibleForTesting MarkerLayout mMarkerLayout;
private boolean mKeepScreenOn; private boolean mKeepScreenOn;
@SuppressWarnings({"FieldCanBeLocal", "unused"}) @SuppressWarnings({"FieldCanBeLocal", "unused"})
private boolean mExperimental; private boolean mExperimental;
// Overlays // Overlays
private OverlayLayout mOverlayLayout; @VisibleForTesting OverlayLayout mOverlayLayout;
// Threading // Threading
private Handler mUiHandler; private Handler mUiHandler;

@ -59,7 +59,7 @@ public class OverlayLayout extends FrameLayout implements Overlay {
* @return true if overlay * @return true if overlay
*/ */
public boolean isOverlay(@NonNull ViewGroup.LayoutParams params) { public boolean isOverlay(@NonNull ViewGroup.LayoutParams params) {
return params instanceof LayoutParams; return params instanceof LayoutParams && (((LayoutParams) params).isOverlay);
} }
/** /**
@ -163,18 +163,24 @@ public class OverlayLayout extends FrameLayout implements Overlay {
@SuppressWarnings("unused") @SuppressWarnings("unused")
private boolean isOverlay; private boolean isOverlay;
public boolean drawOnPreview; public boolean drawOnPreview = false;
public boolean drawOnPictureSnapshot; public boolean drawOnPictureSnapshot = false;
public boolean drawOnVideoSnapshot; public boolean drawOnVideoSnapshot = false;
public LayoutParams(@NonNull Context context, @Nullable AttributeSet attrs) { public LayoutParams(int width, int height, int gravity) {
super(width, height, gravity);
isOverlay = true;
}
public LayoutParams(@NonNull Context context, @NonNull AttributeSet attrs) {
super(context, attrs); super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CameraView_Layout); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CameraView_Layout);
try { try {
this.isOverlay = a.getBoolean(R.styleable.CameraView_Layout_layout_isOverlay, false); // If someone is calling this constructor, they will likely want isOverlay to be true!
this.drawOnPreview = a.getBoolean(R.styleable.CameraView_Layout_layout_drawOnPreview, false); isOverlay = a.getBoolean(R.styleable.CameraView_Layout_layout_isOverlay, true);
this.drawOnPictureSnapshot = a.getBoolean(R.styleable.CameraView_Layout_layout_drawOnPictureSnapshot, false); drawOnPreview = a.getBoolean(R.styleable.CameraView_Layout_layout_drawOnPreview, false);
this.drawOnVideoSnapshot = a.getBoolean(R.styleable.CameraView_Layout_layout_drawOnVideoSnapshot, false); drawOnPictureSnapshot = a.getBoolean(R.styleable.CameraView_Layout_layout_drawOnPictureSnapshot, false);
drawOnVideoSnapshot = a.getBoolean(R.styleable.CameraView_Layout_layout_drawOnVideoSnapshot, false);
} finally { } finally {
a.recycle(); a.recycle();
} }

@ -84,7 +84,8 @@ public class CameraActivity extends AppCompatActivity implements View.OnClickLis
new Option.Pinch(), new Option.HorizontalScroll(), new Option.VerticalScroll(), new Option.Pinch(), new Option.HorizontalScroll(), new Option.VerticalScroll(),
new Option.Tap(), new Option.LongTap(), new Option.Tap(), new Option.LongTap(),
// Watermarks // Watermarks
new Option.OverlayInPreview(watermark), new Option.OverlayInPictureSnapshot(watermark), new Option.OverlayInPreview(watermark),
new Option.OverlayInPictureSnapshot(watermark),
new Option.OverlayInVideoSnapshot(watermark), new Option.OverlayInVideoSnapshot(watermark),
// Other // Other
new Option.Grid(), new Option.GridColor(), new Option.UseDeviceOrientation() new Option.Grid(), new Option.GridColor(), new Option.UseDeviceOrientation()
@ -122,14 +123,12 @@ public class CameraActivity extends AppCompatActivity implements View.OnClickLis
animator.setRepeatCount(ValueAnimator.INFINITE); animator.setRepeatCount(ValueAnimator.INFINITE);
animator.setRepeatMode(ValueAnimator.REVERSE); animator.setRepeatMode(ValueAnimator.REVERSE);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
float rotation = 0;
@Override @Override
public void onAnimationUpdate(ValueAnimator animation) { public void onAnimationUpdate(ValueAnimator animation) {
float scale = (float) animation.getAnimatedValue(); float scale = (float) animation.getAnimatedValue();
rotation += 2;
watermark.setScaleX(scale); watermark.setScaleX(scale);
watermark.setScaleY(scale); watermark.setScaleY(scale);
watermark.setRotation(rotation); watermark.setRotation(watermark.getRotation() + 2);
} }
}); });
animator.start(); animator.start();

Loading…
Cancel
Save