14491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin/* 24491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * Copyright (C) 2013 The Android Open Source Project 34491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * 44491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * Licensed under the Apache License, Version 2.0 (the "License"); 54491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * you may not use this file except in compliance with the License. 64491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * You may obtain a copy of the License at 74491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * 84491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * http://www.apache.org/licenses/LICENSE-2.0 94491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * 104491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * Unless required by applicable law or agreed to in writing, software 114491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * distributed under the License is distributed on an "AS IS" BASIS, 124491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * See the License for the specific language governing permissions and 144491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * limitations under the License. 154491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin */ 164491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 174491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinpackage com.android.mediaframeworktest.integration; 184491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 194491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.hardware.CameraInfo; 204491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.hardware.ICamera; 214491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.hardware.ICameraClient; 224491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.hardware.ICameraServiceListener; 234491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.hardware.IProCameraCallbacks; 244491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.hardware.IProCameraUser; 252f1a2e423e0fbb64467d6fcfa4e82c6384f31210Eino-Ville Talvalaimport android.hardware.camera2.CameraMetadata; 262f1a2e423e0fbb64467d6fcfa4e82c6384f31210Eino-Ville Talvalaimport android.hardware.camera2.ICameraDeviceCallbacks; 272f1a2e423e0fbb64467d6fcfa4e82c6384f31210Eino-Ville Talvalaimport android.hardware.camera2.ICameraDeviceUser; 2870c2207c34cf0e6b3b383b1b1500ff5385aa51a6Eino-Ville Talvalaimport android.hardware.camera2.impl.CameraMetadataNative; 2966ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunkimport android.hardware.camera2.utils.BinderHolder; 3066ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunkimport android.hardware.camera2.utils.CameraBinderDecorator; 314491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.os.Binder; 324491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.os.IBinder; 334491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.os.RemoteException; 344491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.test.AndroidTestCase; 354491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.test.suitebuilder.annotation.SmallTest; 364491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinimport android.util.Log; 374491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 384491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin/** 3970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * <p> 404491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * Junit / Instrumentation test case for the camera2 api 4170725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * </p> 4270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * <p> 4370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * To run only tests in this class: 4470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * </p> 454491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * 4670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * <pre> 474491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * adb shell am instrument \ 4870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * -e class com.android.mediaframeworktest.integration.CameraBinderTest \ 4970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner 5070725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * </pre> 514491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin */ 524491d684f47fcf1e05652f910587a930be8a4135Igor Murashkinpublic class CameraBinderTest extends AndroidTestCase { 5370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin static String TAG = "CameraBinderTest"; 544491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 5570725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin protected CameraBinderTestUtils mUtils; 564491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 574491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin public CameraBinderTest() { 584491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 594491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 6070725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin @Override 614491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin protected void setUp() throws Exception { 624491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin super.setUp(); 634491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 6470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin mUtils = new CameraBinderTestUtils(getContext()); 654491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 664491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 674491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin @SmallTest 684491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin public void testNumberOfCameras() throws Exception { 6970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 7070725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin int numCameras = mUtils.getCameraService().getNumberOfCameras(); 7170725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin assertTrue("At least this many cameras: " + mUtils.getGuessedNumCameras(), 7270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin numCameras >= mUtils.getGuessedNumCameras()); 734491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin Log.v(TAG, "Number of cameras " + numCameras); 744491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 754491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 764491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin @SmallTest 774491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin public void testCameraInfo() throws Exception { 7870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin for (int cameraId = 0; cameraId < mUtils.getGuessedNumCameras(); ++cameraId) { 794491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 804491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin CameraInfo info = new CameraInfo(); 814491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin info.info.facing = -1; 824491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin info.info.orientation = -1; 834491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 8470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin assertTrue( 8570725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin "Camera service returned info for camera " + cameraId, 8670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin mUtils.getCameraService().getCameraInfo(cameraId, info) == 8770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin CameraBinderTestUtils.NO_ERROR); 884491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin assertTrue("Facing was not set for camera " + cameraId, info.info.facing != -1); 894491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin assertTrue("Orientation was not set for camera " + cameraId, 904491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin info.info.orientation != -1); 914491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 924491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin Log.v(TAG, "Camera " + cameraId + " info: facing " + info.info.facing 934491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin + ", orientation " + info.info.orientation); 944491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 954491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 964491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 974491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin static abstract class DummyBase extends Binder implements android.os.IInterface { 984491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin @Override 994491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin public IBinder asBinder() { 1004491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin return this; 1014491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 1024491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 1034491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 1044491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin static class DummyCameraClient extends DummyBase implements ICameraClient { 1054491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 1064491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 1074491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin @SmallTest 1084491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin public void testConnect() throws Exception { 10970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin for (int cameraId = 0; cameraId < mUtils.getGuessedNumCameras(); ++cameraId) { 1104491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 1114491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin ICameraClient dummyCallbacks = new DummyCameraClient(); 1124491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 1134491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin String clientPackageName = getContext().getPackageName(); 1144491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 11566ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk BinderHolder holder = new BinderHolder(); 11666ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk CameraBinderDecorator.newInstance(mUtils.getCameraService()) 11766ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk .connect(dummyCallbacks, cameraId, clientPackageName, 11866ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk CameraBinderTestUtils.USE_CALLING_UID, holder); 11966ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk ICamera cameraUser = ICamera.Stub.asInterface(holder.getBinder()); 1204491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin assertNotNull(String.format("Camera %s was null", cameraId), cameraUser); 1214491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 1224491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin Log.v(TAG, String.format("Camera %s connected", cameraId)); 1234491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 1244491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin cameraUser.disconnect(); 1254491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 1264491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 1274491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 1284491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin static class DummyProCameraCallbacks extends DummyBase implements IProCameraCallbacks { 1294491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 1304491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 1314491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin @SmallTest 1324491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin public void testConnectPro() throws Exception { 13370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin for (int cameraId = 0; cameraId < mUtils.getGuessedNumCameras(); ++cameraId) { 1344491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 1354491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin IProCameraCallbacks dummyCallbacks = new DummyProCameraCallbacks(); 1364491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 1374491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin String clientPackageName = getContext().getPackageName(); 1384491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 13966ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk BinderHolder holder = new BinderHolder(); 14066ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk CameraBinderDecorator.newInstance(mUtils.getCameraService()) 14166ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk .connectPro(dummyCallbacks, cameraId, 14266ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk clientPackageName, CameraBinderTestUtils.USE_CALLING_UID, holder); 14366ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk IProCameraUser cameraUser = IProCameraUser.Stub.asInterface(holder.getBinder()); 14470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin assertNotNull(String.format("Camera %s was null", cameraId), cameraUser); 14570725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 14670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin Log.v(TAG, String.format("Camera %s connected", cameraId)); 14770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 14870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin cameraUser.disconnect(); 14970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin } 15070725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin } 15170725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 152693e21d6052b32ad7815d9c0d7bd01fd6170a608Zhijun He static class DummyCameraDeviceCallbacks extends ICameraDeviceCallbacks.Stub { 15370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 15470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin @Override 155e841d4e16526a2e466f662305682aa3459d07c15Eino-Ville Talvala public void onCameraError(int errorCode) { 15670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin } 15770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 15870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin @Override 159e841d4e16526a2e466f662305682aa3459d07c15Eino-Ville Talvala public void onCameraIdle() { 160e841d4e16526a2e466f662305682aa3459d07c15Eino-Ville Talvala } 161e841d4e16526a2e466f662305682aa3459d07c15Eino-Ville Talvala 162e841d4e16526a2e466f662305682aa3459d07c15Eino-Ville Talvala @Override 163e841d4e16526a2e466f662305682aa3459d07c15Eino-Ville Talvala public void onCaptureStarted(int requestId, long timestamp) { 164e841d4e16526a2e466f662305682aa3459d07c15Eino-Ville Talvala } 165e841d4e16526a2e466f662305682aa3459d07c15Eino-Ville Talvala 166e841d4e16526a2e466f662305682aa3459d07c15Eino-Ville Talvala @Override 167e841d4e16526a2e466f662305682aa3459d07c15Eino-Ville Talvala public void onResultReceived(int frameId, CameraMetadataNative result) 168e841d4e16526a2e466f662305682aa3459d07c15Eino-Ville Talvala throws RemoteException { 16970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin } 17070725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin } 17170725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 17270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin @SmallTest 17370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin public void testConnectDevice() throws Exception { 17470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin for (int cameraId = 0; cameraId < mUtils.getGuessedNumCameras(); ++cameraId) { 17570725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 17670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin ICameraDeviceCallbacks dummyCallbacks = new DummyCameraDeviceCallbacks(); 17770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 17870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin String clientPackageName = getContext().getPackageName(); 17970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 18066ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk BinderHolder holder = new BinderHolder(); 18166ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk CameraBinderDecorator.newInstance(mUtils.getCameraService()) 18266ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk .connectDevice(dummyCallbacks, cameraId, 18366ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk clientPackageName, CameraBinderTestUtils.USE_CALLING_UID, holder); 18466ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk ICameraDeviceUser cameraUser = ICameraDeviceUser.Stub.asInterface(holder.getBinder()); 1854491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin assertNotNull(String.format("Camera %s was null", cameraId), cameraUser); 1864491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 1874491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin Log.v(TAG, String.format("Camera %s connected", cameraId)); 1884491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 1894491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin cameraUser.disconnect(); 1904491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 1914491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 1924491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 193693e21d6052b32ad7815d9c0d7bd01fd6170a608Zhijun He static class DummyCameraServiceListener extends ICameraServiceListener.Stub { 1944491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin @Override 1954491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin public void onStatusChanged(int status, int cameraId) 1964491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin throws RemoteException { 1974491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin Log.v(TAG, String.format("Camera %d has status changed to 0x%x", cameraId, status)); 1984491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 1994491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 2004491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 2014491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin /** 20270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * <pre> 2034491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin * adb shell am instrument \ 20470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testAddRemoveListeners' \ 20570725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner 20670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * </pre> 2074491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin */ 2084491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin @SmallTest 2094491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin public void testAddRemoveListeners() throws Exception { 21070725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin for (int cameraId = 0; cameraId < mUtils.getGuessedNumCameras(); ++cameraId) { 2114491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 2124491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin ICameraServiceListener listener = new DummyCameraServiceListener(); 2134491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin 21470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin assertTrue( 21570725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin "Listener was removed before added", 21670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin mUtils.getCameraService().removeListener(listener) == 21770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin CameraBinderTestUtils.BAD_VALUE); 21870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 21970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin assertTrue("Listener was not added", 22070725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin mUtils.getCameraService().addListener(listener) == 22170725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin CameraBinderTestUtils.NO_ERROR); 22270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin assertTrue( 22370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin "Listener was wrongly added again", 22470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin mUtils.getCameraService().addListener(listener) == 22570725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin CameraBinderTestUtils.ALREADY_EXISTS); 22670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 22770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin assertTrue( 22870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin "Listener was not removed", 22970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin mUtils.getCameraService().removeListener(listener) == 23070725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin CameraBinderTestUtils.NO_ERROR); 23170725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin assertTrue( 23270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin "Listener was wrongly removed again", 23370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin mUtils.getCameraService().removeListener(listener) == 23470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin CameraBinderTestUtils.BAD_VALUE); 2354491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 2364491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin } 2374491d684f47fcf1e05652f910587a930be8a4135Igor Murashkin} 238