1816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko/*
2816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Copyright (C) 2015 The Android Open Source Project
3816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko *
4816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Licensed under the Apache License, Version 2.0 (the "License");
5816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * you may not use this file except in compliance with the License.
6816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * You may obtain a copy of the License at
7816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko *
8816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko *      http://www.apache.org/licenses/LICENSE-2.0
9816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko *
10816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Unless required by applicable law or agreed to in writing, software
11816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * distributed under the License is distributed on an "AS IS" BASIS,
12816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * See the License for the specific language governing permissions and
14816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * limitations under the License.
15816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko */
16816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
17816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopackage com.android.tv.ui.sidepanel.parentalcontrols;
18816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
19816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.graphics.drawable.Drawable;
20816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.view.View;
21816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.widget.CompoundButton;
22816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.widget.ImageView;
23816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
24816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.R;
25816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.parental.ContentRatingSystem;
26816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.parental.ContentRatingSystem.Rating;
27816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.parental.ContentRatingSystem.SubRating;
28816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.ui.sidepanel.CheckBoxItem;
29816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.ui.sidepanel.DividerItem;
30816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.ui.sidepanel.Item;
31816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.ui.sidepanel.SideFragment;
32816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
33816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport java.util.ArrayList;
34816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport java.util.List;
35816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
36816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopublic class SubRatingsFragment extends SideFragment {
37816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private static final String TRACKER_LABEL = "Sub ratings";
38816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
39816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private final ContentRatingSystem mContentRatingSystem;
40816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private final Rating mRating;
41816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private final List<SubRatingItem> mSubRatingItems = new ArrayList<>();
42816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
43816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public SubRatingsFragment(ContentRatingSystem contentRatingSystem, Rating rating) {
44816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mContentRatingSystem = contentRatingSystem;
45816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mRating = rating;
46816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
47816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
48816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    @Override
49816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    protected String getTitle() {
50816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        return getString(R.string.option_subrating_title, mRating.getTitle());
51816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
52816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
53816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    @Override
54816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public String getTrackerLabel() {
55816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        return TRACKER_LABEL;
56816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
57816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
58816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    @Override
59816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    protected List<Item> getItemList() {
60816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        List<Item> items = new ArrayList<>();
61816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        items.add(new RatingItem());
62816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        items.add(new DividerItem(getString(R.string.option_subrating_header)));
63816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mSubRatingItems.clear();
64816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        for (SubRating subRating : mRating.getSubRatings()) {
65816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            mSubRatingItems.add(new SubRatingItem(subRating));
66816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
67816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        items.addAll(mSubRatingItems);
68816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        return items;
69816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
70816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
71816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private class RatingItem extends CheckBoxItem {
72816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        private RatingItem() {
73816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            super(mRating.getTitle(), mRating.getDescription());
74816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
75816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
76816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
77816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        protected void onBind(View view) {
78816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            super.onBind(view);
79816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
80816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            CompoundButton button = (CompoundButton) view.findViewById(getCompoundButtonId());
81816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            button.setButtonDrawable(R.drawable.btn_lock_material_anim);
82816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            button.setVisibility(View.VISIBLE);
83816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
84816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            Drawable icon = mRating.getIcon();
85816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            ImageView imageView = (ImageView) view.findViewById(R.id.icon);
86816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            if (icon != null) {
87816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                imageView.setVisibility(View.VISIBLE);
88816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                imageView.setImageDrawable(icon);
89816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            } else {
90816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                imageView.setVisibility(View.GONE);
91816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            }
92816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
93816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
94816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
95816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        protected void onUpdate() {
96816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            super.onUpdate();
97816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            setChecked(isRatingEnabled());
98816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
99816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
100816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
101816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        protected void onSelected() {
102816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            super.onSelected();
103816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            boolean checked = isChecked();
104816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            setRatingEnabled(checked);
105816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            if (checked) {
106816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                // If the rating is checked, check and disable all the sub rating items.
107816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                for (SubRating subRating : mRating.getSubRatings()) {
108816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                    setSubRatingEnabled(subRating, true);
109816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                }
110816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                for (SubRatingItem item : mSubRatingItems) {
111816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                    item.setChecked(true);
112816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                    item.setEnabled(false);
113816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                }
114816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            } else {
115816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                // If the rating is unchecked, just enable all the sub rating items and do not
116816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                // change the check state.
117816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                for (SubRatingItem item : mSubRatingItems) {
118816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                    item.setEnabled(true);
119816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                }
120816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            }
121816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
122816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
123816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
124816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        protected int getResourceId() {
125816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            return R.layout.option_item_rating;
126816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
127816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
128816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
129816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private class SubRatingItem extends CheckBoxItem {
130816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        private final SubRating mSubRating;
131816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
132816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        private SubRatingItem(SubRating subRating) {
133816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            super(subRating.getTitle(), subRating.getDescription());
134816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            mSubRating = subRating;
135816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
136816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
137816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
138816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        protected void onBind(View view) {
139816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            super.onBind(view);
140816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
141816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            CompoundButton button = (CompoundButton) view.findViewById(getCompoundButtonId());
142816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            button.setButtonDrawable(R.drawable.btn_lock_material_anim);
143816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            button.setVisibility(View.VISIBLE);
144816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
145816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            Drawable icon = mSubRating.getIcon();
146816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            ImageView imageView = (ImageView) view.findViewById(R.id.icon);
147816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            if (icon != null) {
148816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                imageView.setVisibility(View.VISIBLE);
149816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                imageView.setImageDrawable(icon);
150816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            } else {
151816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                imageView.setVisibility(View.GONE);
152816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            }
153816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
154816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
155816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
156816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        protected void onUpdate() {
157816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            super.onUpdate();
158816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            setChecked(isSubRatingEnabled(mSubRating));
159816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            setEnabled(!isRatingEnabled());
160816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
161816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
162816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
163816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        protected void onSelected() {
164816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            super.onSelected();
165816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            setSubRatingEnabled(mSubRating, isChecked());
166816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
167816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
168816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
169816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        protected int getResourceId() {
170816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            return R.layout.option_item_rating;
171816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
172816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
173816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
174816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private boolean isRatingEnabled() {
175816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        return getMainActivity().getParentalControlSettings()
176816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                .isRatingBlocked(mContentRatingSystem, mRating);
177816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
178816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
179816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private boolean isSubRatingEnabled(SubRating subRating) {
180816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        return getMainActivity().getParentalControlSettings()
181816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                .isSubRatingEnabled(mContentRatingSystem, mRating, subRating);
182816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
183816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
184816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private void setRatingEnabled(boolean enabled) {
185816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        getMainActivity().getParentalControlSettings()
186816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                .setRatingBlocked(mContentRatingSystem, mRating, enabled);
187816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
188816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
189816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private void setSubRatingEnabled(SubRating subRating, boolean enabled) {
190816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        getMainActivity().getParentalControlSettings()
191816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                .setSubRatingBlocked(mContentRatingSystem, mRating, subRating, enabled);
192816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
193816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko}
194