Home | History | Annotate | Download | only in parentalcontrols
      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.parentalcontrols;
     18 
     19 import android.graphics.drawable.Drawable;
     20 import android.view.View;
     21 import android.widget.CompoundButton;
     22 import android.widget.ImageView;
     23 
     24 import com.android.tv.R;
     25 import com.android.tv.parental.ContentRatingSystem;
     26 import com.android.tv.parental.ContentRatingSystem.Rating;
     27 import com.android.tv.parental.ContentRatingSystem.SubRating;
     28 import com.android.tv.ui.sidepanel.CheckBoxItem;
     29 import com.android.tv.ui.sidepanel.DividerItem;
     30 import com.android.tv.ui.sidepanel.Item;
     31 import com.android.tv.ui.sidepanel.SideFragment;
     32 
     33 import java.util.ArrayList;
     34 import java.util.List;
     35 
     36 public class SubRatingsFragment extends SideFragment {
     37     private static final String TRACKER_LABEL = "Sub ratings";
     38 
     39     private final ContentRatingSystem mContentRatingSystem;
     40     private final Rating mRating;
     41     private final List<SubRatingItem> mSubRatingItems = new ArrayList<>();
     42 
     43     public SubRatingsFragment(ContentRatingSystem contentRatingSystem, Rating rating) {
     44         mContentRatingSystem = contentRatingSystem;
     45         mRating = rating;
     46     }
     47 
     48     @Override
     49     protected String getTitle() {
     50         return getString(R.string.option_subrating_title, mRating.getTitle());
     51     }
     52 
     53     @Override
     54     public String getTrackerLabel() {
     55         return TRACKER_LABEL;
     56     }
     57 
     58     @Override
     59     protected List<Item> getItemList() {
     60         List<Item> items = new ArrayList<>();
     61         items.add(new RatingItem());
     62         items.add(new DividerItem(getString(R.string.option_subrating_header)));
     63         mSubRatingItems.clear();
     64         for (SubRating subRating : mRating.getSubRatings()) {
     65             mSubRatingItems.add(new SubRatingItem(subRating));
     66         }
     67         items.addAll(mSubRatingItems);
     68         return items;
     69     }
     70 
     71     private class RatingItem extends CheckBoxItem {
     72         private RatingItem() {
     73             super(mRating.getTitle(), mRating.getDescription());
     74         }
     75 
     76         @Override
     77         protected void onBind(View view) {
     78             super.onBind(view);
     79 
     80             CompoundButton button = (CompoundButton) view.findViewById(getCompoundButtonId());
     81             button.setButtonDrawable(R.drawable.btn_lock_material_anim);
     82             button.setVisibility(View.VISIBLE);
     83 
     84             Drawable icon = mRating.getIcon();
     85             ImageView imageView = (ImageView) view.findViewById(R.id.icon);
     86             if (icon != null) {
     87                 imageView.setVisibility(View.VISIBLE);
     88                 imageView.setImageDrawable(icon);
     89             } else {
     90                 imageView.setVisibility(View.GONE);
     91             }
     92         }
     93 
     94         @Override
     95         protected void onUpdate() {
     96             super.onUpdate();
     97             setChecked(isRatingEnabled());
     98         }
     99 
    100         @Override
    101         protected void onSelected() {
    102             super.onSelected();
    103             boolean checked = isChecked();
    104             setRatingEnabled(checked);
    105             if (checked) {
    106                 // If the rating is checked, check and disable all the sub rating items.
    107                 for (SubRating subRating : mRating.getSubRatings()) {
    108                     setSubRatingEnabled(subRating, true);
    109                 }
    110                 for (SubRatingItem item : mSubRatingItems) {
    111                     item.setChecked(true);
    112                     item.setEnabled(false);
    113                 }
    114             } else {
    115                 // If the rating is unchecked, just enable all the sub rating items and do not
    116                 // change the check state.
    117                 for (SubRatingItem item : mSubRatingItems) {
    118                     item.setEnabled(true);
    119                 }
    120             }
    121         }
    122 
    123         @Override
    124         protected int getResourceId() {
    125             return R.layout.option_item_rating;
    126         }
    127     }
    128 
    129     private class SubRatingItem extends CheckBoxItem {
    130         private final SubRating mSubRating;
    131 
    132         private SubRatingItem(SubRating subRating) {
    133             super(subRating.getTitle(), subRating.getDescription());
    134             mSubRating = subRating;
    135         }
    136 
    137         @Override
    138         protected void onBind(View view) {
    139             super.onBind(view);
    140 
    141             CompoundButton button = (CompoundButton) view.findViewById(getCompoundButtonId());
    142             button.setButtonDrawable(R.drawable.btn_lock_material_anim);
    143             button.setVisibility(View.VISIBLE);
    144 
    145             Drawable icon = mSubRating.getIcon();
    146             ImageView imageView = (ImageView) view.findViewById(R.id.icon);
    147             if (icon != null) {
    148                 imageView.setVisibility(View.VISIBLE);
    149                 imageView.setImageDrawable(icon);
    150             } else {
    151                 imageView.setVisibility(View.GONE);
    152             }
    153         }
    154 
    155         @Override
    156         protected void onUpdate() {
    157             super.onUpdate();
    158             setChecked(isSubRatingEnabled(mSubRating));
    159             setEnabled(!isRatingEnabled());
    160         }
    161 
    162         @Override
    163         protected void onSelected() {
    164             super.onSelected();
    165             setSubRatingEnabled(mSubRating, isChecked());
    166         }
    167 
    168         @Override
    169         protected int getResourceId() {
    170             return R.layout.option_item_rating;
    171         }
    172     }
    173 
    174     private boolean isRatingEnabled() {
    175         return getMainActivity().getParentalControlSettings()
    176                 .isRatingBlocked(mContentRatingSystem, mRating);
    177     }
    178 
    179     private boolean isSubRatingEnabled(SubRating subRating) {
    180         return getMainActivity().getParentalControlSettings()
    181                 .isSubRatingEnabled(mContentRatingSystem, mRating, subRating);
    182     }
    183 
    184     private void setRatingEnabled(boolean enabled) {
    185         getMainActivity().getParentalControlSettings()
    186                 .setRatingBlocked(mContentRatingSystem, mRating, enabled);
    187     }
    188 
    189     private void setSubRatingEnabled(SubRating subRating, boolean enabled) {
    190         getMainActivity().getParentalControlSettings()
    191                 .setSubRatingBlocked(mContentRatingSystem, mRating, subRating, enabled);
    192     }
    193 }
    194