18ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher/* 28ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher * Copyright (C) 2014 The Android Open Source Project 38ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher * 48ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher * Licensed under the Apache License, Version 2.0 (the "License"); 58ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher * you may not use this file except in compliance with the License. 68ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher * You may obtain a copy of the License at 78ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher * 88ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher * http://www.apache.org/licenses/LICENSE-2.0 98ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher * 108ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher * Unless required by applicable law or agreed to in writing, software 118ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher * distributed under the License is distributed on an "AS IS" BASIS, 128ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher * See the License for the specific language governing permissions and 148ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher * limitations under the License. 158ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher */ 168ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 178ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucherpackage com.android.ex.camera2.utils; 188ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 198ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucherimport static org.junit.Assert.assertEquals; 208ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucherimport static org.junit.Assert.assertFalse; 218ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucherimport static org.junit.Assert.assertNotSame; 228ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucherimport static org.junit.Assert.assertTrue; 238ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucherimport static org.mockito.Mockito.mock; 248ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucherimport static org.mockito.Mockito.verify; 258ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 26984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucherimport android.graphics.Rect; 27bb013aa3e197e881756be5ad13e6ad30bfb4aeffEino-Ville Talvalaimport android.hardware.camera2.CameraCaptureSession.CaptureCallback; 288ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucherimport android.hardware.camera2.CameraDevice; 298ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucherimport android.hardware.camera2.CaptureRequest; 308ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucherimport android.hardware.camera2.CaptureRequest.Key; 318ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucherimport android.view.Surface; 328ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 338ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucherimport org.junit.Test; 348ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 35de48004068f8c16f9a56c60b0ed2485a67687b4bSol Boucherpublic class Camera2UtilsTest extends Camera2DeviceTester { 36bb013aa3e197e881756be5ad13e6ad30bfb4aeffEino-Ville Talvala private void captureListenerSplitterAllCallbacksReceived(CaptureCallback splitter, 37bb013aa3e197e881756be5ad13e6ad30bfb4aeffEino-Ville Talvala CaptureCallback... terminals) { 388ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher splitter.onCaptureCompleted(null, null, null); 39bb013aa3e197e881756be5ad13e6ad30bfb4aeffEino-Ville Talvala for (CaptureCallback each : terminals) { 408ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher verify(each).onCaptureCompleted(null, null, null); 418ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 428ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher splitter.onCaptureFailed(null, null, null); 43bb013aa3e197e881756be5ad13e6ad30bfb4aeffEino-Ville Talvala for (CaptureCallback each : terminals) { 448ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher verify(each).onCaptureFailed(null, null, null); 458ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 468ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher splitter.onCaptureProgressed(null, null, null); 47bb013aa3e197e881756be5ad13e6ad30bfb4aeffEino-Ville Talvala for (CaptureCallback each : terminals) { 488ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher verify(each).onCaptureProgressed(null, null, null); 498ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 508ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher splitter.onCaptureSequenceAborted(null, 0); 51bb013aa3e197e881756be5ad13e6ad30bfb4aeffEino-Ville Talvala for (CaptureCallback each : terminals) { 528ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher verify(each).onCaptureSequenceAborted(null, 0); 538ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 548ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher splitter.onCaptureSequenceCompleted(null, 0, 0L); 55bb013aa3e197e881756be5ad13e6ad30bfb4aeffEino-Ville Talvala for (CaptureCallback each : terminals) { 568ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher verify(each).onCaptureSequenceCompleted(null, 0, 0L); 578ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 58171362f843c1e7623f29db1781176f85b1f74815Eino-Ville Talvala splitter.onCaptureStarted(null, null, 0L, 1L); 59bb013aa3e197e881756be5ad13e6ad30bfb4aeffEino-Ville Talvala for (CaptureCallback each : terminals) { 60171362f843c1e7623f29db1781176f85b1f74815Eino-Ville Talvala verify(each).onCaptureStarted(null, null, 0L, 1L); 618ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 628ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 638ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 648ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test 658ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void captureListenerSplitter() { 66bb013aa3e197e881756be5ad13e6ad30bfb4aeffEino-Ville Talvala CaptureCallback firstBackingListener = mock(CaptureCallback.class); 67bb013aa3e197e881756be5ad13e6ad30bfb4aeffEino-Ville Talvala CaptureCallback secondBackingListener = mock(CaptureCallback.class); 688ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher captureListenerSplitterAllCallbacksReceived( 69bb013aa3e197e881756be5ad13e6ad30bfb4aeffEino-Ville Talvala new Camera2CaptureCallbackSplitter(firstBackingListener, secondBackingListener), 708ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher firstBackingListener, secondBackingListener); 718ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 728ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 738ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test 748ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void captureListenerSplitterEmpty() { 75bb013aa3e197e881756be5ad13e6ad30bfb4aeffEino-Ville Talvala captureListenerSplitterAllCallbacksReceived(new Camera2CaptureCallbackSplitter()); 768ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 778ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 788ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test 798ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void captureListenerSplitterNoNpe() { 808ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher captureListenerSplitterAllCallbacksReceived( 81bb013aa3e197e881756be5ad13e6ad30bfb4aeffEino-Ville Talvala new Camera2CaptureCallbackSplitter((CaptureCallback) null)); 828ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 838ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 848ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test 858ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void captureListenerSplitterMultipleNulls() { 868ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher captureListenerSplitterAllCallbacksReceived( 87bb013aa3e197e881756be5ad13e6ad30bfb4aeffEino-Ville Talvala new Camera2CaptureCallbackSplitter(null, null, null)); 888ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 898ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 908ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test 918ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void captureListenerSplitterValidAndNull() { 92bb013aa3e197e881756be5ad13e6ad30bfb4aeffEino-Ville Talvala CaptureCallback onlyRealBackingListener = mock(CaptureCallback.class); 938ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher captureListenerSplitterAllCallbacksReceived( 94bb013aa3e197e881756be5ad13e6ad30bfb4aeffEino-Ville Talvala new Camera2CaptureCallbackSplitter(null, onlyRealBackingListener), 958ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher onlyRealBackingListener); 968ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 978ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 988ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher private <T> void requestSettingsSetAndForget(Camera2RequestSettingsSet s, Key<T> k, T v) { 998ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher s.set(k, v); 1008ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals(v, s.get(k)); 1018ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 1028ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 1038ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test 1048ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSet() { 1058ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet(); 1068ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher // Try a boolean 1078ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndForget(setUp, CaptureRequest.CONTROL_AE_LOCK, false); 1088ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndForget(setUp, CaptureRequest.CONTROL_AE_LOCK, true); 1098ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher // Try an int 1108ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndForget(setUp, CaptureRequest.CONTROL_AE_MODE, 1); 1118ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndForget(setUp, CaptureRequest.CONTROL_AE_MODE, -1); 1128ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndForget(setUp, CaptureRequest.CONTROL_AE_MODE, 0); 1138ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher // Try an int[] 1148ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndForget(setUp, CaptureRequest.SENSOR_TEST_PATTERN_DATA, new int[] {1}); 1158ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndForget(setUp, CaptureRequest.SENSOR_TEST_PATTERN_DATA, 1168ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher new int[] {2, 2}); 1178ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 1188ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 1198ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test 1208ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSetNullValue() { 1218ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet(); 1228ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndForget(setUp, CaptureRequest.SENSOR_TEST_PATTERN_DATA, new int[] {1}); 1238ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndForget(setUp, CaptureRequest.SENSOR_TEST_PATTERN_DATA, null); 1248ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndForget(setUp, CaptureRequest.SENSOR_TEST_PATTERN_DATA, 1258ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher new int[] {2, 2}); 1268ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 1278ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 1288ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test 1298ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSetUnsetAndContains() { 1308ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet(); 1318ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertFalse(setUp.contains(CaptureRequest.CONTROL_AE_LOCK)); 1328ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher setUp.set(CaptureRequest.CONTROL_AE_LOCK, false); 1338ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertTrue(setUp.contains(CaptureRequest.CONTROL_AE_LOCK)); 1348ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher setUp.set(CaptureRequest.CONTROL_AE_LOCK, null); 1358ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertTrue(setUp.contains(CaptureRequest.CONTROL_AE_LOCK)); 1368ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher setUp.unset(CaptureRequest.CONTROL_AE_LOCK); 1378ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertFalse(setUp.contains(CaptureRequest.CONTROL_AE_LOCK)); 1388ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 1398ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher setUp.set(CaptureRequest.CONTROL_AE_LOCK, null); 1408ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertTrue(setUp.contains(CaptureRequest.CONTROL_AE_LOCK)); 1418ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher setUp.set(CaptureRequest.CONTROL_AE_LOCK, false); 1428ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertTrue(setUp.contains(CaptureRequest.CONTROL_AE_LOCK)); 1438ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher setUp.unset(CaptureRequest.CONTROL_AE_LOCK); 1448ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertFalse(setUp.contains(CaptureRequest.CONTROL_AE_LOCK)); 1458ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 1468ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 1478ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test 1488ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSetStartsWithoutChanges() { 1498ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet(); 1508ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals(0, setUp.getRevision()); 1518ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 1528ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 1538ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher private <T> void requestSettingsSetAndAssertChanged(Camera2RequestSettingsSet settings, 1548ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Key<T> key, T value, 1558ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher boolean shouldHaveChanged) { 1568ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher long revision = settings.getRevision(); 1578ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals(shouldHaveChanged, settings.set(key, value)); 1588ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals(shouldHaveChanged ? revision + 1 : revision, settings.getRevision()); 1598ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 1608ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 1618ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test 1628ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSetChangesReportedCorrectly() { 1638ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet(); 1648ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, false, true); 1658ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, false, false); 1668ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, true, true); 1678ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 1688ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 1698ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test 1708ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSetDetectsNoopChanges() { 1718ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet s = new Camera2RequestSettingsSet(); 1728ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher int[] one = {1}, two = {2}; 1738ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 1748ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndAssertChanged(s, CaptureRequest.SENSOR_TEST_PATTERN_DATA, one, true); 1758ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndAssertChanged(s, CaptureRequest.SENSOR_TEST_PATTERN_DATA, one, false); 1768ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 1778ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndAssertChanged(s, CaptureRequest.SENSOR_TEST_PATTERN_DATA, null, true); 1788ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndAssertChanged(s, CaptureRequest.SENSOR_TEST_PATTERN_DATA, null, false); 1798ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 1808ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndAssertChanged(s, CaptureRequest.SENSOR_TEST_PATTERN_DATA, two, true); 1818ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndAssertChanged(s, CaptureRequest.SENSOR_TEST_PATTERN_DATA, two, false); 1828ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 1838ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 1848ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher private <T> void requestSettingsUnsetAndAssertChanged(Camera2RequestSettingsSet settings, 1858ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Key<T> key, boolean shouldHaveChanged) { 1868ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher long revision = settings.getRevision(); 1878ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals(shouldHaveChanged, settings.unset(key)); 1888ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals(shouldHaveChanged ? revision + 1 : revision, settings.getRevision()); 1898ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 1908ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 1918ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test 1928ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSetUnsetMakesChangesAndDetectsNoops() { 1938ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet(); 1948ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsUnsetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, false); 1958ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 1968ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, false, true); 1978ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsUnsetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, true); 1988ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 1998ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, false, true); 2008ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, false, false); 2018ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsUnsetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, true); 2028ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsUnsetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, false); 2038ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 2048ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, false, true); 2058ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, true, true); 2068ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsUnsetAndAssertChanged(setUp, CaptureRequest.CONTROL_AE_LOCK, true); 2078ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 2088ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 2098ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test(expected=NullPointerException.class) 2108ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSetNullArgToCopyConstructor() { 2118ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet flop = new Camera2RequestSettingsSet(null); 2128ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 2138ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 2148ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test(expected=NullPointerException.class) 2158ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSetNullArgToSetKey() { 2168ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet(); 2178ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher setUp.set(null, null); 2188ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 2198ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 2208ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test(expected=NullPointerException.class) 2218ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSetNullArgToUnset() { 2228ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet(); 2238ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher setUp.unset(null); 2248ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 2258ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 2268ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test(expected=NullPointerException.class) 2278ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSetNullArgToContains() { 2288ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet(); 2298ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher setUp.contains(null); 2308ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 2318ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 2328ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test(expected=NullPointerException.class) 2338ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSetNullArgToGet() { 2348ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet(); 2358ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher setUp.get(null); 2368ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 2378ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 238984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher @Test 239984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher public void requestSettingsSetMatchesPrimitives() { 240984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet(); 241984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher assertTrue(setUp.matches(CaptureRequest.CONTROL_AE_LOCK, null)); 242984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher assertFalse(setUp.matches(CaptureRequest.CONTROL_AE_LOCK, false)); 243984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher assertFalse(setUp.matches(CaptureRequest.CONTROL_AE_LOCK, true)); 244984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher 245984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher setUp.set(CaptureRequest.CONTROL_AE_LOCK, null); 246984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher assertTrue(setUp.matches(CaptureRequest.CONTROL_AE_LOCK, null)); 247984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher assertFalse(setUp.matches(CaptureRequest.CONTROL_AE_LOCK, false)); 248984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher assertFalse(setUp.matches(CaptureRequest.CONTROL_AE_LOCK, true)); 249984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher 250984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher setUp.set(CaptureRequest.CONTROL_AE_LOCK, false); 251984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher assertFalse(setUp.matches(CaptureRequest.CONTROL_AE_LOCK, null)); 252984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher assertTrue(setUp.matches(CaptureRequest.CONTROL_AE_LOCK, false)); 253984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher assertFalse(setUp.matches(CaptureRequest.CONTROL_AE_LOCK, true)); 254984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher 255984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher setUp.set(CaptureRequest.CONTROL_AE_LOCK, true); 256984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher assertFalse(setUp.matches(CaptureRequest.CONTROL_AE_LOCK, null)); 257984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher assertFalse(setUp.matches(CaptureRequest.CONTROL_AE_LOCK, false)); 258984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher assertTrue(setUp.matches(CaptureRequest.CONTROL_AE_LOCK, true)); 259984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher } 260984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher 261984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher @Test 262984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher public void requestSettingsSetMatchesReferences() { 263984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet(); 264984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher assertTrue(setUp.matches(CaptureRequest.SCALER_CROP_REGION, null)); 265984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher assertFalse(setUp.matches(CaptureRequest.SCALER_CROP_REGION, new Rect(0, 0, 0, 0))); 266984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher 267984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher setUp.set(CaptureRequest.SCALER_CROP_REGION, null); 268984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher assertTrue(setUp.matches(CaptureRequest.SCALER_CROP_REGION, null)); 269984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher assertFalse(setUp.matches(CaptureRequest.SCALER_CROP_REGION, new Rect(0, 0, 0, 0))); 270984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher 271984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher setUp.set(CaptureRequest.SCALER_CROP_REGION, new Rect(0, 0, 0, 0)); 272984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher assertFalse(setUp.matches(CaptureRequest.SCALER_CROP_REGION, null)); 273984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher assertTrue(setUp.matches(CaptureRequest.SCALER_CROP_REGION, new Rect(0, 0, 0, 0))); 274984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher assertFalse(setUp.matches(CaptureRequest.SCALER_CROP_REGION, new Rect(0, 0, 1, 1))); 275984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher } 276984a086412a94ebea1bd9af8cd8bbf4afab38034Sol Boucher 2778ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test(expected=NullPointerException.class) 2788ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSetNullArgToCreateRequest0() throws Exception { 2798ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet(); 2809d8668449376fa47bc6528c7a61b04d6a0f691b3Sol Boucher setUp.createRequest(null, CameraDevice.TEMPLATE_PREVIEW); 2818ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 2828ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 2838ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test(expected=NullPointerException.class) 2848ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSetNullArgToCreateRequest2() throws Exception { 2858ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet(); 2869d8668449376fa47bc6528c7a61b04d6a0f691b3Sol Boucher setUp.createRequest(mCamera, CameraDevice.TEMPLATE_PREVIEW, (Surface) null); 2878ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 2888ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 2898ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test(expected=NullPointerException.class) 2908ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSetNullArgToCreateRequest02() throws Exception { 2918ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet(); 2929d8668449376fa47bc6528c7a61b04d6a0f691b3Sol Boucher setUp.createRequest(null, CameraDevice.TEMPLATE_PREVIEW, (Surface) null); 2938ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 2948ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 2958ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test 2968ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSetNullArgToUnion() { 2978ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet(); 2988ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertFalse(setUp.union(null)); 2998ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals(0, setUp.getRevision()); 3008ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 3018ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 3028ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test 3038ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSetSelfArgToUnion() { 3048ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet setUp = new Camera2RequestSettingsSet(); 3058ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertFalse(setUp.union(setUp)); 3068ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals(0, setUp.getRevision()); 3078ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 3088ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 3098ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test 3108ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSetCopyConstructor() { 3118ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet original = new Camera2RequestSettingsSet(); 3128ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet unchanged = new Camera2RequestSettingsSet(original); 3138ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 3148ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndForget(original, CaptureRequest.CONTROL_AE_LOCK, true); 3158ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet changed = new Camera2RequestSettingsSet(original); 3168ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals(true, changed.get(CaptureRequest.CONTROL_AE_LOCK)); 3178ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 3188ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 3198ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test 3208ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSetCopyConstructorPreservesChangedStatus() { 3218ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet original = new Camera2RequestSettingsSet(); 3228ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet unchanged = new Camera2RequestSettingsSet(original); 3238ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals(original.getRevision(), unchanged.getRevision()); 3248ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 3258ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndAssertChanged(original, CaptureRequest.CONTROL_AE_LOCK, true, true); 3268ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet changed = new Camera2RequestSettingsSet(original); 3278ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals(original.getRevision(), changed.getRevision()); 3288ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertNotSame(original.getRevision(), unchanged.getRevision()); 3298ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 3308ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 3318ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test 3328ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSetCopyConstructorPerformsDeepCopy() { 3338ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet original = new Camera2RequestSettingsSet(); 3348ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndForget(original, CaptureRequest.CONTROL_AE_LOCK, true); 3358ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 3368ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet changed = new Camera2RequestSettingsSet(original); 3378ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndForget(changed, CaptureRequest.CONTROL_AE_LOCK, false); 3388ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals(true, original.get(CaptureRequest.CONTROL_AE_LOCK)); 3398ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 3408ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 3418ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test 3428ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSetNullMeansDefault() throws Exception { 3438ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet s = new Camera2RequestSettingsSet(); 3448ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher CaptureRequest r1 = s.createRequest(mCamera, CameraDevice.TEMPLATE_PREVIEW); 3458ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals((Object) CaptureRequest.CONTROL_CAPTURE_INTENT_PREVIEW, 3468ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher r1.get(CaptureRequest.CONTROL_CAPTURE_INTENT)); 3478ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 3488ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndForget(s, CaptureRequest.CONTROL_CAPTURE_INTENT, 3498ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher CaptureRequest.CONTROL_CAPTURE_INTENT_STILL_CAPTURE); 3508ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher CaptureRequest r2 = s.createRequest(mCamera, CameraDevice.TEMPLATE_PREVIEW); 3518ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals((Object) CaptureRequest.CONTROL_CAPTURE_INTENT_STILL_CAPTURE, 3528ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher r2.get(CaptureRequest.CONTROL_CAPTURE_INTENT)); 3538ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 3548ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndForget(s, CaptureRequest.CONTROL_CAPTURE_INTENT, null); 3558ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher CaptureRequest r3 = s.createRequest(mCamera, CameraDevice.TEMPLATE_PREVIEW); 3568ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals((Object) CaptureRequest.CONTROL_CAPTURE_INTENT_PREVIEW, 3578ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher r3.get(CaptureRequest.CONTROL_CAPTURE_INTENT)); 3588ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 3598ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher s.unset(CaptureRequest.CONTROL_CAPTURE_INTENT); 3608ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher CaptureRequest r4 = s.createRequest(mCamera, CameraDevice.TEMPLATE_PREVIEW); 3618ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals((Object) CaptureRequest.CONTROL_CAPTURE_INTENT_PREVIEW, 3628ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher r4.get(CaptureRequest.CONTROL_CAPTURE_INTENT)); 3638ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 3648ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 3658ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test 3668ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSetNullPreservedByUnions() { 3678ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet master = new Camera2RequestSettingsSet(); 3688ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndForget(master, CaptureRequest.CONTROL_CAPTURE_INTENT, 3698ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher CaptureRequest.CONTROL_CAPTURE_INTENT_PREVIEW); 3708ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 3718ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet slave = new Camera2RequestSettingsSet(); 3728ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher master.union(slave); 3738ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals((Object) CaptureRequest.CONTROL_CAPTURE_INTENT_PREVIEW, 3748ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher master.get(CaptureRequest.CONTROL_CAPTURE_INTENT)); 3758ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 3768ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndForget(slave, CaptureRequest.CONTROL_CAPTURE_INTENT, null); 3778ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher master.union(slave); 3788ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals(null, master.get(CaptureRequest.CONTROL_CAPTURE_INTENT)); 3798ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 3808ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndForget(slave, CaptureRequest.CONTROL_CAPTURE_INTENT, 3818ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher CaptureRequest.CONTROL_CAPTURE_INTENT_STILL_CAPTURE); 3828ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher master.union(slave); 3838ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals((Object) CaptureRequest.CONTROL_CAPTURE_INTENT_STILL_CAPTURE, 3848ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher master.get(CaptureRequest.CONTROL_CAPTURE_INTENT)); 3858ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 3868ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher slave.unset(CaptureRequest.CONTROL_CAPTURE_INTENT); 3878ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher master.union(slave); 3888ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals((Object) CaptureRequest.CONTROL_CAPTURE_INTENT_STILL_CAPTURE, 3898ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher master.get(CaptureRequest.CONTROL_CAPTURE_INTENT)); 3908ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 3918ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 3928ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test 3938ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSetNullChangesRecorded() throws Exception { 3948ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet s = new Camera2RequestSettingsSet(); 3958ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndAssertChanged(s, CaptureRequest.CONTROL_CAPTURE_INTENT, null, true); 3968ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndAssertChanged(s, CaptureRequest.CONTROL_CAPTURE_INTENT, 3978ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher CaptureRequest.CONTROL_CAPTURE_INTENT_PREVIEW, true); 3988ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndAssertChanged(s, CaptureRequest.CONTROL_CAPTURE_INTENT, null, true); 3998ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetAndAssertChanged(s, CaptureRequest.CONTROL_CAPTURE_INTENT, null, false); 4008ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 4018ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 4028ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test 4038ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSetUnionChangesRecorded() { 4048ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet[] sets = { new Camera2RequestSettingsSet(), 4058ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher new Camera2RequestSettingsSet() }; 4068ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher sets[0].union(sets[1]); 4078ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals(1, sets[0].getRevision()); 4088ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals(0, sets[1].getRevision()); 4098ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 4108ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 4118ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher private <T> void requestSettingsSetsCheckPairOfProperties(Camera2RequestSettingsSet firstSet, 4128ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet secondSet, 4138ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Key<T> firstKey, 4148ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Key<T> secondKey, 4158ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher T expectedFirstSetFirstValue, 4168ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher T expectedFirstSetSecondValue, 4178ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher T expectedSecondSetFirstValue, 4188ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher T expectedSecondSetSecondValue) { 4198ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals(expectedFirstSetFirstValue, firstSet.get(firstKey)); 4208ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals(expectedFirstSetSecondValue, firstSet.get(secondKey)); 4218ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals(expectedSecondSetFirstValue, secondSet.get(firstKey)); 4228ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher assertEquals(expectedSecondSetSecondValue, secondSet.get(secondKey)); 4238ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 4248ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 4258ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher @Test 4268ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher public void requestSettingsSetUnionChangesReflected() { 4278ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher Camera2RequestSettingsSet[] sets = { new Camera2RequestSettingsSet(), 4288ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher new Camera2RequestSettingsSet() }; 4298ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 4308ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher sets[0].set(CaptureRequest.CONTROL_AE_LOCK, true); 4318ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher sets[1].set(CaptureRequest.CONTROL_AWB_LOCK, true); 4328ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher sets[0].union(sets[1]); 4338ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher sets[1].set(CaptureRequest.CONTROL_AE_LOCK, false); 4348ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetsCheckPairOfProperties(sets[0], sets[1], 4358ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher CaptureRequest.CONTROL_AE_LOCK, CaptureRequest.CONTROL_AWB_LOCK, 4368ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher true, true, false, true); 4378ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 4388ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher sets[0].union(sets[1]); 4398ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetsCheckPairOfProperties(sets[0], sets[1], 4408ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher CaptureRequest.CONTROL_AE_LOCK, CaptureRequest.CONTROL_AWB_LOCK, 4418ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher false, true, false, true); 4428ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher 4438ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher sets[1].set(CaptureRequest.CONTROL_AE_LOCK, false); 4448ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher sets[1].set(CaptureRequest.CONTROL_AWB_LOCK, false); 4458ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher sets[0].union(sets[1]); 4468ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher requestSettingsSetsCheckPairOfProperties(sets[0], sets[1], 4478ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher CaptureRequest.CONTROL_AE_LOCK, CaptureRequest.CONTROL_AWB_LOCK, 4488ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher false, false, false, false); 4498ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher } 4508ba391e3f88936557ad6d44bbef32cb08f4ca310Sol Boucher} 451