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