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 */ 23c5847d13e40f5d52459f5c0dab32dc08f1a9a683Chris Banespublic final 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