ControlButtonPresenterSelector.java revision 7ab1edf2b49f3cdcb9db7a1c60d0dc1e17a9aef7
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.view.LayoutInflater;
18import android.view.View;
19import android.view.ViewGroup;
20import android.widget.ImageView;
21
22/**
23 * ControlButtonPresenterSelector displays primary and secondary
24 * controls for a {@link PlaybackControlsRow}.
25 *
26 * Binds to items of type {@link Action}.
27 */
28public class ControlButtonPresenterSelector extends PresenterSelector {
29
30    private final Presenter mPrimaryPresenter =
31            new ControlButtonPresenter(R.layout.lb_control_button_primary);
32    private final Presenter mSecondaryPresenter =
33            new ControlButtonPresenter(R.layout.lb_control_button_secondary);
34
35    /**
36     * Returns the presenter for primary controls.
37     */
38    public Presenter getPrimaryPresenter() {
39        return mPrimaryPresenter;
40    }
41
42    /**
43     * Returns the presenter for secondary controls.
44     */
45    public Presenter getSecondaryPresenter() {
46        return mSecondaryPresenter;
47    }
48
49    /**
50     * Always returns the presenter for primary controls.
51     */
52    public Presenter getPresenter(Object item) {
53        return mPrimaryPresenter;
54    }
55
56    static class ActionViewHolder extends Presenter.ViewHolder {
57        ImageView mIcon;
58        View mFocusableView;
59
60        public ActionViewHolder(View view) {
61            super(view);
62            mIcon = (ImageView) view.findViewById(R.id.icon);
63            mFocusableView = view.findViewById(R.id.button);
64        }
65    }
66
67    static class ControlButtonPresenter extends Presenter {
68        private int mLayoutResourceId;
69
70        ControlButtonPresenter(int layoutResourceId) {
71            mLayoutResourceId = layoutResourceId;
72        }
73
74        @Override
75        public ViewHolder onCreateViewHolder(ViewGroup parent) {
76            View v = LayoutInflater.from(parent.getContext())
77                    .inflate(mLayoutResourceId, parent, false);
78            return new ActionViewHolder(v);
79        }
80
81        @Override
82        public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
83            Action action = (Action) item;
84            ActionViewHolder vh = (ActionViewHolder) viewHolder;
85            vh.mIcon.setImageDrawable(action.getIcon());
86        }
87
88        @Override
89        public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {
90            ActionViewHolder vh = (ActionViewHolder) viewHolder;
91            vh.mIcon.setImageDrawable(null);
92        }
93
94        @Override
95        public void setOnClickListener(Presenter.ViewHolder viewHolder,
96                View.OnClickListener listener) {
97            ((ActionViewHolder) viewHolder).mFocusableView.setOnClickListener(listener);
98        }
99    }
100}
101