RowHeaderPresenter.java revision 268de3d2ea3de1be0725a80bbc79dd7b8b18617e
1/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5 * in compliance with the License. You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the License
10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11 * or implied. See the License for the specific language governing permissions and limitations under
12 * the License.
13 */
14package android.support.v17.leanback.widget;
15
16import android.support.v17.leanback.R;
17import android.view.LayoutInflater;
18import android.view.View;
19import android.view.ViewGroup;
20
21/**
22 * RowHeaderPresenter provides a default implementation for header using TextView.
23 * If subclass override and creates its own view, subclass must also override
24 * {@link #onSelectLevelChanged(ViewHolder)}.
25 */
26public class RowHeaderPresenter extends Presenter {
27
28    private final int mLayoutResourceId;
29
30    public RowHeaderPresenter() {
31        this(R.layout.lb_row_header);
32    }
33
34    /**
35     * @hide
36     */
37    public RowHeaderPresenter(int layoutResourceId) {
38        mLayoutResourceId = layoutResourceId;
39    }
40
41    public static class ViewHolder extends Presenter.ViewHolder {
42        float mSelectLevel;
43        int mOriginalTextColor;
44        float mUnselectAlpha;
45
46        public ViewHolder(View view) {
47            super(view);
48        }
49        public final float getSelectLevel() {
50            return mSelectLevel;
51        }
52    }
53
54    @Override
55    public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {
56        RowHeaderView headerView = (RowHeaderView) LayoutInflater.from(parent.getContext())
57                .inflate(mLayoutResourceId, parent, false);
58
59        ViewHolder viewHolder = new ViewHolder(headerView);
60        viewHolder.mOriginalTextColor = headerView.getCurrentTextColor();
61        viewHolder.mUnselectAlpha = parent.getResources().getFraction(
62                R.fraction.lb_browse_header_unselect_alpha, 1, 1);
63        return viewHolder;
64    }
65
66    @Override
67    public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
68        setSelectLevel((ViewHolder) viewHolder, 0);
69        Row rowItem = (Row) item;
70        if (rowItem != null) {
71            HeaderItem headerItem = rowItem.getHeaderItem();
72            if (headerItem != null) {
73                String text = headerItem.getName();
74                ((RowHeaderView) viewHolder.view).setText(text);
75            }
76        }
77    }
78
79    @Override
80    public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {
81        ((RowHeaderView) viewHolder.view).setText(null);
82    }
83
84    public final void setSelectLevel(ViewHolder holder, float selectLevel) {
85        holder.mSelectLevel = selectLevel;
86        onSelectLevelChanged(holder);
87    }
88
89    protected void onSelectLevelChanged(ViewHolder holder) {
90        holder.view.setAlpha(holder.mUnselectAlpha + holder.mSelectLevel *
91                (1f - holder.mUnselectAlpha));
92    }
93}