/* * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.camera; import android.hardware.camera2.CameraDevice; import com.android.camera2.R; /** * Handles fatal application errors. *
* Usage: * *
* if (unrecoverableErrorDetected) {
* fatalErrorHandler.handleFatalError(Reason.CANNOT_CONNECT_TO_CAMERA);
* }
*
*/
public interface FatalErrorHandler {
public static enum Reason {
CANNOT_CONNECT_TO_CAMERA(
R.string.error_cannot_connect_camera,
R.string.feedback_description_camera_access,
true),
CAMERA_HAL_FAILED(
R.string.error_cannot_connect_camera,
R.string.feedback_description_camera_access,
true),
CAMERA_DISABLED_BY_SECURITY_POLICY(
R.string.error_camera_disabled,
R.string.feedback_description_camera_access,
true),
MEDIA_STORAGE_FAILURE(
R.string.error_media_storage_failure,
R.string.feedback_description_save_photo,
false);
private final int mDialogMsgId;
private final int mFeedbackMsgId;
private final boolean mFinishActivity;
/**
* @param dialogMsgId The resource ID of string to display in the fatal
* error dialog.
* @param feedbackMsgId The resource ID of default string to display in
* the feedback dialog, if the user chooses to submit
* feedback from the dialog.
* @param finishActivity Whether the activity should be finished as a
* result of this error.
*/
Reason(int dialogMsgId, int feedbackMsgId, boolean finishActivity) {
mDialogMsgId = dialogMsgId;
mFeedbackMsgId = feedbackMsgId;
mFinishActivity = finishActivity;
}
/**
* @return The resource ID of the string to display in the fatal error
* dialog.
*/
public int getFeedbackMsgId() {
return mFeedbackMsgId;
}
/**
* @return The resource ID of the default string to display in the
* feedback dialog, if the user chooses to submit feedback from
* the dialog.
*/
public int getDialogMsgId() {
return mDialogMsgId;
}
/**
* @return Whether the activity should be finished as a result of this
* error.
*/
public boolean doesFinishActivity() {
return mFinishActivity;
}
/**
* Creates a new Reason based on an error code for
* {@link CameraDevice.StateCallback#onError}.
*
* @param error The error code. One of
* CameraDevice.StateCallback.ERROR_*
* @return The appropriate Reason.
*/
public static Reason fromCamera2CameraDeviceStateCallbackError(int error) {
// TODO Use a more descriptive reason to distinguish between
// different types of errors.
switch (error) {
case CameraDevice.StateCallback.ERROR_CAMERA_DEVICE:
case CameraDevice.StateCallback.ERROR_CAMERA_DISABLED:
case CameraDevice.StateCallback.ERROR_CAMERA_IN_USE:
case CameraDevice.StateCallback.ERROR_CAMERA_SERVICE:
case CameraDevice.StateCallback.ERROR_MAX_CAMERAS_IN_USE:
default:
return CANNOT_CONNECT_TO_CAMERA;
}
}
}
/**
* Handles Media Storage Failures - ie. images aren't being saved to disk.
*/
public void onMediaStorageFailure();
/**
* Handles error where the camera cannot be opened.
*/
public void onCameraOpenFailure();
/**
* Handles error where the camera cannot be reconnected.
*/
public void onCameraReconnectFailure();
/**
* Handles generic error where the camera is unavailable. Only use this if
* you are unsure what caused the error, such as a reconnection or open.
* failure
*/
public void onGenericCameraAccessFailure();
/**
* Handles error where the camera is disabled due to security.
*/
public void onCameraDisabledFailure();
/**
* Handles a fatal error, e.g. by displaying the appropriate dialog and
* exiting the activity.
* @deprecated use specific implementations above instead
*/
@Deprecated
public void handleFatalError(Reason reason);
}