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.graphics.drawable.Drawable;
17import android.support.v17.leanback.R;
18import android.text.TextUtils;
19import android.view.LayoutInflater;
20import android.view.View;
21import android.view.ViewGroup;
22import android.widget.Button;
23
24class ActionPresenterSelector extends PresenterSelector {
25
26    private final Presenter mOneLineActionPresenter = new OneLineActionPresenter();
27    private final Presenter mTwoLineActionPresenter = new TwoLineActionPresenter();
28    private final Presenter[] mPresenters = new Presenter[] {
29            mOneLineActionPresenter, mTwoLineActionPresenter};
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    @Override
42    public Presenter[] getPresenters() {
43        return mPresenters;
44    }
45
46    static class ActionViewHolder extends Presenter.ViewHolder {
47        Action mAction;
48        Button mButton;
49        int mLayoutDirection;
50
51        public ActionViewHolder(View view, int layoutDirection) {
52            super(view);
53            mButton = (Button) view.findViewById(R.id.lb_action_button);
54            mLayoutDirection = layoutDirection;
55        }
56    }
57
58    class OneLineActionPresenter extends Presenter {
59        @Override
60        public ViewHolder onCreateViewHolder(ViewGroup parent) {
61            View v = LayoutInflater.from(parent.getContext())
62                .inflate(R.layout.lb_action_1_line, parent, false);
63            return new ActionViewHolder(v, parent.getLayoutDirection());
64        }
65
66        @Override
67        public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
68            Action action = (Action) item;
69            ActionViewHolder vh = (ActionViewHolder) viewHolder;
70            vh.mAction = action;
71            vh.mButton.setText(action.getLabel1());
72        }
73
74        @Override
75        public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {
76            ((ActionViewHolder) viewHolder).mAction = null;
77        }
78    }
79
80    class TwoLineActionPresenter extends Presenter {
81        @Override
82        public ViewHolder onCreateViewHolder(ViewGroup parent) {
83            View v = LayoutInflater.from(parent.getContext())
84                .inflate(R.layout.lb_action_2_lines, parent, false);
85            return new ActionViewHolder(v, parent.getLayoutDirection());
86        }
87
88        @Override
89        public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
90            Action action = (Action) item;
91            ActionViewHolder vh = (ActionViewHolder) viewHolder;
92            Drawable icon = action.getIcon();
93            vh.mAction = action;
94
95            if (icon != null) {
96                final int startPadding = vh.view.getResources()
97                        .getDimensionPixelSize(R.dimen.lb_action_with_icon_padding_start);
98                final int endPadding = vh.view.getResources()
99                        .getDimensionPixelSize(R.dimen.lb_action_with_icon_padding_end);
100                vh.view.setPaddingRelative(startPadding, 0, endPadding, 0);
101            } else {
102                final int padding = vh.view.getResources()
103                        .getDimensionPixelSize(R.dimen.lb_action_padding_horizontal);
104                vh.view.setPaddingRelative(padding, 0, padding, 0);
105            }
106            if (vh.mLayoutDirection == View.LAYOUT_DIRECTION_RTL) {
107                vh.mButton.setCompoundDrawablesWithIntrinsicBounds(null, null, icon, null);
108            } else {
109                vh.mButton.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
110            }
111
112            CharSequence line1 = action.getLabel1();
113            CharSequence line2 = action.getLabel2();
114            if (TextUtils.isEmpty(line1)) {
115                vh.mButton.setText(line2);
116            } else if (TextUtils.isEmpty(line2)) {
117                vh.mButton.setText(line1);
118            } else {
119                vh.mButton.setText(line1 + "\n" + line2);
120            }
121        }
122
123        @Override
124        public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {
125            ActionViewHolder vh = (ActionViewHolder) viewHolder;
126            vh.mButton.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
127            vh.view.setPadding(0, 0, 0, 0);
128            vh.mAction = null;
129        }
130    }
131}
132