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}