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.graphics.drawable.Drawable; 17import android.support.v17.leanback.R; 18import android.text.TextUtils; 19import android.view.LayoutInflater; 20import android.view.View; 21import android.view.ViewGroup; 22import android.widget.Button; 23 24class ActionPresenterSelector extends PresenterSelector { 25 26 private final Presenter mOneLineActionPresenter = new OneLineActionPresenter(); 27 private final Presenter mTwoLineActionPresenter = new TwoLineActionPresenter(); 28 private final Presenter[] mPresenters = new Presenter[] { 29 mOneLineActionPresenter, mTwoLineActionPresenter}; 30 31 @Override 32 public Presenter getPresenter(Object item) { 33 Action action = (Action) item; 34 if (TextUtils.isEmpty(action.getLabel2())) { 35 return mOneLineActionPresenter; 36 } else { 37 return mTwoLineActionPresenter; 38 } 39 } 40 41 @Override 42 public Presenter[] getPresenters() { 43 return mPresenters; 44 } 45 46 static class ActionViewHolder extends Presenter.ViewHolder { 47 Action mAction; 48 Button mButton; 49 int mLayoutDirection; 50 51 public ActionViewHolder(View view, int layoutDirection) { 52 super(view); 53 mButton = (Button) view.findViewById(R.id.lb_action_button); 54 mLayoutDirection = layoutDirection; 55 } 56 } 57 58 class OneLineActionPresenter extends Presenter { 59 @Override 60 public ViewHolder onCreateViewHolder(ViewGroup parent) { 61 View v = LayoutInflater.from(parent.getContext()) 62 .inflate(R.layout.lb_action_1_line, parent, false); 63 return new ActionViewHolder(v, parent.getLayoutDirection()); 64 } 65 66 @Override 67 public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) { 68 Action action = (Action) item; 69 ActionViewHolder vh = (ActionViewHolder) viewHolder; 70 vh.mAction = action; 71 vh.mButton.setText(action.getLabel1()); 72 } 73 74 @Override 75 public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) { 76 ((ActionViewHolder) viewHolder).mAction = null; 77 } 78 } 79 80 class TwoLineActionPresenter extends Presenter { 81 @Override 82 public ViewHolder onCreateViewHolder(ViewGroup parent) { 83 View v = LayoutInflater.from(parent.getContext()) 84 .inflate(R.layout.lb_action_2_lines, parent, false); 85 return new ActionViewHolder(v, parent.getLayoutDirection()); 86 } 87 88 @Override 89 public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) { 90 Action action = (Action) item; 91 ActionViewHolder vh = (ActionViewHolder) viewHolder; 92 Drawable icon = action.getIcon(); 93 vh.mAction = action; 94 95 if (icon != null) { 96 final int startPadding = vh.view.getResources() 97 .getDimensionPixelSize(R.dimen.lb_action_with_icon_padding_start); 98 final int endPadding = vh.view.getResources() 99 .getDimensionPixelSize(R.dimen.lb_action_with_icon_padding_end); 100 vh.view.setPaddingRelative(startPadding, 0, endPadding, 0); 101 } else { 102 final int padding = vh.view.getResources() 103 .getDimensionPixelSize(R.dimen.lb_action_padding_horizontal); 104 vh.view.setPaddingRelative(padding, 0, padding, 0); 105 } 106 if (vh.mLayoutDirection == View.LAYOUT_DIRECTION_RTL) { 107 vh.mButton.setCompoundDrawablesWithIntrinsicBounds(null, null, icon, null); 108 } else { 109 vh.mButton.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null); 110 } 111 112 CharSequence line1 = action.getLabel1(); 113 CharSequence line2 = action.getLabel2(); 114 if (TextUtils.isEmpty(line1)) { 115 vh.mButton.setText(line2); 116 } else if (TextUtils.isEmpty(line2)) { 117 vh.mButton.setText(line1); 118 } else { 119 vh.mButton.setText(line1 + "\n" + line2); 120 } 121 } 122 123 @Override 124 public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) { 125 ActionViewHolder vh = (ActionViewHolder) viewHolder; 126 vh.mButton.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); 127 vh.view.setPadding(0, 0, 0, 0); 128 vh.mAction = null; 129 } 130 } 131} 132