ApiHelper.java revision 6afdb1769adddaf94116a7d1cad82740a9455641
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; 40987f5330637bb0f812845c6a4ab941d416f9b7bdOwen Lin } 419199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin 42026f5ae50aa45536805c286f03775e1c28c4b983Pin Ting public static final boolean USE_888_PIXEL_FORMAT = 43026f5ae50aa45536805c286f03775e1c28c4b983Pin Ting Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; 44026f5ae50aa45536805c286f03775e1c28c4b983Pin Ting 4551fbbcf9abe7528ee4b8d083fa3b6c2426e69688Yuli Huang public static final boolean ENABLE_PHOTO_EDITOR = 4651fbbcf9abe7528ee4b8d083fa3b6c2426e69688Yuli Huang Build.VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH; 4751fbbcf9abe7528ee4b8d083fa3b6c2426e69688Yuli Huang 489199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin public static final boolean HAS_VIEW_SYSTEM_UI_FLAG_LAYOUT_STABLE = 499199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin hasField(View.class, "SYSTEM_UI_FLAG_LAYOUT_STABLE"); 509199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin 519199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin public static final boolean HAS_VIEW_SYSTEM_UI_FLAG_HIDE_NAVIGATION = 529199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin hasField(View.class, "SYSTEM_UI_FLAG_HIDE_NAVIGATION"); 539199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin 540c4c03a9fa2486d8021ad8f36067aa985aa2c85dOwen Lin public static final boolean HAS_MEDIA_COLUMNS_WIDTH_AND_HEIGHT = 550c4c03a9fa2486d8021ad8f36067aa985aa2c85dOwen Lin hasField(MediaColumns.class, "WIDTH"); 560c4c03a9fa2486d8021ad8f36067aa985aa2c85dOwen Lin 5776bfd87c90c98a46c06ea67dd895fc8f016f7267Owen Lin public static final boolean HAS_REUSING_BITMAP_IN_BITMAP_REGION_DECODER = 58987f5330637bb0f812845c6a4ab941d416f9b7bdOwen Lin Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; 5976bfd87c90c98a46c06ea67dd895fc8f016f7267Owen Lin 605b981d12a290b7bd10d8439ff3a5a9533069b26eOwen Lin public static final boolean HAS_REUSING_BITMAP_IN_BITMAP_FACTORY = 615b981d12a290b7bd10d8439ff3a5a9533069b26eOwen Lin Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 625b981d12a290b7bd10d8439ff3a5a9533069b26eOwen Lin 637c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang public static final boolean HAS_SET_BEAM_PUSH_URIS = 647c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; 657c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang 667c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang public static final boolean HAS_SET_DEFALT_BUFFER_SIZE = hasMethod( 677c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang "android.graphics.SurfaceTexture", "setDefaultBufferSize", 687c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang int.class, int.class); 697c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang 7000862f13a4b7be86ee7fec8eead0bb4e35193cd7Chih-Chung Chang public static final boolean HAS_RELEASE_SURFACE_TEXTURE = hasMethod( 7100862f13a4b7be86ee7fec8eead0bb4e35193cd7Chih-Chung Chang "android.graphics.SurfaceTexture", "release"); 7200862f13a4b7be86ee7fec8eead0bb4e35193cd7Chih-Chung Chang 738df785a5c11d728892102f0faefc0d3c719bc207Wu-cheng Li public static final boolean HAS_SURFACE_TEXTURE = 748df785a5c11d728892102f0faefc0d3c719bc207Wu-cheng Li Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 758df785a5c11d728892102f0faefc0d3c719bc207Wu-cheng Li 76a207d3326346d6da7b713d2be097a42a0401f354Chih-Chung Chang public static final boolean HAS_MTP = 77a207d3326346d6da7b713d2be097a42a0401f354Chih-Chung Chang Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB_MR1; 78a207d3326346d6da7b713d2be097a42a0401f354Chih-Chung Chang 799341cc2b9e2939e9915ff62fa9b11e56951947d1Chih-Chung Chang public static final boolean HAS_AUTO_FOCUS_MOVE_CALLBACK = 809341cc2b9e2939e9915ff62fa9b11e56951947d1Chih-Chung Chang Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; 819341cc2b9e2939e9915ff62fa9b11e56951947d1Chih-Chung Chang 82362f50ca3adea7a13302e22b07bd9a45a952333bOwen Lin public static final boolean HAS_REMOTE_VIEWS_SERVICE = 83362f50ca3adea7a13302e22b07bd9a45a952333bOwen Lin Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 84362f50ca3adea7a13302e22b07bd9a45a952333bOwen Lin 853969aca03ea7537e793c5c55acec752148151480Owen Lin public static final boolean HAS_INTENT_EXTRA_LOCAL_ONLY = 863969aca03ea7537e793c5c55acec752148151480Owen Lin Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 873969aca03ea7537e793c5c55acec752148151480Owen Lin 885424e3274478fca29eb8bf8a8c92140e85b8925aYuli Huang public static final boolean HAS_SET_SYSTEM_UI_VISIBILITY = 895424e3274478fca29eb8bf8a8c92140e85b8925aYuli Huang hasMethod(View.class, "setSystemUiVisibility", int.class); 905424e3274478fca29eb8bf8a8c92140e85b8925aYuli Huang 91bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin public static final boolean HAS_FACE_DETECTION; 92bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin static { 93bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin boolean hasFaceDetection = false; 94bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin try { 95bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin Class<?> listenerClass = Class.forName( 96bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin "android.hardware.Camera$FaceDetectionListener"); 97bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin hasFaceDetection = 98bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin hasMethod(Camera.class, "setFaceDetectionListener", listenerClass) && 99bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin hasMethod(Camera.class, "startFaceDetection") && 100bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin hasMethod(Camera.class, "stopFaceDetection") && 101bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin hasMethod(Camera.Parameters.class, "getMaxNumDetectedFaces"); 102bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin } catch (Throwable t) { 103bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin } 104bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin HAS_FACE_DETECTION = hasFaceDetection; 105bc1489c807b97ba590d2baf276fb622ef15d38deOwen Lin } 1065c1268331bd39f04894786f37e04584ffb4cf6e6Ahbong Chang 107d5b66ad52b8aa7e1ec82dba88a58ae893b58432eHung-ying Tyan public static final boolean HAS_GET_CAMERA_DISABLED = 108d5b66ad52b8aa7e1ec82dba88a58ae893b58432eHung-ying Tyan hasMethod(DevicePolicyManager.class, "getCameraDisabled", ComponentName.class); 109d5b66ad52b8aa7e1ec82dba88a58ae893b58432eHung-ying Tyan 110708bfce7f38274073611a32de69e16fe8bf292eaAngus Kong public static final boolean HAS_MEDIA_ACTION_SOUND = 111708bfce7f38274073611a32de69e16fe8bf292eaAngus Kong Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; 112708bfce7f38274073611a32de69e16fe8bf292eaAngus Kong 113f67891cb9b5a47a6412cfa88b889b4b76fd22e79Wu-cheng Li public static final boolean HAS_OLD_PANORAMA = 114f67891cb9b5a47a6412cfa88b889b4b76fd22e79Wu-cheng Li Build.VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH; 115208a15be34593493c63bb2b99a7fd8db48a93e6eAhbong Chang 1165a0e374ef4a35211d5ae149ac6adb91ce5375911Chih-Chung Chang public static final boolean HAS_TIME_LAPSE_RECORDING = 1175a0e374ef4a35211d5ae149ac6adb91ce5375911Chih-Chung Chang Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 1185a0e374ef4a35211d5ae149ac6adb91ce5375911Chih-Chung Chang 1198538bbdd8bdf14e29f5c7a092ee824c1a675c0c0Angus Kong public static final boolean HAS_ZOOM_WHEN_RECORDING = 120b593dbcb19db6d8cd1a4eddcaffd1c1073c406a7Angus Kong Build.VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH; 121b593dbcb19db6d8cd1a4eddcaffd1c1073c406a7Angus Kong 1226f9a145d14b9cb1a7406b11a76deb5ec595d3bb9Angus Kong public static final boolean HAS_CAMERA_FOCUS_AREA = 1236f9a145d14b9cb1a7406b11a76deb5ec595d3bb9Angus Kong Build.VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH; 1246f9a145d14b9cb1a7406b11a76deb5ec595d3bb9Angus Kong 125cd8e78b4e9393317854fc3553ea5fbd03a5557faAngus Kong public static final boolean HAS_CAMERA_METERING_AREA = 126cd8e78b4e9393317854fc3553ea5fbd03a5557faAngus Kong Build.VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH; 127cd8e78b4e9393317854fc3553ea5fbd03a5557faAngus Kong 128f3b0384acb06f1615c4d3ed2c7c2dff8090fe7b0Pin Ting public static final boolean HAS_FINE_RESOLUTION_QUALITY_LEVELS = 129f3b0384acb06f1615c4d3ed2c7c2dff8090fe7b0Pin Ting Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 130f3b0384acb06f1615c4d3ed2c7c2dff8090fe7b0Pin Ting 131ebd718780e2439cf30ba124b66c24f5253deedb2Chih-Chung Chang public static final boolean HAS_MOTION_EVENT_TRANSFORM = 132ebd718780e2439cf30ba124b66c24f5253deedb2Chih-Chung Chang Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 133ebd718780e2439cf30ba124b66c24f5253deedb2Chih-Chung Chang 1346be3a50c190eed6e2762b7a6ef05378a26c9339cWu-cheng Li public static final boolean HAS_EFFECTS_RECORDING = false; 1356da4724e8d21e0e3df809a832c72365528959b27Pin Ting 136c722a7cd2861538f70f2dc988cbcc4ea9362ae98Wu-cheng Li // "Background" filter does not have "context" input port in jelly bean. 137c722a7cd2861538f70f2dc988cbcc4ea9362ae98Wu-cheng Li public static final boolean HAS_EFFECTS_RECORDING_CONTEXT_INPUT = 138c722a7cd2861538f70f2dc988cbcc4ea9362ae98Wu-cheng Li Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR1; 139c722a7cd2861538f70f2dc988cbcc4ea9362ae98Wu-cheng Li 140ee87994cca9e35444b17ba6c1c129cdc1cd998d4Pin Ting public static final boolean HAS_GET_SUPPORTED_VIDEO_SIZE = 141ee87994cca9e35444b17ba6c1c129cdc1cd998d4Pin Ting Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 142ee87994cca9e35444b17ba6c1c129cdc1cd998d4Pin Ting 14300862f13a4b7be86ee7fec8eead0bb4e35193cd7Chih-Chung Chang public static final boolean HAS_SET_ICON_ATTRIBUTE = 14400862f13a4b7be86ee7fec8eead0bb4e35193cd7Chih-Chung Chang Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 14500862f13a4b7be86ee7fec8eead0bb4e35193cd7Chih-Chung Chang 1466ae93dbed7938eccdb5273dfc6655d65a9546343Owen Lin public static final boolean HAS_MEDIA_PROVIDER_FILES_TABLE = 1476ae93dbed7938eccdb5273dfc6655d65a9546343Owen Lin Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 1486ae93dbed7938eccdb5273dfc6655d65a9546343Owen Lin 149fbf6dbaf20e1508f19468c33021813d078afdb35Angus Kong public static final boolean HAS_SURFACE_TEXTURE_RECORDING = 150fbf6dbaf20e1508f19468c33021813d078afdb35Angus Kong Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; 15100e4a6e52dab2f7ef3f6574f20a12d4a39e76124Owen Lin 15200e4a6e52dab2f7ef3f6574f20a12d4a39e76124Owen Lin public static final boolean HAS_ACTION_BAR = 15300e4a6e52dab2f7ef3f6574f20a12d4a39e76124Owen Lin Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 15400e4a6e52dab2f7ef3f6574f20a12d4a39e76124Owen Lin 155622246a1cb249f6b7619067939b10972cdc379c1Wu-cheng Li // Ex: View.setTranslationX. 156622246a1cb249f6b7619067939b10972cdc379c1Wu-cheng Li public static final boolean HAS_VIEW_TRANSFORM_PROPERTIES = 157622246a1cb249f6b7619067939b10972cdc379c1Wu-cheng Li Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 158622246a1cb249f6b7619067939b10972cdc379c1Wu-cheng Li 159ea1d1d283f6e75f012fe091608cf0b588866a511Wu-cheng Li public static final boolean HAS_CAMERA_HDR = 160ea1d1d283f6e75f012fe091608cf0b588866a511Wu-cheng Li Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR1; 161ea1d1d283f6e75f012fe091608cf0b588866a511Wu-cheng Li 1620fb7f34668b317895b6be1d2e64d01601fb64c76Owen Lin public static final boolean HAS_OPTIONS_IN_MUTABLE = 1630fb7f34668b317895b6be1d2e64d01601fb64c76Owen Lin Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 1640fb7f34668b317895b6be1d2e64d01601fb64c76Owen Lin 16536d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li public static final boolean CAN_START_PREVIEW_IN_JPEG_CALLBACK = 16636d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li Build.VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH; 16736d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li 16896c707bda5a3bebafacba1f813eded88d787c73aJohn Reck public static final boolean HAS_VIEW_PROPERTY_ANIMATOR = 16996c707bda5a3bebafacba1f813eded88d787c73aJohn Reck Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB_MR1; 17096c707bda5a3bebafacba1f813eded88d787c73aJohn Reck 171bf30e7dfdd17b59894014d0c081a59e444f92b39John Reck public static final boolean HAS_POST_ON_ANIMATION = 172bf30e7dfdd17b59894014d0c081a59e444f92b39John Reck Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; 173bf30e7dfdd17b59894014d0c081a59e444f92b39John Reck 17421f52a50d6b325c9cf86bccbbc05441fb2ba4d36Doris Liu public static final boolean HAS_ANNOUNCE_FOR_ACCESSIBILITY = 17521f52a50d6b325c9cf86bccbbc05441fb2ba4d36Doris Liu Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; 17621f52a50d6b325c9cf86bccbbc05441fb2ba4d36Doris Liu 1774523405aae7df882bf579cd0257335e3ba267258Teng-Hui Zhu public static final boolean HAS_OBJECT_ANIMATION = 1784523405aae7df882bf579cd0257335e3ba267258Teng-Hui Zhu Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 1794523405aae7df882bf579cd0257335e3ba267258Teng-Hui Zhu 18080f7fdb406cb98e3029a214d86973768c9f02470George Mount public static final boolean HAS_GLES20_REQUIRED = 18180f7fdb406cb98e3029a214d86973768c9f02470George Mount Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; 18280f7fdb406cb98e3029a214d86973768c9f02470George Mount 1836afdb1769adddaf94116a7d1cad82740a9455641Michael Kolb public static final boolean HAS_ROTATION_ANIMATION = 1846afdb1769adddaf94116a7d1cad82740a9455641Michael Kolb hasField(WindowManager.LayoutParams.class, "rotationAnimation"); 1856afdb1769adddaf94116a7d1cad82740a9455641Michael Kolb 18636d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li public static int getIntFieldIfExists(Class<?> klass, String fieldName, 18736d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li Class<?> obj, int defaultVal) { 18836d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li try { 18936d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li Field f = klass.getDeclaredField(fieldName); 19036d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li return f.getInt(obj); 19136d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li } catch (Exception e) { 19236d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li return defaultVal; 19336d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li } 19436d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li } 19536d16bc95d7ed7d12fc8136ae68a9579b20cf5a1Wu-cheng Li 1969199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin private static boolean hasField(Class<?> klass, String fieldName) { 1979199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin try { 1989199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin klass.getDeclaredField(fieldName); 1999199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin return true; 2009199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin } catch (NoSuchFieldException e) { 2019199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin return false; 2029199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin } 2039199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin } 2047c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang 2057c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang private static boolean hasMethod(String className, String methodName, 2067c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang Class<?>... parameterTypes) { 2077c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang try { 208b4cadafb8c454aff10b4096a801cc71f8519fe8aOwen Lin Class<?> klass = Class.forName(className); 2097c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang klass.getDeclaredMethod(methodName, parameterTypes); 2107c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang return true; 2117c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang } catch (Throwable th) { 2127c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang return false; 2137c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang } 2147c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang } 215b4cadafb8c454aff10b4096a801cc71f8519fe8aOwen Lin 216b4cadafb8c454aff10b4096a801cc71f8519fe8aOwen Lin private static boolean hasMethod( 217b4cadafb8c454aff10b4096a801cc71f8519fe8aOwen Lin Class<?> klass, String methodName, Class<?> ... paramTypes) { 218b4cadafb8c454aff10b4096a801cc71f8519fe8aOwen Lin try { 219b4cadafb8c454aff10b4096a801cc71f8519fe8aOwen Lin klass.getDeclaredMethod(methodName, paramTypes); 220b4cadafb8c454aff10b4096a801cc71f8519fe8aOwen Lin return true; 221b4cadafb8c454aff10b4096a801cc71f8519fe8aOwen Lin } catch (NoSuchMethodException e) { 222b4cadafb8c454aff10b4096a801cc71f8519fe8aOwen Lin return false; 223b4cadafb8c454aff10b4096a801cc71f8519fe8aOwen Lin } 224b4cadafb8c454aff10b4096a801cc71f8519fe8aOwen Lin } 2259199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin} 226