1 /* 2 * Portions of this code came from frameworks/base/core/java/android/view/ViewConfiguration.java, 3 * which contains the following license text: 4 * 5 * Copyright (C) 2006 The Android Open Source Project 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 * 19 */ 20 21 package com.xtremelabs.robolectric.shadows; 22 23 import android.content.Context; 24 import android.util.DisplayMetrics; 25 import android.view.ViewConfiguration; 26 import com.xtremelabs.robolectric.Robolectric; 27 import com.xtremelabs.robolectric.internal.Implementation; 28 import com.xtremelabs.robolectric.internal.Implements; 29 import com.xtremelabs.robolectric.internal.RealObject; 30 31 import static com.xtremelabs.robolectric.Robolectric.shadowOf; 32 33 @SuppressWarnings({"UnusedDeclaration"}) 34 @Implements(ViewConfiguration.class) 35 public class ShadowViewConfiguration { 36 37 private static final int SCROLL_BAR_SIZE = 10; 38 private static final int SCROLL_BAR_FADE_DURATION = 250; 39 private static final int SCROLL_BAR_DEFAULT_DELAY = 300; 40 private static final int FADING_EDGE_LENGTH = 12; 41 private static final int PRESSED_STATE_DURATION = 125; 42 private static final int LONG_PRESS_TIMEOUT = 500; 43 private static final int GLOBAL_ACTIONS_KEY_TIMEOUT = 500; 44 private static final int TAP_TIMEOUT = 115; 45 private static final int JUMP_TAP_TIMEOUT = 500; 46 private static final int DOUBLE_TAP_TIMEOUT = 300; 47 private static final int ZOOM_CONTROLS_TIMEOUT = 3000; 48 private static final int EDGE_SLOP = 12; 49 private static final int TOUCH_SLOP = 16; 50 private static final int PAGING_TOUCH_SLOP = TOUCH_SLOP * 2; 51 private static final int DOUBLE_TAP_SLOP = 100; 52 private static final int WINDOW_TOUCH_SLOP = 16; 53 private static final int MINIMUM_FLING_VELOCITY = 50; 54 private static final int MAXIMUM_FLING_VELOCITY = 4000; 55 private static final int MAXIMUM_DRAWING_CACHE_SIZE = 320 * 480 * 4; 56 private static float SCROLL_FRICTION = 0.015f; 57 private static final int OVERSCROLL_DISTANCE = 0; 58 private static final int OVERFLING_DISTANCE = 4; 59 60 private int edgeSlop; 61 private int fadingEdgeLength; 62 private int minimumFlingVelocity; 63 private int maximumFlingVelocity; 64 private int scrollbarSize; 65 private int touchSlop; 66 private int pagingTouchSlop; 67 private int doubleTapSlop; 68 private int windowTouchSlop; 69 70 @RealObject 71 private ViewConfiguration realViewConfiguration; 72 setup(Context context)73 private void setup(Context context) { 74 DisplayMetrics metrics = context.getResources().getDisplayMetrics(); 75 float density = metrics.density; 76 77 edgeSlop = (int) (density * EDGE_SLOP + 0.5f); 78 fadingEdgeLength = (int) (density * FADING_EDGE_LENGTH + 0.5f); 79 minimumFlingVelocity = (int) (density * MINIMUM_FLING_VELOCITY + 0.5f); 80 maximumFlingVelocity = (int) (density * MAXIMUM_FLING_VELOCITY + 0.5f); 81 scrollbarSize = (int) (density * SCROLL_BAR_SIZE + 0.5f); 82 touchSlop = (int) (density * TOUCH_SLOP + 0.5f); 83 pagingTouchSlop = (int) (density * PAGING_TOUCH_SLOP + 0.5f); 84 doubleTapSlop = (int) (density * DOUBLE_TAP_SLOP + 0.5f); 85 windowTouchSlop = (int) (density * WINDOW_TOUCH_SLOP + 0.5f); 86 } 87 88 @Implementation get(Context context)89 public static ViewConfiguration get(Context context) { 90 ViewConfiguration viewConfiguration = Robolectric.newInstanceOf(ViewConfiguration.class); 91 shadowOf(viewConfiguration).setup(context); 92 return viewConfiguration; 93 } 94 95 @Implementation getScrollBarSize()96 public static int getScrollBarSize() { 97 return SCROLL_BAR_SIZE; 98 } 99 100 @Implementation getScaledScrollBarSize()101 public int getScaledScrollBarSize() { 102 return scrollbarSize; 103 } 104 105 @Implementation getScrollBarFadeDuration()106 public static int getScrollBarFadeDuration() { 107 return SCROLL_BAR_FADE_DURATION; 108 } 109 110 @Implementation getScrollDefaultDelay()111 public static int getScrollDefaultDelay() { 112 return SCROLL_BAR_DEFAULT_DELAY; 113 } 114 115 @Implementation getFadingEdgeLength()116 public static int getFadingEdgeLength() { 117 return FADING_EDGE_LENGTH; 118 } 119 120 @Implementation getScaledFadingEdgeLength()121 public int getScaledFadingEdgeLength() { 122 return fadingEdgeLength; 123 } 124 125 @Implementation getPressedStateDuration()126 public static int getPressedStateDuration() { 127 return PRESSED_STATE_DURATION; 128 } 129 130 @Implementation getLongPressTimeout()131 public static int getLongPressTimeout() { 132 return LONG_PRESS_TIMEOUT; 133 } 134 135 @Implementation getTapTimeout()136 public static int getTapTimeout() { 137 return TAP_TIMEOUT; 138 } 139 140 @Implementation getJumpTapTimeout()141 public static int getJumpTapTimeout() { 142 return JUMP_TAP_TIMEOUT; 143 } 144 145 @Implementation getDoubleTapTimeout()146 public static int getDoubleTapTimeout() { 147 return DOUBLE_TAP_TIMEOUT; 148 } 149 150 @Implementation getEdgeSlop()151 public static int getEdgeSlop() { 152 return EDGE_SLOP; 153 } 154 155 @Implementation getScaledEdgeSlop()156 public int getScaledEdgeSlop() { 157 return edgeSlop; 158 } 159 160 @Implementation getTouchSlop()161 public static int getTouchSlop() { 162 return TOUCH_SLOP; 163 } 164 165 @Implementation getScaledTouchSlop()166 public int getScaledTouchSlop() { 167 return touchSlop; 168 } 169 170 @Implementation getScaledPagingTouchSlop()171 public int getScaledPagingTouchSlop() { 172 return pagingTouchSlop; 173 } 174 175 @Implementation getScaledDoubleTapSlop()176 public int getScaledDoubleTapSlop() { 177 return doubleTapSlop; 178 } 179 180 @Implementation getWindowTouchSlop()181 public static int getWindowTouchSlop() { 182 return WINDOW_TOUCH_SLOP; 183 } 184 185 @Implementation getScaledWindowTouchSlop()186 public int getScaledWindowTouchSlop() { 187 return windowTouchSlop; 188 } 189 190 @Implementation getMinimumFlingVelocity()191 public static int getMinimumFlingVelocity() { 192 return MINIMUM_FLING_VELOCITY; 193 } 194 195 @Implementation getScaledMinimumFlingVelocity()196 public int getScaledMinimumFlingVelocity() { 197 return minimumFlingVelocity; 198 } 199 200 @Implementation getMaximumFlingVelocity()201 public static int getMaximumFlingVelocity() { 202 return MAXIMUM_FLING_VELOCITY; 203 } 204 205 @Implementation getScaledMaximumFlingVelocity()206 public int getScaledMaximumFlingVelocity() { 207 return maximumFlingVelocity; 208 } 209 210 @Implementation getMaximumDrawingCacheSize()211 public static int getMaximumDrawingCacheSize() { 212 return MAXIMUM_DRAWING_CACHE_SIZE; 213 } 214 215 @Implementation getZoomControlsTimeout()216 public static long getZoomControlsTimeout() { 217 return ZOOM_CONTROLS_TIMEOUT; 218 } 219 220 @Implementation getGlobalActionKeyTimeout()221 public static long getGlobalActionKeyTimeout() { 222 return GLOBAL_ACTIONS_KEY_TIMEOUT; 223 } 224 225 @Implementation getScrollFriction()226 public static float getScrollFriction() { 227 return SCROLL_FRICTION; 228 } 229 230 } 231