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