1eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn/*
2eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Copyright (C) 2011 The Android Open Source Project
3eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn *
4eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License");
5eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * you may not use this file except in compliance with the License.
6eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * You may obtain a copy of the License at
7eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn *
8eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn *      http://www.apache.org/licenses/LICENSE-2.0
9eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn *
10eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Unless required by applicable law or agreed to in writing, software
11eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS,
12eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * See the License for the specific language governing permissions and
14eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * limitations under the License.
15eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn */
16eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
17eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackbornpackage android.support.v4.view;
18eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
19eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackbornimport android.view.ViewConfiguration;
20eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
21eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn/**
220574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * Helper for accessing features in {@link ViewConfiguration}
230574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * introduced after API level 4 in a backwards compatible fashion.
24eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn */
25eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackbornpublic class ViewConfigurationCompat {
26eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
27eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Interface for the full API.
28eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
29eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    interface ViewConfigurationVersionImpl {
30eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        public int getScaledPagingTouchSlop(ViewConfiguration config);
31eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    }
32eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
33eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
34eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Interface implementation that doesn't use anything about v4 APIs.
35eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
36eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    static class BaseViewConfigurationVersionImpl implements ViewConfigurationVersionImpl {
37eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        @Override
38eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        public int getScaledPagingTouchSlop(ViewConfiguration config) {
39eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn            return config.getScaledTouchSlop();
40eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        }
41eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    }
42eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
43eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
44eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Interface implementation for devices with at least v11 APIs.
45eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
46eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    static class FroyoViewConfigurationVersionImpl implements ViewConfigurationVersionImpl {
47eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        @Override
48eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        public int getScaledPagingTouchSlop(ViewConfiguration config) {
49eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn            return ViewConfigurationCompatFroyo.getScaledPagingTouchSlop(config);
50eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        }
51eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    }
52eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
53eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
54eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Select the correct implementation to use for the current platform.
55eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
56eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    static final ViewConfigurationVersionImpl IMPL;
57eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    static {
58eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        if (android.os.Build.VERSION.SDK_INT >= 11) {
59eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn            IMPL = new FroyoViewConfigurationVersionImpl();
60eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        } else {
61eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn            IMPL = new BaseViewConfigurationVersionImpl();
62eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        }
63eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    }
64eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
65eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    // -------------------------------------------------------------------
66eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
67eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
68eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Call {@link ViewConfiguration#getScaledPagingTouchSlop()}.
690574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * If running on a pre-{@link android.os.Build.VERSION_CODES#FROYO} device,
70eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * returns {@link ViewConfiguration#getScaledTouchSlop()}.
71eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
72eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    public static int getScaledPagingTouchSlop(ViewConfiguration config) {
73eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        return IMPL.getScaledPagingTouchSlop(config);
74eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    }
75eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn}
76