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