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