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.database.ContentObserver; 20816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.media.tv.TvContract; 21816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.net.Uri; 22944779887775bd950cf1abf348d2df461593f6abLive Channels Teamimport android.os.Build.VERSION; 23944779887775bd950cf1abf348d2df461593f6abLive Channels Teamimport android.os.Build.VERSION_CODES; 24816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.os.Bundle; 25816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.os.Handler; 26816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.support.v17.leanback.widget.VerticalGridView; 27816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.view.KeyEvent; 28816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.view.LayoutInflater; 29816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.view.View; 30816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.view.ViewGroup; 31816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.widget.TextView; 32816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.R; 33816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.data.ChannelNumber; 340cc0713c1bf8027642987b750b80217569d2932aLive Channels Teamimport com.android.tv.data.api.Channel; 35944779887775bd950cf1abf348d2df461593f6abLive Channels Teamimport com.android.tv.recommendation.ChannelPreviewUpdater; 3607b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalkoimport com.android.tv.ui.OnRepeatedKeyInterceptListener; 37816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.ui.sidepanel.ActionItem; 38816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.ui.sidepanel.ChannelCheckItem; 39816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.ui.sidepanel.DividerItem; 40816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.ui.sidepanel.Item; 41816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.ui.sidepanel.SideFragment; 42816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport java.util.ArrayList; 43816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport java.util.Collections; 44816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport java.util.Comparator; 45816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport java.util.List; 46816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 47816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopublic class ChannelsBlockedFragment extends SideFragment { 48816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private static final String TRACKER_LABEL = "Channels blocked"; 49816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private int mBlockedChannelCount; 50816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private final List<Channel> mChannels = new ArrayList<>(); 51816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private long mLastFocusedChannelId = Channel.INVALID_ID; 52816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private int mSelectedPosition = INVALID_POSITION; 53944779887775bd950cf1abf348d2df461593f6abLive Channels Team private boolean mUpdated; 5495961816a768da387f0b5523cf4363ace2044089Nick Chalko private final ContentObserver mProgramUpdateObserver = 5595961816a768da387f0b5523cf4363ace2044089Nick Chalko new ContentObserver(new Handler()) { 5695961816a768da387f0b5523cf4363ace2044089Nick Chalko @Override 5795961816a768da387f0b5523cf4363ace2044089Nick Chalko public void onChange(boolean selfChange, Uri uri) { 5895961816a768da387f0b5523cf4363ace2044089Nick Chalko notifyItemsChanged(); 5995961816a768da387f0b5523cf4363ace2044089Nick Chalko } 6095961816a768da387f0b5523cf4363ace2044089Nick Chalko }; 61816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private final Item mLockAllItem = new BlockAllItem(); 62816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private final List<Item> mItems = new ArrayList<>(); 63816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 64816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 6595961816a768da387f0b5523cf4363ace2044089Nick Chalko public View onCreateView( 6695961816a768da387f0b5523cf4363ace2044089Nick Chalko LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 67816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko View view = super.onCreateView(inflater, container, savedInstanceState); 68816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko if (mSelectedPosition != INVALID_POSITION) { 69816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko setSelectedPosition(mSelectedPosition); 70816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 71816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko VerticalGridView listView = (VerticalGridView) view.findViewById(R.id.side_panel_list); 7295961816a768da387f0b5523cf4363ace2044089Nick Chalko listView.setOnKeyInterceptListener( 7395961816a768da387f0b5523cf4363ace2044089Nick Chalko new OnRepeatedKeyInterceptListener(listView) { 7495961816a768da387f0b5523cf4363ace2044089Nick Chalko @Override 7595961816a768da387f0b5523cf4363ace2044089Nick Chalko public boolean onInterceptKeyEvent(KeyEvent event) { 7695961816a768da387f0b5523cf4363ace2044089Nick Chalko // In order to send tune operation once for continuous channel up/down 7795961816a768da387f0b5523cf4363ace2044089Nick Chalko // events, 7895961816a768da387f0b5523cf4363ace2044089Nick Chalko // we only call the moveToChannel method on ACTION_UP event of channel 7995961816a768da387f0b5523cf4363ace2044089Nick Chalko // switch keys. 8095961816a768da387f0b5523cf4363ace2044089Nick Chalko if (event.getAction() == KeyEvent.ACTION_UP) { 8195961816a768da387f0b5523cf4363ace2044089Nick Chalko switch (event.getKeyCode()) { 8295961816a768da387f0b5523cf4363ace2044089Nick Chalko case KeyEvent.KEYCODE_DPAD_UP: 8395961816a768da387f0b5523cf4363ace2044089Nick Chalko case KeyEvent.KEYCODE_DPAD_DOWN: 8495961816a768da387f0b5523cf4363ace2044089Nick Chalko if (mLastFocusedChannelId != Channel.INVALID_ID) { 8595961816a768da387f0b5523cf4363ace2044089Nick Chalko getMainActivity() 8695961816a768da387f0b5523cf4363ace2044089Nick Chalko .tuneToChannel( 8795961816a768da387f0b5523cf4363ace2044089Nick Chalko getChannelDataManager() 8895961816a768da387f0b5523cf4363ace2044089Nick Chalko .getChannel(mLastFocusedChannelId)); 8995961816a768da387f0b5523cf4363ace2044089Nick Chalko } 9095961816a768da387f0b5523cf4363ace2044089Nick Chalko break; 9107b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko } 9295961816a768da387f0b5523cf4363ace2044089Nick Chalko } 9395961816a768da387f0b5523cf4363ace2044089Nick Chalko return super.onInterceptKeyEvent(event); 9407b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko } 9595961816a768da387f0b5523cf4363ace2044089Nick Chalko }); 9695961816a768da387f0b5523cf4363ace2044089Nick Chalko getActivity() 9795961816a768da387f0b5523cf4363ace2044089Nick Chalko .getContentResolver() 9895961816a768da387f0b5523cf4363ace2044089Nick Chalko .registerContentObserver( 9995961816a768da387f0b5523cf4363ace2044089Nick Chalko TvContract.Programs.CONTENT_URI, true, mProgramUpdateObserver); 100816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko getMainActivity().startShrunkenTvView(true, true); 101944779887775bd950cf1abf348d2df461593f6abLive Channels Team mUpdated = false; 102816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return view; 103816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 104816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 105816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 106816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public void onDestroyView() { 107816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko getActivity().getContentResolver().unregisterContentObserver(mProgramUpdateObserver); 108816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko getChannelDataManager().applyUpdatedValuesToDb(); 109816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko getMainActivity().endShrunkenTvView(); 110944779887775bd950cf1abf348d2df461593f6abLive Channels Team if (VERSION.SDK_INT >= VERSION_CODES.O && mUpdated) { 111944779887775bd950cf1abf348d2df461593f6abLive Channels Team ChannelPreviewUpdater.getInstance(getMainActivity()) 112944779887775bd950cf1abf348d2df461593f6abLive Channels Team .updatePreviewDataForChannelsImmediately(); 113944779887775bd950cf1abf348d2df461593f6abLive Channels Team } 114816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko super.onDestroyView(); 115816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 116816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 117816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 118816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko protected String getTitle() { 119816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return getString(R.string.option_channels_locked); 120816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 121816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 122816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 123816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public String getTrackerLabel() { 124816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return TRACKER_LABEL; 125816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 126816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 127816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 128816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko protected List<Item> getItemList() { 129816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mItems.clear(); 130816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mItems.add(mLockAllItem); 131816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mChannels.clear(); 132816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mChannels.addAll(getChannelDataManager().getChannelList()); 13395961816a768da387f0b5523cf4363ace2044089Nick Chalko Collections.sort( 13495961816a768da387f0b5523cf4363ace2044089Nick Chalko mChannels, 13595961816a768da387f0b5523cf4363ace2044089Nick Chalko new Comparator<Channel>() { 13695961816a768da387f0b5523cf4363ace2044089Nick Chalko @Override 13795961816a768da387f0b5523cf4363ace2044089Nick Chalko public int compare(Channel lhs, Channel rhs) { 13895961816a768da387f0b5523cf4363ace2044089Nick Chalko if (lhs.isBrowsable() != rhs.isBrowsable()) { 13995961816a768da387f0b5523cf4363ace2044089Nick Chalko return lhs.isBrowsable() ? -1 : 1; 14095961816a768da387f0b5523cf4363ace2044089Nick Chalko } 14195961816a768da387f0b5523cf4363ace2044089Nick Chalko return ChannelNumber.compare( 14295961816a768da387f0b5523cf4363ace2044089Nick Chalko lhs.getDisplayNumber(), rhs.getDisplayNumber()); 14395961816a768da387f0b5523cf4363ace2044089Nick Chalko } 14495961816a768da387f0b5523cf4363ace2044089Nick Chalko }); 145816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 146816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko final long currentChannelId = getMainActivity().getCurrentChannelId(); 147816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko boolean hasHiddenChannels = false; 148816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko for (Channel channel : mChannels) { 149816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko if (!channel.isBrowsable() && !hasHiddenChannels) { 15095961816a768da387f0b5523cf4363ace2044089Nick Chalko mItems.add(new DividerItem(getString(R.string.option_channels_subheader_hidden))); 151816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko hasHiddenChannels = true; 152816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 153816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mItems.add(new ChannelBlockedItem(channel)); 154816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko if (channel.isLocked()) { 155816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko ++mBlockedChannelCount; 156816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 157816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko if (channel.getId() == currentChannelId) { 158816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mSelectedPosition = mItems.size() - 1; 159816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 160816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 161816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return mItems; 162816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 163816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 164816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private class BlockAllItem extends ActionItem { 165816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private TextView mTextView; 166816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 167816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public BlockAllItem() { 168816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko super(null); 169816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 170816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 171816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 172816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko protected void onBind(View view) { 173816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko super.onBind(view); 174816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mTextView = (TextView) view.findViewById(R.id.title); 175816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 176816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 177816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 178816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko protected void onUpdate() { 179816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko super.onUpdate(); 180816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko updateText(); 181816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 182816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 183816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 184816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko protected void onUnbind() { 185816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko super.onUnbind(); 186816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mTextView = null; 187816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 188816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 189816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 190816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko protected void onSelected() { 191816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko boolean lock = !areAllChannelsBlocked(); 192816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko for (Channel channel : mChannels) { 193816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko getChannelDataManager().updateLocked(channel.getId(), lock); 194816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 195816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mBlockedChannelCount = lock ? mChannels.size() : 0; 196816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko notifyItemsChanged(); 197944779887775bd950cf1abf348d2df461593f6abLive Channels Team mUpdated = true; 198816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 199816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 200816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 201816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko protected void onFocused() { 202816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko super.onFocused(); 203816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mLastFocusedChannelId = Channel.INVALID_ID; 204816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 205816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 206816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private void updateText() { 20795961816a768da387f0b5523cf4363ace2044089Nick Chalko mTextView.setText( 20895961816a768da387f0b5523cf4363ace2044089Nick Chalko getString( 20995961816a768da387f0b5523cf4363ace2044089Nick Chalko areAllChannelsBlocked() 21095961816a768da387f0b5523cf4363ace2044089Nick Chalko ? R.string.option_channels_unlock_all 21195961816a768da387f0b5523cf4363ace2044089Nick Chalko : R.string.option_channels_lock_all)); 212816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 213816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 214816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private boolean areAllChannelsBlocked() { 215816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return mBlockedChannelCount == mChannels.size(); 216816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 217816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 218816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 219816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private class ChannelBlockedItem extends ChannelCheckItem { 220816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private ChannelBlockedItem(Channel channel) { 221816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko super(channel, getChannelDataManager(), getProgramDataManager()); 222816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 223816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 224816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 225816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko protected int getResourceId() { 226816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return R.layout.option_item_channel_lock; 227816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 228816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 229816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 230816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko protected void onUpdate() { 231816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko super.onUpdate(); 232816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko setChecked(getChannel().isLocked()); 233816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 234816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 235816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 236816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko protected void onSelected() { 237816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko super.onSelected(); 238816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko getChannelDataManager().updateLocked(getChannel().getId(), isChecked()); 239816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mBlockedChannelCount += isChecked() ? 1 : -1; 240816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko notifyItemChanged(mLockAllItem); 241944779887775bd950cf1abf348d2df461593f6abLive Channels Team mUpdated = true; 242816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 243816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 244816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 245816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko protected void onFocused() { 246816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko super.onFocused(); 247816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mLastFocusedChannelId = getChannel().getId(); 248816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 249816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 250816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko} 251