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