/* * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.tv.menu; import android.content.Context; import com.android.tv.R; import com.android.tv.data.ProgramDataManager; import com.android.tv.recommendation.RecentChannelEvaluator; import com.android.tv.recommendation.Recommender; public class ChannelsRow extends ItemListRow { public static final String ID = ChannelsRow.class.getName(); /** Minimum count for recent channels. */ public static final int MIN_COUNT_FOR_RECENT_CHANNELS = 5; /** Maximum count for recent channels. */ public static final int MAX_COUNT_FOR_RECENT_CHANNELS = 10; private Recommender mTvRecommendation; private ChannelsRowAdapter mChannelsAdapter; private ChannelsPosterPrefetcher mChannelsPosterPrefetcher; public ChannelsRow(Context context, Menu menu, ProgramDataManager programDataManager) { super(context, menu, R.string.menu_title_channels, R.dimen.card_layout_height, null); mTvRecommendation = new Recommender( getContext(), new Recommender.Listener() { @Override public void onRecommenderReady() { mChannelsAdapter.update(); mChannelsPosterPrefetcher.prefetch(); } @Override public void onRecommendationChanged() { mChannelsAdapter.update(); mChannelsPosterPrefetcher.prefetch(); } }, true); mTvRecommendation.registerEvaluator(new RecentChannelEvaluator()); mChannelsAdapter = new ChannelsRowAdapter( context, mTvRecommendation, MIN_COUNT_FOR_RECENT_CHANNELS, MAX_COUNT_FOR_RECENT_CHANNELS); setAdapter(mChannelsAdapter); mChannelsPosterPrefetcher = new ChannelsPosterPrefetcher(context, programDataManager, mChannelsAdapter); } @Override public void release() { super.release(); if (mTvRecommendation != null) { mTvRecommendation.release(); mTvRecommendation = null; } mChannelsPosterPrefetcher.cancel(); mChannelsAdapter.release(); } /** Handle the update event of the recent channel. */ @Override public void onRecentChannelsChanged() { mChannelsPosterPrefetcher.prefetch(); } @Override public String getId() { return ID; } }