131af8607e2c7da6ba8708f57c4b67b6b4aaad921Michael Portuesipackage com.xtremelabs.robolectric.shadows; 231af8607e2c7da6ba8708f57c4b67b6b4aaad921Michael Portuesi 331af8607e2c7da6ba8708f57c4b67b6b4aaad921Michael Portuesi 4f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultzimport android.graphics.Canvas; 5f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultzimport android.graphics.ImageFormat; 6f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultzimport android.graphics.Rect; 7f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultzimport android.hardware.Camera; 8f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultzimport android.view.Surface; 9f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultzimport android.view.SurfaceHolder; 10f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultzimport com.xtremelabs.robolectric.Robolectric; 11f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultzimport com.xtremelabs.robolectric.WithTestDefaultsRunner; 12c306c10d894f8ededdd5de8bd504f80db14a9d5cMichael Portuesi 13c306c10d894f8ededdd5de8bd504f80db14a9d5cMichael Portuesiimport org.junit.After; 1431af8607e2c7da6ba8708f57c4b67b6b4aaad921Michael Portuesiimport org.junit.Before; 1531af8607e2c7da6ba8708f57c4b67b6b4aaad921Michael Portuesiimport org.junit.Test; 1631af8607e2c7da6ba8708f57c4b67b6b4aaad921Michael Portuesiimport org.junit.runner.RunWith; 1731af8607e2c7da6ba8708f57c4b67b6b4aaad921Michael Portuesi 18a3030055b95774b06a963ccc9224fac58c887cb2Christian Williams & Phil Goodwinimport static org.hamcrest.CoreMatchers.equalTo; 19a3030055b95774b06a963ccc9224fac58c887cb2Christian Williams & Phil Goodwinimport static org.hamcrest.CoreMatchers.not; 20a3030055b95774b06a963ccc9224fac58c887cb2Christian Williams & Phil Goodwinimport static org.hamcrest.CoreMatchers.notNullValue; 217d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesiimport static org.hamcrest.CoreMatchers.nullValue; 22a3030055b95774b06a963ccc9224fac58c887cb2Christian Williams & Phil Goodwinimport static org.hamcrest.CoreMatchers.sameInstance; 23f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultzimport static org.junit.Assert.assertThat; 2431af8607e2c7da6ba8708f57c4b67b6b4aaad921Michael Portuesi 2531af8607e2c7da6ba8708f57c4b67b6b4aaad921Michael Portuesi@RunWith(WithTestDefaultsRunner.class) 2631af8607e2c7da6ba8708f57c4b67b6b4aaad921Michael Portuesipublic class CameraTest { 2731af8607e2c7da6ba8708f57c4b67b6b4aaad921Michael Portuesi 28f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz private Camera camera; 29f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz private ShadowCamera shadowCamera; 30f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 31f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz @Before 32f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz public void setUp() throws Exception { 33f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz camera = Camera.open(); 34f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz shadowCamera = Robolectric.shadowOf(camera); 35f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz } 36c306c10d894f8ededdd5de8bd504f80db14a9d5cMichael Portuesi 37c306c10d894f8ededdd5de8bd504f80db14a9d5cMichael Portuesi @After 38c306c10d894f8ededdd5de8bd504f80db14a9d5cMichael Portuesi public void tearDown() throws Exception { 39c306c10d894f8ededdd5de8bd504f80db14a9d5cMichael Portuesi ShadowCamera.clearCameraInfo(); 40c306c10d894f8ededdd5de8bd504f80db14a9d5cMichael Portuesi } 41f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 42f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz @Test 43f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz public void testOpen() throws Exception { 44f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz assertThat(camera, notNullValue()); 45f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz } 46f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 47f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz @Test 48f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz public void testUnlock() throws Exception { 49f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz assertThat(shadowCamera.isLocked(), equalTo(true)); 50f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz camera.unlock(); 51f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz assertThat(shadowCamera.isLocked(), equalTo(false)); 52f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz } 53f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 54f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz @Test 55f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz public void testReconnect() throws Exception { 56f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz camera.unlock(); 57f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz assertThat(shadowCamera.isLocked(), equalTo(false)); 58f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz camera.reconnect(); 59f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz assertThat(shadowCamera.isLocked(), equalTo(true)); 60f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz } 61f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 62f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz @Test 63f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz public void testGetParameters() throws Exception { 64f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz Camera.Parameters parameters = camera.getParameters(); 65f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz assertThat(parameters, notNullValue()); 66f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz assertThat(parameters.getSupportedPreviewFormats(), notNullValue()); 67a3030055b95774b06a963ccc9224fac58c887cb2Christian Williams & Phil Goodwin assertThat(parameters.getSupportedPreviewFormats().size(), not(equalTo(0))); 68f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz } 69f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 70f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz @Test 71f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz public void testSetParameters() throws Exception { 72f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz Camera.Parameters parameters = camera.getParameters(); 73f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz assertThat(parameters.getPreviewFormat(), equalTo(ImageFormat.NV21)); 74f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz parameters.setPreviewFormat(ImageFormat.JPEG); 75f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz camera.setParameters(parameters); 76f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz assertThat(camera.getParameters().getPreviewFormat(), equalTo(ImageFormat.JPEG)); 77f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz } 78f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 79f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz @Test 80f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz public void testSetPreviewDisplay() throws Exception { 81f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz SurfaceHolder previewSurfaceHolder = new TestSurfaceHolder(); 82f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz camera.setPreviewDisplay(previewSurfaceHolder); 83f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz assertThat(shadowCamera.getPreviewDisplay(), sameInstance(previewSurfaceHolder)); 84f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz } 85f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 86f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz @Test 87f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz public void testStartPreview() throws Exception { 88f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz assertThat(shadowCamera.isPreviewing(), equalTo(false)); 89f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz camera.startPreview(); 90f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz assertThat(shadowCamera.isPreviewing(), equalTo(true)); 91f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz } 92f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 93f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz @Test 94f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz public void testStopPreview() throws Exception { 95f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz camera.startPreview(); 96f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz assertThat(shadowCamera.isPreviewing(), equalTo(true)); 97f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz camera.stopPreview(); 98f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz assertThat(shadowCamera.isPreviewing(), equalTo(false)); 99f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz } 100f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 101f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz @Test 102f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz public void testRelease() throws Exception { 103f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz assertThat(shadowCamera.isReleased(), equalTo(false)); 104f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz camera.release(); 105f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz assertThat(shadowCamera.isReleased(), equalTo(true)); 106f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz } 107f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 1087d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi @Test 1097d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi public void testSetPreviewCallbacks() throws Exception { 1107d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi TestPreviewCallback callback = new TestPreviewCallback(); 1117d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi assertThat(callback.camera, nullValue()); 1127d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi assertThat(callback.data, nullValue()); 1137d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi 1147d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi camera.setPreviewCallback(callback); 1157d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi shadowCamera.invokePreviewCallback("foobar".getBytes()); 1167d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi 1177d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi assertThat(callback.camera, sameInstance(camera)); 118ca8b4e7c96507b66cb816a3383c93b02d79a7685Tyler Schultz assertThat(callback.data, equalTo("foobar".getBytes())); 1197d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi } 1207d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi 1217d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi @Test 1227d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi public void testSetOneShotPreviewCallbacks() throws Exception { 1237d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi TestPreviewCallback callback = new TestPreviewCallback(); 1247d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi assertThat(callback.camera, nullValue()); 1257d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi assertThat(callback.data, nullValue()); 1267d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi 1277d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi camera.setOneShotPreviewCallback(callback); 1287d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi shadowCamera.invokePreviewCallback("foobar".getBytes()); 1297d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi 1307d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi assertThat(callback.camera, sameInstance(camera)); 131ca8b4e7c96507b66cb816a3383c93b02d79a7685Tyler Schultz assertThat(callback.data, equalTo("foobar".getBytes())); 1327d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi } 1337d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi 1347d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi @Test 1357d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi public void testPreviewCallbacksWithBuffers() throws Exception { 1367d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi TestPreviewCallback callback = new TestPreviewCallback(); 1377d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi assertThat(callback.camera, nullValue()); 1387d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi assertThat(callback.data, nullValue()); 1397d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi 1407d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi camera.setPreviewCallbackWithBuffer(callback); 1417d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi shadowCamera.invokePreviewCallback("foobar".getBytes()); 1427d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi 1437d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi assertThat(callback.camera, sameInstance(camera)); 144ca8b4e7c96507b66cb816a3383c93b02d79a7685Tyler Schultz assertThat(callback.data, equalTo("foobar".getBytes())); 1457d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi } 1467d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi 1477d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi @Test 1487d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi public void testClearPreviewCallback() throws Exception { 1497d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi TestPreviewCallback callback = new TestPreviewCallback(); 1507d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi assertThat(callback.camera, nullValue()); 1517d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi assertThat(callback.data, nullValue()); 1527d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi 1537d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi camera.setPreviewCallback(callback); 1547d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi camera.setPreviewCallback(null); 1557d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi 1567d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi shadowCamera.invokePreviewCallback("foobar".getBytes()); 1577d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi assertThat(callback.camera, nullValue()); 1587d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi assertThat(callback.data, nullValue()); 1597d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi 1607d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi camera.setOneShotPreviewCallback(callback); 1617d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi camera.setOneShotPreviewCallback(null); 1627d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi 1637d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi shadowCamera.invokePreviewCallback("foobar".getBytes()); 1647d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi assertThat(callback.camera, nullValue()); 1657d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi assertThat(callback.data, nullValue()); 1667d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi 1677d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi camera.setPreviewCallbackWithBuffer(callback); 1687d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi camera.setPreviewCallbackWithBuffer(null); 1697d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi 1707d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi shadowCamera.invokePreviewCallback("foobar".getBytes()); 1717d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi assertThat(callback.camera, nullValue()); 1727d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi assertThat(callback.data, nullValue()); 1737d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi } 1747d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi 17501477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi @Test 17601477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi public void testCameraInfoNoCameras() throws Exception { 17701477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi assertThat(Camera.getNumberOfCameras(), equalTo(0)); 17801477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi } 17901477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi 18001477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi @Test 18101477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi public void testCameraInfoBackOnly() throws Exception { 18201477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi Camera.CameraInfo cameraQuery = new Camera.CameraInfo(); 18301477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi 18401477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi addBackCamera(); 18501477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi Camera.getCameraInfo(0, cameraQuery); 18601477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi 18701477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi assertThat(Camera.getNumberOfCameras(), equalTo(1)); 18801477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi assertThat(cameraQuery.facing, equalTo(Camera.CameraInfo.CAMERA_FACING_BACK)); 18901477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi assertThat(cameraQuery.orientation, equalTo(0)); 19001477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi } 19101477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi 19201477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi @Test 19301477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi public void testCameraInfoBackAndFront() throws Exception { 19401477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi Camera.CameraInfo cameraQuery = new Camera.CameraInfo(); 19501477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi addBackCamera(); 19601477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi addFrontCamera(); 19701477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi 19801477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi assertThat( Camera.getNumberOfCameras(), equalTo(2) ); 19901477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi Camera.getCameraInfo(0, cameraQuery); 20001477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi assertThat( cameraQuery.facing, equalTo(Camera.CameraInfo.CAMERA_FACING_BACK) ); 20101477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi assertThat( cameraQuery.orientation, equalTo(0) ); 20201477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi Camera.getCameraInfo(1, cameraQuery); 20301477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi assertThat( cameraQuery.facing, equalTo(Camera.CameraInfo.CAMERA_FACING_FRONT) ); 20401477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi assertThat( cameraQuery.orientation, equalTo(90) ); 20501477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi } 20601477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi 20701477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi private void addBackCamera() { 20801477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi Camera.CameraInfo frontCamera = new Camera.CameraInfo(); 20901477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi frontCamera.facing = Camera.CameraInfo.CAMERA_FACING_BACK; 21001477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi frontCamera.orientation = 0; 21101477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi ShadowCamera.addCameraInfo(0, frontCamera); 21201477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi } 21301477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi 21401477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi private void addFrontCamera() { 21501477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi Camera.CameraInfo backCamera = new Camera.CameraInfo(); 21601477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi backCamera.facing = Camera.CameraInfo.CAMERA_FACING_FRONT; 21701477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi backCamera.orientation = 90; 21801477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi ShadowCamera.addCameraInfo(1, backCamera); 21901477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi } 22001477cabe73bbe8916287eb510d55c526f919a4fMichael Portuesi 2217d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi private class TestPreviewCallback implements Camera.PreviewCallback { 2227d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi public Camera camera = null; 2237d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi public byte[] data = null; 2247d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi 2257d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi @Override 2267d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi public void onPreviewFrame(byte[] data, Camera camera) { 2277d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi this.data = data; 2287d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi this.camera = camera; 2297d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi } 2307d27d66271a8a0a34c970ec1068653c63709856bMichael Portuesi } 231f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 232f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz private class TestSurfaceHolder implements SurfaceHolder { 233f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 234f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz @Override 235f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz public void addCallback(Callback callback) { 236f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz } 237f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 238f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz @Override 239f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz public Surface getSurface() { 240f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz return null; 241f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz } 242f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 243f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz @Override 244f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz public Rect getSurfaceFrame() { 245f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz return null; 246f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz } 247f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 248f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz @Override 249f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz public boolean isCreating() { 250f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz return false; 251f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz } 252f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 253f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz @Override 254f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz public Canvas lockCanvas() { 255f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz return null; 256f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz } 257f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 258f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz @Override 259f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz public Canvas lockCanvas(Rect dirty) { 260f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz return null; 261f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz } 262f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 263f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz @Override 264f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz public void removeCallback(Callback callback) { 265f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz } 266f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 267f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz @Override 268f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz public void setFixedSize(int width, int height) { 269f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz } 270f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 271f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz @Override 272f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz public void setFormat(int format) { 273f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz } 274f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 275f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz @Override 276f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz public void setKeepScreenOn(boolean screenOn) { 277f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz } 278f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 279f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz @Override 280f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz public void setSizeFromLayout() { 281f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz } 282f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 283f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz @Override 284f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz public void setType(int type) { 285f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz } 286f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz 287f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz @Override 288f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz public void unlockCanvasAndPost(Canvas canvas) { 289f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz } 290f96b9a1f17d47e48d1f5f8e29b4ed7ffccc739abPhil Goodwin & Tyler Schultz } 29131af8607e2c7da6ba8708f57c4b67b6b4aaad921Michael Portuesi} 292