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