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 22ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk/** 23ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk * Utility class containing exception handling used solely by the compatibility mode shim. 24ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk */ 25ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunkpublic class LegacyExceptionUtils { 26ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk private static final String TAG = "LegacyExceptionUtils"; 27ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk 28ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk /** 29ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk * Checked exception thrown when a BufferQueue has been abandoned by its consumer. 30ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk */ 31ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk public static class BufferQueueAbandonedException extends AndroidException { 32ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk public BufferQueueAbandonedException () {} 33ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk 34ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk public BufferQueueAbandonedException(String name) { 35ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk super(name); 36ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk } 37ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk 38ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk public BufferQueueAbandonedException(String name, Throwable cause) { 39ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk super(name, cause); 40ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk } 41ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk 42ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk public BufferQueueAbandonedException(Exception cause) { 43ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk super(cause); 44ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk } 45ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk } 46ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk 47ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk /** 48ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk * Throw error codes used by legacy device methods as exceptions. 49ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk * 50ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk * <p>Non-negative return values are passed through, negative return values are thrown as 51ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk * exceptions.</p> 52ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk * 53ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk * @param errorFlag error to throw as an exception. 54ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk * @throws {@link BufferQueueAbandonedException} for {@link CameraBinderDecorator#ENODEV}. 55ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk * @throws {@link UnsupportedOperationException} for an unknown negative error code. 56ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk * @return {@code errorFlag} if the value was non-negative, throws otherwise. 57ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk */ 58ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk public static int throwOnError(int errorFlag) throws BufferQueueAbandonedException { 59ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk switch (errorFlag) { 60ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk case CameraBinderDecorator.NO_ERROR: { 61ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk return CameraBinderDecorator.NO_ERROR; 62ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk } 63ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk case CameraBinderDecorator.ENODEV: { 64ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk throw new BufferQueueAbandonedException(); 65ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk } 66ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk } 67ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk 68ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk if (errorFlag < 0) { 69ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk throw new UnsupportedOperationException("Unknown error " + errorFlag); 70ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk } 71ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk return errorFlag; 72ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk } 73ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk 74ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk private LegacyExceptionUtils() { 75ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk throw new AssertionError(); 76ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk } 77ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk} 78