Home | History | Annotate | Download | only in util
      1 /*
      2  * Copyright (C) 2013 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 com.android.camera.util;
     18 
     19 import android.os.Build;
     20 
     21 import java.lang.reflect.Field;
     22 
     23 public class ApiHelper {
     24     public static final boolean AT_LEAST_16 = Build.VERSION.SDK_INT >= 16;
     25 
     26     public static final boolean HAS_APP_GALLERY =
     27             Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1;
     28 
     29     public static final boolean HAS_ANNOUNCE_FOR_ACCESSIBILITY =
     30             Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
     31     public static final boolean HAS_AUTO_FOCUS_MOVE_CALLBACK =
     32             Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
     33     public static final boolean HAS_MEDIA_ACTION_SOUND =
     34             Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
     35     public static final boolean HAS_MEDIA_COLUMNS_WIDTH_AND_HEIGHT =
     36             Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
     37     public static final boolean HAS_SET_BEAM_PUSH_URIS =
     38             Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
     39     public static final boolean HAS_SURFACE_TEXTURE_RECORDING =
     40             Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
     41     public static final boolean HAS_ROBOTO_MEDIUM_FONT =
     42             Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
     43 
     44     public static final boolean HAS_CAMERA_HDR_PLUS = isKitKatOrHigher();
     45     public static final boolean HAS_CAMERA_HDR =
     46             Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1;
     47     public static final boolean HAS_DISPLAY_LISTENER =
     48             Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1;
     49 
     50     public static final boolean HAS_ORIENTATION_LOCK =
     51             Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2;
     52     public static final boolean HAS_ROTATION_ANIMATION =
     53             Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2;
     54 
     55     public static final boolean HAS_HIDEYBARS = isKitKatOrHigher();
     56 
     57     public static final boolean IS_NEXUS_4 = "mako".equalsIgnoreCase(Build.DEVICE);
     58     public static final boolean IS_NEXUS_5 = "LGE".equalsIgnoreCase(Build.MANUFACTURER)
     59             && "hammerhead".equalsIgnoreCase(Build.DEVICE);
     60     public static final boolean IS_NEXUS_6 = "motorola".equalsIgnoreCase(Build.MANUFACTURER)
     61             && "shamu".equalsIgnoreCase(Build.DEVICE);
     62 
     63     public static int getIntFieldIfExists(Class<?> klass, String fieldName,
     64             Class<?> obj, int defaultVal) {
     65         try {
     66             Field f = klass.getDeclaredField(fieldName);
     67             return f.getInt(obj);
     68         } catch (Exception e) {
     69             return defaultVal;
     70         }
     71     }
     72 
     73     public static boolean isKitKatOrHigher() {
     74         // TODO: Remove CODENAME check as soon as VERSION_CODES.KITKAT is final.
     75         return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT
     76                 || "KeyLimePie".equals(Build.VERSION.CODENAME);
     77     }
     78 
     79     public static boolean isLOrHigher() {
     80         return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP
     81                 || "L".equals(Build.VERSION.CODENAME);
     82     }
     83 }
     84