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