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(); 28e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 29e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn @Override 30e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public Presenter getPresenter(Object item) { 31e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn Action action = (Action) item; 32e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn if (TextUtils.isEmpty(action.getLabel2())) { 33e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn return mOneLineActionPresenter; 34e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } else { 35e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn return mTwoLineActionPresenter; 36e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 37e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 38e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 3970c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn static class ActionViewHolder extends Presenter.ViewHolder { 4070c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn Action mAction; 417c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout Button mButton; 424e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing int mLayoutDirection; 4370c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn 444e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing public ActionViewHolder(View view, int layoutDirection) { 4570c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn super(view); 467c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout mButton = (Button) view.findViewById(R.id.lb_action_button); 474e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing mLayoutDirection = layoutDirection; 48e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 4970c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn } 50e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 5170c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn class OneLineActionPresenter extends Presenter { 52e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn @Override 53e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public ViewHolder onCreateViewHolder(ViewGroup parent) { 54e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn View v = LayoutInflater.from(parent.getContext()) 55e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn .inflate(R.layout.lb_action_1_line, parent, false); 564e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing return new ActionViewHolder(v, parent.getLayoutDirection()); 57e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 58e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 59e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn @Override 60e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) { 61e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn Action action = (Action) item; 6270c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn ActionViewHolder vh = (ActionViewHolder) viewHolder; 6370c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn vh.mAction = action; 647c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout vh.mButton.setText(action.getLabel1()); 65e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 66e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 67e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn @Override 6870c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) { 6970c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn ((ActionViewHolder) viewHolder).mAction = null; 70e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 7170c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn } 72e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 7370c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn class TwoLineActionPresenter extends Presenter { 74e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn @Override 75e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public ViewHolder onCreateViewHolder(ViewGroup parent) { 76e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn View v = LayoutInflater.from(parent.getContext()) 77e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn .inflate(R.layout.lb_action_2_lines, parent, false); 784e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing return new ActionViewHolder(v, parent.getLayoutDirection()); 79e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 80e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 81e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn @Override 82e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) { 83e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn Action action = (Action) item; 8470c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn ActionViewHolder vh = (ActionViewHolder) viewHolder; 854e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing Drawable icon = action.getIcon(); 8670c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn vh.mAction = action; 87e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 884e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing if (icon != null) { 898e3566285de4ac771d6188f62fe947e23d371a3dKris Giesing final int startPadding = vh.view.getResources() 908e3566285de4ac771d6188f62fe947e23d371a3dKris Giesing .getDimensionPixelSize(R.dimen.lb_action_with_icon_padding_start); 918e3566285de4ac771d6188f62fe947e23d371a3dKris Giesing final int endPadding = vh.view.getResources() 928e3566285de4ac771d6188f62fe947e23d371a3dKris Giesing .getDimensionPixelSize(R.dimen.lb_action_with_icon_padding_end); 938e3566285de4ac771d6188f62fe947e23d371a3dKris Giesing vh.view.setPaddingRelative(startPadding, 0, endPadding, 0); 94e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } else { 957c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout final int padding = vh.view.getResources() 967c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout .getDimensionPixelSize(R.dimen.lb_action_padding_horizontal); 978e3566285de4ac771d6188f62fe947e23d371a3dKris Giesing vh.view.setPaddingRelative(padding, 0, padding, 0); 98e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 994e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing if (vh.mLayoutDirection == View.LAYOUT_DIRECTION_RTL) { 1004e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing vh.mButton.setCompoundDrawablesWithIntrinsicBounds(null, null, icon, null); 1014e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing } else { 1024e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing vh.mButton.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null); 1034e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing } 1047c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout 105e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn CharSequence line1 = action.getLabel1(); 106e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn CharSequence line2 = action.getLabel2(); 107e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn if (TextUtils.isEmpty(line1)) { 1087c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout vh.mButton.setText(line2); 109e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } else if (TextUtils.isEmpty(line2)) { 1107c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout vh.mButton.setText(line1); 111e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } else { 1127c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout vh.mButton.setText(line1 + "\n" + line2); 113e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 114e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 115e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 116e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn @Override 117e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) { 11870c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn ActionViewHolder vh = (ActionViewHolder) viewHolder; 1197c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout vh.mButton.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); 120e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn vh.view.setPadding(0, 0, 0, 0); 12170c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn vh.mAction = null; 122e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 123e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 124e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn} 125