| /* |
| * Copyright (C) 2016 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License |
| */ |
| |
| package com.android.tv.dvr.ui; |
| |
| import android.graphics.drawable.Drawable; |
| import android.support.v17.leanback.R; |
| import android.support.v17.leanback.widget.Action; |
| import android.support.v17.leanback.widget.Presenter; |
| import android.support.v17.leanback.widget.PresenterSelector; |
| import android.text.TextUtils; |
| import android.view.LayoutInflater; |
| import android.view.View; |
| import android.view.ViewGroup; |
| import android.widget.Button; |
| |
| // This class is adapted from Leanback's library, which does not support action icon with one-line |
| // label. This class modified its getPresenter method to support the above situation. |
| class ActionPresenterSelector extends PresenterSelector { |
| private final Presenter mOneLineActionPresenter = new OneLineActionPresenter(); |
| private final Presenter mTwoLineActionPresenter = new TwoLineActionPresenter(); |
| private final Presenter[] mPresenters = new Presenter[] { |
| mOneLineActionPresenter, mTwoLineActionPresenter}; |
| |
| @Override |
| public Presenter getPresenter(Object item) { |
| Action action = (Action) item; |
| if (TextUtils.isEmpty(action.getLabel2()) && action.getIcon() == null) { |
| return mOneLineActionPresenter; |
| } else { |
| return mTwoLineActionPresenter; |
| } |
| } |
| |
| @Override |
| public Presenter[] getPresenters() { |
| return mPresenters; |
| } |
| |
| static class ActionViewHolder extends Presenter.ViewHolder { |
| Action mAction; |
| Button mButton; |
| int mLayoutDirection; |
| |
| public ActionViewHolder(View view, int layoutDirection) { |
| super(view); |
| mButton = (Button) view.findViewById(R.id.lb_action_button); |
| mLayoutDirection = layoutDirection; |
| } |
| } |
| |
| class OneLineActionPresenter extends Presenter { |
| @Override |
| public ViewHolder onCreateViewHolder(ViewGroup parent) { |
| View v = LayoutInflater.from(parent.getContext()) |
| .inflate(R.layout.lb_action_1_line, parent, false); |
| return new ActionViewHolder(v, parent.getLayoutDirection()); |
| } |
| |
| @Override |
| public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) { |
| Action action = (Action) item; |
| ActionViewHolder vh = (ActionViewHolder) viewHolder; |
| vh.mAction = action; |
| vh.mButton.setText(action.getLabel1()); |
| } |
| |
| @Override |
| public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) { |
| ((ActionViewHolder) viewHolder).mAction = null; |
| } |
| } |
| |
| class TwoLineActionPresenter extends Presenter { |
| @Override |
| public ViewHolder onCreateViewHolder(ViewGroup parent) { |
| View v = LayoutInflater.from(parent.getContext()) |
| .inflate(R.layout.lb_action_2_lines, parent, false); |
| return new ActionViewHolder(v, parent.getLayoutDirection()); |
| } |
| |
| @Override |
| public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) { |
| Action action = (Action) item; |
| ActionViewHolder vh = (ActionViewHolder) viewHolder; |
| Drawable icon = action.getIcon(); |
| vh.mAction = action; |
| |
| if (icon != null) { |
| final int startPadding = vh.view.getResources() |
| .getDimensionPixelSize(R.dimen.lb_action_with_icon_padding_start); |
| final int endPadding = vh.view.getResources() |
| .getDimensionPixelSize(R.dimen.lb_action_with_icon_padding_end); |
| vh.view.setPaddingRelative(startPadding, 0, endPadding, 0); |
| } else { |
| final int padding = vh.view.getResources() |
| .getDimensionPixelSize(R.dimen.lb_action_padding_horizontal); |
| vh.view.setPaddingRelative(padding, 0, padding, 0); |
| } |
| if (vh.mLayoutDirection == View.LAYOUT_DIRECTION_RTL) { |
| vh.mButton.setCompoundDrawablesWithIntrinsicBounds(null, null, icon, null); |
| } else { |
| vh.mButton.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null); |
| } |
| |
| CharSequence line1 = action.getLabel1(); |
| CharSequence line2 = action.getLabel2(); |
| if (TextUtils.isEmpty(line1)) { |
| vh.mButton.setText(line2); |
| } else if (TextUtils.isEmpty(line2)) { |
| vh.mButton.setText(line1); |
| } else { |
| vh.mButton.setText(line1 + "\n" + line2); |
| } |
| } |
| |
| @Override |
| public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) { |
| ActionViewHolder vh = (ActionViewHolder) viewHolder; |
| vh.mButton.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); |
| vh.view.setPadding(0, 0, 0, 0); |
| vh.mAction = null; |
| } |
| } |
| } |