ApiHelper.java revision 040e3c053cc0d2097332de24cf5328a26a8e7332
19199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin/*
2b50b5cbfbc0a67db6fc43373363b10381c9c61a3Angus Kong * Copyright (C) 2013 The Android Open Source Project
39199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin *
49199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin * Licensed under the Apache License, Version 2.0 (the "License");
59199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin * you may not use this file except in compliance with the License.
69199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin * You may obtain a copy of the License at
79199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin *
89199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin *      http://www.apache.org/licenses/LICENSE-2.0
99199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin *
109199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin * Unless required by applicable law or agreed to in writing, software
119199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin * distributed under the License is distributed on an "AS IS" BASIS,
129199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin * See the License for the specific language governing permissions and
149199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin * limitations under the License.
159199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin */
169199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin
17b50b5cbfbc0a67db6fc43373363b10381c9c61a3Angus Kongpackage com.android.camera.util;
189199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin
1976bfd87c90c98a46c06ea67dd895fc8f016f7267Owen Linimport android.os.Build;
209199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin
21708bfce7f38274073611a32de69e16fe8bf292eaAngus Kongimport java.lang.reflect.Field;
22708bfce7f38274073611a32de69e16fe8bf292eaAngus Kong
239199c4d69ebc9b9589271d1e62ba80138b1db700Owen Linpublic class ApiHelper {
248f69397b9c6acf6da28244a8ccea596546f34f87Bobby Georgescu    public static final boolean AT_LEAST_16 = Build.VERSION.SDK_INT >= 16;
25a5682ab08e1d42fe272ec877929478b4adb769f5Mangesh Ghiware
265df64b0a818d4f85cb14602db725f05b0055c1d9Mangesh Ghiware    public static final boolean HAS_APP_GALLERY =
275df64b0a818d4f85cb14602db725f05b0055c1d9Mangesh Ghiware            Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1;
28a5682ab08e1d42fe272ec877929478b4adb769f5Mangesh Ghiware
29a5682ab08e1d42fe272ec877929478b4adb769f5Mangesh Ghiware    public static final boolean HAS_ANNOUNCE_FOR_ACCESSIBILITY =
30638e6f06c877d90b907f66ea9c22b3c6b73c7384Sascha Haeberling            Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
319341cc2b9e2939e9915ff62fa9b11e56951947d1Chih-Chung Chang    public static final boolean HAS_AUTO_FOCUS_MOVE_CALLBACK =
32638e6f06c877d90b907f66ea9c22b3c6b73c7384Sascha Haeberling            Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
33708bfce7f38274073611a32de69e16fe8bf292eaAngus Kong    public static final boolean HAS_MEDIA_ACTION_SOUND =
34638e6f06c877d90b907f66ea9c22b3c6b73c7384Sascha Haeberling            Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
35a5682ab08e1d42fe272ec877929478b4adb769f5Mangesh Ghiware    public static final boolean HAS_MEDIA_COLUMNS_WIDTH_AND_HEIGHT =
36a5682ab08e1d42fe272ec877929478b4adb769f5Mangesh Ghiware            Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
37a5682ab08e1d42fe272ec877929478b4adb769f5Mangesh Ghiware    public static final boolean HAS_SET_BEAM_PUSH_URIS =
38a5682ab08e1d42fe272ec877929478b4adb769f5Mangesh Ghiware            Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
39fbf6dbaf20e1508f19468c33021813d078afdb35Angus Kong    public static final boolean HAS_SURFACE_TEXTURE_RECORDING =
40638e6f06c877d90b907f66ea9c22b3c6b73c7384Sascha Haeberling            Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
41040e3c053cc0d2097332de24cf5328a26a8e7332Doris Liu    public static final boolean HAS_ROBOTO_MEDIUM_FONT =
4253b3ddbae16c5efbac842e158525720d0b9108cbDoris Liu            Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
43a5682ab08e1d42fe272ec877929478b4adb769f5Mangesh Ghiware
449bf0fd606a624138b8c1123d168f06a24c4d20a3Sascha Haeberling    public static final boolean HAS_CAMERA_HDR_PLUS = isKitKatOrHigher();
45ea1d1d283f6e75f012fe091608cf0b588866a511Wu-cheng Li    public static final boolean HAS_CAMERA_HDR =
46638e6f06c877d90b907f66ea9c22b3c6b73c7384Sascha Haeberling            Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1;
47a5682ab08e1d42fe272ec877929478b4adb769f5Mangesh Ghiware    public static final boolean HAS_DISPLAY_LISTENER =
48a5682ab08e1d42fe272ec877929478b4adb769f5Mangesh Ghiware            Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1;
496afdb1769adddaf94116a7d1cad82740a9455641Michael Kolb
50d1e0a6e78d686cdc259a2978e988cdd734ca6a2fMichael Kolb    public static final boolean HAS_ORIENTATION_LOCK =
51638e6f06c877d90b907f66ea9c22b3c6b73c7384Sascha Haeberling            Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2;
52a5682ab08e1d42fe272ec877929478b4adb769f5Mangesh Ghiware    public static final boolean HAS_ROTATION_ANIMATION =
53a5682ab08e1d42fe272ec877929478b4adb769f5Mangesh Ghiware            Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2;
54638e6f06c877d90b907f66ea9c22b3c6b73c7384Sascha Haeberling
55638e6f06c877d90b907f66ea9c22b3c6b73c7384Sascha Haeberling    public static final boolean HAS_HIDEYBARS = isKitKatOrHigher();
56f479c0db587cb21ea0699e2421f1d0d8e5ada289Doris Liu
5736d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li    public static int getIntFieldIfExists(Class<?> klass, String fieldName,
5836d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li            Class<?> obj, int defaultVal) {
5936d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li        try {
6036d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li            Field f = klass.getDeclaredField(fieldName);
6136d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li            return f.getInt(obj);
6236d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li        } catch (Exception e) {
6336d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li            return defaultVal;
6436d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li        }
6536d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li    }
6636d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li
67638e6f06c877d90b907f66ea9c22b3c6b73c7384Sascha Haeberling    public static boolean isKitKatOrHigher() {
68638e6f06c877d90b907f66ea9c22b3c6b73c7384Sascha Haeberling        // TODO: Remove CODENAME check as soon as VERSION_CODES.KITKAT is final.
69638e6f06c877d90b907f66ea9c22b3c6b73c7384Sascha Haeberling        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT
70638e6f06c877d90b907f66ea9c22b3c6b73c7384Sascha Haeberling                || "KeyLimePie".equals(Build.VERSION.CODENAME);
71b4cadafb8c454aff10b4096a801cc71f8519fe8aOwen Lin    }
729199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin}
73