/**
* 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;
}
}