RowHeaderPresenter.java revision 268de3d2ea3de1be0725a80bbc79dd7b8b18617e
147520b68e50572a9775a662410c5aff8300c8784Craig Stout/*
247520b68e50572a9775a662410c5aff8300c8784Craig Stout * Copyright (C) 2014 The Android Open Source Project
347520b68e50572a9775a662410c5aff8300c8784Craig Stout *
447520b68e50572a9775a662410c5aff8300c8784Craig Stout * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
547520b68e50572a9775a662410c5aff8300c8784Craig Stout * in compliance with the License. You may obtain a copy of the License at
647520b68e50572a9775a662410c5aff8300c8784Craig Stout *
747520b68e50572a9775a662410c5aff8300c8784Craig Stout * http://www.apache.org/licenses/LICENSE-2.0
847520b68e50572a9775a662410c5aff8300c8784Craig Stout *
947520b68e50572a9775a662410c5aff8300c8784Craig Stout * Unless required by applicable law or agreed to in writing, software distributed under the License
1047520b68e50572a9775a662410c5aff8300c8784Craig Stout * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
1147520b68e50572a9775a662410c5aff8300c8784Craig Stout * or implied. See the License for the specific language governing permissions and limitations under
1247520b68e50572a9775a662410c5aff8300c8784Craig Stout * the License.
1347520b68e50572a9775a662410c5aff8300c8784Craig Stout */
1447520b68e50572a9775a662410c5aff8300c8784Craig Stoutpackage android.support.v17.leanback.widget;
1547520b68e50572a9775a662410c5aff8300c8784Craig Stout
164cf79b1c4d38a190317961891f9fd052836710fdCraig Stoutimport android.support.v17.leanback.R;
17268de3d2ea3de1be0725a80bbc79dd7b8b18617eCraig Stoutimport android.view.LayoutInflater;
1847520b68e50572a9775a662410c5aff8300c8784Craig Stoutimport android.view.View;
1947520b68e50572a9775a662410c5aff8300c8784Craig Stoutimport android.view.ViewGroup;
2047520b68e50572a9775a662410c5aff8300c8784Craig Stout
2147520b68e50572a9775a662410c5aff8300c8784Craig Stout/**
2247520b68e50572a9775a662410c5aff8300c8784Craig Stout * RowHeaderPresenter provides a default implementation for header using TextView.
23cf94c5fa8ae8edb7e26a623133207415ceeed187Dake Gu * If subclass override and creates its own view, subclass must also override
24cb13a318e577e14461eb008071dddf762847de42Dake Gu * {@link #onSelectLevelChanged(ViewHolder)}.
2547520b68e50572a9775a662410c5aff8300c8784Craig Stout */
2647520b68e50572a9775a662410c5aff8300c8784Craig Stoutpublic class RowHeaderPresenter extends Presenter {
2747520b68e50572a9775a662410c5aff8300c8784Craig Stout
28268de3d2ea3de1be0725a80bbc79dd7b8b18617eCraig Stout    private final int mLayoutResourceId;
29268de3d2ea3de1be0725a80bbc79dd7b8b18617eCraig Stout
30268de3d2ea3de1be0725a80bbc79dd7b8b18617eCraig Stout    public RowHeaderPresenter() {
31268de3d2ea3de1be0725a80bbc79dd7b8b18617eCraig Stout        this(R.layout.lb_row_header);
32268de3d2ea3de1be0725a80bbc79dd7b8b18617eCraig Stout    }
33268de3d2ea3de1be0725a80bbc79dd7b8b18617eCraig Stout
34268de3d2ea3de1be0725a80bbc79dd7b8b18617eCraig Stout    /**
35268de3d2ea3de1be0725a80bbc79dd7b8b18617eCraig Stout     * @hide
36268de3d2ea3de1be0725a80bbc79dd7b8b18617eCraig Stout     */
37268de3d2ea3de1be0725a80bbc79dd7b8b18617eCraig Stout    public RowHeaderPresenter(int layoutResourceId) {
38268de3d2ea3de1be0725a80bbc79dd7b8b18617eCraig Stout        mLayoutResourceId = layoutResourceId;
39268de3d2ea3de1be0725a80bbc79dd7b8b18617eCraig Stout    }
40268de3d2ea3de1be0725a80bbc79dd7b8b18617eCraig Stout
4147520b68e50572a9775a662410c5aff8300c8784Craig Stout    public static class ViewHolder extends Presenter.ViewHolder {
42cf94c5fa8ae8edb7e26a623133207415ceeed187Dake Gu        float mSelectLevel;
43cf94c5fa8ae8edb7e26a623133207415ceeed187Dake Gu        int mOriginalTextColor;
44268de3d2ea3de1be0725a80bbc79dd7b8b18617eCraig Stout        float mUnselectAlpha;
45268de3d2ea3de1be0725a80bbc79dd7b8b18617eCraig Stout
4647520b68e50572a9775a662410c5aff8300c8784Craig Stout        public ViewHolder(View view) {
4747520b68e50572a9775a662410c5aff8300c8784Craig Stout            super(view);
4847520b68e50572a9775a662410c5aff8300c8784Craig Stout        }
49cf94c5fa8ae8edb7e26a623133207415ceeed187Dake Gu        public final float getSelectLevel() {
50cf94c5fa8ae8edb7e26a623133207415ceeed187Dake Gu            return mSelectLevel;
51cf94c5fa8ae8edb7e26a623133207415ceeed187Dake Gu        }
5247520b68e50572a9775a662410c5aff8300c8784Craig Stout    }
5347520b68e50572a9775a662410c5aff8300c8784Craig Stout
5447520b68e50572a9775a662410c5aff8300c8784Craig Stout    @Override
5547520b68e50572a9775a662410c5aff8300c8784Craig Stout    public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {
56268de3d2ea3de1be0725a80bbc79dd7b8b18617eCraig Stout        RowHeaderView headerView = (RowHeaderView) LayoutInflater.from(parent.getContext())
57268de3d2ea3de1be0725a80bbc79dd7b8b18617eCraig Stout                .inflate(mLayoutResourceId, parent, false);
58268de3d2ea3de1be0725a80bbc79dd7b8b18617eCraig Stout
59cf94c5fa8ae8edb7e26a623133207415ceeed187Dake Gu        ViewHolder viewHolder = new ViewHolder(headerView);
60cf94c5fa8ae8edb7e26a623133207415ceeed187Dake Gu        viewHolder.mOriginalTextColor = headerView.getCurrentTextColor();
61268de3d2ea3de1be0725a80bbc79dd7b8b18617eCraig Stout        viewHolder.mUnselectAlpha = parent.getResources().getFraction(
62268de3d2ea3de1be0725a80bbc79dd7b8b18617eCraig Stout                R.fraction.lb_browse_header_unselect_alpha, 1, 1);
63cf94c5fa8ae8edb7e26a623133207415ceeed187Dake Gu        return viewHolder;
6447520b68e50572a9775a662410c5aff8300c8784Craig Stout    }
6547520b68e50572a9775a662410c5aff8300c8784Craig Stout
6647520b68e50572a9775a662410c5aff8300c8784Craig Stout    @Override
6747520b68e50572a9775a662410c5aff8300c8784Craig Stout    public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
683c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        setSelectLevel((ViewHolder) viewHolder, 0);
6947520b68e50572a9775a662410c5aff8300c8784Craig Stout        Row rowItem = (Row) item;
7047520b68e50572a9775a662410c5aff8300c8784Craig Stout        if (rowItem != null) {
7147520b68e50572a9775a662410c5aff8300c8784Craig Stout            HeaderItem headerItem = rowItem.getHeaderItem();
7247520b68e50572a9775a662410c5aff8300c8784Craig Stout            if (headerItem != null) {
7347520b68e50572a9775a662410c5aff8300c8784Craig Stout                String text = headerItem.getName();
74cb13a318e577e14461eb008071dddf762847de42Dake Gu                ((RowHeaderView) viewHolder.view).setText(text);
7547520b68e50572a9775a662410c5aff8300c8784Craig Stout            }
7647520b68e50572a9775a662410c5aff8300c8784Craig Stout        }
7747520b68e50572a9775a662410c5aff8300c8784Craig Stout    }
7847520b68e50572a9775a662410c5aff8300c8784Craig Stout
7947520b68e50572a9775a662410c5aff8300c8784Craig Stout    @Override
8047520b68e50572a9775a662410c5aff8300c8784Craig Stout    public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {
81cb13a318e577e14461eb008071dddf762847de42Dake Gu        ((RowHeaderView) viewHolder.view).setText(null);
8247520b68e50572a9775a662410c5aff8300c8784Craig Stout    }
83cf94c5fa8ae8edb7e26a623133207415ceeed187Dake Gu
84cf94c5fa8ae8edb7e26a623133207415ceeed187Dake Gu    public final void setSelectLevel(ViewHolder holder, float selectLevel) {
85cf94c5fa8ae8edb7e26a623133207415ceeed187Dake Gu        holder.mSelectLevel = selectLevel;
86cf94c5fa8ae8edb7e26a623133207415ceeed187Dake Gu        onSelectLevelChanged(holder);
87cf94c5fa8ae8edb7e26a623133207415ceeed187Dake Gu    }
88cf94c5fa8ae8edb7e26a623133207415ceeed187Dake Gu
89cf94c5fa8ae8edb7e26a623133207415ceeed187Dake Gu    protected void onSelectLevelChanged(ViewHolder holder) {
90268de3d2ea3de1be0725a80bbc79dd7b8b18617eCraig Stout        holder.view.setAlpha(holder.mUnselectAlpha + holder.mSelectLevel *
91268de3d2ea3de1be0725a80bbc79dd7b8b18617eCraig Stout                (1f - holder.mUnselectAlpha));
92cf94c5fa8ae8edb7e26a623133207415ceeed187Dake Gu    }
9347520b68e50572a9775a662410c5aff8300c8784Craig Stout}