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.VelocityTracker;
20eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
21eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn/**
220574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * Helper for accessing features in {@link VelocityTracker}
230574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * introduced after API level 4 in a backwards compatible fashion.
24eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn */
25eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackbornpublic class VelocityTrackerCompat {
26eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
27eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Interface for the full API.
28eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
29eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    interface VelocityTrackerVersionImpl {
30eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        public float getXVelocity(VelocityTracker tracker, int pointerId);
31eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        public float getYVelocity(VelocityTracker tracker, int pointerId);
32eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    }
33eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
34eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
35eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Interface implementation that doesn't use anything about v4 APIs.
36eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
37eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    static class BaseVelocityTrackerVersionImpl implements VelocityTrackerVersionImpl {
38eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        @Override
39eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        public float getXVelocity(VelocityTracker tracker, int pointerId) {
40eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn            return tracker.getXVelocity();
41eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        }
42eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        @Override
43eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        public float getYVelocity(VelocityTracker tracker, int pointerId) {
44eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn            return tracker.getYVelocity();
45eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        }
46eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    }
47eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
48eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
49eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Interface implementation for devices with at least v11 APIs.
50eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
51eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    static class HoneycombVelocityTrackerVersionImpl implements VelocityTrackerVersionImpl {
52eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        @Override
53eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        public float getXVelocity(VelocityTracker tracker, int pointerId) {
54eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn            return VelocityTrackerCompatHoneycomb.getXVelocity(tracker, pointerId);
55eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        }
56eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        @Override
57eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        public float getYVelocity(VelocityTracker tracker, int pointerId) {
58eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn            return VelocityTrackerCompatHoneycomb.getYVelocity(tracker, pointerId);
59eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        }
60eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    }
61eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
62eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
63eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Select the correct implementation to use for the current platform.
64eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
65eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    static final VelocityTrackerVersionImpl IMPL;
66eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    static {
67eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        if (android.os.Build.VERSION.SDK_INT >= 11) {
68eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn            IMPL = new HoneycombVelocityTrackerVersionImpl();
69eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        } else {
70eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn            IMPL = new BaseVelocityTrackerVersionImpl();
71eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        }
72eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    }
73eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
74eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    // -------------------------------------------------------------------
75eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
76eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
77eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Call {@link VelocityTracker#getXVelocity(int)}.
780574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * If running on a pre-{@link android.os.Build.VERSION_CODES#HONEYCOMB} device,
79eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * returns {@link VelocityTracker#getXVelocity()}.
80eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
81eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    public static float getXVelocity(VelocityTracker tracker, int pointerId) {
82eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        return IMPL.getXVelocity(tracker, pointerId);
83eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    }
84eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
85eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
86eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Call {@link VelocityTracker#getYVelocity(int)}.
870574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * If running on a pre-{@link android.os.Build.VERSION_CODES#HONEYCOMB} device,
88eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * returns {@link VelocityTracker#getYVelocity()}.
89eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
90eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    public static float getYVelocity(VelocityTracker tracker, int pointerId) {
91eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        return IMPL.getYVelocity(tracker, pointerId);
92eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    }
93eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn}
94