/*
 * Copyright (C) 2006 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.view;

import android.annotation.TestApi;
import android.app.AppGlobals;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Point;
import android.os.RemoteException;
import android.provider.Settings;
import android.util.DisplayMetrics;
import android.util.SparseArray;

Contains methods to standard constants used in the UI for timeouts, sizes, and distances.
/** * Contains methods to standard constants used in the UI for timeouts, sizes, and distances. */
public class ViewConfiguration {
Defines the width of the horizontal scrollbar and the height of the vertical scrollbar in dips
/** * Defines the width of the horizontal scrollbar and the height of the vertical scrollbar in * dips */
private static final int SCROLL_BAR_SIZE = 4;
Duration of the fade when scrollbars fade away in milliseconds
/** * Duration of the fade when scrollbars fade away in milliseconds */
private static final int SCROLL_BAR_FADE_DURATION = 250;
Default delay before the scrollbars fade in milliseconds
/** * Default delay before the scrollbars fade in milliseconds */
private static final int SCROLL_BAR_DEFAULT_DELAY = 300;
Defines the length of the fading edges in dips
/** * Defines the length of the fading edges in dips */
private static final int FADING_EDGE_LENGTH = 12;
Defines the duration in milliseconds of the pressed state in child components.
/** * Defines the duration in milliseconds of the pressed state in child * components. */
private static final int PRESSED_STATE_DURATION = 64;
Defines the default duration in milliseconds before a press turns into a long press
/** * Defines the default duration in milliseconds before a press turns into * a long press */
private static final int DEFAULT_LONG_PRESS_TIMEOUT = 500;
Defines the default duration in milliseconds between the first tap's up event and the second tap's down event for an interaction to be considered part of the same multi-press.
/** * Defines the default duration in milliseconds between the first tap's up event and the second * tap's down event for an interaction to be considered part of the same multi-press. */
private static final int DEFAULT_MULTI_PRESS_TIMEOUT = 300;
Defines the time between successive key repeats in milliseconds.
/** * Defines the time between successive key repeats in milliseconds. */
private static final int KEY_REPEAT_DELAY = 50;
Defines the duration in milliseconds a user needs to hold down the appropriate button to bring up the global actions dialog (power off, lock screen, etc).
/** * Defines the duration in milliseconds a user needs to hold down the * appropriate button to bring up the global actions dialog (power off, * lock screen, etc). */
private static final int GLOBAL_ACTIONS_KEY_TIMEOUT = 500;
Defines the duration in milliseconds a user needs to hold down the appropriate button to bring up the accessibility shortcut for the first time
/** * Defines the duration in milliseconds a user needs to hold down the * appropriate button to bring up the accessibility shortcut for the first time */
private static final int A11Y_SHORTCUT_KEY_TIMEOUT = 3000;
Defines the duration in milliseconds a user needs to hold down the appropriate button to enable the accessibility shortcut once it's configured.
/** * Defines the duration in milliseconds a user needs to hold down the * appropriate button to enable the accessibility shortcut once it's configured. */
private static final int A11Y_SHORTCUT_KEY_TIMEOUT_AFTER_CONFIRMATION = 1000;
Defines the duration in milliseconds we will wait to see if a touch event is a tap or a scroll. If the user does not move within this interval, it is considered to be a tap.
/** * Defines the duration in milliseconds we will wait to see if a touch event * is a tap or a scroll. If the user does not move within this interval, it is * considered to be a tap. */
private static final int TAP_TIMEOUT = 100;
Defines the duration in milliseconds we will wait to see if a touch event is a jump tap. If the user does not complete the jump tap within this interval, it is considered to be a tap.
/** * Defines the duration in milliseconds we will wait to see if a touch event * is a jump tap. If the user does not complete the jump tap within this interval, it is * considered to be a tap. */
private static final int JUMP_TAP_TIMEOUT = 500;
Defines the duration in milliseconds between the first tap's up event and the second tap's down event for an interaction to be considered a double-tap.
/** * Defines the duration in milliseconds between the first tap's up event and * the second tap's down event for an interaction to be considered a * double-tap. */
private static final int DOUBLE_TAP_TIMEOUT = 300;
Defines the minimum duration in milliseconds between the first tap's up event and the second tap's down event for an interaction to be considered a double-tap.
/** * Defines the minimum duration in milliseconds between the first tap's up event and * the second tap's down event for an interaction to be considered a * double-tap. */
private static final int DOUBLE_TAP_MIN_TIME = 40;
Defines the maximum duration in milliseconds between a touch pad touch and release for a given touch to be considered a tap (click) as opposed to a hover movement gesture.
/** * Defines the maximum duration in milliseconds between a touch pad * touch and release for a given touch to be considered a tap (click) as * opposed to a hover movement gesture. */
private static final int HOVER_TAP_TIMEOUT = 150;
Defines the maximum distance in pixels that a touch pad touch can move before being released for it to be considered a tap (click) as opposed to a hover movement gesture.
/** * Defines the maximum distance in pixels that a touch pad touch can move * before being released for it to be considered a tap (click) as opposed * to a hover movement gesture. */
private static final int HOVER_TAP_SLOP = 20;
Defines the duration in milliseconds we want to display zoom controls in response to a user panning within an application.
/** * Defines the duration in milliseconds we want to display zoom controls in response * to a user panning within an application. */
private static final int ZOOM_CONTROLS_TIMEOUT = 3000;
Inset in dips to look for touchable content when the user touches the edge of the screen
/** * Inset in dips to look for touchable content when the user touches the edge of the screen */
private static final int EDGE_SLOP = 12;
Distance a touch can wander before we think the user is scrolling in dips. Note that this value defined here is only used as a fallback by legacy/misbehaving applications that do not provide a Context for determining density/configuration-dependent values. To alter this value, see the configuration resource config_viewConfigurationTouchSlop in frameworks/base/core/res/res/values/config.xml or the appropriate device resource overlay. It may be appropriate to tweak this on a device-specific basis in an overlay based on the characteristics of the touch panel and firmware.
/** * Distance a touch can wander before we think the user is scrolling in dips. * Note that this value defined here is only used as a fallback by legacy/misbehaving * applications that do not provide a Context for determining density/configuration-dependent * values. * * To alter this value, see the configuration resource config_viewConfigurationTouchSlop * in frameworks/base/core/res/res/values/config.xml or the appropriate device resource overlay. * It may be appropriate to tweak this on a device-specific basis in an overlay based on * the characteristics of the touch panel and firmware. */
private static final int TOUCH_SLOP = 8;
Defines the minimum size of the touch target for a scrollbar in dips
/** * Defines the minimum size of the touch target for a scrollbar in dips */
private static final int MIN_SCROLLBAR_TOUCH_TARGET = 48;
Distance the first touch can wander before we stop considering this event a double tap (in dips)
/** * Distance the first touch can wander before we stop considering this event a double tap * (in dips) */
private static final int DOUBLE_TAP_TOUCH_SLOP = TOUCH_SLOP;
Distance a touch can wander before we think the user is attempting a paged scroll (in dips) Note that this value defined here is only used as a fallback by legacy/misbehaving applications that do not provide a Context for determining density/configuration-dependent values. See the note above on TOUCH_SLOP regarding the dimen resource config_viewConfigurationTouchSlop. ViewConfiguration will report a paging touch slop of config_viewConfigurationTouchSlop * 2 when provided with a Context.
/** * Distance a touch can wander before we think the user is attempting a paged scroll * (in dips) * * Note that this value defined here is only used as a fallback by legacy/misbehaving * applications that do not provide a Context for determining density/configuration-dependent * values. * * See the note above on {@link #TOUCH_SLOP} regarding the dimen resource * config_viewConfigurationTouchSlop. ViewConfiguration will report a paging touch slop of * config_viewConfigurationTouchSlop * 2 when provided with a Context. */
private static final int PAGING_TOUCH_SLOP = TOUCH_SLOP * 2;
Distance in dips between the first touch and second touch to still be considered a double tap
/** * Distance in dips between the first touch and second touch to still be considered a double tap */
private static final int DOUBLE_TAP_SLOP = 100;
Distance in dips a touch needs to be outside of a window's bounds for it to count as outside for purposes of dismissing the window.
/** * Distance in dips a touch needs to be outside of a window's bounds for it to * count as outside for purposes of dismissing the window. */
private static final int WINDOW_TOUCH_SLOP = 16;
Minimum velocity to initiate a fling, as measured in dips per second
/** * Minimum velocity to initiate a fling, as measured in dips per second */
private static final int MINIMUM_FLING_VELOCITY = 50;
Maximum velocity to initiate a fling, as measured in dips per second
/** * Maximum velocity to initiate a fling, as measured in dips per second */
private static final int MAXIMUM_FLING_VELOCITY = 8000;
Delay before dispatching a recurring accessibility event in milliseconds. This delay guarantees that a recurring event will be send at most once during the SEND_RECURRING_ACCESSIBILITY_EVENTS_INTERVAL_MILLIS time frame.
/** * Delay before dispatching a recurring accessibility event in milliseconds. * This delay guarantees that a recurring event will be send at most once * during the {@link #SEND_RECURRING_ACCESSIBILITY_EVENTS_INTERVAL_MILLIS} time * frame. */
private static final long SEND_RECURRING_ACCESSIBILITY_EVENTS_INTERVAL_MILLIS = 100;
The maximum size of View's drawing cache, expressed in bytes. This size should be at least equal to the size of the screen in ARGB888 format.
/** * The maximum size of View's drawing cache, expressed in bytes. This size * should be at least equal to the size of the screen in ARGB888 format. */
@Deprecated private static final int MAXIMUM_DRAWING_CACHE_SIZE = 480 * 800 * 4; // ARGB8888
The coefficient of friction applied to flings/scrolls.
/** * The coefficient of friction applied to flings/scrolls. */
private static final float SCROLL_FRICTION = 0.015f;
Max distance in dips to overscroll for edge effects
/** * Max distance in dips to overscroll for edge effects */
private static final int OVERSCROLL_DISTANCE = 0;
Max distance in dips to overfling for edge effects
/** * Max distance in dips to overfling for edge effects */
private static final int OVERFLING_DISTANCE = 6;
Amount to scroll in response to a horizontal MotionEvent.ACTION_SCROLL event, in dips per axis value.
/** * Amount to scroll in response to a horizontal {@link MotionEvent#ACTION_SCROLL} event, * in dips per axis value. */
private static final float HORIZONTAL_SCROLL_FACTOR = 64;
Amount to scroll in response to a vertical MotionEvent.ACTION_SCROLL event, in dips per axis value.
/** * Amount to scroll in response to a vertical {@link MotionEvent#ACTION_SCROLL} event, * in dips per axis value. */
private static final float VERTICAL_SCROLL_FACTOR = 64;
Default duration to hide an action mode for.
/** * Default duration to hide an action mode for. */
private static final long ACTION_MODE_HIDE_DURATION_DEFAULT = 2000;
Defines the duration in milliseconds before an end of a long press causes a tooltip to be hidden.
/** * Defines the duration in milliseconds before an end of a long press causes a tooltip to be * hidden. */
private static final int LONG_PRESS_TOOLTIP_HIDE_TIMEOUT = 1500;
Defines the duration in milliseconds before a hover event causes a tooltip to be shown.
/** * Defines the duration in milliseconds before a hover event causes a tooltip to be shown. */
private static final int HOVER_TOOLTIP_SHOW_TIMEOUT = 500;
Defines the duration in milliseconds before mouse inactivity causes a tooltip to be hidden. (default variant to be used when View.SYSTEM_UI_FLAG_LOW_PROFILE is not set).
/** * Defines the duration in milliseconds before mouse inactivity causes a tooltip to be hidden. * (default variant to be used when {@link View#SYSTEM_UI_FLAG_LOW_PROFILE} is not set). */
private static final int HOVER_TOOLTIP_HIDE_TIMEOUT = 15000;
Defines the duration in milliseconds before mouse inactivity causes a tooltip to be hidden (short version to be used when View.SYSTEM_UI_FLAG_LOW_PROFILE is set).
/** * Defines the duration in milliseconds before mouse inactivity causes a tooltip to be hidden * (short version to be used when {@link View#SYSTEM_UI_FLAG_LOW_PROFILE} is set). */
private static final int HOVER_TOOLTIP_HIDE_SHORT_TIMEOUT = 3000;
Configuration values for overriding hasPermanentMenuKey() behavior. These constants must match the definition in res/values/config.xml.
/** * Configuration values for overriding {@link #hasPermanentMenuKey()} behavior. * These constants must match the definition in res/values/config.xml. */
private static final int HAS_PERMANENT_MENU_KEY_AUTODETECT = 0; private static final int HAS_PERMANENT_MENU_KEY_TRUE = 1; private static final int HAS_PERMANENT_MENU_KEY_FALSE = 2; private final int mEdgeSlop; private final int mFadingEdgeLength; private final int mMinimumFlingVelocity; private final int mMaximumFlingVelocity; private final int mScrollbarSize; private final int mTouchSlop; private final int mHoverSlop; private final int mMinScrollbarTouchTarget; private final int mDoubleTapTouchSlop; private final int mPagingTouchSlop; private final int mDoubleTapSlop; private final int mWindowTouchSlop; private final int mMaximumDrawingCacheSize; private final int mOverscrollDistance; private final int mOverflingDistance; private final boolean mFadingMarqueeEnabled; private final long mGlobalActionsKeyTimeout; private final float mVerticalScrollFactor; private final float mHorizontalScrollFactor; private final boolean mShowMenuShortcutsWhenKeyboardPresent; private boolean sHasPermanentMenuKey; private boolean sHasPermanentMenuKeySet; static final SparseArray<ViewConfiguration> sConfigurations = new SparseArray<ViewConfiguration>(2);
Deprecated:Use get(Context) instead.
/** * @deprecated Use {@link android.view.ViewConfiguration#get(android.content.Context)} instead. */
@Deprecated public ViewConfiguration() { mEdgeSlop = EDGE_SLOP; mFadingEdgeLength = FADING_EDGE_LENGTH; mMinimumFlingVelocity = MINIMUM_FLING_VELOCITY; mMaximumFlingVelocity = MAXIMUM_FLING_VELOCITY; mScrollbarSize = SCROLL_BAR_SIZE; mTouchSlop = TOUCH_SLOP; mHoverSlop = TOUCH_SLOP / 2; mMinScrollbarTouchTarget = MIN_SCROLLBAR_TOUCH_TARGET; mDoubleTapTouchSlop = DOUBLE_TAP_TOUCH_SLOP; mPagingTouchSlop = PAGING_TOUCH_SLOP; mDoubleTapSlop = DOUBLE_TAP_SLOP; mWindowTouchSlop = WINDOW_TOUCH_SLOP; //noinspection deprecation mMaximumDrawingCacheSize = MAXIMUM_DRAWING_CACHE_SIZE; mOverscrollDistance = OVERSCROLL_DISTANCE; mOverflingDistance = OVERFLING_DISTANCE; mFadingMarqueeEnabled = true; mGlobalActionsKeyTimeout = GLOBAL_ACTIONS_KEY_TIMEOUT; mHorizontalScrollFactor = HORIZONTAL_SCROLL_FACTOR; mVerticalScrollFactor = VERTICAL_SCROLL_FACTOR; mShowMenuShortcutsWhenKeyboardPresent = false; }
Creates a new configuration for the specified context. The configuration depends on various parameters of the context, like the dimension of the display or the density of the display.
Params:
  • context – The application context used to initialize this view configuration.
See Also:
/** * Creates a new configuration for the specified context. The configuration depends on * various parameters of the context, like the dimension of the display or the density * of the display. * * @param context The application context used to initialize this view configuration. * * @see #get(android.content.Context) * @see android.util.DisplayMetrics */
private ViewConfiguration(Context context) { final Resources res = context.getResources(); final DisplayMetrics metrics = res.getDisplayMetrics(); final Configuration config = res.getConfiguration(); final float density = metrics.density; final float sizeAndDensity; if (config.isLayoutSizeAtLeast(Configuration.SCREENLAYOUT_SIZE_XLARGE)) { sizeAndDensity = density * 1.5f; } else { sizeAndDensity = density; } mEdgeSlop = (int) (sizeAndDensity * EDGE_SLOP + 0.5f); mFadingEdgeLength = (int) (sizeAndDensity * FADING_EDGE_LENGTH + 0.5f); mScrollbarSize = res.getDimensionPixelSize( com.android.internal.R.dimen.config_scrollbarSize); mDoubleTapSlop = (int) (sizeAndDensity * DOUBLE_TAP_SLOP + 0.5f); mWindowTouchSlop = (int) (sizeAndDensity * WINDOW_TOUCH_SLOP + 0.5f); // Size of the screen in bytes, in ARGB_8888 format final WindowManager win = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE); final Display display = win.getDefaultDisplay(); final Point size = new Point(); display.getRealSize(size); mMaximumDrawingCacheSize = 4 * size.x * size.y; mOverscrollDistance = (int) (sizeAndDensity * OVERSCROLL_DISTANCE + 0.5f); mOverflingDistance = (int) (sizeAndDensity * OVERFLING_DISTANCE + 0.5f); if (!sHasPermanentMenuKeySet) { final int configVal = res.getInteger( com.android.internal.R.integer.config_overrideHasPermanentMenuKey); switch (configVal) { default: case HAS_PERMANENT_MENU_KEY_AUTODETECT: { IWindowManager wm = WindowManagerGlobal.getWindowManagerService(); try { sHasPermanentMenuKey = !wm.hasNavigationBar(); sHasPermanentMenuKeySet = true; } catch (RemoteException ex) { sHasPermanentMenuKey = false; } } break; case HAS_PERMANENT_MENU_KEY_TRUE: sHasPermanentMenuKey = true; sHasPermanentMenuKeySet = true; break; case HAS_PERMANENT_MENU_KEY_FALSE: sHasPermanentMenuKey = false; sHasPermanentMenuKeySet = true; break; } } mFadingMarqueeEnabled = res.getBoolean( com.android.internal.R.bool.config_ui_enableFadingMarquee); mTouchSlop = res.getDimensionPixelSize( com.android.internal.R.dimen.config_viewConfigurationTouchSlop); mHoverSlop = res.getDimensionPixelSize( com.android.internal.R.dimen.config_viewConfigurationHoverSlop); mMinScrollbarTouchTarget = res.getDimensionPixelSize( com.android.internal.R.dimen.config_minScrollbarTouchTarget); mPagingTouchSlop = mTouchSlop * 2; mDoubleTapTouchSlop = mTouchSlop; mMinimumFlingVelocity = res.getDimensionPixelSize( com.android.internal.R.dimen.config_viewMinFlingVelocity); mMaximumFlingVelocity = res.getDimensionPixelSize( com.android.internal.R.dimen.config_viewMaxFlingVelocity); mGlobalActionsKeyTimeout = res.getInteger( com.android.internal.R.integer.config_globalActionsKeyTimeout); mHorizontalScrollFactor = res.getDimensionPixelSize( com.android.internal.R.dimen.config_horizontalScrollFactor); mVerticalScrollFactor = res.getDimensionPixelSize( com.android.internal.R.dimen.config_verticalScrollFactor); mShowMenuShortcutsWhenKeyboardPresent = res.getBoolean( com.android.internal.R.bool.config_showMenuShortcutsWhenKeyboardPresent); }
Returns a configuration for the specified context. The configuration depends on various parameters of the context, like the dimension of the display or the density of the display.
Params:
  • context – The application context used to initialize the view configuration.
/** * Returns a configuration for the specified context. The configuration depends on * various parameters of the context, like the dimension of the display or the * density of the display. * * @param context The application context used to initialize the view configuration. */
public static ViewConfiguration get(Context context) { final DisplayMetrics metrics = context.getResources().getDisplayMetrics(); final int density = (int) (100.0f * metrics.density); ViewConfiguration configuration = sConfigurations.get(density); if (configuration == null) { configuration = new ViewConfiguration(context); sConfigurations.put(density, configuration); } return configuration; }
Returns:The width of the horizontal scrollbar and the height of the vertical scrollbar in dips
Deprecated:Use getScaledScrollBarSize() instead.
/** * @return The width of the horizontal scrollbar and the height of the vertical * scrollbar in dips * * @deprecated Use {@link #getScaledScrollBarSize()} instead. */
@Deprecated public static int getScrollBarSize() { return SCROLL_BAR_SIZE; }
Returns:The width of the horizontal scrollbar and the height of the vertical scrollbar in pixels
/** * @return The width of the horizontal scrollbar and the height of the vertical * scrollbar in pixels */
public int getScaledScrollBarSize() { return mScrollbarSize; }
Returns:the minimum size of the scrollbar thumb's touch target in pixels
@hide
/** * @return the minimum size of the scrollbar thumb's touch target in pixels * @hide */
public int getScaledMinScrollbarTouchTarget() { return mMinScrollbarTouchTarget; }
Returns:Duration of the fade when scrollbars fade away in milliseconds
/** * @return Duration of the fade when scrollbars fade away in milliseconds */
public static int getScrollBarFadeDuration() { return SCROLL_BAR_FADE_DURATION; }
Returns:Default delay before the scrollbars fade in milliseconds
/** * @return Default delay before the scrollbars fade in milliseconds */
public static int getScrollDefaultDelay() { return SCROLL_BAR_DEFAULT_DELAY; }
Returns:the length of the fading edges in dips
Deprecated:Use getScaledFadingEdgeLength() instead.
/** * @return the length of the fading edges in dips * * @deprecated Use {@link #getScaledFadingEdgeLength()} instead. */
@Deprecated public static int getFadingEdgeLength() { return FADING_EDGE_LENGTH; }
Returns:the length of the fading edges in pixels
/** * @return the length of the fading edges in pixels */
public int getScaledFadingEdgeLength() { return mFadingEdgeLength; }
Returns:the duration in milliseconds of the pressed state in child components.
/** * @return the duration in milliseconds of the pressed state in child * components. */
public static int getPressedStateDuration() { return PRESSED_STATE_DURATION; }
Returns:the duration in milliseconds before a press turns into a long press
/** * @return the duration in milliseconds before a press turns into * a long press */
public static int getLongPressTimeout() { return AppGlobals.getIntCoreSetting(Settings.Secure.LONG_PRESS_TIMEOUT, DEFAULT_LONG_PRESS_TIMEOUT); }
Returns:the duration in milliseconds between the first tap's up event and the second tap's down event for an interaction to be considered part of the same multi-press.
@hide
/** * @return the duration in milliseconds between the first tap's up event and the second tap's * down event for an interaction to be considered part of the same multi-press. * @hide */
public static int getMultiPressTimeout() { return AppGlobals.getIntCoreSetting(Settings.Secure.MULTI_PRESS_TIMEOUT, DEFAULT_MULTI_PRESS_TIMEOUT); }
Returns:the time before the first key repeat in milliseconds.
/** * @return the time before the first key repeat in milliseconds. */
public static int getKeyRepeatTimeout() { return getLongPressTimeout(); }
Returns:the time between successive key repeats in milliseconds.
/** * @return the time between successive key repeats in milliseconds. */
public static int getKeyRepeatDelay() { return KEY_REPEAT_DELAY; }
Returns:the duration in milliseconds we will wait to see if a touch event is a tap or a scroll. If the user does not move within this interval, it is considered to be a tap.
/** * @return the duration in milliseconds we will wait to see if a touch event * is a tap or a scroll. If the user does not move within this interval, it is * considered to be a tap. */
public static int getTapTimeout() { return TAP_TIMEOUT; }
Returns:the duration in milliseconds we will wait to see if a touch event is a jump tap. If the user does not move within this interval, it is considered to be a tap.
/** * @return the duration in milliseconds we will wait to see if a touch event * is a jump tap. If the user does not move within this interval, it is * considered to be a tap. */
public static int getJumpTapTimeout() { return JUMP_TAP_TIMEOUT; }
Returns:the duration in milliseconds between the first tap's up event and the second tap's down event for an interaction to be considered a double-tap.
/** * @return the duration in milliseconds between the first tap's up event and * the second tap's down event for an interaction to be considered a * double-tap. */
public static int getDoubleTapTimeout() { return DOUBLE_TAP_TIMEOUT; }
Returns:the minimum duration in milliseconds between the first tap's up event and the second tap's down event for an interaction to be considered a double-tap.
@hide
/** * @return the minimum duration in milliseconds between the first tap's * up event and the second tap's down event for an interaction to be considered a * double-tap. * * @hide */
public static int getDoubleTapMinTime() { return DOUBLE_TAP_MIN_TIME; }
Returns:the maximum duration in milliseconds between a touch pad touch and release for a given touch to be considered a tap (click) as opposed to a hover movement gesture.
@hide
/** * @return the maximum duration in milliseconds between a touch pad * touch and release for a given touch to be considered a tap (click) as * opposed to a hover movement gesture. * @hide */
public static int getHoverTapTimeout() { return HOVER_TAP_TIMEOUT; }
Returns:the maximum distance in pixels that a touch pad touch can move before being released for it to be considered a tap (click) as opposed to a hover movement gesture.
@hide
/** * @return the maximum distance in pixels that a touch pad touch can move * before being released for it to be considered a tap (click) as opposed * to a hover movement gesture. * @hide */
public static int getHoverTapSlop() { return HOVER_TAP_SLOP; }
Returns:Inset in dips to look for touchable content when the user touches the edge of the screen
Deprecated:Use getScaledEdgeSlop() instead.
/** * @return Inset in dips to look for touchable content when the user touches the edge of the * screen * * @deprecated Use {@link #getScaledEdgeSlop()} instead. */
@Deprecated public static int getEdgeSlop() { return EDGE_SLOP; }
Returns:Inset in pixels to look for touchable content when the user touches the edge of the screen
/** * @return Inset in pixels to look for touchable content when the user touches the edge of the * screen */
public int getScaledEdgeSlop() { return mEdgeSlop; }
Returns:Distance in dips a touch can wander before we think the user is scrolling
Deprecated:Use getScaledTouchSlop() instead.
/** * @return Distance in dips a touch can wander before we think the user is scrolling * * @deprecated Use {@link #getScaledTouchSlop()} instead. */
@Deprecated public static int getTouchSlop() { return TOUCH_SLOP; }
Returns:Distance in pixels a touch can wander before we think the user is scrolling
/** * @return Distance in pixels a touch can wander before we think the user is scrolling */
public int getScaledTouchSlop() { return mTouchSlop; }
Returns:Distance in pixels a hover can wander while it is still considered "stationary".
/** * @return Distance in pixels a hover can wander while it is still considered "stationary". * */
public int getScaledHoverSlop() { return mHoverSlop; }
Returns:Distance in pixels the first touch can wander before we do not consider this a potential double tap event
@hide
/** * @return Distance in pixels the first touch can wander before we do not consider this a * potential double tap event * @hide */
public int getScaledDoubleTapTouchSlop() { return mDoubleTapTouchSlop; }
Returns:Distance in pixels a touch can wander before we think the user is scrolling a full page
/** * @return Distance in pixels a touch can wander before we think the user is scrolling a full * page */
public int getScaledPagingTouchSlop() { return mPagingTouchSlop; }
Returns:Distance in dips between the first touch and second touch to still be considered a double tap
Deprecated:Use getScaledDoubleTapSlop() instead.
@hideThe only client of this should be GestureDetector, which needs this for clients that still use its deprecated constructor.
/** * @return Distance in dips between the first touch and second touch to still be * considered a double tap * @deprecated Use {@link #getScaledDoubleTapSlop()} instead. * @hide The only client of this should be GestureDetector, which needs this * for clients that still use its deprecated constructor. */
@Deprecated public static int getDoubleTapSlop() { return DOUBLE_TAP_SLOP; }
Returns:Distance in pixels between the first touch and second touch to still be considered a double tap
/** * @return Distance in pixels between the first touch and second touch to still be * considered a double tap */
public int getScaledDoubleTapSlop() { return mDoubleTapSlop; }
Interval for dispatching a recurring accessibility event in milliseconds. This interval guarantees that a recurring event will be send at most once during the getSendRecurringAccessibilityEventsInterval() time frame.
Returns:The delay in milliseconds.
@hide
/** * Interval for dispatching a recurring accessibility event in milliseconds. * This interval guarantees that a recurring event will be send at most once * during the {@link #getSendRecurringAccessibilityEventsInterval()} time frame. * * @return The delay in milliseconds. * * @hide */
public static long getSendRecurringAccessibilityEventsInterval() { return SEND_RECURRING_ACCESSIBILITY_EVENTS_INTERVAL_MILLIS; }
Returns:Distance in dips a touch must be outside the bounds of a window for it to be counted as outside the window for purposes of dismissing that window.
Deprecated:Use getScaledWindowTouchSlop() instead.
/** * @return Distance in dips a touch must be outside the bounds of a window for it * to be counted as outside the window for purposes of dismissing that * window. * * @deprecated Use {@link #getScaledWindowTouchSlop()} instead. */
@Deprecated public static int getWindowTouchSlop() { return WINDOW_TOUCH_SLOP; }
Returns:Distance in pixels a touch must be outside the bounds of a window for it to be counted as outside the window for purposes of dismissing that window.
/** * @return Distance in pixels a touch must be outside the bounds of a window for it * to be counted as outside the window for purposes of dismissing that window. */
public int getScaledWindowTouchSlop() { return mWindowTouchSlop; }
Returns:Minimum velocity to initiate a fling, as measured in dips per second.
Deprecated:Use getScaledMinimumFlingVelocity() instead.
/** * @return Minimum velocity to initiate a fling, as measured in dips per second. * * @deprecated Use {@link #getScaledMinimumFlingVelocity()} instead. */
@Deprecated public static int getMinimumFlingVelocity() { return MINIMUM_FLING_VELOCITY; }
Returns:Minimum velocity to initiate a fling, as measured in pixels per second.
/** * @return Minimum velocity to initiate a fling, as measured in pixels per second. */
public int getScaledMinimumFlingVelocity() { return mMinimumFlingVelocity; }
Returns:Maximum velocity to initiate a fling, as measured in dips per second.
Deprecated:Use getScaledMaximumFlingVelocity() instead.
/** * @return Maximum velocity to initiate a fling, as measured in dips per second. * * @deprecated Use {@link #getScaledMaximumFlingVelocity()} instead. */
@Deprecated public static int getMaximumFlingVelocity() { return MAXIMUM_FLING_VELOCITY; }
Returns:Maximum velocity to initiate a fling, as measured in pixels per second.
/** * @return Maximum velocity to initiate a fling, as measured in pixels per second. */
public int getScaledMaximumFlingVelocity() { return mMaximumFlingVelocity; }
Returns:Amount to scroll in response to a MotionEvent.ACTION_SCROLL event. Multiply this by the event's axis value to obtain the number of pixels to be scrolled.
@removed
/** * @return Amount to scroll in response to a {@link MotionEvent#ACTION_SCROLL} event. Multiply * this by the event's axis value to obtain the number of pixels to be scrolled. * * @removed */
public int getScaledScrollFactor() { return (int) mVerticalScrollFactor; }
Returns:Amount to scroll in response to a horizontal MotionEvent.ACTION_SCROLL event. Multiply this by the event's axis value to obtain the number of pixels to be scrolled.
/** * @return Amount to scroll in response to a horizontal {@link MotionEvent#ACTION_SCROLL} event. * Multiply this by the event's axis value to obtain the number of pixels to be scrolled. */
public float getScaledHorizontalScrollFactor() { return mHorizontalScrollFactor; }
Returns:Amount to scroll in response to a vertical MotionEvent.ACTION_SCROLL event. Multiply this by the event's axis value to obtain the number of pixels to be scrolled.
/** * @return Amount to scroll in response to a vertical {@link MotionEvent#ACTION_SCROLL} event. * Multiply this by the event's axis value to obtain the number of pixels to be scrolled. */
public float getScaledVerticalScrollFactor() { return mVerticalScrollFactor; }
The maximum drawing cache size expressed in bytes.
Returns:the maximum size of View's drawing cache expressed in bytes
Deprecated:Use getScaledMaximumDrawingCacheSize() instead.
/** * The maximum drawing cache size expressed in bytes. * * @return the maximum size of View's drawing cache expressed in bytes * * @deprecated Use {@link #getScaledMaximumDrawingCacheSize()} instead. */
@Deprecated public static int getMaximumDrawingCacheSize() { //noinspection deprecation return MAXIMUM_DRAWING_CACHE_SIZE; }
The maximum drawing cache size expressed in bytes.
Returns:the maximum size of View's drawing cache expressed in bytes
/** * The maximum drawing cache size expressed in bytes. * * @return the maximum size of View's drawing cache expressed in bytes */
public int getScaledMaximumDrawingCacheSize() { return mMaximumDrawingCacheSize; }
Returns:The maximum distance a View should overscroll by when showing edge effects (in pixels).
/** * @return The maximum distance a View should overscroll by when showing edge effects (in * pixels). */
public int getScaledOverscrollDistance() { return mOverscrollDistance; }
Returns:The maximum distance a View should overfling by when showing edge effects (in pixels).
/** * @return The maximum distance a View should overfling by when showing edge effects (in * pixels). */
public int getScaledOverflingDistance() { return mOverflingDistance; }
The amount of time that the zoom controls should be displayed on the screen expressed in milliseconds.
Returns:the time the zoom controls should be visible expressed in milliseconds.
/** * The amount of time that the zoom controls should be * displayed on the screen expressed in milliseconds. * * @return the time the zoom controls should be visible expressed * in milliseconds. */
public static long getZoomControlsTimeout() { return ZOOM_CONTROLS_TIMEOUT; }
The amount of time a user needs to press the relevant key to bring up the global actions dialog.
Returns:how long a user needs to press the relevant key to bring up the global actions dialog.
Deprecated:This timeout should not be used by applications
/** * The amount of time a user needs to press the relevant key to bring up * the global actions dialog. * * @return how long a user needs to press the relevant key to bring up * the global actions dialog. * @deprecated This timeout should not be used by applications */
@Deprecated public static long getGlobalActionKeyTimeout() { return GLOBAL_ACTIONS_KEY_TIMEOUT; }
The amount of time a user needs to press the relevant key to bring up the global actions dialog.
Returns:how long a user needs to press the relevant key to bring up the global actions dialog.
@hide
/** * The amount of time a user needs to press the relevant key to bring up * the global actions dialog. * * @return how long a user needs to press the relevant key to bring up * the global actions dialog. * @hide */
public long getDeviceGlobalActionKeyTimeout() { return mGlobalActionsKeyTimeout; }
The amount of time a user needs to press the relevant keys to activate the accessibility shortcut.
Returns:how long a user needs to press the relevant keys to activate the accessibility shortcut.
@hide
/** * The amount of time a user needs to press the relevant keys to activate the accessibility * shortcut. * * @return how long a user needs to press the relevant keys to activate the accessibility * shortcut. * @hide */
public long getAccessibilityShortcutKeyTimeout() { return A11Y_SHORTCUT_KEY_TIMEOUT; }
Returns:The amount of time a user needs to press the relevant keys to activate the accessibility shortcut after it's confirmed that accessibility shortcut is used.
@hide
/** * @return The amount of time a user needs to press the relevant keys to activate the * accessibility shortcut after it's confirmed that accessibility shortcut is used. * @hide */
public long getAccessibilityShortcutKeyTimeoutAfterConfirmation() { return A11Y_SHORTCUT_KEY_TIMEOUT_AFTER_CONFIRMATION; }
The amount of friction applied to scrolls and flings.
Returns:A scalar dimensionless value representing the coefficient of friction.
/** * The amount of friction applied to scrolls and flings. * * @return A scalar dimensionless value representing the coefficient of * friction. */
public static float getScrollFriction() { return SCROLL_FRICTION; }
Returns:the default duration in milliseconds for ActionMode.hide(long).
/** * @return the default duration in milliseconds for {@link ActionMode#hide(long)}. */
public static long getDefaultActionModeHideDuration() { return ACTION_MODE_HIDE_DURATION_DEFAULT; }
Report if the device has a permanent menu key available to the user.

As of Android 3.0, devices may not have a permanent menu key available. Apps should use the action bar to present menu options to users. However, there are some apps where the action bar is inappropriate or undesirable. This method may be used to detect if a menu key is present. If not, applications should provide another on-screen affordance to access functionality.

Returns:true if a permanent menu key is present, false otherwise.
/** * Report if the device has a permanent menu key available to the user. * * <p>As of Android 3.0, devices may not have a permanent menu key available. * Apps should use the action bar to present menu options to users. * However, there are some apps where the action bar is inappropriate * or undesirable. This method may be used to detect if a menu key is present. * If not, applications should provide another on-screen affordance to access * functionality. * * @return true if a permanent menu key is present, false otherwise. */
public boolean hasPermanentMenuKey() { return sHasPermanentMenuKey; }
Check if shortcuts should be displayed in menus.
Returns:True if shortcuts should be displayed in menus.
/** * Check if shortcuts should be displayed in menus. * * @return {@code True} if shortcuts should be displayed in menus. */
public boolean shouldShowMenuShortcutsWhenKeyboardPresent() { return mShowMenuShortcutsWhenKeyboardPresent; }
@hide
Returns:Whether or not marquee should use fading edges.
/** * @hide * @return Whether or not marquee should use fading edges. */
public boolean isFadingMarqueeEnabled() { return mFadingMarqueeEnabled; }
Returns:the duration in milliseconds before an end of a long press causes a tooltip to be hidden
@hide
/** * @return the duration in milliseconds before an end of a long press causes a tooltip to be * hidden * @hide */
@TestApi public static int getLongPressTooltipHideTimeout() { return LONG_PRESS_TOOLTIP_HIDE_TIMEOUT; }
Returns:the duration in milliseconds before a hover event causes a tooltip to be shown
@hide
/** * @return the duration in milliseconds before a hover event causes a tooltip to be shown * @hide */
@TestApi public static int getHoverTooltipShowTimeout() { return HOVER_TOOLTIP_SHOW_TIMEOUT; }
Returns:the duration in milliseconds before mouse inactivity causes a tooltip to be hidden (default variant to be used when View.SYSTEM_UI_FLAG_LOW_PROFILE is not set).
@hide
/** * @return the duration in milliseconds before mouse inactivity causes a tooltip to be hidden * (default variant to be used when {@link View#SYSTEM_UI_FLAG_LOW_PROFILE} is not set). * @hide */
@TestApi public static int getHoverTooltipHideTimeout() { return HOVER_TOOLTIP_HIDE_TIMEOUT; }
Returns:the duration in milliseconds before mouse inactivity causes a tooltip to be hidden (shorter variant to be used when View.SYSTEM_UI_FLAG_LOW_PROFILE is set).
@hide
/** * @return the duration in milliseconds before mouse inactivity causes a tooltip to be hidden * (shorter variant to be used when {@link View#SYSTEM_UI_FLAG_LOW_PROFILE} is set). * @hide */
@TestApi public static int getHoverTooltipHideShortTimeout() { return HOVER_TOOLTIP_HIDE_SHORT_TIMEOUT; } }