ApiHelper.java revision 9341cc2b9e2939e9915ff62fa9b11e56951947d1
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
1976bfd87c90c98a46c06ea67dd895fc8f016f7267Owen Linimport android.os.Build;
200c4c03a9fa2486d8021ad8f36067aa985aa2c85dOwen Linimport android.provider.MediaStore.MediaColumns;
219199c4d69ebc9b9589271d1e62ba80138b1db700Owen Linimport android.view.View;
229199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin
239199c4d69ebc9b9589271d1e62ba80138b1db700Owen Linpublic class ApiHelper {
24987f5330637bb0f812845c6a4ab941d416f9b7bdOwen Lin    public static interface VERSION_CODES {
25987f5330637bb0f812845c6a4ab941d416f9b7bdOwen Lin        // These value are copied from Build.VERSION_CODES
26987f5330637bb0f812845c6a4ab941d416f9b7bdOwen Lin        public static final int GINGERBREAD_MR1 = 10;
27987f5330637bb0f812845c6a4ab941d416f9b7bdOwen Lin        public static final int HONEYCOMB = 11;
28987f5330637bb0f812845c6a4ab941d416f9b7bdOwen Lin        public static final int HONEYCOMB_MR1 = 12;
29987f5330637bb0f812845c6a4ab941d416f9b7bdOwen Lin        public static final int HONEYCOMB_MR2 = 13;
30987f5330637bb0f812845c6a4ab941d416f9b7bdOwen Lin        public static final int ICE_CREAM_SANDWICH = 14;
31987f5330637bb0f812845c6a4ab941d416f9b7bdOwen Lin        public static final int ICE_CREAM_SANDWICH_MR1 = 15;
32987f5330637bb0f812845c6a4ab941d416f9b7bdOwen Lin        public static final int JELLY_BEAN = 16;
33987f5330637bb0f812845c6a4ab941d416f9b7bdOwen Lin    }
349199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin
359199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin    public static final boolean HAS_VIEW_SYSTEM_UI_FLAG_LAYOUT_STABLE =
369199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin            hasField(View.class, "SYSTEM_UI_FLAG_LAYOUT_STABLE");
379199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin
389199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin    public static final boolean HAS_VIEW_SYSTEM_UI_FLAG_HIDE_NAVIGATION =
399199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin            hasField(View.class, "SYSTEM_UI_FLAG_HIDE_NAVIGATION");
409199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin
410c4c03a9fa2486d8021ad8f36067aa985aa2c85dOwen Lin    public static final boolean HAS_MEDIA_COLUMNS_WIDTH_AND_HEIGHT =
420c4c03a9fa2486d8021ad8f36067aa985aa2c85dOwen Lin            hasField(MediaColumns.class, "WIDTH");
430c4c03a9fa2486d8021ad8f36067aa985aa2c85dOwen Lin
4476bfd87c90c98a46c06ea67dd895fc8f016f7267Owen Lin    public static final boolean HAS_REUSING_BITMAP_IN_BITMAP_REGION_DECODER =
45987f5330637bb0f812845c6a4ab941d416f9b7bdOwen Lin            Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN;
4676bfd87c90c98a46c06ea67dd895fc8f016f7267Owen Lin
475b981d12a290b7bd10d8439ff3a5a9533069b26eOwen Lin    public static final boolean HAS_REUSING_BITMAP_IN_BITMAP_FACTORY =
485b981d12a290b7bd10d8439ff3a5a9533069b26eOwen Lin            Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB;
495b981d12a290b7bd10d8439ff3a5a9533069b26eOwen Lin
507c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang    public static final boolean HAS_SET_BEAM_PUSH_URIS =
517c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang            Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN;
527c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang
537c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang    public static final boolean HAS_SET_DEFALT_BUFFER_SIZE = hasMethod(
547c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang            "android.graphics.SurfaceTexture", "setDefaultBufferSize",
557c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang            int.class, int.class);
567c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang
57a207d3326346d6da7b713d2be097a42a0401f354Chih-Chung Chang    public static final boolean HAS_MTP =
58a207d3326346d6da7b713d2be097a42a0401f354Chih-Chung Chang            Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB_MR1;
59a207d3326346d6da7b713d2be097a42a0401f354Chih-Chung Chang
609341cc2b9e2939e9915ff62fa9b11e56951947d1Chih-Chung Chang    public static final boolean HAS_AUTO_FOCUS_MOVE_CALLBACK =
619341cc2b9e2939e9915ff62fa9b11e56951947d1Chih-Chung Chang            Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN;
629341cc2b9e2939e9915ff62fa9b11e56951947d1Chih-Chung Chang
639199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin    private static boolean hasField(Class<?> klass, String fieldName) {
649199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin        try {
659199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin            klass.getDeclaredField(fieldName);
669199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin            return true;
679199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin        } catch (NoSuchFieldException e) {
689199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin            return false;
699199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin        }
709199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin    }
717c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang
727c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang    private static boolean hasMethod(String className, String methodName,
737c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang            Class<?>... parameterTypes) {
747c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang        try {
757c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang            Class klass = Class.forName(className);
767c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang            klass.getDeclaredMethod(methodName, parameterTypes);
777c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang            return true;
787c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang        } catch (Throwable th) {
797c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang            return false;
807c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang        }
817c3c93892c21a836ec816d18cb3133bca9ce4275Chih-Chung Chang    }
829199c4d69ebc9b9589271d1e62ba80138b1db700Owen Lin}
83