/** * openHAB, the open Home Automation Bus. * Copyright (C) 2010-2012, openHAB.org <admin@openhab.org> * * See the contributors.txt file in the distribution for a * full listing of individual contributors. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see <http://www.gnu.org/licenses>. * * Additional permission under GNU GPL version 3 section 7 * * If you modify this Program, or any covered work, by linking or * combining it with Eclipse (or a modified version of that library), * containing parts covered by the terms of the Eclipse Public License * (EPL), the licensors of this Program grant you additional permission * to convey the resulting work. */ package org.openhab.habdroid.ui; import android.content.Context; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.view.animation.Interpolator; import java.lang.reflect.Field; public class OpenHABViewPager extends ViewPager { // Disable page swiping by default private boolean mSwipeEnabled = false; // A custom scroller to lower the scroll speed a little bit private ScrollerCustomDuration mScroller = null; public OpenHABViewPager(Context context) { super(context); postInitViewPager(); } public OpenHABViewPager(Context context, AttributeSet attrs) { super(context, attrs); postInitViewPager(); } /** * Override the Scroller instance with our own class so we can change the * duration */ private void postInitViewPager() { try { Class<?> viewpager = ViewPager.class; Field scroller = viewpager.getDeclaredField("mScroller"); scroller.setAccessible(true); Field interpolator = viewpager.getDeclaredField("sInterpolator"); interpolator.setAccessible(true); mScroller = new ScrollerCustomDuration(getContext(), (Interpolator) interpolator.get(null)); scroller.set(this, mScroller); } catch (Exception e) { } } /** * Set the factor by which the duration will change */ public void setScrollDurationFactor(double scrollFactor) { mScroller.setScrollDurationFactor(scrollFactor); } /* onTouchEvent and onInterceptTouchEvent are needed to prevent swiping sitemap pages (OpenHABWidgetListFragments) to keep navigation as usual (press item to drill down, press 'back' to get to previous page) */ @Override public boolean onTouchEvent(MotionEvent event) { if (this.mSwipeEnabled) { return super.onTouchEvent(event); } return false; } @Override public boolean onInterceptTouchEvent(MotionEvent event) { if (this.mSwipeEnabled) { return super.onInterceptTouchEvent(event); } return false; } /* For flexibility or future use you can enable swiping pages (disabled by default) */ public void setSwipeEnabled(boolean swipe) { mSwipeEnabled = swipe; } }