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 
SubRatingsFragment(ContentRatingSystem contentRatingSystem, Rating rating)43     public SubRatingsFragment(ContentRatingSystem contentRatingSystem, Rating rating) {
44         mContentRatingSystem = contentRatingSystem;
45         mRating = rating;
46     }
47 
48     @Override
getTitle()49     protected String getTitle() {
50         return getString(R.string.option_subrating_title, mRating.getTitle());
51     }
52 
53     @Override
getTrackerLabel()54     public String getTrackerLabel() {
55         return TRACKER_LABEL;
56     }
57 
58     @Override
getItemList()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 {
RatingItem()72         private RatingItem() {
73             super(mRating.getTitle(), mRating.getDescription());
74         }
75 
76         @Override
onBind(View view)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
onUpdate()95         protected void onUpdate() {
96             super.onUpdate();
97             setChecked(isRatingEnabled());
98         }
99 
100         @Override
onSelected()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
getResourceId()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 
SubRatingItem(SubRating subRating)132         private SubRatingItem(SubRating subRating) {
133             super(subRating.getTitle(), subRating.getDescription());
134             mSubRating = subRating;
135         }
136 
137         @Override
onBind(View view)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
onUpdate()156         protected void onUpdate() {
157             super.onUpdate();
158             setChecked(isSubRatingEnabled(mSubRating));
159             setEnabled(!isRatingEnabled());
160         }
161 
162         @Override
onSelected()163         protected void onSelected() {
164             super.onSelected();
165             setSubRatingEnabled(mSubRating, isChecked());
166         }
167 
168         @Override
getResourceId()169         protected int getResourceId() {
170             return R.layout.option_item_rating;
171         }
172     }
173 
isRatingEnabled()174     private boolean isRatingEnabled() {
175         return getMainActivity().getParentalControlSettings()
176                 .isRatingBlocked(mContentRatingSystem, mRating);
177     }
178 
isSubRatingEnabled(SubRating subRating)179     private boolean isSubRatingEnabled(SubRating subRating) {
180         return getMainActivity().getParentalControlSettings()
181                 .isSubRatingEnabled(mContentRatingSystem, mRating, subRating);
182     }
183 
setRatingEnabled(boolean enabled)184     private void setRatingEnabled(boolean enabled) {
185         getMainActivity().getParentalControlSettings()
186                 .setRatingBlocked(mContentRatingSystem, mRating, enabled);
187     }
188 
setSubRatingEnabled(SubRating subRating, boolean enabled)189     private void setSubRatingEnabled(SubRating subRating, boolean enabled) {
190         getMainActivity().getParentalControlSettings()
191                 .setSubRatingBlocked(mContentRatingSystem, mRating, subRating, enabled);
192     }
193 }
194