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
19e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkinimport android.util.AndroidException;
20e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin
21b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala/**
22b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <p><code>CameraAccessException</code> is thrown if a camera device could not
23b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * be queried or opened by the {@link CameraManager}, or if the connection to an
24b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * opened {@link CameraDevice} is no longer valid.</p>
25b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala *
26b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * @see CameraManager
27b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * @see CameraDevice
28b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala */
29e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkinpublic class CameraAccessException extends AndroidException {
30b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala    /**
31b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala     * The camera device is in use already
325c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin     * @hide
33b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala     */
345c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin    public static final int CAMERA_IN_USE = 4;
35b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala
36b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala    /**
37b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala     * The system-wide limit for number of open cameras has been reached,
38b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala     * and more camera devices cannot be opened until previous instances are
39b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala     * closed.
405c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin     * @hide
41b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala     */
425c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin    public static final int MAX_CAMERAS_IN_USE = 5;
43b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala
44b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala    /**
45b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala     * The camera is disabled due to a device policy, and cannot be opened.
46b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala     *
47b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala     * @see android.app.admin.DevicePolicyManager#setCameraDisabled(android.content.ComponentName, boolean)
48b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala     */
495c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin    public static final int CAMERA_DISABLED = 1;
50b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala
51b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala    /**
52b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala     * The camera device is removable and has been disconnected from the Android
5366ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk     * device, or the camera id used with {@link android.hardware.camera2.CameraManager#openCamera}
5466ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk     * is no longer valid, or the camera service has shut down the connection due to a
55b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala     * higher-priority access request for the camera device.
56b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala     */
575c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin    public static final int CAMERA_DISCONNECTED = 2;
585c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin
595c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin    /**
605c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin     * The camera device is currently in the error state.
615c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin     *
625c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin     * <p>The camera has failed to open or has failed at a later time
635c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin     * as a result of some non-user interaction. Refer to
645c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin     * {@link CameraDevice.StateListener#onError} for the exact
655c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin     * nature of the error.</p>
665c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin     *
675c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin     * <p>No further calls to the camera will succeed. Clean up
685c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin     * the camera with {@link CameraDevice#close} and try
695c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin     * handling the error in order to successfully re-open the camera.
705c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin     * </p>
715c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin     *
725c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin     */
735c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin    public static final int CAMERA_ERROR = 3;
74b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala
7566ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk    /**
7666ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk     * A deprecated HAL version is in use.
7766ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk     * @hide
7866ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk     */
7966ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk    public static final int CAMERA_DEPRECATED_HAL = 1000;
8066ef64514464a1bb9c7931993cc8db3d7539f39aRuben Brunk
81e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin    // Make the eclipse warning about serializable exceptions go away
82e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin    private static final long serialVersionUID = 5630338637471475675L; // randomly generated
83e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin
84e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin    private final int mReason;
85b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala
86b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala    /**
87b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala     * The reason for the failure to access the camera.
88b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala     *
89b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala     * @see #CAMERA_DISABLED
90b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala     * @see #CAMERA_DISCONNECTED
915c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin     * @see #CAMERA_ERROR
92b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala     */
93b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala    public final int getReason() {
94b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala        return mReason;
95b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala    }
96b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala
97b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala    public CameraAccessException(int problem) {
98e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin        super(getDefaultMessage(problem));
99b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala        mReason = problem;
100b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala    }
101b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala
102b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala    public CameraAccessException(int problem, String message) {
103b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala        super(message);
104b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala        mReason = problem;
105b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala    }
106b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala
107b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala    public CameraAccessException(int problem, String message, Throwable cause) {
108b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala        super(message, cause);
109b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala        mReason = problem;
110b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala    }
111b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala
112b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala    public CameraAccessException(int problem, Throwable cause) {
113e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin        super(getDefaultMessage(problem), cause);
114b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala        mReason = problem;
115b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala    }
116e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin
117e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin    private static String getDefaultMessage(int problem) {
118e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin        switch (problem) {
119e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin            case CAMERA_IN_USE:
120e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin                return "The camera device is in use already";
121e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin            case MAX_CAMERAS_IN_USE:
122e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin                return "The system-wide limit for number of open cameras has been reached, " +
123e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin                       "and more camera devices cannot be opened until previous instances " +
124e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin                       "are closed.";
1255c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin            case CAMERA_DISCONNECTED:
1265c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin                return "The camera device is removable and has been disconnected from the " +
1275c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin                        "Android device, or the camera service has shut down the connection due " +
1285c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin                        "to a higher-priority access request for the camera device.";
129e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin            case CAMERA_DISABLED:
130e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin                return "The camera is disabled due to a device policy, and cannot be opened.";
1315c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin            case CAMERA_ERROR:
1325c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin                return "The camera device is currently in the error state; " +
1335c9eaf6796a4c972710dd5cd23cdfa334fa8ad2eIgor Murashkin                       "no further calls to it will succeed.";
134e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin        }
135e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin        return null;
136e363fbb2647aeb5ef4c87160d84c6b9ae8d45598Igor Murashkin    }
137b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala}
138