1816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko/* 2816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Copyright (C) 2015 The Android Open Source Project 3816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * 4816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Licensed under the Apache License, Version 2.0 (the "License"); 5816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * you may not use this file except in compliance with the License. 6816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * You may obtain a copy of the License at 7816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * 8816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * http://www.apache.org/licenses/LICENSE-2.0 9816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * 10816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Unless required by applicable law or agreed to in writing, software 11816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * distributed under the License is distributed on an "AS IS" BASIS, 12816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * See the License for the specific language governing permissions and 14816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * limitations under the License. 15816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko */ 16816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 17816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopackage com.android.tv.guide; 18816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 19816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.content.Context; 20816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.util.AttributeSet; 21816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 22816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopublic class TimelineRow extends TimelineGridView { 23816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private static final float FADING_EDGE_STRENGTH_START = 1.0f; 24816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 25816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private int mScrollPosition; 26816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 27816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public TimelineRow(Context context) { 28816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko this(context, null); 29816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 30816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 31816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public TimelineRow(Context context, AttributeSet attrs) { 32816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko this(context, attrs, 0); 33816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 34816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 35816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public TimelineRow(Context context, AttributeSet attrs, int defStyle) { 36816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko super(context, attrs, defStyle); 37816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 38816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 39816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public void resetScroll() { 40816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko getLayoutManager().scrollToPosition(0); 41816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 42816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 43816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko /** 44816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Returns the current scroll position 45816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko */ 46816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public int getScrollOffset() { 47816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return Math.abs(mScrollPosition); 48816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 49816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 50816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko /** 51816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Scrolls horizontally to the given position. 52816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko */ 53816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public void scrollTo(int scrollOffset, boolean smoothScroll) { 54816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko int dx = (scrollOffset - getScrollOffset()) 55816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * (getLayoutDirection() == LAYOUT_DIRECTION_LTR ? 1 : -1); 56816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko if (smoothScroll) { 57816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko smoothScrollBy(dx, 0); 58816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } else { 59816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko scrollBy(dx, 0); 60816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 61816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 62816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 63816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 64816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public void onRtlPropertiesChanged(int layoutDirection) { 65816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko super.onRtlPropertiesChanged(layoutDirection); 66816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Reset scroll 672e1279b8bbe0603fb4399b25b73121bed5953c46Nick Chalko if (isAttachedToWindow()) { 682e1279b8bbe0603fb4399b25b73121bed5953c46Nick Chalko scrollTo(getScrollOffset(), false); 692e1279b8bbe0603fb4399b25b73121bed5953c46Nick Chalko } 70816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 71816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 72816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 73816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public void onScrolled(int dx, int dy) { 74816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko if (dx == 0 && dy == 0) { 75816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mScrollPosition = 0; 76816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } else { 77816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mScrollPosition += dx; 78816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 79816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 80816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 81816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 82816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko protected float getLeftFadingEdgeStrength() { 83816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return (getLayoutDirection() == LAYOUT_DIRECTION_LTR) ? FADING_EDGE_STRENGTH_START : 0; 84816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 85816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 86816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 87816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko protected float getRightFadingEdgeStrength() { 88816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return (getLayoutDirection() == LAYOUT_DIRECTION_RTL) ? FADING_EDGE_STRENGTH_START : 0; 89816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 90816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko} 91