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