Home | History | Annotate | Download | only in sidepanel
      1 /*
      2  * Copyright (C) 2015 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.tv.ui.sidepanel;
     18 
     19 import android.view.View;
     20 import android.widget.CompoundButton;
     21 import android.widget.TextView;
     22 
     23 import com.android.tv.R;
     24 
     25 public abstract class CompoundButtonItem extends Item {
     26     private static int sDefaultMaxLine = 0;
     27 
     28     private final String mCheckedTitle;
     29     private final String mUncheckedTitle;
     30     private final String mDescription;
     31     private final int mMaxLine;
     32     private boolean mChecked;
     33     private TextView mTextView;
     34     private CompoundButton mCompoundButton;
     35 
     36     public CompoundButtonItem(String title, String description) {
     37         this(title, title, description);
     38     }
     39 
     40     public CompoundButtonItem(String checkedTitle, String uncheckedTitle, String description) {
     41         mCheckedTitle = checkedTitle;
     42         mUncheckedTitle = uncheckedTitle;
     43         mDescription = description;
     44         mMaxLine = 0;
     45     }
     46 
     47     public CompoundButtonItem(String checkedTitle, String uncheckedTitle, String description,
     48             int maxLine) {
     49         mCheckedTitle = checkedTitle;
     50         mUncheckedTitle = uncheckedTitle;
     51         mDescription = description;
     52         mMaxLine = maxLine;
     53     }
     54 
     55     protected abstract int getCompoundButtonId();
     56 
     57     protected int getTitleViewId() {
     58         return R.id.title;
     59     }
     60 
     61     protected int getDescriptionViewId() {
     62         return R.id.description;
     63     }
     64 
     65     @Override
     66     protected void onBind(View view) {
     67         super.onBind(view);
     68         mCompoundButton = (CompoundButton) view.findViewById(getCompoundButtonId());
     69         mTextView = (TextView) view.findViewById(getTitleViewId());
     70         TextView descriptionView = (TextView) view.findViewById(getDescriptionViewId());
     71         if (mDescription != null) {
     72             if (mMaxLine != 0) {
     73                 descriptionView.setMaxLines(mMaxLine);
     74             } else {
     75                 if (sDefaultMaxLine == 0) {
     76                     sDefaultMaxLine = view.getContext().getResources()
     77                             .getInteger(R.integer.option_item_description_max_lines);
     78                 }
     79                 descriptionView.setMaxLines(sDefaultMaxLine);
     80             }
     81             descriptionView.setVisibility(View.VISIBLE);
     82             descriptionView.setText(mDescription);
     83         } else {
     84             descriptionView.setVisibility(View.GONE);
     85         }
     86     }
     87 
     88     @Override
     89     protected void onUnbind() {
     90         super.onUnbind();
     91         mTextView = null;
     92         mCompoundButton = null;
     93     }
     94 
     95     @Override
     96     protected void onUpdate() {
     97         super.onUpdate();
     98         updateInternal();
     99     }
    100 
    101     public void setChecked(boolean checked) {
    102         if (mChecked != checked) {
    103             mChecked = checked;
    104             updateInternal();
    105         }
    106     }
    107 
    108     public boolean isChecked() {
    109         return mChecked;
    110     }
    111 
    112     private void updateInternal() {
    113         if (isBound()) {
    114             mTextView.setText(mChecked ? mCheckedTitle : mUncheckedTitle);
    115             mCompoundButton.setChecked(mChecked);
    116         }
    117     }
    118 }
    119