1b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala/* 2b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * Copyright (C) 2013 The Android Open Source Project 3b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 4b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License"); 5b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * you may not use this file except in compliance with the License. 6b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * You may obtain a copy of the License at 7b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 8b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * http://www.apache.org/licenses/LICENSE-2.0 9b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 10b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * Unless required by applicable law or agreed to in writing, software 11b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS, 12b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * See the License for the specific language governing permissions and 14b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * limitations under the License. 15b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala */ 16b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 172f1a2e423e0fbb64467d6fcfa4e82c6384f31210Eino-Ville Talvalapackage android.hardware.camera2; 18b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 198b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvalaimport android.annotation.NonNull; 208b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvalaimport android.annotation.IntDef; 21e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkinimport android.util.AndroidException; 22e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin 238b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvalaimport java.lang.annotation.Retention; 248b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvalaimport java.lang.annotation.RetentionPolicy; 258b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvala 26b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala/** 27b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <p><code>CameraAccessException</code> is thrown if a camera device could not 28b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * be queried or opened by the {@link CameraManager}, or if the connection to an 29b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * opened {@link CameraDevice} is no longer valid.</p> 30b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 31b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * @see CameraManager 32b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * @see CameraDevice 33b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala */ 34e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkinpublic class CameraAccessException extends AndroidException { 35b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala /** 36c8c109b4030c1a80f0572d32311e24d1c4b0e03dChien-Yu Chen * The camera device is in use already. 37b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala */ 385c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin public static final int CAMERA_IN_USE = 4; 39b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 40b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala /** 41c8c109b4030c1a80f0572d32311e24d1c4b0e03dChien-Yu Chen * The system-wide limit for number of open cameras or camera resources has 42c8c109b4030c1a80f0572d32311e24d1c4b0e03dChien-Yu Chen * been reached, and more camera devices cannot be opened or torch mode 43c8c109b4030c1a80f0572d32311e24d1c4b0e03dChien-Yu Chen * cannot be turned on until previous instances are closed. 44b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala */ 455c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin public static final int MAX_CAMERAS_IN_USE = 5; 46b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 47b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala /** 48b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * The camera is disabled due to a device policy, and cannot be opened. 49b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 50b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * @see android.app.admin.DevicePolicyManager#setCameraDisabled(android.content.ComponentName, boolean) 51b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala */ 525c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin public static final int CAMERA_DISABLED = 1; 53b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 54b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala /** 55b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * The camera device is removable and has been disconnected from the Android 5666ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk * device, or the camera id used with {@link android.hardware.camera2.CameraManager#openCamera} 5766ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk * is no longer valid, or the camera service has shut down the connection due to a 58b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * higher-priority access request for the camera device. 59b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala */ 605c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin public static final int CAMERA_DISCONNECTED = 2; 615c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin 625c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin /** 635c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin * The camera device is currently in the error state. 645c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin * 655c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin * <p>The camera has failed to open or has failed at a later time 665c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin * as a result of some non-user interaction. Refer to 67fd887436bd111e4d2c7307578a51b5070025b7f2Eino-Ville Talvala * {@link CameraDevice.StateCallback#onError} for the exact 685c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin * nature of the error.</p> 695c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin * 705c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin * <p>No further calls to the camera will succeed. Clean up 715c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin * the camera with {@link CameraDevice#close} and try 725c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin * handling the error in order to successfully re-open the camera. 735c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin * </p> 745c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin * 755c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin */ 765c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin public static final int CAMERA_ERROR = 3; 77b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 7866ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk /** 7966ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk * A deprecated HAL version is in use. 8066ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk * @hide 8166ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk */ 8266ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk public static final int CAMERA_DEPRECATED_HAL = 1000; 8366ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk 848b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvala /** @hide */ 858b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvala @Retention(RetentionPolicy.SOURCE) 868b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvala @IntDef( 878b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvala {CAMERA_IN_USE, 888b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvala MAX_CAMERAS_IN_USE, 898b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvala CAMERA_DISABLED, 908b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvala CAMERA_DISCONNECTED, 918b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvala CAMERA_ERROR}) 928b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvala public @interface AccessError {}; 938b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvala 94e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin // Make the eclipse warning about serializable exceptions go away 95e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin private static final long serialVersionUID = 5630338637471475675L; // randomly generated 96e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin 97e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin private final int mReason; 98b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 99b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala /** 100b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * The reason for the failure to access the camera. 101b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 102b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * @see #CAMERA_DISABLED 103b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * @see #CAMERA_DISCONNECTED 1045c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin * @see #CAMERA_ERROR 105b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala */ 1068b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvala @AccessError 107b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala public final int getReason() { 108b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala return mReason; 109b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala } 110b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 1118b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvala public CameraAccessException(@AccessError int problem) { 112e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin super(getDefaultMessage(problem)); 113b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala mReason = problem; 114b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala } 115b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 1168b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvala public CameraAccessException(@AccessError int problem, String message) { 1175d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala super(getCombinedMessage(problem, message)); 118b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala mReason = problem; 119b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala } 120b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 1218b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvala public CameraAccessException(@AccessError int problem, String message, Throwable cause) { 1225d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala super(getCombinedMessage(problem, message), cause); 123b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala mReason = problem; 124b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala } 125b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 1268b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvala public CameraAccessException(@AccessError int problem, Throwable cause) { 127e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin super(getDefaultMessage(problem), cause); 128b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala mReason = problem; 129b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala } 130e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin 131b6a781066e6b0f2578cafefdc61c9ba18c0efc2eRuben Brunk /** 132b6a781066e6b0f2578cafefdc61c9ba18c0efc2eRuben Brunk * @hide 133b6a781066e6b0f2578cafefdc61c9ba18c0efc2eRuben Brunk */ 1348b905578b54041f7d0b8dc04dd158d16d28262a1Eino-Ville Talvala public static String getDefaultMessage(@AccessError int problem) { 135e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin switch (problem) { 136e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin case CAMERA_IN_USE: 137e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin return "The camera device is in use already"; 138e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin case MAX_CAMERAS_IN_USE: 139e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin return "The system-wide limit for number of open cameras has been reached, " + 140e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin "and more camera devices cannot be opened until previous instances " + 141e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin "are closed."; 1425c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin case CAMERA_DISCONNECTED: 1435c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin return "The camera device is removable and has been disconnected from the " + 1445c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin "Android device, or the camera service has shut down the connection due " + 1455c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin "to a higher-priority access request for the camera device."; 146e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin case CAMERA_DISABLED: 147e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin return "The camera is disabled due to a device policy, and cannot be opened."; 1485c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin case CAMERA_ERROR: 1495c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin return "The camera device is currently in the error state; " + 1505c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin "no further calls to it will succeed."; 151e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin } 152e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin return null; 153e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin } 1545d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala 1555d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala private static String getCombinedMessage(@AccessError int problem, String message) { 1565d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala String problemString = getProblemString(problem); 1575d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala return String.format("%s (%d): %s", problemString, problem, message); 1585d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala } 1595d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala 1605d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala private static String getProblemString(int problem) { 1615d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala String problemString; 1625d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala switch (problem) { 1635d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala case CAMERA_IN_USE: 1645d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala problemString = "CAMERA_IN_USE"; 1655d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala break; 1665d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala case MAX_CAMERAS_IN_USE: 1675d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala problemString = "MAX_CAMERAS_IN_USE"; 1685d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala break; 1695d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala case CAMERA_DISCONNECTED: 1705d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala problemString = "CAMERA_DISCONNECTED"; 1715d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala break; 1725d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala case CAMERA_DISABLED: 1735d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala problemString = "CAMERA_DISABLED"; 1745d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala break; 1755d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala case CAMERA_ERROR: 1765d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala problemString = "CAMERA_ERROR"; 1775d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala break; 1785d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala case CAMERA_DEPRECATED_HAL: 1795d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala problemString = "CAMERA_DEPRECATED_HAL"; 1805d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala break; 1815d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala default: 1825d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala problemString = "<UNKNOWN ERROR>"; 1835d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala } 1845d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala return problemString; 1855d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala } 1865d2d7788f1759b0f3d2c057af0b3ea61b0354feeEino-Ville Talvala 187b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala} 188