Merge "Refactor/Clean up/Fix lint errors and warnings in view artifact" into androidx-master-dev
diff --git a/camera/camera-view/src/androidTest/java/androidx/camera/view/PreviewTransformationDeviceTest.kt b/camera/camera-view/src/androidTest/java/androidx/camera/view/PreviewTransformationDeviceTest.kt
index cf225ff..1af8754 100644
--- a/camera/camera-view/src/androidTest/java/androidx/camera/view/PreviewTransformationDeviceTest.kt
+++ b/camera/camera-view/src/androidTest/java/androidx/camera/view/PreviewTransformationDeviceTest.kt
@@ -36,9 +36,9 @@
*/
@SmallTest
@RunWith(AndroidJUnit4::class)
-class PreviewTransformationDeviceTest {
+public class PreviewTransformationDeviceTest {
- companion object {
+ public companion object {
// Size of the PreviewView. Aspect ratio 2:1.
private val PREVIEW_VIEW_SIZE = Size(400, 200)
private val PIVOTED_PREVIEW_VIEW_SIZE =
@@ -71,13 +71,13 @@
private lateinit var mView: View
@Before
- fun setUp() {
+ public fun setUp() {
mPreviewTransform = PreviewTransformation()
mView = View(ApplicationProvider.getApplicationContext())
}
@Test
- fun cropRectWidthOffByOnePixel_match() {
+ public fun cropRectWidthOffByOnePixel_match() {
assertThat(
isCropRectAspectRatioMatchPreviewView(
Rect(
@@ -91,7 +91,7 @@
}
@Test
- fun cropRectWidthOffByTwoPixels_mismatch() {
+ public fun cropRectWidthOffByTwoPixels_mismatch() {
assertThat(
isCropRectAspectRatioMatchPreviewView(
Rect(
@@ -115,7 +115,7 @@
}
@Test
- fun correctTextureViewWith0Rotation() {
+ public fun correctTextureViewWith0Rotation() {
assertThat(getTextureViewCorrection(Surface.ROTATION_0)).isEqualTo(
floatArrayOf(
0f,
@@ -131,7 +131,7 @@
}
@Test
- fun correctTextureViewWith90Rotation() {
+ public fun correctTextureViewWith90Rotation() {
assertThat(getTextureViewCorrection(Surface.ROTATION_90)).isEqualTo(
floatArrayOf(
0f,
@@ -147,7 +147,7 @@
}
@Test
- fun correctTextureViewWith180Rotation() {
+ public fun correctTextureViewWith180Rotation() {
assertThat(getTextureViewCorrection(Surface.ROTATION_180)).isEqualTo(
floatArrayOf(
SURFACE_SIZE.width.toFloat(),
@@ -163,7 +163,7 @@
}
@Test
- fun correctTextureViewWith270Rotation() {
+ public fun correctTextureViewWith270Rotation() {
assertThat(getTextureViewCorrection(Surface.ROTATION_270)).isEqualTo(
floatArrayOf(
SURFACE_SIZE.width.toFloat(),
@@ -196,7 +196,7 @@
}
@Test
- fun ratioMatch_surfaceIsScaledToFillPreviewView() {
+ public fun ratioMatch_surfaceIsScaledToFillPreviewView() {
// Arrange.
mPreviewTransform.setTransformationInfo(
SurfaceRequest.TransformationInfo.of(
@@ -225,7 +225,7 @@
}
@Test
- fun mismatchedCropRect_fitStart() {
+ public fun mismatchedCropRect_fitStart() {
assertForMismatchedCropRect(
PreviewView.ScaleType.FIT_START,
LayoutDirection.LTR,
@@ -237,7 +237,7 @@
}
@Test
- fun mismatchedCropRect_fitCenter() {
+ public fun mismatchedCropRect_fitCenter() {
assertForMismatchedCropRect(
PreviewView.ScaleType.FIT_CENTER,
LayoutDirection.LTR,
@@ -249,7 +249,7 @@
}
@Test
- fun mismatchedCropRect_fitEnd() {
+ public fun mismatchedCropRect_fitEnd() {
assertForMismatchedCropRect(
PreviewView.ScaleType.FIT_END,
LayoutDirection.LTR,
@@ -261,7 +261,7 @@
}
@Test
- fun mismatchedCropRectFrontCamera_fitStart() {
+ public fun mismatchedCropRectFrontCamera_fitStart() {
assertForMismatchedCropRect(
PreviewView.ScaleType.FIT_START,
LayoutDirection.LTR,
@@ -273,7 +273,7 @@
}
@Test
- fun mismatchedCropRect_fillStart() {
+ public fun mismatchedCropRect_fillStart() {
assertForMismatchedCropRect(
PreviewView.ScaleType.FILL_START,
LayoutDirection.LTR,
@@ -285,7 +285,7 @@
}
@Test
- fun mismatchedCropRect_fillCenter() {
+ public fun mismatchedCropRect_fillCenter() {
assertForMismatchedCropRect(
PreviewView.ScaleType.FILL_CENTER,
LayoutDirection.LTR,
@@ -297,7 +297,7 @@
}
@Test
- fun mismatchedCropRect_fillEnd() {
+ public fun mismatchedCropRect_fillEnd() {
assertForMismatchedCropRect(
PreviewView.ScaleType.FILL_END,
LayoutDirection.LTR,
@@ -309,7 +309,7 @@
}
@Test
- fun mismatchedCropRect_fitStartWithRtl_actsLikeFitEnd() {
+ public fun mismatchedCropRect_fitStartWithRtl_actsLikeFitEnd() {
assertForMismatchedCropRect(
PreviewView.ScaleType.FIT_START,
LayoutDirection.RTL,
@@ -347,7 +347,7 @@
}
@Test
- fun frontCamera0_transformationIsMirrored() {
+ public fun frontCamera0_transformationIsMirrored() {
testOffCenterCropRectMirroring(FRONT_CAMERA, CROP_RECT_0, PREVIEW_VIEW_SIZE, 0)
// Assert:
@@ -358,7 +358,7 @@
}
@Test
- fun backCamera0_transformationIsNotMirrored() {
+ public fun backCamera0_transformationIsNotMirrored() {
testOffCenterCropRectMirroring(BACK_CAMERA, CROP_RECT_0, PREVIEW_VIEW_SIZE, 0)
// Assert:
@@ -369,7 +369,7 @@
}
@Test
- fun frontCameraRotated90_transformationIsMirrored() {
+ public fun frontCameraRotated90_transformationIsMirrored() {
testOffCenterCropRectMirroring(
FRONT_CAMERA, CROP_RECT_90, PIVOTED_PREVIEW_VIEW_SIZE, 90
)
@@ -382,7 +382,7 @@
}
@Test
- fun backCameraRotated90_transformationIsNotMirrored() {
+ public fun backCameraRotated90_transformationIsNotMirrored() {
testOffCenterCropRectMirroring(BACK_CAMERA, CROP_RECT_90, PIVOTED_PREVIEW_VIEW_SIZE, 90)
// Assert:
diff --git a/camera/camera-view/src/androidTest/java/androidx/camera/view/PreviewViewBitmapTest.java b/camera/camera-view/src/androidTest/java/androidx/camera/view/PreviewViewBitmapTest.java
index b8a1f6e..1d086ff 100644
--- a/camera/camera-view/src/androidTest/java/androidx/camera/view/PreviewViewBitmapTest.java
+++ b/camera/camera-view/src/androidTest/java/androidx/camera/view/PreviewViewBitmapTest.java
@@ -35,10 +35,10 @@
import androidx.camera.view.PreviewView.ImplementationMode;
import androidx.lifecycle.Observer;
import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.rules.ActivityScenarioRule;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.LargeTest;
import androidx.test.platform.app.InstrumentationRegistry;
-import androidx.test.rule.ActivityTestRule;
import org.junit.After;
import org.junit.Assume;
@@ -59,8 +59,9 @@
public class PreviewViewBitmapTest {
@Rule
- public final ActivityTestRule<FakeActivity> mActivityRule =
- new ActivityTestRule<>(FakeActivity.class);
+ public final ActivityScenarioRule<FakeActivity> mActivityRule = new ActivityScenarioRule<>(
+ FakeActivity.class);
+
@Rule
public final TestRule mUseCamera = CameraUtil.grantCameraPermissionAndPreTest();
@@ -87,6 +88,7 @@
if (mCameraProvider != null) {
runOnMainThread(() -> mCameraProvider.unbindAll());
mCameraProvider.shutdown().get();
+ mCameraProvider = null;
}
}
@@ -109,7 +111,6 @@
final FakeLifecycleOwner lifecycleOwner = new FakeLifecycleOwner();
lifecycleOwner.startAndResume();
-
runOnMainThread(() -> {
// Act.
preview.setSurfaceProvider(previewView.getSurfaceProvider());
@@ -277,7 +278,8 @@
PreviewView previewView = new PreviewView(ApplicationProvider.getApplicationContext());
previewView.setImplementationMode(mode);
previewView.setScaleType(scaleType);
- mActivityRule.getActivity().setContentView(previewView);
+ mActivityRule.getScenario().onActivity(
+ activity -> activity.setContentView(previewView));
previewViewAtomicReference.set(previewView);
});
return previewViewAtomicReference.get();
diff --git a/camera/camera-view/src/androidTest/java/androidx/camera/view/PreviewViewMeteringPointFactoryDeviceTest.kt b/camera/camera-view/src/androidTest/java/androidx/camera/view/PreviewViewMeteringPointFactoryDeviceTest.kt
index 0e9e196..ef4277f 100644
--- a/camera/camera-view/src/androidTest/java/androidx/camera/view/PreviewViewMeteringPointFactoryDeviceTest.kt
+++ b/camera/camera-view/src/androidTest/java/androidx/camera/view/PreviewViewMeteringPointFactoryDeviceTest.kt
@@ -33,7 +33,7 @@
*/
@SmallTest
@RunWith(Parameterized::class)
-class PreviewViewMeteringPointFactoryDeviceTest(
+public class PreviewViewMeteringPointFactoryDeviceTest(
private val cropRect: Rect,
private val rotationDegrees: Int,
private val surfaceSize: Size,
@@ -45,7 +45,7 @@
private val expectedMeteringPoint: PointF
) {
- companion object {
+ public companion object {
private const val FRONT_CAMERA = true
private const val BACK_CAMERA = false
@@ -73,7 +73,7 @@
@JvmStatic
@Parameterized.Parameters
- fun data(): Collection<Array<Any>> {
+ public fun data(): Collection<Array<Any>> {
return listOf(
// Device in sensor orientation without crop rect.
@@ -195,7 +195,7 @@
private val instrumentation = InstrumentationRegistry.getInstrumentation()
@Test
- fun verifyMeteringPoint() {
+ public fun verifyMeteringPoint() {
// Arrange.
val previewTransformation = PreviewTransformation()
previewTransformation.scaleType = scaleType
diff --git a/camera/camera-view/src/androidTest/java/androidx/camera/view/PreviewViewStreamStateTest.kt b/camera/camera-view/src/androidTest/java/androidx/camera/view/PreviewViewStreamStateTest.kt
index cccc54e..62990f0 100644
--- a/camera/camera-view/src/androidTest/java/androidx/camera/view/PreviewViewStreamStateTest.kt
+++ b/camera/camera-view/src/androidTest/java/androidx/camera/view/PreviewViewStreamStateTest.kt
@@ -16,9 +16,7 @@
package androidx.camera.view
-import android.app.Activity
import android.content.Context
-import android.view.View
import androidx.camera.camera2.Camera2Config
import androidx.camera.core.CameraSelector
import androidx.camera.core.CameraX
@@ -32,6 +30,7 @@
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.Observer
import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.filters.LargeTest
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
@@ -49,18 +48,19 @@
@LargeTest
@RunWith(Parameterized::class)
-class PreviewViewStreamStateTest(private val implMode: PreviewView.ImplementationMode) {
- companion object {
+public class PreviewViewStreamStateTest(private val implMode: PreviewView.ImplementationMode) {
+
+ public companion object {
@JvmStatic
@Parameterized.Parameters(name = "{0}")
- fun data() = arrayOf(
+ public fun data(): Array<PreviewView.ImplementationMode> = arrayOf(
PreviewView.ImplementationMode.COMPATIBLE,
PreviewView.ImplementationMode.PERFORMANCE
)
@BeforeClass
@JvmStatic
- fun classSetUp() {
+ public fun classSetUp() {
CoreAppTestUtil.prepareDeviceUI(InstrumentationRegistry.getInstrumentation())
}
}
@@ -72,49 +72,37 @@
private lateinit var mCameraProvider: ProcessCameraProvider
@get:Rule
- val mUseCamera: TestRule = CameraUtil.grantCameraPermissionAndPreTest()
+ public val mUseCamera: TestRule = CameraUtil.grantCameraPermissionAndPreTest()
- @Suppress("DEPRECATION")
@get:Rule
- var mActivityRule = androidx.test.rule.ActivityTestRule(
- FakeActivity::class.java
- )
-
- @Throws(Throwable::class)
- private fun setContentView(view: View) {
- val activity: Activity = mActivityRule.activity
- mActivityRule.runOnUiThread { activity.setContentView(view) }
- }
+ public val mActivityRule: ActivityScenarioRule<FakeActivity> =
+ ActivityScenarioRule(FakeActivity::class.java)
@Before
- fun setUp() {
+ public fun setUp() {
Assume.assumeTrue(CameraUtil.hasCameraWithLensFacing(CameraSelector.LENS_FACING_BACK))
CoreAppTestUtil.assumeCompatibleDevice()
- mIsSetup = true
-
val context = ApplicationProvider.getApplicationContext<Context>()
val config = Camera2Config.defaultConfig()
CameraX.initialize(context, config)
- mLifecycle = FakeLifecycleOwner()
- mInstrumentation.runOnMainSync {
- mPreviewView = PreviewView(context)
- }
- setContentView(mPreviewView)
- mInstrumentation.runOnMainSync {
- mPreviewView.implementationMode = implMode
- }
+ mLifecycle = FakeLifecycleOwner()
+ mActivityRule.scenario.onActivity { activity ->
+ mPreviewView = PreviewView(context)
+ mPreviewView.implementationMode = implMode
+ activity.setContentView(mPreviewView)
+ }
mCameraProvider = ProcessCameraProvider.getInstance(context).get()
+ mIsSetup = true
}
@After
- fun tearDown() {
+ public fun tearDown() {
if (mIsSetup) {
- mInstrumentation.runOnMainSync {
- mCameraProvider.unbindAll()
- }
+ mInstrumentation.runOnMainSync { mCameraProvider.unbindAll() }
mCameraProvider.shutdown().get()
+ mIsSetup = false
}
}
@@ -134,7 +122,7 @@
}
@Test
- fun streamState_IDLE_TO_STREAMING_startPreview() {
+ public fun streamState_IDLE_TO_STREAMING_startPreview() {
assertStreamState(PreviewView.StreamState.IDLE)
startPreview(mLifecycle, mPreviewView, CameraSelector.DEFAULT_BACK_CAMERA)
@@ -144,7 +132,7 @@
}
@Test
- fun streamState_STREAMING_TO_IDLE_TO_STREAMING_lifecycleStopAndStart() {
+ public fun streamState_STREAMING_TO_IDLE_TO_STREAMING_lifecycleStopAndStart() {
startPreview(mLifecycle, mPreviewView, CameraSelector.DEFAULT_BACK_CAMERA)
mLifecycle.startAndResume()
assertStreamState(PreviewView.StreamState.STREAMING)
@@ -157,7 +145,7 @@
}
@Test
- fun streamState_STREAMING_TO_IDLE_unbindAll() {
+ public fun streamState_STREAMING_TO_IDLE_unbindAll() {
startPreview(mLifecycle, mPreviewView, CameraSelector.DEFAULT_BACK_CAMERA)
mLifecycle.startAndResume()
assertStreamState(PreviewView.StreamState.STREAMING)
@@ -167,7 +155,7 @@
}
@Test
- fun streamState_STREAMING_TO_IDLE_unbindPreviewOnly() {
+ public fun streamState_STREAMING_TO_IDLE_unbindPreviewOnly() {
val preview = startPreview(mLifecycle, mPreviewView, CameraSelector.DEFAULT_BACK_CAMERA)
mLifecycle.startAndResume()
@@ -178,7 +166,7 @@
}
@Test
- fun streamState_STREAMING_TO_IDLE_TO_STREAMING_switchCamera() {
+ public fun streamState_STREAMING_TO_IDLE_TO_STREAMING_switchCamera() {
Assume.assumeTrue(CameraUtil.hasCameraWithLensFacing(CameraSelector.LENS_FACING_FRONT))
startPreview(mLifecycle, mPreviewView, CameraSelector.DEFAULT_BACK_CAMERA)
diff --git a/camera/camera-view/src/androidTest/java/androidx/camera/view/PreviewViewTest.java b/camera/camera-view/src/androidTest/java/androidx/camera/view/PreviewViewTest.java
index 8e8b65a..4c81f04 100644
--- a/camera/camera-view/src/androidTest/java/androidx/camera/view/PreviewViewTest.java
+++ b/camera/camera-view/src/androidTest/java/androidx/camera/view/PreviewViewTest.java
@@ -66,11 +66,11 @@
import androidx.camera.view.test.R;
import androidx.core.content.ContextCompat;
import androidx.test.annotation.UiThreadTest;
+import androidx.test.core.app.ActivityScenario;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.LargeTest;
import androidx.test.platform.app.InstrumentationRegistry;
-import androidx.test.rule.ActivityTestRule;
import androidx.test.uiautomator.UiDevice;
import androidx.test.uiautomator.UiObjectNotFoundException;
import androidx.test.uiautomator.UiSelector;
@@ -107,37 +107,16 @@
public TestRule mUseCamera = CameraUtil.grantCameraPermissionAndPreTest();
private final Instrumentation mInstrumentation = InstrumentationRegistry.getInstrumentation();
- @Rule
- public final ActivityTestRule<FakeActivity> mActivityRule = new ActivityTestRule<>(
- FakeActivity.class, false, false);
+ private ActivityScenario<FakeActivity> mActivityScenario;
private final Context mContext = ApplicationProvider.getApplicationContext();
- private List<SurfaceRequest> mSurfaceRequestList = new ArrayList<>();
+ private final List<SurfaceRequest> mSurfaceRequestList = new ArrayList<>();
private PreviewView mPreviewView;
private MeteringPointFactory mMeteringPointFactory;
- private SurfaceRequest createSurfaceRequest(CameraInfo cameraInfo,
- boolean isRGBA8888Required) {
- return createSurfaceRequest(DEFAULT_SURFACE_SIZE, cameraInfo, isRGBA8888Required);
- }
-
- private SurfaceRequest createSurfaceRequest(CameraInfo cameraInfo) {
- return createSurfaceRequest(DEFAULT_SURFACE_SIZE, cameraInfo, false);
- }
-
- private SurfaceRequest createSurfaceRequest(Size size, CameraInfo cameraInfo,
- boolean isRGBA8888Required) {
- FakeCamera fakeCamera = spy(new FakeCamera());
- when(fakeCamera.getCameraInfo()).thenReturn(cameraInfo);
-
- SurfaceRequest surfaceRequest = new SurfaceRequest(size, fakeCamera, isRGBA8888Required);
- mSurfaceRequestList.add(surfaceRequest);
- return surfaceRequest;
- }
-
@Before
public void setUp() throws CoreAppTestUtil.ForegroundOccupiedError {
CoreAppTestUtil.prepareDeviceUI(mInstrumentation);
- mActivityRule.launchActivity(null);
+ mActivityScenario = ActivityScenario.launch(FakeActivity.class);
}
@After
@@ -149,20 +128,6 @@
}
}
- private CameraInfo createCameraInfo(String implementationType) {
- FakeCameraInfoInternal cameraInfoInternal = new FakeCameraInfoInternal();
- cameraInfoInternal.setImplementationType(implementationType);
- return cameraInfoInternal;
- }
-
- private CameraInfo createCameraInfo(int rotationDegrees, String implementationType,
- @CameraSelector.LensFacing int lensFacing) {
- FakeCameraInfoInternal cameraInfoInternal = new FakeCameraInfoInternal(rotationDegrees,
- lensFacing);
- cameraInfoInternal.setImplementationType(implementationType);
- return cameraInfoInternal;
- }
-
@Test
public void previewViewPinched_pinchToZoomInvokedOnController()
throws InterruptedException, UiObjectNotFoundException {
@@ -173,7 +138,7 @@
// Arrange.
CountDownLatch countDownLatch = new CountDownLatch(1);
Semaphore semaphore = new Semaphore(0);
- CameraController fakeController = new CameraController(mInstrumentation.getContext()) {
+ CameraController fakeController = new CameraController(mContext) {
@Override
void onPinchToZoom(float pinchToZoomScale) {
semaphore.release();
@@ -209,7 +174,7 @@
// Arrange.
CountDownLatch countDownLatch = new CountDownLatch(1);
Semaphore semaphore = new Semaphore(0);
- CameraController fakeController = new CameraController(mInstrumentation.getContext()) {
+ CameraController fakeController = new CameraController(mContext) {
@Override
void onTapToFocus(MeteringPointFactory meteringPointFactory, float x, float y) {
semaphore.release();
@@ -368,20 +333,16 @@
@Test
public void correctSurfacePixelFormat_whenRGBA8888IsRequired() throws Throwable {
final CameraInfo cameraInfo = createCameraInfo(CameraInfo.IMPLEMENTATION_TYPE_CAMERA2);
- SurfaceRequest surfaceRequest = createSurfaceRequest(cameraInfo, true);
+ SurfaceRequest surfaceRequest = createRgb8888SurfaceRequest(cameraInfo);
ListenableFuture<Surface> future = surfaceRequest.getDeferrableSurface().getSurface();
- mActivityRule.runOnUiThread(new Runnable() {
- @Override
- public void run() {
+ mActivityScenario.onActivity(activity -> {
+ final PreviewView previewView = new PreviewView(mContext);
+ setContentView(previewView);
- final PreviewView previewView = new PreviewView(mContext);
- setContentView(previewView);
-
- previewView.setImplementationMode(PERFORMANCE);
- Preview.SurfaceProvider surfaceProvider = previewView.getSurfaceProvider();
- surfaceProvider.onSurfaceRequested(surfaceRequest);
- }
+ previewView.setImplementationMode(PERFORMANCE);
+ Preview.SurfaceProvider surfaceProvider = previewView.getSurfaceProvider();
+ surfaceProvider.onSurfaceRequested(surfaceRequest);
});
final Surface[] surface = new Surface[1];
CountDownLatch countDownLatch = new CountDownLatch(1);
@@ -657,12 +618,12 @@
}
@Test
- public void redrawsPreview_whenLayoutResized() throws Throwable {
+ public void redrawsPreview_whenLayoutResized() {
final AtomicReference<PreviewView> previewView = new AtomicReference<>();
final AtomicReference<FrameLayout> container = new AtomicReference<>();
final PreviewViewImplementation implementation = mock(TestPreviewViewImplementation.class);
- mActivityRule.runOnUiThread(() -> {
+ mActivityScenario.onActivity(activity -> {
previewView.set(new PreviewView(mContext));
previewView.get().mImplementation = implementation;
@@ -681,12 +642,12 @@
}
@Test
- public void doesNotRedrawPreview_whenDetachedFromWindow() throws Throwable {
+ public void doesNotRedrawPreview_whenDetachedFromWindow() {
final AtomicReference<PreviewView> previewView = new AtomicReference<>();
final AtomicReference<FrameLayout> container = new AtomicReference<>();
final PreviewViewImplementation implementation = mock(TestPreviewViewImplementation.class);
- mActivityRule.runOnUiThread(() -> {
+ mActivityScenario.onActivity(activity -> {
previewView.set(new PreviewView(mContext));
previewView.get().mImplementation = implementation;
@@ -707,12 +668,12 @@
}
@Test
- public void redrawsPreview_whenReattachedToWindow() throws Throwable {
+ public void redrawsPreview_whenReattachedToWindow() {
final AtomicReference<PreviewView> previewView = new AtomicReference<>();
final AtomicReference<FrameLayout> container = new AtomicReference<>();
final PreviewViewImplementation implementation = mock(TestPreviewViewImplementation.class);
- mActivityRule.runOnUiThread(() -> {
+ mActivityScenario.onActivity(activity -> {
previewView.set(new PreviewView(mContext));
previewView.get().mImplementation = implementation;
@@ -793,7 +754,39 @@
}
private void setContentView(View view) {
- mActivityRule.getActivity().setContentView(view);
+ mActivityScenario.onActivity(activity -> activity.setContentView(view));
+ }
+
+ private SurfaceRequest createRgb8888SurfaceRequest(CameraInfo cameraInfo) {
+ return createSurfaceRequest(cameraInfo, true);
+ }
+
+ private SurfaceRequest createSurfaceRequest(CameraInfo cameraInfo) {
+ return createSurfaceRequest(cameraInfo, false);
+ }
+
+ private SurfaceRequest createSurfaceRequest(CameraInfo cameraInfo, boolean isRGBA8888Required) {
+ final FakeCamera fakeCamera = spy(new FakeCamera());
+ when(fakeCamera.getCameraInfo()).thenReturn(cameraInfo);
+
+ final SurfaceRequest surfaceRequest = new SurfaceRequest(DEFAULT_SURFACE_SIZE, fakeCamera,
+ isRGBA8888Required);
+ mSurfaceRequestList.add(surfaceRequest);
+ return surfaceRequest;
+ }
+
+ private CameraInfo createCameraInfo(String implementationType) {
+ FakeCameraInfoInternal cameraInfoInternal = new FakeCameraInfoInternal();
+ cameraInfoInternal.setImplementationType(implementationType);
+ return cameraInfoInternal;
+ }
+
+ private CameraInfo createCameraInfo(int rotationDegrees, String implementationType,
+ @CameraSelector.LensFacing int lensFacing) {
+ FakeCameraInfoInternal cameraInfoInternal = new FakeCameraInfoInternal(rotationDegrees,
+ lensFacing);
+ cameraInfoInternal.setImplementationType(implementationType);
+ return cameraInfoInternal;
}
private void updateCropRectAndWaitForIdle(Rect cropRect) {
diff --git a/camera/camera-view/src/androidTest/java/androidx/camera/view/SurfaceViewImplementationTest.kt b/camera/camera-view/src/androidTest/java/androidx/camera/view/SurfaceViewImplementationTest.kt
index 4356d85..cc960aa 100644
--- a/camera/camera-view/src/androidTest/java/androidx/camera/view/SurfaceViewImplementationTest.kt
+++ b/camera/camera-view/src/androidTest/java/androidx/camera/view/SurfaceViewImplementationTest.kt
@@ -16,7 +16,6 @@
package androidx.camera.view
-import android.app.Activity
import android.content.Context
import android.util.Size
import android.view.View
@@ -25,6 +24,7 @@
import androidx.camera.testing.CoreAppTestUtil
import androidx.camera.testing.fakes.FakeActivity
import androidx.camera.testing.fakes.FakeCamera
+import androidx.test.core.app.ActivityScenario
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
@@ -32,7 +32,6 @@
import com.google.common.truth.Truth.assertThat
import org.junit.After
import org.junit.Before
-import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import java.util.concurrent.CountDownLatch
@@ -40,37 +39,29 @@
@MediumTest
@RunWith(AndroidJUnit4::class)
-class SurfaceViewImplementationTest {
+public class SurfaceViewImplementationTest {
- private val ANY_WIDTH = 640
- private val ANY_HEIGHT = 480
- private val ANY_SIZE = Size(ANY_WIDTH, ANY_HEIGHT)
+ public companion object {
+ private const val ANY_WIDTH = 640
+ private const val ANY_HEIGHT = 480
+ private val ANY_SIZE = Size(ANY_WIDTH, ANY_HEIGHT)
+ }
private lateinit var mParent: FrameLayout
private lateinit var mImplementation: SurfaceViewImplementation
- private val mInstrumentation =
- InstrumentationRegistry.getInstrumentation()
+ private val mInstrumentation = InstrumentationRegistry.getInstrumentation()
private lateinit var mSurfaceRequest: SurfaceRequest
private lateinit var mContext: Context
// Shows the view in activity so that SurfaceView can work normally
- @Suppress("DEPRECATION")
- @get:Rule
- var mActivityRule = androidx.test.rule.ActivityTestRule(
- FakeActivity::class.java, false, false
- )
-
- @Throws(Throwable::class)
- private fun setContentView(view: View) {
- val activity: Activity = mActivityRule.activity
- mActivityRule.runOnUiThread { activity.setContentView(view) }
- }
+ private lateinit var mActivityScenario: ActivityScenario<FakeActivity>
@Before
- fun setUp() {
+ public fun setUp() {
CoreAppTestUtil.prepareDeviceUI(mInstrumentation)
- mActivityRule.launchActivity(null)
- mContext = ApplicationProvider.getApplicationContext<Context>()
+
+ mActivityScenario = ActivityScenario.launch(FakeActivity::class.java)
+ mContext = ApplicationProvider.getApplicationContext()
mParent = FrameLayout(mContext)
setContentView(mParent)
@@ -79,12 +70,12 @@
}
@After
- fun tearDown() {
+ public fun tearDown() {
mSurfaceRequest.deferrableSurface.close()
}
@Test
- fun surfaceProvidedSuccessfully() {
+ public fun surfaceProvidedSuccessfully() {
CoreAppTestUtil.checkKeyguard(mContext)
mInstrumentation.runOnMainSync {
@@ -96,10 +87,10 @@
}
@Test
- fun onSurfaceNotInUseListener_isCalledWhenSurfaceIsNotUsedAnyMore() {
+ public fun onSurfaceNotInUseListener_isCalledWhenSurfaceIsNotUsedAnyMore() {
CoreAppTestUtil.checkKeyguard(mContext)
- var listenerLatch = CountDownLatch(1)
+ val listenerLatch = CountDownLatch(1)
val onSurfaceNotInUseListener = {
listenerLatch.countDown()
}
@@ -114,14 +105,14 @@
}
@Test
- fun onSurfaceNotInUseListener_isCalledWhenSurfaceRequestIsCancelled() {
- var listenerLatch = CountDownLatch(1)
+ public fun onSurfaceNotInUseListener_isCalledWhenSurfaceRequestIsCancelled() {
+ val listenerLatch = CountDownLatch(1)
val onSurfaceNotInUseListener = {
listenerLatch.countDown()
}
// Not attach the mParent to the window so that the Surface cannot be created.
- setContentView(View(ApplicationProvider.getApplicationContext()))
+ setContentView(View(mContext))
mInstrumentation.runOnMainSync {
mImplementation.onSurfaceRequested(mSurfaceRequest, onSurfaceNotInUseListener)
@@ -135,8 +126,13 @@
}
@Test
- fun waitForNextFrame_futureCompletesImmediately() {
+ public fun waitForNextFrame_futureCompletesImmediately() {
val future = mImplementation.waitForNextFrame()
future.get(20, TimeUnit.MILLISECONDS)
}
+
+ @Throws(Throwable::class)
+ private fun setContentView(view: View) {
+ mActivityScenario.onActivity { activity -> activity.setContentView(view) }
+ }
}
\ No newline at end of file
diff --git a/camera/camera-view/src/androidTest/java/androidx/camera/view/TextureViewImplementationTest.java b/camera/camera-view/src/androidTest/java/androidx/camera/view/TextureViewImplementationTest.java
index 1074d8d..961cab6 100644
--- a/camera/camera-view/src/androidTest/java/androidx/camera/view/TextureViewImplementationTest.java
+++ b/camera/camera-view/src/androidTest/java/androidx/camera/view/TextureViewImplementationTest.java
@@ -149,7 +149,7 @@
SurfaceRequest surfaceRequest = getSurfaceRequest();
CountDownLatch latchForSurfaceNotInUse = new CountDownLatch(1);
PreviewViewImplementation.OnSurfaceNotInUseListener onSurfaceNotInUseListener =
- () -> latchForSurfaceNotInUse.countDown();
+ latchForSurfaceNotInUse::countDown;
mImplementation.onSurfaceRequested(surfaceRequest, onSurfaceNotInUseListener);
DeferrableSurface deferrableSurface = surfaceRequest.getDeferrableSurface();
@@ -172,7 +172,7 @@
SurfaceRequest surfaceRequest = getSurfaceRequest();
CountDownLatch latchForSurfaceNotInUse = new CountDownLatch(1);
PreviewViewImplementation.OnSurfaceNotInUseListener onSurfaceNotInUseListener =
- () -> latchForSurfaceNotInUse.countDown();
+ latchForSurfaceNotInUse::countDown;
mImplementation.onSurfaceRequested(surfaceRequest, onSurfaceNotInUseListener);
DeferrableSurface deferrableSurface = surfaceRequest.getDeferrableSurface();
diff --git a/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/CameraControllerFragment.java b/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/CameraControllerFragment.java
index 173165f..e833abd 100644
--- a/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/CameraControllerFragment.java
+++ b/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/CameraControllerFragment.java
@@ -115,11 +115,6 @@
image.close();
};
- @Override
- public void onAttach(@NonNull Context context) {
- super.onAttach(context);
- }
-
@NonNull
@Override
@UseExperimental(markerClass = ExperimentalVideo.class)
@@ -241,7 +236,7 @@
view.findViewById(R.id.video_record).setOnClickListener(v -> {
try {
String videoFileName = "video_" + System.currentTimeMillis();
- ContentResolver resolver = getContext().getContentResolver();
+ ContentResolver resolver = requireContext().getContentResolver();
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "video/mp4");
contentValues.put(MediaStore.Video.Media.TITLE, videoFileName);
@@ -326,7 +321,9 @@
if (mExecutorService != null) {
mExecutorService.shutdown();
}
- mSensorRotationListener.disable();
+ if (mSensorRotationListener != null) {
+ mSensorRotationListener.disable();
+ }
}
void checkFailedFuture(ListenableFuture<Void> voidFuture) {
@@ -347,7 +344,7 @@
// Synthetic access
@SuppressWarnings("WeakerAccess")
void toast(String message) {
- getActivity().runOnUiThread(
+ requireActivity().runOnUiThread(
() -> Toast.makeText(getContext(), message, Toast.LENGTH_SHORT).show());
}
@@ -373,8 +370,9 @@
@UseExperimental(markerClass = ExperimentalVideo.class)
private void updateUiText() {
mFlashMode.setText(getFlashModeTextResId());
- mCameraToggle.setChecked(mCameraController.getCameraSelector().getLensFacing()
- == CameraSelector.LENS_FACING_BACK);
+ final Integer lensFacing = mCameraController.getCameraSelector().getLensFacing();
+ mCameraToggle.setChecked(
+ lensFacing != null && lensFacing == CameraSelector.LENS_FACING_BACK);
mVideoEnabledToggle.setChecked(mCameraController.isVideoCaptureEnabled());
mPinchToZoomToggle.setChecked(mCameraController.isPinchToZoomEnabled());
mTapToFocusToggle.setChecked(mCameraController.isTapToFocusEnabled());
@@ -510,7 +508,7 @@
contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg");
ImageCapture.OutputFileOptions outputFileOptions =
new ImageCapture.OutputFileOptions.Builder(
- getContext().getContentResolver(),
+ requireContext().getContentResolver(),
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
contentValues).build();
mCameraController.takePicture(outputFileOptions, mExecutorService, callback);
diff --git a/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/MainActivity.java b/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/MainActivity.java
index 74878d8..c23de8b 100644
--- a/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/MainActivity.java
+++ b/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/MainActivity.java
@@ -17,6 +17,7 @@
package androidx.camera.integration.view;
import android.Manifest;
+import android.annotation.SuppressLint;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
@@ -28,7 +29,9 @@
import android.widget.Toast;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
@@ -53,7 +56,7 @@
private Mode mMode = Mode.CAMERA_VIEW;
@Override
- protected void onCreate(Bundle savedInstanceState) {
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Get extra option for checking whether it need to be implemented with PreviewView
@@ -77,7 +80,8 @@
if (allPermissionsGranted()) {
startFragment();
} else if (!mCheckedPermissions) {
- requestPermissions(REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSIONS);
+ ActivityCompat.requestPermissions(this, REQUIRED_PERMISSIONS,
+ REQUEST_CODE_PERMISSIONS);
mCheckedPermissions = true;
}
} else {
@@ -105,6 +109,7 @@
return true;
}
+ @SuppressLint("NonConstantResourceId")
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
diff --git a/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/PreviewViewFragment.java b/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/PreviewViewFragment.java
index 97e5053..9b1a8e2 100644
--- a/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/PreviewViewFragment.java
+++ b/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/PreviewViewFragment.java
@@ -68,7 +68,8 @@
public class PreviewViewFragment extends Fragment {
/** Scale types of ImageView that map to the PreviewView scale types. */
- private static final ImageView.ScaleType[] IMAGE_VIEW_SCALE_TYPES =
+ // Synthetic access
+ static final ImageView.ScaleType[] IMAGE_VIEW_SCALE_TYPES =
{ImageView.ScaleType.FIT_CENTER, ImageView.ScaleType.FIT_CENTER,
ImageView.ScaleType.FIT_CENTER, ImageView.ScaleType.FIT_START,
ImageView.ScaleType.FIT_CENTER, ImageView.ScaleType.FIT_END};
@@ -182,7 +183,8 @@
});
}
- void updateTargetRotationButtonText(Button rotationButton) {
+ @SuppressLint("SetTextI18n")
+ void updateTargetRotationButtonText(final @NonNull Button rotationButton) {
switch (mPreview.getTargetRotation()) {
case Surface.ROTATION_0:
rotationButton.setText("ROTATION_0");
@@ -225,7 +227,7 @@
// Get extra option for setting initial camera direction
boolean isCameraDirectionValid = false;
String cameraDirectionString = null;
- Bundle bundle = getActivity().getIntent().getExtras();
+ Bundle bundle = requireActivity().getIntent().getExtras();
if (bundle != null) {
cameraDirectionString = bundle.getString(INTENT_EXTRA_CAMERA_DIRECTION);
isCameraDirectionValid =
@@ -330,6 +332,7 @@
setUpFocusAndMetering(camera);
}
+ @SuppressLint("ClickableViewAccessibility")
private void setUpFocusAndMetering(@NonNull final Camera camera) {
mPreviewView.setOnTouchListener((view, motionEvent) -> {
switch (motionEvent.getAction()) {
@@ -414,7 +417,7 @@
// like TextureView.SurfaceTextureListener#onSurfaceTextureUpdated but it will require to add
// API in PreviewView which is not a good idea. And we use OnPreDrawListener instead of
// OnDrawListener because OnDrawListener is not invoked on some low API level devices.
- private ViewTreeObserver.OnPreDrawListener mOnPreDrawListener = () -> {
+ private final ViewTreeObserver.OnPreDrawListener mOnPreDrawListener = () -> {
if (mPreviewUpdatingLatch != null) {
mPreviewUpdatingLatch.countDown();
}
@@ -439,5 +442,5 @@
void setPreviewUpdatingLatch(@NonNull CountDownLatch previewUpdatingLatch) {
mPreviewUpdatingLatch = previewUpdatingLatch;
}
- // end region
+ // endregion
}