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;
22816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.os.Bundle;
23816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.os.Handler;
24816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.support.v17.leanback.widget.VerticalGridView;
25816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.view.KeyEvent;
26816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.view.LayoutInflater;
27816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.view.View;
28816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.view.ViewGroup;
29816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.widget.TextView;
30816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
31816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.R;
32816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.data.Channel;
33816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.data.ChannelNumber;
3407b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalkoimport com.android.tv.ui.OnRepeatedKeyInterceptListener;
35816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.ui.sidepanel.ActionItem;
36816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.ui.sidepanel.ChannelCheckItem;
37816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.ui.sidepanel.DividerItem;
38816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.ui.sidepanel.Item;
39816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.ui.sidepanel.SideFragment;
40816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
41816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport java.util.ArrayList;
42816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport java.util.Collections;
43816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport java.util.Comparator;
44816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport java.util.List;
45816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
46816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopublic class ChannelsBlockedFragment extends SideFragment {
47816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private static final String TRACKER_LABEL = "Channels blocked";
48816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private int mBlockedChannelCount;
49816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private final List<Channel> mChannels = new ArrayList<>();
50816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private long mLastFocusedChannelId = Channel.INVALID_ID;
51816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private int mSelectedPosition = INVALID_POSITION;
52816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private final ContentObserver mProgramUpdateObserver = new ContentObserver(new Handler()) {
53816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
54816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        public void onChange(boolean selfChange, Uri uri) {
55816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            notifyItemsChanged();
56816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
57816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    };
58816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private final Item mLockAllItem = new BlockAllItem();
59816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private final List<Item> mItems = new ArrayList<>();
60816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
61816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    @Override
62816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public View onCreateView(LayoutInflater inflater, ViewGroup container,
63816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            Bundle savedInstanceState) {
64816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        View view = super.onCreateView(inflater, container, savedInstanceState);
65816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        if (mSelectedPosition != INVALID_POSITION) {
66816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            setSelectedPosition(mSelectedPosition);
67816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
68816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        VerticalGridView listView = (VerticalGridView) view.findViewById(R.id.side_panel_list);
6907b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko        listView.setOnKeyInterceptListener(new OnRepeatedKeyInterceptListener(listView) {
7007b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko            @Override
7107b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko            public boolean onInterceptKeyEvent(KeyEvent event) {
7207b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko                // In order to send tune operation once for continuous channel up/down events,
7307b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko                // we only call the moveToChannel method on ACTION_UP event of channel switch keys.
7407b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko                if (event.getAction() == KeyEvent.ACTION_UP) {
7507b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko                    switch (event.getKeyCode()) {
7607b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko                        case KeyEvent.KEYCODE_DPAD_UP:
7707b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko                        case KeyEvent.KEYCODE_DPAD_DOWN:
7807b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko                            if (mLastFocusedChannelId != Channel.INVALID_ID) {
7907b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko                                getMainActivity().tuneToChannel(
8007b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko                                        getChannelDataManager().getChannel(mLastFocusedChannelId));
8107b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko                            }
8207b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko                            break;
8307b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko                    }
8407b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko                }
8507b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko                return super.onInterceptKeyEvent(event);
8607b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko            }
8707b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko        });
88816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        getActivity().getContentResolver().registerContentObserver(TvContract.Programs.CONTENT_URI,
89816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                true, mProgramUpdateObserver);
90816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        getMainActivity().startShrunkenTvView(true, true);
91816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        return view;
92816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
93816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
94816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    @Override
95816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public void onDestroyView() {
96816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        getActivity().getContentResolver().unregisterContentObserver(mProgramUpdateObserver);
97816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        getChannelDataManager().applyUpdatedValuesToDb();
98816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        getMainActivity().endShrunkenTvView();
99816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        super.onDestroyView();
100816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
101816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
102816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    @Override
103816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    protected String getTitle() {
104816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        return getString(R.string.option_channels_locked);
105816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
106816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
107816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    @Override
108816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public String getTrackerLabel() {
109816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        return TRACKER_LABEL;
110816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
111816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
112816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    @Override
113816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    protected List<Item> getItemList() {
114816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mItems.clear();
115816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mItems.add(mLockAllItem);
116816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mChannels.clear();
117816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mChannels.addAll(getChannelDataManager().getChannelList());
118816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        Collections.sort(mChannels, new Comparator<Channel>() {
119816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            @Override
120816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            public int compare(Channel lhs, Channel rhs) {
121816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                if (lhs.isBrowsable() != rhs.isBrowsable()) {
122816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                    return lhs.isBrowsable() ? -1 : 1;
123816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                }
124816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                return ChannelNumber.compare(lhs.getDisplayNumber(), rhs.getDisplayNumber());
125816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            }
126816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        });
127816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
128816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        final long currentChannelId = getMainActivity().getCurrentChannelId();
129816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        boolean hasHiddenChannels = false;
130816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        for (Channel channel : mChannels) {
131816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            if (!channel.isBrowsable() && !hasHiddenChannels) {
132816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                mItems.add(new DividerItem(
133816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                        getString(R.string.option_channels_subheader_hidden)));
134816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                hasHiddenChannels = true;
135816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            }
136816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            mItems.add(new ChannelBlockedItem(channel));
137816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            if (channel.isLocked()) {
138816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                ++mBlockedChannelCount;
139816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            }
140816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            if (channel.getId() == currentChannelId) {
141816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                mSelectedPosition = mItems.size() - 1;
142816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            }
143816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
144816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        return mItems;
145816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
146816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
147816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private class BlockAllItem extends ActionItem {
148816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        private TextView mTextView;
149816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
150816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        public BlockAllItem() {
151816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            super(null);
152816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
153816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
154816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
155816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        protected void onBind(View view) {
156816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            super.onBind(view);
157816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            mTextView = (TextView) view.findViewById(R.id.title);
158816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
159816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
160816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
161816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        protected void onUpdate() {
162816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            super.onUpdate();
163816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            updateText();
164816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
165816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
166816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
167816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        protected void onUnbind() {
168816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            super.onUnbind();
169816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            mTextView = null;
170816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
171816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
172816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
173816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        protected void onSelected() {
174816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            boolean lock = !areAllChannelsBlocked();
175816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            for (Channel channel : mChannels) {
176816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                getChannelDataManager().updateLocked(channel.getId(), lock);
177816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            }
178816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            mBlockedChannelCount = lock ? mChannels.size() : 0;
179816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            notifyItemsChanged();
180816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
181816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
182816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
183816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        protected void onFocused() {
184816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            super.onFocused();
185816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            mLastFocusedChannelId = Channel.INVALID_ID;
186816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
187816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
188816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        private void updateText() {
189816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            mTextView.setText(getString(areAllChannelsBlocked() ?
190816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                    R.string.option_channels_unlock_all : R.string.option_channels_lock_all));
191816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
192816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
193816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        private boolean areAllChannelsBlocked() {
194816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            return mBlockedChannelCount == mChannels.size();
195816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
196816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
197816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
198816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private class ChannelBlockedItem extends ChannelCheckItem {
199816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        private ChannelBlockedItem(Channel channel) {
200816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            super(channel, getChannelDataManager(), getProgramDataManager());
201816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
202816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
203816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
204816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        protected int getResourceId() {
205816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            return R.layout.option_item_channel_lock;
206816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
207816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
208816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
209816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        protected void onUpdate() {
210816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            super.onUpdate();
211816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            setChecked(getChannel().isLocked());
212816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
213816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
214816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
215816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        protected void onSelected() {
216816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            super.onSelected();
217816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            getChannelDataManager().updateLocked(getChannel().getId(), isChecked());
218816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            mBlockedChannelCount += isChecked() ? 1 : -1;
219816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            notifyItemChanged(mLockAllItem);
220816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
221816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
222816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
223816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        protected void onFocused() {
224816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            super.onFocused();
225816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            mLastFocusedChannelId = getChannel().getId();
226816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
227816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
228816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko}
229