• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  */
14 package android.support.v17.leanback.widget;
15 
16 import android.graphics.drawable.Drawable;
17 import android.support.v17.leanback.R;
18 import android.text.TextUtils;
19 import android.view.LayoutInflater;
20 import android.view.View;
21 import android.view.ViewGroup;
22 import android.widget.Button;
23 
24 class 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
getPresenter(Object item)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
getPresenters()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 
ActionViewHolder(View view, int layoutDirection)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
onCreateViewHolder(ViewGroup parent)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
onBindViewHolder(Presenter.ViewHolder viewHolder, Object item)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
onUnbindViewHolder(Presenter.ViewHolder viewHolder)75         public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {
76             ((ActionViewHolder) viewHolder).mAction = null;
77         }
78     }
79 
80     class TwoLineActionPresenter extends Presenter {
81         @Override
onCreateViewHolder(ViewGroup parent)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
onBindViewHolder(Presenter.ViewHolder viewHolder, Object item)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
onUnbindViewHolder(Presenter.ViewHolder viewHolder)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