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