2 * Copyright (C) 2013 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package com.android.camera.util;
19 import android.os.Build;
21 import java.lang.reflect.Field;
23 public class ApiHelper {
24 // Documented value of CPU_ABI on x86 architectures
25 private static final String X86ABI = "x86";
27 public static final boolean AT_LEAST_16 = Build.VERSION.SDK_INT >= 16;
29 public static final boolean HAS_APP_GALLERY =
30 Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1;
32 public static final boolean HAS_ANNOUNCE_FOR_ACCESSIBILITY =
33 Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
34 public static final boolean HAS_AUTO_FOCUS_MOVE_CALLBACK =
35 Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
36 public static final boolean HAS_MEDIA_ACTION_SOUND =
37 Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
38 public static final boolean HAS_MEDIA_COLUMNS_WIDTH_AND_HEIGHT =
39 Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
40 public static final boolean HAS_SET_BEAM_PUSH_URIS =
41 Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
42 public static final boolean HAS_SURFACE_TEXTURE_RECORDING =
43 Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
44 public static final boolean HAS_ROBOTO_MEDIUM_FONT =
45 Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
47 public static final boolean HAS_CAMERA_HDR_PLUS = isKitKatOrHigher();
48 public static final boolean HDR_PLUS_CAN_USE_ARBITRARY_ASPECT_RATIOS = isKitKatMR2OrHigher();
49 public static final boolean HAS_CAMERA_HDR =
50 Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1;
51 public static final boolean HAS_DISPLAY_LISTENER =
52 Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1;
54 public static final boolean HAS_ORIENTATION_LOCK =
55 Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2;
56 public static final boolean HAS_ROTATION_ANIMATION =
57 Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2;
59 public static final boolean HAS_HIDEYBARS = isKitKatOrHigher();
61 // Don't use renderscript for x86 K, L is OK. See b/18435492
62 public static final boolean HAS_RENDERSCRIPT =
63 !(Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT && X86ABI.equals(Build.CPU_ABI));
65 public static final boolean IS_NEXUS_4 = "mako".equalsIgnoreCase(Build.DEVICE);
66 public static final boolean IS_NEXUS_5 = "LGE".equalsIgnoreCase(Build.MANUFACTURER)
67 && "hammerhead".equalsIgnoreCase(Build.DEVICE);
68 public static final boolean IS_NEXUS_6 = "motorola".equalsIgnoreCase(Build.MANUFACTURER)
69 && "shamu".equalsIgnoreCase(Build.DEVICE);
70 public static final boolean IS_NEXUS_9 = "htc".equalsIgnoreCase(Build.MANUFACTURER)
71 && ("flounder".equalsIgnoreCase(Build.DEVICE)
72 || "flounder_lte".equalsIgnoreCase(Build.DEVICE));
74 public static final boolean HAS_CAMERA_2_API = isLOrHigher();
76 public static int getIntFieldIfExists(Class<?> klass, String fieldName,
77 Class<?> obj, int defaultVal) {
79 Field f = klass.getDeclaredField(fieldName);
81 } catch (Exception e) {
86 public static boolean isKitKatOrHigher() {
87 // TODO: Remove CODENAME check as soon as VERSION_CODES.KITKAT is final.
88 return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT
89 || "KeyLimePie".equals(Build.VERSION.CODENAME);
92 public static boolean isKitKatMR2OrHigher() {
94 || (isKitKatOrHigher() &&
95 ("4.4.4".equals(Build.VERSION.RELEASE) || "4.4.3".equals(Build.VERSION.RELEASE)));
98 public static boolean isLollipop() {
99 return Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP;
102 public static boolean isLOrHigher() {
103 return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP
104 || "L".equals(Build.VERSION.CODENAME) || "LOLLIPOP".equals(Build.VERSION.CODENAME);
107 public static boolean isLMr1OrHigher() {
108 return Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP;
111 public static boolean isLorLMr1() {
112 return Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP
113 || Build.VERSION.SDK_INT == 22; // Lollipop MR1