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