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