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