ViewConfigurationCompat.java revision 17d15d92db2288bd27b8710c68e5bc1b9b5945f0
1/* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 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 17package android.support.v4.view; 18 19import android.view.ViewConfiguration; 20 21/** 22 * Helper for accessing features in {@link ViewConfiguration} 23 * introduced after API level 4 in a backwards compatible fashion. 24 */ 25public final class ViewConfigurationCompat { 26 /** 27 * Interface for the full API. 28 */ 29 interface ViewConfigurationVersionImpl { 30 boolean hasPermanentMenuKey(ViewConfiguration config); 31 } 32 33 /** 34 * Interface implementation that doesn't use anything about v4 APIs. 35 */ 36 static class BaseViewConfigurationVersionImpl implements ViewConfigurationVersionImpl { 37 @Override 38 public boolean hasPermanentMenuKey(ViewConfiguration config) { 39 // Pre-HC devices will always have a menu button 40 return true; 41 } 42 } 43 44 /** 45 * Interface implementation for devices with at least v11 APIs. 46 */ 47 static class HoneycombViewConfigurationVersionImpl extends BaseViewConfigurationVersionImpl { 48 @Override 49 public boolean hasPermanentMenuKey(ViewConfiguration config) { 50 // There is no way to check on Honeycomb so we assume false 51 return false; 52 } 53 } 54 55 /** 56 * Interface implementation for devices with at least v14 APIs. 57 */ 58 static class IcsViewConfigurationVersionImpl extends HoneycombViewConfigurationVersionImpl { 59 @Override 60 public boolean hasPermanentMenuKey(ViewConfiguration config) { 61 return ViewConfigurationCompatICS.hasPermanentMenuKey(config); 62 } 63 } 64 65 /** 66 * Select the correct implementation to use for the current platform. 67 */ 68 static final ViewConfigurationVersionImpl IMPL; 69 static { 70 if (android.os.Build.VERSION.SDK_INT >= 14) { 71 IMPL = new IcsViewConfigurationVersionImpl(); 72 } else if (android.os.Build.VERSION.SDK_INT >= 11) { 73 IMPL = new HoneycombViewConfigurationVersionImpl(); 74 } else { 75 IMPL = new BaseViewConfigurationVersionImpl(); 76 } 77 } 78 79 // ------------------------------------------------------------------- 80 81 /** 82 * Call {@link ViewConfiguration#getScaledPagingTouchSlop()}. 83 * 84 * @deprecated Call {@link ViewConfiguration#getScaledPagingTouchSlop()} directly. 85 * This method will be removed in a future release. 86 */ 87 @Deprecated 88 public static int getScaledPagingTouchSlop(ViewConfiguration config) { 89 return config.getScaledPagingTouchSlop(); 90 } 91 92 /** 93 * Report if the device has a permanent menu key available to the user, in a backwards 94 * compatible way. 95 */ 96 public static boolean hasPermanentMenuKey(ViewConfiguration config) { 97 return IMPL.hasPermanentMenuKey(config); 98 } 99 100 private ViewConfigurationCompat() {} 101} 102