1b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini/*
2b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini * Copyright (C) 2013 The Android Open Source Project
3b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini *
4b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini * Licensed under the Apache License, Version 2.0 (the "License");
5b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini * you may not use this file except in compliance with the License.
6b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini * You may obtain a copy of the License at
7b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini *
8b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini *      http://www.apache.org/licenses/LICENSE-2.0
9b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini *
10b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini * Unless required by applicable law or agreed to in writing, software
11b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini * distributed under the License is distributed on an "AS IS" BASIS,
12b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini * See the License for the specific language governing permissions and
14b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini * limitations under the License.
15b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini */
16b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini
17b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpinipackage android.support.v4.view;
18b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini
19b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini/**
2072e51aec7cc9fe1948cdcc8dcdf3136e6b064421Mindy Pereira * Helper for accessing features in <code>ScaleGestureDetector</code> introduced
21b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini * after API level 19 (KitKat) in a backwards compatible fashion.
22b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini */
23b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpinipublic class ScaleGestureDetectorCompat {
24b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini    static final ScaleGestureDetectorImpl IMPL;
25b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini
26b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini    interface ScaleGestureDetectorImpl {
27b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini
28b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini        public void setQuickScaleEnabled(Object o, boolean enabled);
29b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini
30b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini        public boolean isQuickScaleEnabled(Object o);
31b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini    }
32b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini
33b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini    private static class BaseScaleGestureDetectorImpl implements ScaleGestureDetectorImpl {
34b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini        @Override
35b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini        public void setQuickScaleEnabled(Object o, boolean enabled) {
36b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini            // Intentionally blank
37b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini        }
38b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini
39b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini        @Override
40b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini        public boolean isQuickScaleEnabled(Object o) {
41b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini            return false;
42b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini        }
43b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini    }
44b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini
45b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini    private static class ScaleGestureDetectorCompatKitKatImpl implements ScaleGestureDetectorImpl {
46b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini        @Override
47b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini        public void setQuickScaleEnabled(Object o, boolean enabled) {
48b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini            ScaleGestureDetectorCompatKitKat.setQuickScaleEnabled(o, enabled);
49b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini        }
50b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini
51b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini        @Override
52b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini        public boolean isQuickScaleEnabled(Object o) {
53b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini            return ScaleGestureDetectorCompatKitKat.isQuickScaleEnabled(o);
54b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini        }
55b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini    }
56b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini
57b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini    static {
58b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini        final int version = android.os.Build.VERSION.SDK_INT;
59b07ca601bba6ed850b7cf9fedcd44158d78a721fDianne Hackborn        if (version >= 19) { // KitKat
60b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini            IMPL = new ScaleGestureDetectorCompatKitKatImpl();
61b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini        } else {
62b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini            IMPL = new BaseScaleGestureDetectorImpl();
63b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini        }
64b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini    }
65b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini
66b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini    private ScaleGestureDetectorCompat() {}
67b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini
68b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini    /**
6972e51aec7cc9fe1948cdcc8dcdf3136e6b064421Mindy Pereira     * Set whether the associated <code>OnScaleGestureListener</code> should receive onScale
7072e51aec7cc9fe1948cdcc8dcdf3136e6b064421Mindy Pereira     * callbacks when the user performs a doubleTap followed by a swipe. Note that this is enabled
7172e51aec7cc9fe1948cdcc8dcdf3136e6b064421Mindy Pereira     * by default if the app targets API 19 and newer.
7272e51aec7cc9fe1948cdcc8dcdf3136e6b064421Mindy Pereira     * @param enabled true to enable quick scaling, false to disable
73b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini     */
74b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini    public static void setQuickScaleEnabled(Object scaleGestureDetector, boolean enabled) {
75b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini        IMPL.setQuickScaleEnabled(scaleGestureDetector, enabled);
76b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini    }
77b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini
78b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini    /**
79b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini     * Return whether the quick scale gesture, in which the user performs a double tap followed by a
8072e51aec7cc9fe1948cdcc8dcdf3136e6b064421Mindy Pereira     * swipe, should perform scaling. See <code>setQuickScaleEnabled(Object, boolean)<code>.
81b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini     */
82b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini    public static boolean isQuickScaleEnabled(Object scaleGestureDetector) {
83b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini        return IMPL.isQuickScaleEnabled(scaleGestureDetector); // KitKat
84b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini    }
85b7c7eb8b8c520f5a3256205a42e42e071854d929Mindy DelliCarpini}
86