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.menu;
18816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
19816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.content.Context;
20816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.content.Intent;
2148dadb49248271b01997862e1335912a4f2e189fYoungsang Choimport android.media.tv.TvInputInfo;
2207b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalkoimport android.os.Build;
2348dadb49248271b01997862e1335912a4f2e189fYoungsang Choimport android.support.v4.os.BuildCompat;
24816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.view.View;
25816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
26816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.MainActivity;
27816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.R;
28816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.TvApplication;
29816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.analytics.Tracker;
30ba5845f23b8fbc985890f892961abc8b39886611Nick Chalkoimport com.android.tv.common.feature.CommonFeatures;
31816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.data.Channel;
32816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.recommendation.Recommender;
33816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.util.SetupUtils;
3448dadb49248271b01997862e1335912a4f2e189fYoungsang Choimport com.android.tv.util.TvInputManagerHelper;
3548dadb49248271b01997862e1335912a4f2e189fYoungsang Choimport com.android.tv.util.Utils;
36816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
37816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport java.util.ArrayList;
38816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport java.util.List;
39816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
40816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko/**
41816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * An adapter of the Channels row.
42816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko */
43816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopublic class ChannelsRowAdapter extends ItemListRowView.ItemListAdapter<Channel> {
4448dadb49248271b01997862e1335912a4f2e189fYoungsang Cho    // There are four special cards: guide, setup, dvr, record, applink.
4548dadb49248271b01997862e1335912a4f2e189fYoungsang Cho    private static final int SIZE_OF_VIEW_TYPE = 5;
46ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko
47816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private final Context mContext;
48816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private final Tracker mTracker;
49816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private final Recommender mRecommender;
50816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private final int mMaxCount;
51816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private final int mMinCount;
5248dadb49248271b01997862e1335912a4f2e189fYoungsang Cho    private final boolean mDvrFeatureEnabled;
5348dadb49248271b01997862e1335912a4f2e189fYoungsang Cho    private final int[] mViewType = new int[SIZE_OF_VIEW_TYPE];
54816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
55816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private final View.OnClickListener mGuideOnClickListener = new View.OnClickListener() {
56816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
57816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        public void onClick(View view) {
58816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            mTracker.sendMenuClicked(R.string.channels_item_program_guide);
59816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            getMainActivity().getOverlayManager().showProgramGuide();
60816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
61816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    };
62816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
63816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private final View.OnClickListener mSetupOnClickListener = new View.OnClickListener() {
64816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
65816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        public void onClick(View view) {
66816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            mTracker.sendMenuClicked(R.string.channels_item_setup);
67ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko            getMainActivity().getOverlayManager().showSetupFragment();
68ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        }
69ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko    };
70ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko
71ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko    private final View.OnClickListener mDvrOnClickListener = new View.OnClickListener() {
72ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        @Override
73ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        public void onClick(View view) {
7448dadb49248271b01997862e1335912a4f2e189fYoungsang Cho            Utils.showToastMessageForDeveloperFeature(view.getContext());
75ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko            mTracker.sendMenuClicked(R.string.channels_item_dvr);
76ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko            getMainActivity().getOverlayManager().showDvrManager();
77816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
78816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    };
79816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
8048dadb49248271b01997862e1335912a4f2e189fYoungsang Cho    private final View.OnClickListener mRecordOnClickListener = new View.OnClickListener() {
8148dadb49248271b01997862e1335912a4f2e189fYoungsang Cho        @Override
8248dadb49248271b01997862e1335912a4f2e189fYoungsang Cho        public void onClick(View view) {
8348dadb49248271b01997862e1335912a4f2e189fYoungsang Cho            Utils.showToastMessageForDeveloperFeature(view.getContext());
8448dadb49248271b01997862e1335912a4f2e189fYoungsang Cho            RecordCardView v = ((RecordCardView) view);
8548dadb49248271b01997862e1335912a4f2e189fYoungsang Cho            boolean isRecording = v.isRecording();
8648dadb49248271b01997862e1335912a4f2e189fYoungsang Cho            mTracker.sendMenuClicked(isRecording ? R.string.channels_item_record_start
8748dadb49248271b01997862e1335912a4f2e189fYoungsang Cho                    : R.string.channels_item_record_stop);
8848dadb49248271b01997862e1335912a4f2e189fYoungsang Cho            if (!isRecording) {
8948dadb49248271b01997862e1335912a4f2e189fYoungsang Cho                v.startRecording();
9048dadb49248271b01997862e1335912a4f2e189fYoungsang Cho            } else {
9148dadb49248271b01997862e1335912a4f2e189fYoungsang Cho                v.stopRecording();
9248dadb49248271b01997862e1335912a4f2e189fYoungsang Cho            }
9348dadb49248271b01997862e1335912a4f2e189fYoungsang Cho        }
9448dadb49248271b01997862e1335912a4f2e189fYoungsang Cho    };
9548dadb49248271b01997862e1335912a4f2e189fYoungsang Cho
96816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private final View.OnClickListener mAppLinkOnClickListener = new View.OnClickListener() {
97816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
98816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        public void onClick(View view) {
99816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            mTracker.sendMenuClicked(R.string.channels_item_app_link);
100816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            Intent intent = ((AppLinkCardView) view).getIntent();
101816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            if (intent != null) {
102816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                getMainActivity().startActivitySafe(intent);
103816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            }
104816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
105816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    };
106816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
107816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private final View.OnClickListener mChannelOnClickListener = new View.OnClickListener() {
108816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
109816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        public void onClick(View view) {
110816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            // Always send the label "Channels" because the channel ID or name or number might be
111816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            // sensitive.
112816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            mTracker.sendMenuClicked(R.string.menu_title_channels);
113816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            getMainActivity().tuneToChannel((Channel) view.getTag());
114816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            getMainActivity().hideOverlaysForTune();
115816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
116816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    };
117816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
118816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public ChannelsRowAdapter(Context context, Recommender recommender,
119816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            int minCount, int maxCount) {
120816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        super(context);
1211abddd9f6225298066094e20a6c29061b6af4590Nick Chalko        mTracker = TvApplication.getSingletons(context).getTracker();
122816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mContext = context;
123816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mRecommender = recommender;
124816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mMinCount = minCount;
125816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mMaxCount = maxCount;
12648dadb49248271b01997862e1335912a4f2e189fYoungsang Cho        mDvrFeatureEnabled = CommonFeatures.DVR.isEnabled(mContext) && BuildCompat.isAtLeastN();
127816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
128816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
129816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    @Override
130816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public int getItemViewType(int position) {
131ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        if (position >= SIZE_OF_VIEW_TYPE) {
132ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko            return R.layout.menu_card_channel;
133816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
134ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        return mViewType[position];
135816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
136816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
137816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    @Override
138816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    protected int getLayoutResId(int viewType) {
139816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        return viewType;
140816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
141816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
142816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    @Override
143816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public void onBindViewHolder(MyViewHolder viewHolder, int position) {
144816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        super.onBindViewHolder(viewHolder, position);
145816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
146816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        int viewType = getItemViewType(position);
147816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        if (viewType == R.layout.menu_card_guide) {
148816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            viewHolder.itemView.setOnClickListener(mGuideOnClickListener);
149816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        } else if (viewType == R.layout.menu_card_setup) {
150816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            viewHolder.itemView.setOnClickListener(mSetupOnClickListener);
151816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        } else if (viewType == R.layout.menu_card_app_link) {
152816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            viewHolder.itemView.setOnClickListener(mAppLinkOnClickListener);
153ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        } else if (viewType == R.layout.menu_card_dvr) {
154ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko            viewHolder.itemView.setOnClickListener(mDvrOnClickListener);
15548dadb49248271b01997862e1335912a4f2e189fYoungsang Cho        } else if (viewType == R.layout.menu_card_record) {
15648dadb49248271b01997862e1335912a4f2e189fYoungsang Cho            viewHolder.itemView.setOnClickListener(mRecordOnClickListener);
157816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        } else {
158816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            viewHolder.itemView.setTag(getItemList().get(position));
159816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            viewHolder.itemView.setOnClickListener(mChannelOnClickListener);
160816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
161816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
162816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
163816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    @Override
164816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public void update() {
165816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        List<Channel> channelList = new ArrayList<>();
16648dadb49248271b01997862e1335912a4f2e189fYoungsang Cho        Channel dummyChannel = new Channel.Builder().build();
167816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        // For guide item
168816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        channelList.add(dummyChannel);
169816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        // For setup item
17048dadb49248271b01997862e1335912a4f2e189fYoungsang Cho        TvInputManagerHelper inputManager = TvApplication.getSingletons(mContext)
17148dadb49248271b01997862e1335912a4f2e189fYoungsang Cho                .getTvInputManagerHelper();
17248dadb49248271b01997862e1335912a4f2e189fYoungsang Cho        boolean showSetupCard = SetupUtils.getInstance(mContext).hasNewInput(inputManager);
173ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        Channel currentChannel = ((MainActivity) mContext).getCurrentChannel();
174ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        boolean showAppLinkCard = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
175ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko                && currentChannel != null
176ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko                && currentChannel.getAppLinkType(mContext) != Channel.APP_LINK_TYPE_NONE;
17748dadb49248271b01997862e1335912a4f2e189fYoungsang Cho        boolean showDvrCard = false;
17848dadb49248271b01997862e1335912a4f2e189fYoungsang Cho        boolean showRecordCard = false;
17948dadb49248271b01997862e1335912a4f2e189fYoungsang Cho        if (mDvrFeatureEnabled) {
18048dadb49248271b01997862e1335912a4f2e189fYoungsang Cho            for (TvInputInfo info : inputManager.getTvInputInfos(true, true)) {
18148dadb49248271b01997862e1335912a4f2e189fYoungsang Cho                if (info.canRecord()) {
18248dadb49248271b01997862e1335912a4f2e189fYoungsang Cho                    showDvrCard = true;
18348dadb49248271b01997862e1335912a4f2e189fYoungsang Cho                    break;
18448dadb49248271b01997862e1335912a4f2e189fYoungsang Cho                }
18548dadb49248271b01997862e1335912a4f2e189fYoungsang Cho            }
18648dadb49248271b01997862e1335912a4f2e189fYoungsang Cho            if (currentChannel != null && currentChannel.getInputId() != null) {
18748dadb49248271b01997862e1335912a4f2e189fYoungsang Cho                TvInputInfo inputInfo = inputManager.getTvInputInfo(currentChannel.getInputId());
18848dadb49248271b01997862e1335912a4f2e189fYoungsang Cho                if ((inputInfo.canRecord() && inputInfo.getTunerCount() > 1)) {
18948dadb49248271b01997862e1335912a4f2e189fYoungsang Cho                    showRecordCard = true;
19048dadb49248271b01997862e1335912a4f2e189fYoungsang Cho                }
19148dadb49248271b01997862e1335912a4f2e189fYoungsang Cho            }
19248dadb49248271b01997862e1335912a4f2e189fYoungsang Cho        }
193ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko
194ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        mViewType[0] = R.layout.menu_card_guide;
195ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        int index = 1;
196ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        if (showSetupCard) {
197816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            channelList.add(dummyChannel);
198ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko            mViewType[index++] = R.layout.menu_card_setup;
199816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
20048dadb49248271b01997862e1335912a4f2e189fYoungsang Cho        if (showDvrCard) {
201ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko            channelList.add(dummyChannel);
202ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko            mViewType[index++] = R.layout.menu_card_dvr;
203ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        }
20448dadb49248271b01997862e1335912a4f2e189fYoungsang Cho        if (showRecordCard) {
20548dadb49248271b01997862e1335912a4f2e189fYoungsang Cho            channelList.add(currentChannel);
20648dadb49248271b01997862e1335912a4f2e189fYoungsang Cho            mViewType[index++] = R.layout.menu_card_record;
20748dadb49248271b01997862e1335912a4f2e189fYoungsang Cho        }
208ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        if (showAppLinkCard) {
209ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko            channelList.add(currentChannel);
210ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko            mViewType[index++] = R.layout.menu_card_app_link;
211ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        }
212ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        for ( ; index < mViewType.length; ++index) {
213ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko            mViewType[index] = R.layout.menu_card_channel;
214816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
215816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        channelList.addAll(getRecentChannels());
216816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        setItemList(channelList);
217816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
218816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
219816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private List<Channel> getRecentChannels() {
220816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        List<Channel> channelList = new ArrayList<>();
221816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        for (Channel channel : mRecommender.recommendChannels(mMaxCount)) {
222816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            if (channel.isBrowsable()) {
223816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                channelList.add(channel);
224816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            }
225816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
226816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        int count = channelList.size();
227816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        // If the number of recommended channels is not enough, add more from the recent channel
228816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        // list.
229816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        if (count < mMinCount && mContext instanceof MainActivity) {
230816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            for (long channelId : ((MainActivity) mContext).getRecentChannels()) {
231816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                Channel channel = mRecommender.getChannel(channelId);
232816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                if (channel == null || channelList.contains(channel)
233816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                        || !channel.isBrowsable()) {
234816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                   continue;
235816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                }
236816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                channelList.add(channel);
237816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                if (++count >= mMinCount) {
238816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                    break;
239816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                }
240816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            }
241816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
2427d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko        return channelList;
243816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
244816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko}
245