RowHeaderPresenter.java revision 3c23ada8bc25a05bbaa8c479a9df72e8172c4349
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.graphics.ColorOverlayDimmer;
17import android.view.View;
18import android.view.ViewGroup;
19
20/**
21 * RowHeaderPresenter provides a default implementation for header using TextView.
22 * If subclass override and creates its own view, subclass must also override
23 * {@link #onSelectLevelChanged(ViewHolder)}.
24 */
25public class RowHeaderPresenter extends Presenter {
26
27    public static class ViewHolder extends Presenter.ViewHolder {
28        float mSelectLevel;
29        int mOriginalTextColor;
30        ColorOverlayDimmer mColorDimmer;
31        public ViewHolder(View view) {
32            super(view);
33        }
34        public final float getSelectLevel() {
35            return mSelectLevel;
36        }
37    }
38
39    @Override
40    public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {
41        RowHeaderView headerView = new RowHeaderView(parent.getContext());
42        ViewHolder viewHolder = new ViewHolder(headerView);
43        viewHolder.mOriginalTextColor = headerView.getCurrentTextColor();
44        return viewHolder;
45    }
46
47    @Override
48    public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
49        setSelectLevel((ViewHolder) viewHolder, 0);
50        Row rowItem = (Row) item;
51        if (rowItem != null) {
52            HeaderItem headerItem = rowItem.getHeaderItem();
53            if (headerItem != null) {
54                String text = headerItem.getName();
55                ((RowHeaderView) viewHolder.view).setText(text);
56            }
57        }
58    }
59
60    @Override
61    public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {
62        ((RowHeaderView) viewHolder.view).setText(null);
63    }
64
65    public final void setSelectLevel(ViewHolder holder, float selectLevel) {
66        holder.mSelectLevel = selectLevel;
67        onSelectLevelChanged(holder);
68    }
69
70    protected void onSelectLevelChanged(ViewHolder holder) {
71        if (holder.mColorDimmer == null) {
72            holder.mColorDimmer = ColorOverlayDimmer.createDefault(holder.view.getContext());
73        }
74        holder.mColorDimmer.setActiveLevel(holder.mSelectLevel);
75        final RowHeaderView headerView = (RowHeaderView) holder.view;
76        headerView.setTextColor(holder.mColorDimmer.applyToColor(holder.mOriginalTextColor));
77    }
78}