LegacyExceptionUtils.java revision 8ea56f68517ffa42bd5f43ab67f4ebfcfcb0cd23
1ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk/*
2ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk * Copyright (C) 2014 The Android Open Source Project
3ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk *
4ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk * Licensed under the Apache License, Version 2.0 (the "License");
5ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk * you may not use this file except in compliance with the License.
6ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk * You may obtain a copy of the License at
7ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk *
8ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk *      http://www.apache.org/licenses/LICENSE-2.0
9ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk *
10ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk * Unless required by applicable law or agreed to in writing, software
11ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk * distributed under the License is distributed on an "AS IS" BASIS,
12ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk * See the License for the specific language governing permissions and
14ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk * limitations under the License.
15ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk */
16ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk
17ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunkpackage android.hardware.camera2.legacy;
18ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk
19ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunkimport android.hardware.camera2.utils.CameraBinderDecorator;
20ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunkimport android.util.AndroidException;
21ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk
228ea56f68517ffa42bd5f43ab67f4ebfcfcb0cd23Lazar Trsicimport static android.system.OsConstants.ENODEV;
238ea56f68517ffa42bd5f43ab67f4ebfcfcb0cd23Lazar Trsic
24ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk/**
25ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk * Utility class containing exception handling used solely by the compatibility mode shim.
26ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk */
27ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunkpublic class LegacyExceptionUtils {
28ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk    private static final String TAG = "LegacyExceptionUtils";
29ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk
30ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk    /**
31ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk     * Checked exception thrown when a BufferQueue has been abandoned by its consumer.
32ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk     */
33ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk    public static class BufferQueueAbandonedException extends AndroidException {
34ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk        public BufferQueueAbandonedException () {}
35ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk
36ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk        public BufferQueueAbandonedException(String name) {
37ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk            super(name);
38ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk        }
39ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk
40ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk        public BufferQueueAbandonedException(String name, Throwable cause) {
41ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk            super(name, cause);
42ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk        }
43ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk
44ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk        public BufferQueueAbandonedException(Exception cause) {
45ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk            super(cause);
46ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk        }
47ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk    }
48ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk
49ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk    /**
50ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk     * Throw error codes used by legacy device methods as exceptions.
51ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk     *
52ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk     * <p>Non-negative return values are passed through, negative return values are thrown as
53ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk     * exceptions.</p>
54ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk     *
55ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk     * @param errorFlag error to throw as an exception.
568ea56f68517ffa42bd5f43ab67f4ebfcfcb0cd23Lazar Trsic     * @throws {@link BufferQueueAbandonedException} for -ENODEV.
57ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk     * @throws {@link UnsupportedOperationException} for an unknown negative error code.
58ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk     * @return {@code errorFlag} if the value was non-negative, throws otherwise.
59ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk     */
60ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk    public static int throwOnError(int errorFlag) throws BufferQueueAbandonedException {
618ea56f68517ffa42bd5f43ab67f4ebfcfcb0cd23Lazar Trsic        if (errorFlag == CameraBinderDecorator.NO_ERROR) {
628ea56f68517ffa42bd5f43ab67f4ebfcfcb0cd23Lazar Trsic            return CameraBinderDecorator.NO_ERROR;
638ea56f68517ffa42bd5f43ab67f4ebfcfcb0cd23Lazar Trsic        } else if (errorFlag == -ENODEV) {
648ea56f68517ffa42bd5f43ab67f4ebfcfcb0cd23Lazar Trsic            throw new BufferQueueAbandonedException();
65ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk        }
66ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk
67ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk        if (errorFlag < 0) {
68ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk            throw new UnsupportedOperationException("Unknown error " + errorFlag);
69ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk        }
70ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk        return errorFlag;
71ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk    }
72ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk
73ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk    private LegacyExceptionUtils() {
74ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk        throw new AssertionError();
75ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk    }
76ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk}
77