ApiHelper.java revision f479c0db587cb21ea0699e2421f1d0d8e5ada289
19199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin/* 29199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin * Copyright (C) 2012 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 179199c4d69ebc9b9589271d1e62ba80138b1db700Owen Linpackage com.android.gallery3d.common; 189199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin 19d5b66ad52b8aa7e1ec82dba88a58ae893b58432eHung-ying Tyanimport android.app.admin.DevicePolicyManager; 20d5b66ad52b8aa7e1ec82dba88a58ae893b58432eHung-ying Tyanimport android.content.ComponentName; 215c1268331bd39f04894786f37e04584ffb4cf6e6Ahbong Changimport android.hardware.Camera; 2276bfd87c90c98a46c06ea67dd895fc8f016f7267Owen Linimport android.os.Build; 230c4c03a9fa2486d8021ad8f36067aa985aa2c85dOwen Linimport android.provider.MediaStore.MediaColumns; 249199c4d69ebc9b9589271d1e62ba80138b1db700Owen Linimport android.view.View; 256afdb1769adddaf94116a7d1cad82740a9455641Michael Kolbimport android.view.WindowManager; 269199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin 27708bfce7f38274073611a32de69e16fe8bf292eaAngus Kongimport java.lang.reflect.Field; 28708bfce7f38274073611a32de69e16fe8bf292eaAngus Kong 299199c4d69ebc9b9589271d1e62ba80138b1db700Owen Linpublic class ApiHelper { 30987f5330637bb0f812845c6a4ab941d416f9b7bdOwen Lin public static interface VERSION_CODES { 31987f5330637bb0f812845c6a4ab941d416f9b7bdOwen Lin // These value are copied from Build.VERSION_CODES 32987f5330637bb0f812845c6a4ab941d416f9b7bdOwen Lin public static final int GINGERBREAD_MR1 = 10; 33987f5330637bb0f812845c6a4ab941d416f9b7bdOwen Lin public static final int HONEYCOMB = 11; 34987f5330637bb0f812845c6a4ab941d416f9b7bdOwen Lin public static final int HONEYCOMB_MR1 = 12; 35987f5330637bb0f812845c6a4ab941d416f9b7bdOwen Lin public static final int HONEYCOMB_MR2 = 13; 36987f5330637bb0f812845c6a4ab941d416f9b7bdOwen Lin public static final int ICE_CREAM_SANDWICH = 14; 37987f5330637bb0f812845c6a4ab941d416f9b7bdOwen Lin public static final int ICE_CREAM_SANDWICH_MR1 = 15; 38987f5330637bb0f812845c6a4ab941d416f9b7bdOwen Lin public static final int JELLY_BEAN = 16; 39ea1d1d283f6e75f012fe091608cf0b588866a511Wu-cheng Li public static final int JELLY_BEAN_MR1 = 17; 40ac765f6db6e450c4e8e38bea9439e080d9151485ztenghui public static final int JELLY_BEAN_MR2 = 18; 41987f5330637bb0f812845c6a4ab941d416f9b7bdOwen Lin } 429199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin 438f69397b9c6acf6da28244a8ccea596546f34f87Bobby Georgescu public static final boolean AT_LEAST_16 = Build.VERSION.SDK_INT >= 16; 448f69397b9c6acf6da28244a8ccea596546f34f87Bobby Georgescu 45026f5ae50aa45536805c286f03775e1c28c4b983Pin Ting public static final boolean USE_888_PIXEL_FORMAT = 46026f5ae50aa45536805c286f03775e1c28c4b983Pin Ting Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; 47026f5ae50aa45536805c286f03775e1c28c4b983Pin Ting 4851fbbcf9abe7528ee4b8d083fa3b6c2426e69688Yuli Huang public static final boolean ENABLE_PHOTO_EDITOR = 4951fbbcf9abe7528ee4b8d083fa3b6c2426e69688Yuli Huang Build.VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH; 5051fbbcf9abe7528ee4b8d083fa3b6c2426e69688Yuli Huang 519199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin public static final boolean HAS_VIEW_SYSTEM_UI_FLAG_LAYOUT_STABLE = 529199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin hasField(View.class, "SYSTEM_UI_FLAG_LAYOUT_STABLE"); 539199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin 549199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin public static final boolean HAS_VIEW_SYSTEM_UI_FLAG_HIDE_NAVIGATION = 559199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin hasField(View.class, "SYSTEM_UI_FLAG_HIDE_NAVIGATION"); 569199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin 570c4c03a9fa2486d8021ad8f36067aa985aa2c85dOwen Lin public static final boolean HAS_MEDIA_COLUMNS_WIDTH_AND_HEIGHT = 580c4c03a9fa2486d8021ad8f36067aa985aa2c85dOwen Lin hasField(MediaColumns.class, "WIDTH"); 590c4c03a9fa2486d8021ad8f36067aa985aa2c85dOwen Lin 6076bfd87c90c98a46c06ea67dd895fc8f016f7267Owen Lin public static final boolean HAS_REUSING_BITMAP_IN_BITMAP_REGION_DECODER = 61987f5330637bb0f812845c6a4ab941d416f9b7bdOwen Lin Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; 6276bfd87c90c98a46c06ea67dd895fc8f016f7267Owen Lin 635b981d12a290b7bd10d8439ff3a5a9533069b26eOwen Lin public static final boolean HAS_REUSING_BITMAP_IN_BITMAP_FACTORY = 645b981d12a290b7bd10d8439ff3a5a9533069b26eOwen Lin Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 655b981d12a290b7bd10d8439ff3a5a9533069b26eOwen Lin 667c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang public static final boolean HAS_SET_BEAM_PUSH_URIS = 677c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; 687c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang 697c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang public static final boolean HAS_SET_DEFALT_BUFFER_SIZE = hasMethod( 707c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang "android.graphics.SurfaceTexture", "setDefaultBufferSize", 717c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang int.class, int.class); 727c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang 7300862f13a4b7be86ee7fec8eead0bb4e35193cd7Chih-Chung Chang public static final boolean HAS_RELEASE_SURFACE_TEXTURE = hasMethod( 7400862f13a4b7be86ee7fec8eead0bb4e35193cd7Chih-Chung Chang "android.graphics.SurfaceTexture", "release"); 7500862f13a4b7be86ee7fec8eead0bb4e35193cd7Chih-Chung Chang 768df785a5c11d728892102f0faefc0d3c719bc207Wu-cheng Li public static final boolean HAS_SURFACE_TEXTURE = 778df785a5c11d728892102f0faefc0d3c719bc207Wu-cheng Li Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 788df785a5c11d728892102f0faefc0d3c719bc207Wu-cheng Li 79a207d3326346d6da7b713d2be097a42a0401f354Chih-Chung Chang public static final boolean HAS_MTP = 80a207d3326346d6da7b713d2be097a42a0401f354Chih-Chung Chang Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB_MR1; 81a207d3326346d6da7b713d2be097a42a0401f354Chih-Chung Chang 829341cc2b9e2939e9915ff62fa9b11e56951947d1Chih-Chung Chang public static final boolean HAS_AUTO_FOCUS_MOVE_CALLBACK = 839341cc2b9e2939e9915ff62fa9b11e56951947d1Chih-Chung Chang Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; 849341cc2b9e2939e9915ff62fa9b11e56951947d1Chih-Chung Chang 85362f50ca3adea7a13302e22b07bd9a45a952333bOwen Lin public static final boolean HAS_REMOTE_VIEWS_SERVICE = 86362f50ca3adea7a13302e22b07bd9a45a952333bOwen Lin Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 87362f50ca3adea7a13302e22b07bd9a45a952333bOwen Lin 883969aca03ea7537e793c5c55acec752148151480Owen Lin public static final boolean HAS_INTENT_EXTRA_LOCAL_ONLY = 893969aca03ea7537e793c5c55acec752148151480Owen Lin Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 903969aca03ea7537e793c5c55acec752148151480Owen Lin 915424e3274478fca29eb8bf8a8c92140e85b8925aYuli Huang public static final boolean HAS_SET_SYSTEM_UI_VISIBILITY = 925424e3274478fca29eb8bf8a8c92140e85b8925aYuli Huang hasMethod(View.class, "setSystemUiVisibility", int.class); 935424e3274478fca29eb8bf8a8c92140e85b8925aYuli Huang 94bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin public static final boolean HAS_FACE_DETECTION; 95bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin static { 96bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin boolean hasFaceDetection = false; 97bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin try { 98bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin Class<?> listenerClass = Class.forName( 99bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin "android.hardware.Camera$FaceDetectionListener"); 100bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin hasFaceDetection = 101bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin hasMethod(Camera.class, "setFaceDetectionListener", listenerClass) && 102bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin hasMethod(Camera.class, "startFaceDetection") && 103bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin hasMethod(Camera.class, "stopFaceDetection") && 104bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin hasMethod(Camera.Parameters.class, "getMaxNumDetectedFaces"); 105bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin } catch (Throwable t) { 106bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin } 107bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin HAS_FACE_DETECTION = hasFaceDetection; 108bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin } 1095c1268331bd39f04894786f37e04584ffb4cf6e6Ahbong Chang 110d5b66ad52b8aa7e1ec82dba88a58ae893b58432eHung-ying Tyan public static final boolean HAS_GET_CAMERA_DISABLED = 111d5b66ad52b8aa7e1ec82dba88a58ae893b58432eHung-ying Tyan hasMethod(DevicePolicyManager.class, "getCameraDisabled", ComponentName.class); 112d5b66ad52b8aa7e1ec82dba88a58ae893b58432eHung-ying Tyan 113708bfce7f38274073611a32de69e16fe8bf292eaAngus Kong public static final boolean HAS_MEDIA_ACTION_SOUND = 114708bfce7f38274073611a32de69e16fe8bf292eaAngus Kong Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; 115708bfce7f38274073611a32de69e16fe8bf292eaAngus Kong 116f67891cb9b5a47a6412cfa88b889b4b76fd22e79Wu-cheng Li public static final boolean HAS_OLD_PANORAMA = 117f67891cb9b5a47a6412cfa88b889b4b76fd22e79Wu-cheng Li Build.VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH; 118208a15be34593493c63bb2b99a7fd8db48a93e6eAhbong Chang 1195a0e374ef4a35211d5ae149ac6adb91ce5375911Chih-Chung Chang public static final boolean HAS_TIME_LAPSE_RECORDING = 1205a0e374ef4a35211d5ae149ac6adb91ce5375911Chih-Chung Chang Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 1215a0e374ef4a35211d5ae149ac6adb91ce5375911Chih-Chung Chang 1228538bbdd8bdf14e29f5c7a092ee824c1a675c0c0Angus Kong public static final boolean HAS_ZOOM_WHEN_RECORDING = 123b593dbcb19db6d8cd1a4eddcaffd1c1073c406a7Angus Kong Build.VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH; 124b593dbcb19db6d8cd1a4eddcaffd1c1073c406a7Angus Kong 1256f9a145d14b9cb1a7406b11a76deb5ec595d3bb9Angus Kong public static final boolean HAS_CAMERA_FOCUS_AREA = 1266f9a145d14b9cb1a7406b11a76deb5ec595d3bb9Angus Kong Build.VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH; 1276f9a145d14b9cb1a7406b11a76deb5ec595d3bb9Angus Kong 128cd8e78b4e9393317854fc3553ea5fbd03a5557faAngus Kong public static final boolean HAS_CAMERA_METERING_AREA = 129cd8e78b4e9393317854fc3553ea5fbd03a5557faAngus Kong Build.VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH; 130cd8e78b4e9393317854fc3553ea5fbd03a5557faAngus Kong 131f3b0384acb06f1615c4d3ed2c7c2dff8090fe7b0Pin Ting public static final boolean HAS_FINE_RESOLUTION_QUALITY_LEVELS = 132f3b0384acb06f1615c4d3ed2c7c2dff8090fe7b0Pin Ting Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 133f3b0384acb06f1615c4d3ed2c7c2dff8090fe7b0Pin Ting 134ebd718780e2439cf30ba124b66c24f5253deedb2Chih-Chung Chang public static final boolean HAS_MOTION_EVENT_TRANSFORM = 135ebd718780e2439cf30ba124b66c24f5253deedb2Chih-Chung Chang Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 136ebd718780e2439cf30ba124b66c24f5253deedb2Chih-Chung Chang 1376be3a50c190eed6e2762b7a6ef05378a26c9339cWu-cheng Li public static final boolean HAS_EFFECTS_RECORDING = false; 1386da4724e8d21e0e3df809a832c72365528959b27Pin Ting 139c722a7cd2861538f70f2dc988cbcc4ea9362ae98Wu-cheng Li // "Background" filter does not have "context" input port in jelly bean. 140c722a7cd2861538f70f2dc988cbcc4ea9362ae98Wu-cheng Li public static final boolean HAS_EFFECTS_RECORDING_CONTEXT_INPUT = 141c722a7cd2861538f70f2dc988cbcc4ea9362ae98Wu-cheng Li Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR1; 142c722a7cd2861538f70f2dc988cbcc4ea9362ae98Wu-cheng Li 143ee87994cca9e35444b17ba6c1c129cdc1cd998d4Pin Ting public static final boolean HAS_GET_SUPPORTED_VIDEO_SIZE = 144ee87994cca9e35444b17ba6c1c129cdc1cd998d4Pin Ting Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 145ee87994cca9e35444b17ba6c1c129cdc1cd998d4Pin Ting 14600862f13a4b7be86ee7fec8eead0bb4e35193cd7Chih-Chung Chang public static final boolean HAS_SET_ICON_ATTRIBUTE = 14700862f13a4b7be86ee7fec8eead0bb4e35193cd7Chih-Chung Chang Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 14800862f13a4b7be86ee7fec8eead0bb4e35193cd7Chih-Chung Chang 1496ae93dbed7938eccdb5273dfc6655d65a9546343Owen Lin public static final boolean HAS_MEDIA_PROVIDER_FILES_TABLE = 1506ae93dbed7938eccdb5273dfc6655d65a9546343Owen Lin Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 1516ae93dbed7938eccdb5273dfc6655d65a9546343Owen Lin 152fbf6dbaf20e1508f19468c33021813d078afdb35Angus Kong public static final boolean HAS_SURFACE_TEXTURE_RECORDING = 153fbf6dbaf20e1508f19468c33021813d078afdb35Angus Kong Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; 15400e4a6e52dab2f7ef3f6574f20a12d4a39e76124Owen Lin 15500e4a6e52dab2f7ef3f6574f20a12d4a39e76124Owen Lin public static final boolean HAS_ACTION_BAR = 15600e4a6e52dab2f7ef3f6574f20a12d4a39e76124Owen Lin Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 15700e4a6e52dab2f7ef3f6574f20a12d4a39e76124Owen Lin 158622246a1cb249f6b7619067939b10972cdc379c1Wu-cheng Li // Ex: View.setTranslationX. 159622246a1cb249f6b7619067939b10972cdc379c1Wu-cheng Li public static final boolean HAS_VIEW_TRANSFORM_PROPERTIES = 160622246a1cb249f6b7619067939b10972cdc379c1Wu-cheng Li Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 161622246a1cb249f6b7619067939b10972cdc379c1Wu-cheng Li 162ea1d1d283f6e75f012fe091608cf0b588866a511Wu-cheng Li public static final boolean HAS_CAMERA_HDR = 163ea1d1d283f6e75f012fe091608cf0b588866a511Wu-cheng Li Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR1; 164ea1d1d283f6e75f012fe091608cf0b588866a511Wu-cheng Li 1650fb7f34668b317895b6be1d2e64d01601fb64c76Owen Lin public static final boolean HAS_OPTIONS_IN_MUTABLE = 1660fb7f34668b317895b6be1d2e64d01601fb64c76Owen Lin Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 1670fb7f34668b317895b6be1d2e64d01601fb64c76Owen Lin 16836d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li public static final boolean CAN_START_PREVIEW_IN_JPEG_CALLBACK = 16936d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li Build.VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH; 17036d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li 17196c707bda5a3bebafacba1f813eded88d787c73aJohn Reck public static final boolean HAS_VIEW_PROPERTY_ANIMATOR = 17296c707bda5a3bebafacba1f813eded88d787c73aJohn Reck Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB_MR1; 17396c707bda5a3bebafacba1f813eded88d787c73aJohn Reck 174bf30e7dfdd17b59894014d0c081a59e444f92b39John Reck public static final boolean HAS_POST_ON_ANIMATION = 175bf30e7dfdd17b59894014d0c081a59e444f92b39John Reck Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; 176bf30e7dfdd17b59894014d0c081a59e444f92b39John Reck 17721f52a50d6b325c9cf86bccbbc05441fb2ba4d36Doris Liu public static final boolean HAS_ANNOUNCE_FOR_ACCESSIBILITY = 17821f52a50d6b325c9cf86bccbbc05441fb2ba4d36Doris Liu Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; 17921f52a50d6b325c9cf86bccbbc05441fb2ba4d36Doris Liu 1804523405aae7df882bf579cd0257335e3ba267258Teng-Hui Zhu public static final boolean HAS_OBJECT_ANIMATION = 1814523405aae7df882bf579cd0257335e3ba267258Teng-Hui Zhu Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 1824523405aae7df882bf579cd0257335e3ba267258Teng-Hui Zhu 18380f7fdb406cb98e3029a214d86973768c9f02470George Mount public static final boolean HAS_GLES20_REQUIRED = 18480f7fdb406cb98e3029a214d86973768c9f02470George Mount Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 18580f7fdb406cb98e3029a214d86973768c9f02470George Mount 1866afdb1769adddaf94116a7d1cad82740a9455641Michael Kolb public static final boolean HAS_ROTATION_ANIMATION = 1876afdb1769adddaf94116a7d1cad82740a9455641Michael Kolb hasField(WindowManager.LayoutParams.class, "rotationAnimation"); 1886afdb1769adddaf94116a7d1cad82740a9455641Michael Kolb 189d1e0a6e78d686cdc259a2978e988cdd734ca6a2fMichael Kolb public static final boolean HAS_ORIENTATION_LOCK = 190d1e0a6e78d686cdc259a2978e988cdd734ca6a2fMichael Kolb Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR2; 191d1e0a6e78d686cdc259a2978e988cdd734ca6a2fMichael Kolb 192ae08ffa53ee52fa78fe30d76865a05814d64984cGeorge Mount public static final boolean HAS_CANCELLATION_SIGNAL = 193ae08ffa53ee52fa78fe30d76865a05814d64984cGeorge Mount Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; 194ae08ffa53ee52fa78fe30d76865a05814d64984cGeorge Mount 195ac765f6db6e450c4e8e38bea9439e080d9151485ztenghui public static final boolean HAS_MEDIA_MUXER = 196ac765f6db6e450c4e8e38bea9439e080d9151485ztenghui Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR2; 197ac765f6db6e450c4e8e38bea9439e080d9151485ztenghui 198f479c0db587cb21ea0699e2421f1d0d8e5ada289Doris Liu public static final boolean HAS_DISPLAY_LISTENER = 199f479c0db587cb21ea0699e2421f1d0d8e5ada289Doris Liu Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR1; 200f479c0db587cb21ea0699e2421f1d0d8e5ada289Doris Liu 20136d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li public static int getIntFieldIfExists(Class<?> klass, String fieldName, 20236d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li Class<?> obj, int defaultVal) { 20336d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li try { 20436d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li Field f = klass.getDeclaredField(fieldName); 20536d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li return f.getInt(obj); 20636d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li } catch (Exception e) { 20736d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li return defaultVal; 20836d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li } 20936d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li } 21036d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li 2119199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin private static boolean hasField(Class<?> klass, String fieldName) { 2129199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin try { 2139199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin klass.getDeclaredField(fieldName); 2149199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin return true; 2159199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin } catch (NoSuchFieldException e) { 2169199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin return false; 2179199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin } 2189199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin } 2197c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang 2207c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang private static boolean hasMethod(String className, String methodName, 2217c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang Class<?>... parameterTypes) { 2227c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang try { 223b4cadafb8c454aff10b4096a801cc71f8519fe8aOwen Lin Class<?> klass = Class.forName(className); 2247c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang klass.getDeclaredMethod(methodName, parameterTypes); 2257c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang return true; 2267c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang } catch (Throwable th) { 2277c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang return false; 2287c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang } 2297c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang } 230b4cadafb8c454aff10b4096a801cc71f8519fe8aOwen Lin 231b4cadafb8c454aff10b4096a801cc71f8519fe8aOwen Lin private static boolean hasMethod( 232b4cadafb8c454aff10b4096a801cc71f8519fe8aOwen Lin Class<?> klass, String methodName, Class<?> ... paramTypes) { 233b4cadafb8c454aff10b4096a801cc71f8519fe8aOwen Lin try { 234b4cadafb8c454aff10b4096a801cc71f8519fe8aOwen Lin klass.getDeclaredMethod(methodName, paramTypes); 235b4cadafb8c454aff10b4096a801cc71f8519fe8aOwen Lin return true; 236b4cadafb8c454aff10b4096a801cc71f8519fe8aOwen Lin } catch (NoSuchMethodException e) { 237b4cadafb8c454aff10b4096a801cc71f8519fe8aOwen Lin return false; 238b4cadafb8c454aff10b4096a801cc71f8519fe8aOwen Lin } 239b4cadafb8c454aff10b4096a801cc71f8519fe8aOwen Lin } 2409199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin} 241