1e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn/*
2e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn * Copyright (C) 2014 The Android Open Source Project
3e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn *
4e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn * in compliance with the License. You may obtain a copy of the License at
6e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn *
7e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn * http://www.apache.org/licenses/LICENSE-2.0
8e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn *
9e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn * Unless required by applicable law or agreed to in writing, software distributed under the License
10e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn * or implied. See the License for the specific language governing permissions and limitations under
12e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn * the License.
13e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn */
14e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbournpackage android.support.v17.leanback.widget;
15e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn
164e602840ed6741b44a536826799625ad0be4b3c6Kris Giesingimport android.graphics.drawable.Drawable;
17e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbournimport android.support.v17.leanback.R;
18e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbournimport android.text.TextUtils;
19e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbournimport android.view.LayoutInflater;
20e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbournimport android.view.View;
21e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbournimport android.view.ViewGroup;
227c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stoutimport android.widget.Button;
23e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn
24e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbournclass ActionPresenterSelector extends PresenterSelector {
25e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn
2670c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn    private final Presenter mOneLineActionPresenter = new OneLineActionPresenter();
2770c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn    private final Presenter mTwoLineActionPresenter = new TwoLineActionPresenter();
280246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu    private final Presenter[] mPresenters = new Presenter[] {
290246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu            mOneLineActionPresenter, mTwoLineActionPresenter};
30e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn
31e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn    @Override
32e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn    public Presenter getPresenter(Object item) {
33e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn        Action action = (Action) item;
34e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn        if (TextUtils.isEmpty(action.getLabel2())) {
35e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn            return mOneLineActionPresenter;
36e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn        } else {
37e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn            return mTwoLineActionPresenter;
38e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn        }
39e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn    }
40e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn
410246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu    @Override
420246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu    public Presenter[] getPresenters() {
430246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu        return mPresenters;
440246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu    }
450246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu
4670c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn    static class ActionViewHolder extends Presenter.ViewHolder {
4770c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn        Action mAction;
487c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout        Button mButton;
494e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing        int mLayoutDirection;
5070c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn
514e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing        public ActionViewHolder(View view, int layoutDirection) {
5270c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn            super(view);
537c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout            mButton = (Button) view.findViewById(R.id.lb_action_button);
544e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing            mLayoutDirection = layoutDirection;
55e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn        }
5670c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn    }
57e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn
5870c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn    class OneLineActionPresenter extends Presenter {
59e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn        @Override
60e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn        public ViewHolder onCreateViewHolder(ViewGroup parent) {
61e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn            View v = LayoutInflater.from(parent.getContext())
62e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn                .inflate(R.layout.lb_action_1_line, parent, false);
634e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing            return new ActionViewHolder(v, parent.getLayoutDirection());
64e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn        }
65e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn
66e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn        @Override
67e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn        public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
68e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn            Action action = (Action) item;
6970c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn            ActionViewHolder vh = (ActionViewHolder) viewHolder;
7070c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn            vh.mAction = action;
717c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout            vh.mButton.setText(action.getLabel1());
72e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn        }
73e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn
74e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn        @Override
7570c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn        public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {
7670c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn            ((ActionViewHolder) viewHolder).mAction = null;
77e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn        }
7870c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn    }
79e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn
8070c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn    class TwoLineActionPresenter extends Presenter {
81e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn        @Override
82e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn        public ViewHolder onCreateViewHolder(ViewGroup parent) {
83e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn            View v = LayoutInflater.from(parent.getContext())
84e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn                .inflate(R.layout.lb_action_2_lines, parent, false);
854e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing            return new ActionViewHolder(v, parent.getLayoutDirection());
86e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn        }
87e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn
88e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn        @Override
89e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn        public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
90e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn            Action action = (Action) item;
9170c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn            ActionViewHolder vh = (ActionViewHolder) viewHolder;
924e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing            Drawable icon = action.getIcon();
9370c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn            vh.mAction = action;
94e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn
954e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing            if (icon != null) {
968e3566285de4ac771d6188f62fe947e23d371a3dKris Giesing                final int startPadding = vh.view.getResources()
978e3566285de4ac771d6188f62fe947e23d371a3dKris Giesing                        .getDimensionPixelSize(R.dimen.lb_action_with_icon_padding_start);
988e3566285de4ac771d6188f62fe947e23d371a3dKris Giesing                final int endPadding = vh.view.getResources()
998e3566285de4ac771d6188f62fe947e23d371a3dKris Giesing                        .getDimensionPixelSize(R.dimen.lb_action_with_icon_padding_end);
1008e3566285de4ac771d6188f62fe947e23d371a3dKris Giesing                vh.view.setPaddingRelative(startPadding, 0, endPadding, 0);
101e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn            } else {
1027c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout                final int padding = vh.view.getResources()
1037c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout                        .getDimensionPixelSize(R.dimen.lb_action_padding_horizontal);
1048e3566285de4ac771d6188f62fe947e23d371a3dKris Giesing                vh.view.setPaddingRelative(padding, 0, padding, 0);
105e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn            }
1064e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing            if (vh.mLayoutDirection == View.LAYOUT_DIRECTION_RTL) {
1074e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing                vh.mButton.setCompoundDrawablesWithIntrinsicBounds(null, null, icon, null);
1084e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing            } else {
1094e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing                vh.mButton.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
1104e602840ed6741b44a536826799625ad0be4b3c6Kris Giesing            }
1117c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout
112e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn            CharSequence line1 = action.getLabel1();
113e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn            CharSequence line2 = action.getLabel2();
114e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn            if (TextUtils.isEmpty(line1)) {
1157c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout                vh.mButton.setText(line2);
116e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn            } else if (TextUtils.isEmpty(line2)) {
1177c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout                vh.mButton.setText(line1);
118e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn            } else {
1197c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout                vh.mButton.setText(line1 + "\n" + line2);
120e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn            }
121e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn        }
122e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn
123e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn        @Override
124e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn        public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {
12570c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn            ActionViewHolder vh = (ActionViewHolder) viewHolder;
1267c004076d5289caa0af7b5fb04cf7a3374be56b1Craig Stout            vh.mButton.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
127e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn            vh.view.setPadding(0, 0, 0, 0);
12870c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn            vh.mAction = null;
129e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn        }
130e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn    }
131e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn}
132