blob: 624cbf26495769b47e7c2b423ad0adc6f7f9a159 [file] [log] [blame]
Owen Lin9199c4d2012-06-20 16:54:24 +08001/*
Angus Kongb50b5cb2013-08-09 14:55:20 -07002 * Copyright (C) 2013 The Android Open Source Project
Owen Lin9199c4d2012-06-20 16:54:24 +08003 *
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
Angus Kongb50b5cb2013-08-09 14:55:20 -070017package com.android.camera.util;
Owen Lin9199c4d2012-06-20 16:54:24 +080018
Owen Lin76bfd872012-06-27 19:01:21 +080019import android.os.Build;
Owen Lin9199c4d2012-06-20 16:54:24 +080020
Angus Kong708bfce2012-07-13 11:54:05 +080021import java.lang.reflect.Field;
22
Owen Lin9199c4d2012-06-20 16:54:24 +080023public class ApiHelper {
Alan Newbergerfdefc722014-11-20 10:03:52 -080024 // Documented value of CPU_ABI on x86 architectures
25 private static final String X86ABI = "x86";
26
Bobby Georgescu8f693972013-03-07 14:15:57 -080027 public static final boolean AT_LEAST_16 = Build.VERSION.SDK_INT >= 16;
Mangesh Ghiwarea5682ab2013-09-19 09:24:23 -070028
Mangesh Ghiware5df64b02013-09-18 18:25:26 -070029 public static final boolean HAS_APP_GALLERY =
30 Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1;
Mangesh Ghiwarea5682ab2013-09-19 09:24:23 -070031
32 public static final boolean HAS_ANNOUNCE_FOR_ACCESSIBILITY =
Sascha Haeberling638e6f02013-09-18 14:28:51 -070033 Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
Chih-Chung Chang9341cc22012-07-04 16:54:02 +080034 public static final boolean HAS_AUTO_FOCUS_MOVE_CALLBACK =
Sascha Haeberling638e6f02013-09-18 14:28:51 -070035 Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
Angus Kong708bfce2012-07-13 11:54:05 +080036 public static final boolean HAS_MEDIA_ACTION_SOUND =
Sascha Haeberling638e6f02013-09-18 14:28:51 -070037 Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
Mangesh Ghiwarea5682ab2013-09-19 09:24:23 -070038 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;
Angus Kongfbf6dba2012-08-07 17:15:14 +080042 public static final boolean HAS_SURFACE_TEXTURE_RECORDING =
Sascha Haeberling638e6f02013-09-18 14:28:51 -070043 Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
Doris Liu040e3c02014-02-10 14:42:08 -080044 public static final boolean HAS_ROBOTO_MEDIUM_FONT =
Doris Liu53b3ddb2013-12-05 13:11:22 -080045 Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
Mangesh Ghiwarea5682ab2013-09-19 09:24:23 -070046
Sascha Haeberling9bf0fd62013-10-03 12:10:48 -070047 public static final boolean HAS_CAMERA_HDR_PLUS = isKitKatOrHigher();
Spike Spragued25eac42014-10-08 18:49:26 -070048 public static final boolean HDR_PLUS_CAN_USE_ARBITRARY_ASPECT_RATIOS = isKitKatMR2OrHigher();
Wu-cheng Liea1d1d22012-08-25 21:10:04 +080049 public static final boolean HAS_CAMERA_HDR =
Sascha Haeberling638e6f02013-09-18 14:28:51 -070050 Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1;
Mangesh Ghiwarea5682ab2013-09-19 09:24:23 -070051 public static final boolean HAS_DISPLAY_LISTENER =
52 Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1;
Michael Kolb6afdb172013-02-25 19:43:56 -080053
Michael Kolbd1e0a6e2013-04-15 11:35:52 -070054 public static final boolean HAS_ORIENTATION_LOCK =
Sascha Haeberling638e6f02013-09-18 14:28:51 -070055 Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2;
Mangesh Ghiwarea5682ab2013-09-19 09:24:23 -070056 public static final boolean HAS_ROTATION_ANIMATION =
57 Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2;
Sascha Haeberling638e6f02013-09-18 14:28:51 -070058
59 public static final boolean HAS_HIDEYBARS = isKitKatOrHigher();
Doris Liuf479c0d2013-05-03 10:26:01 -070060
Alan Newbergerfdefc722014-11-20 10:03:52 -080061 // 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));
64
Alan Newberger2631a152014-09-24 14:23:30 -070065 public static final boolean IS_NEXUS_4 = "mako".equalsIgnoreCase(Build.DEVICE);
Sascha Haeberling4c1bffe2014-08-21 10:01:00 -070066 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);
I-Jong Lin838095a2014-10-27 15:38:32 -070070 public static final boolean IS_NEXUS_9 = "htc".equalsIgnoreCase(Build.MANUFACTURER)
71 && ("flounder".equalsIgnoreCase(Build.DEVICE)
72 || "flounder_lte".equalsIgnoreCase(Build.DEVICE));
Alan Newberger2ebdbd52014-11-04 14:21:33 -080073 public static final boolean IS_HTC = "htc".equalsIgnoreCase(Build.MANUFACTURER);
Angus Kong454d63f2014-05-06 14:45:59 -070074
Puneet Lall7c703ce2014-09-26 11:42:54 -070075 public static final boolean HAS_CAMERA_2_API = isLOrHigher();
76
Wu-cheng Li36d16bc2012-08-21 15:05:17 +080077 public static int getIntFieldIfExists(Class<?> klass, String fieldName,
78 Class<?> obj, int defaultVal) {
79 try {
80 Field f = klass.getDeclaredField(fieldName);
81 return f.getInt(obj);
82 } catch (Exception e) {
83 return defaultVal;
84 }
85 }
86
Sascha Haeberling638e6f02013-09-18 14:28:51 -070087 public static boolean isKitKatOrHigher() {
88 // TODO: Remove CODENAME check as soon as VERSION_CODES.KITKAT is final.
89 return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT
90 || "KeyLimePie".equals(Build.VERSION.CODENAME);
Owen Linb4cadaf2012-07-04 15:48:59 +080091 }
Alan Newbergerfb172ac2014-08-21 14:42:36 -070092
Spike Spragued25eac42014-10-08 18:49:26 -070093 public static boolean isKitKatMR2OrHigher() {
94 return isLOrHigher()
95 || (isKitKatOrHigher() &&
96 ("4.4.4".equals(Build.VERSION.RELEASE) || "4.4.3".equals(Build.VERSION.RELEASE)));
97 }
98
Alan Newbergerfb172ac2014-08-21 14:42:36 -070099 public static boolean isLOrHigher() {
Dianne Hackborn43d66a02014-10-08 09:37:44 -0700100 return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP
Alan Newbergerfb172ac2014-08-21 14:42:36 -0700101 || "L".equals(Build.VERSION.CODENAME);
102 }
Senpo Hu2272f8a2014-12-16 11:56:39 -0800103
104 public static boolean shouldShowAspectRatioDialog() {
105 return IS_NEXUS_4 || IS_NEXUS_5 || IS_NEXUS_6;
106 }
Owen Lin9199c4d2012-06-20 16:54:24 +0800107}