1d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/* 2d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Copyright (C) 2015 The Android Open Source Project 3d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 4d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Licensed under the Apache License, Version 2.0 (the "License"); 5d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * you may not use this file except in compliance with the License. 6d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * You may obtain a copy of the License at 7d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 8d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * http://www.apache.org/licenses/LICENSE-2.0 9d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 10d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Unless required by applicable law or agreed to in writing, software 11d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * distributed under the License is distributed on an "AS IS" BASIS, 12d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * See the License for the specific language governing permissions and 14d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * limitations under the License. 15d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 16d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpackage com.android.messaging.ui; 17d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 18d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.content.Context; 19d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.support.v4.view.PagerAdapter; 20d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.support.v4.view.ViewPager; 21d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.util.AttributeSet; 22d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.view.MotionEvent; 23d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 24d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.UiUtils; 25d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 26d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/** 27d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * A simple extension on the standard ViewPager which lets you turn paging on/off. 28d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 29d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpublic class PagingAwareViewPager extends ViewPager { 30d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private boolean mPagingEnabled = true; 31d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 32d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public PagingAwareViewPager(Context context, AttributeSet attrs) { 33d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd super(context, attrs); 34d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 35d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 36d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 37d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void setCurrentItem(int item, boolean smoothScroll) { 38d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd super.setCurrentItem(getRtlPosition(item), smoothScroll); 39d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 40d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 41d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 42d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void setCurrentItem(int item) { 43d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd super.setCurrentItem(getRtlPosition(item)); 44d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 45d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 46d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 47d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public int getCurrentItem() { 48d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd int position = super.getCurrentItem(); 49d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return getRtlPosition(position); 50d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 51d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 52d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 53d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Switches position in pager to be adjusted for if we are in RtL mode 54d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 55d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @param position 56d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @return position adjusted if in rtl mode 57d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 58d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd protected int getRtlPosition(final int position) { 59d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final PagerAdapter adapter = getAdapter(); 60d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (adapter != null && UiUtils.isRtlMode()) { 61d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return adapter.getCount() - 1 - position; 62d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 63d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return position; 64d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 65d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 66d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 67d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean onTouchEvent(final MotionEvent event) { 68d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (!mPagingEnabled) { 69d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return false; 70d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 71d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return super.onTouchEvent(event); 72d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 73d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 74d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 75d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean onInterceptTouchEvent(final MotionEvent event) { 76d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (!mPagingEnabled) { 77d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return false; 78d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 79d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return super.onInterceptTouchEvent(event); 80d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 81d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 82d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void setPagingEnabled(final boolean enabled) { 83d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd this.mPagingEnabled = enabled; 84d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 85d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 86d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** This prevents touch-less scrolling eg. while doing accessibility navigation. */ 87d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 88d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean canScrollHorizontally(int direction) { 89d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (mPagingEnabled) { 90d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return super.canScrollHorizontally(direction); 91d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } else { 92d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return false; 93d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 94d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 95d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd} 96