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