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