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 17package com.android.camera.util; 18 19import android.os.Build; 20 21import java.lang.reflect.Field; 22 23public 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