1e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn/* 2e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn * Copyright (C) 2014 The Android Open Source Project 3e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn * 4e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn * in compliance with the License. You may obtain a copy of the License at 6e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn * 7e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn * http://www.apache.org/licenses/LICENSE-2.0 8e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn * 9e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn * Unless required by applicable law or agreed to in writing, software distributed under the License 10e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn * or implied. See the License for the specific language governing permissions and limitations under 12e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn * the License. 13e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn */ 14e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbournpackage android.support.v17.leanback.widget; 15e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 164e602840ed6741b44a536826799625ad0be4b3c6Kris Giesingimport android.graphics.drawable.Drawable; 17e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbournimport android.support.v17.leanback.R; 18e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbournimport android.text.TextUtils; 19e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbournimport android.view.LayoutInflater; 20e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbournimport android.view.View; 21e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbournimport android.view.ViewGroup; 227c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stoutimport android.widget.Button; 23e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 24e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbournclass ActionPresenterSelector extends PresenterSelector { 25e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 2670c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn private final Presenter mOneLineActionPresenter = new OneLineActionPresenter(); 2770c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn private final Presenter mTwoLineActionPresenter = new TwoLineActionPresenter(); 280246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu private final Presenter[] mPresenters = new Presenter[] { 290246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu mOneLineActionPresenter, mTwoLineActionPresenter}; 30e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 31e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn @Override 32e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public Presenter getPresenter(Object item) { 33e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn Action action = (Action) item; 34e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn if (TextUtils.isEmpty(action.getLabel2())) { 35e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn return mOneLineActionPresenter; 36e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } else { 37e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn return mTwoLineActionPresenter; 38e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 39e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 40e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 410246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu @Override 420246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu public Presenter[] getPresenters() { 430246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu return mPresenters; 440246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu } 450246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu 4670c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn static class ActionViewHolder extends Presenter.ViewHolder { 4770c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn Action mAction; 487c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout Button mButton; 494e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing int mLayoutDirection; 5070c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn 514e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing public ActionViewHolder(View view, int layoutDirection) { 5270c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn super(view); 537c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout mButton = (Button) view.findViewById(R.id.lb_action_button); 544e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing mLayoutDirection = layoutDirection; 55e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 5670c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn } 57e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 5870c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn class OneLineActionPresenter extends Presenter { 59e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn @Override 60e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public ViewHolder onCreateViewHolder(ViewGroup parent) { 61e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn View v = LayoutInflater.from(parent.getContext()) 62e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn .inflate(R.layout.lb_action_1_line, parent, false); 634e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing return new ActionViewHolder(v, parent.getLayoutDirection()); 64e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 65e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 66e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn @Override 67e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) { 68e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn Action action = (Action) item; 6970c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn ActionViewHolder vh = (ActionViewHolder) viewHolder; 7070c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn vh.mAction = action; 717c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout vh.mButton.setText(action.getLabel1()); 72e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 73e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 74e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn @Override 7570c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) { 7670c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn ((ActionViewHolder) viewHolder).mAction = null; 77e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 7870c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn } 79e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 8070c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn class TwoLineActionPresenter extends Presenter { 81e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn @Override 82e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public ViewHolder onCreateViewHolder(ViewGroup parent) { 83e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn View v = LayoutInflater.from(parent.getContext()) 84e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn .inflate(R.layout.lb_action_2_lines, parent, false); 854e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing return new ActionViewHolder(v, parent.getLayoutDirection()); 86e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 87e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 88e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn @Override 89e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) { 90e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn Action action = (Action) item; 9170c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn ActionViewHolder vh = (ActionViewHolder) viewHolder; 924e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing Drawable icon = action.getIcon(); 9370c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn vh.mAction = action; 94e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 954e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing if (icon != null) { 968e3566285de4ac771d6188f62fe947e23d371a3dKris Giesing final int startPadding = vh.view.getResources() 978e3566285de4ac771d6188f62fe947e23d371a3dKris Giesing .getDimensionPixelSize(R.dimen.lb_action_with_icon_padding_start); 988e3566285de4ac771d6188f62fe947e23d371a3dKris Giesing final int endPadding = vh.view.getResources() 998e3566285de4ac771d6188f62fe947e23d371a3dKris Giesing .getDimensionPixelSize(R.dimen.lb_action_with_icon_padding_end); 1008e3566285de4ac771d6188f62fe947e23d371a3dKris Giesing vh.view.setPaddingRelative(startPadding, 0, endPadding, 0); 101e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } else { 1027c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout final int padding = vh.view.getResources() 1037c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout .getDimensionPixelSize(R.dimen.lb_action_padding_horizontal); 1048e3566285de4ac771d6188f62fe947e23d371a3dKris Giesing vh.view.setPaddingRelative(padding, 0, padding, 0); 105e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 1064e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing if (vh.mLayoutDirection == View.LAYOUT_DIRECTION_RTL) { 1074e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing vh.mButton.setCompoundDrawablesWithIntrinsicBounds(null, null, icon, null); 1084e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing } else { 1094e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing vh.mButton.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null); 1104e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing } 1117c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout 112e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn CharSequence line1 = action.getLabel1(); 113e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn CharSequence line2 = action.getLabel2(); 114e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn if (TextUtils.isEmpty(line1)) { 1157c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout vh.mButton.setText(line2); 116e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } else if (TextUtils.isEmpty(line2)) { 1177c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout vh.mButton.setText(line1); 118e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } else { 1197c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout vh.mButton.setText(line1 + "\n" + line2); 120e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 121e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 122e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 123e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn @Override 124e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) { 12570c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn ActionViewHolder vh = (ActionViewHolder) viewHolder; 1267c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout vh.mButton.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); 127e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn vh.view.setPadding(0, 0, 0, 0); 12870c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn vh.mAction = null; 129e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 130e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 131e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn} 132