aboutsummaryrefslogtreecommitdiff
path: root/src/com/android/tv/ui/MainMenuView.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/tv/ui/MainMenuView.java')
-rw-r--r--src/com/android/tv/ui/MainMenuView.java69
1 files changed, 43 insertions, 26 deletions
diff --git a/src/com/android/tv/ui/MainMenuView.java b/src/com/android/tv/ui/MainMenuView.java
index 6c38c3ec..2b2a4c13 100644
--- a/src/com/android/tv/ui/MainMenuView.java
+++ b/src/com/android/tv/ui/MainMenuView.java
@@ -32,9 +32,11 @@ import com.android.tv.TvActivity;
import com.android.tv.data.Channel;
import com.android.tv.data.ChannelMap;
import com.android.tv.dialog.PrivacySettingDialogFragment;
+import com.android.tv.recommendation.TvRecommendation;
import com.android.tv.util.Utils;
import java.util.ArrayList;
+import java.util.Arrays;
/*
* A subclass of VerticalGridView that shows tv main menu.
@@ -44,24 +46,19 @@ public class MainMenuView extends VerticalGridView implements View.OnClickListen
private static final int CHANNEL_LIST_TYPE = 1;
private static final int OPTIONS_TYPE = 2;
+ private static final int MAX_COUNT_FOR_RECOMMENDATION = 10;
+
private final LayoutInflater mLayoutInflater;
private final MainMenuAdapter mAdapter = new MainMenuAdapter();
private ChannelMap mChannelMap;
private TvActivity mTvActivity;
+ private TvRecommendation mTvRecommendation;
+
private final Handler mHandler = new Handler();
private final ArrayList<ItemListView.ItemListAdapter> mAllAdapterList =
new ArrayList<ItemListView.ItemListAdapter>();
- private SharedPreferences.OnSharedPreferenceChangeListener mPrefChangeListener =
- new SharedPreferences.OnSharedPreferenceChangeListener() {
- public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
- if (mChannelMap != null) {
- updateAdapters();
- }
- }
- };
-
public MainMenuView(Context context) {
this(context, null, 0);
}
@@ -74,30 +71,39 @@ public class MainMenuView extends VerticalGridView implements View.OnClickListen
super(context, attrs, defStyle);
mLayoutInflater = LayoutInflater.from(context);
-
setAdapter(mAdapter);
+ }
+
+ @Override
+ protected void onAttachedToWindow() {
+ Context context = getContext();
// List for enabled channels
mAllAdapterList.add(new ChannelListAdapter(context, mHandler, this, true, null,
context.getResources().getDimensionPixelOffset(R.dimen.channel_list_view_height)));
+ // List for recommended channels
+ mTvRecommendation = new TvRecommendation(context, mHandler);
+ mAllAdapterList.add(new RecommendationListAdapter(context, mHandler, this,
+ mTvRecommendation, MAX_COUNT_FOR_RECOMMENDATION, R.layout.channel_tile,
+ context.getString(R.string.recommended_channel_list_title),
+ context.getResources().getDimensionPixelOffset(R.dimen.channel_list_view_height)));
+
// List for options
mAllAdapterList.add(new OptionsAdapter(context, mHandler, this));
// Keep all items for the main menu
setItemViewCacheSize(mAllAdapterList.size());
- }
-
- @Override
- protected void onAttachedToWindow() {
- Utils.getSharedPreferencesOfDisplayNameForInput(getContext())
- .registerOnSharedPreferenceChangeListener(mPrefChangeListener);
+ updateAdapters(true);
}
@Override
protected void onDetachedFromWindow() {
- Utils.getSharedPreferencesOfDisplayNameForInput(getContext())
- .unregisterOnSharedPreferenceChangeListener(mPrefChangeListener);
+ mAllAdapterList.clear();
+ updateAdapters(false);
+
+ mTvRecommendation.release();
+ mTvRecommendation = null;
}
public void setTvActivity(TvActivity activity) {
@@ -106,14 +112,16 @@ public class MainMenuView extends VerticalGridView implements View.OnClickListen
public void setChannelMap(ChannelMap channelMap) {
mChannelMap = channelMap;
- updateAdapters();
+ updateAdapters(true);
}
- private void updateAdapters() {
+ private void updateAdapters(boolean channelMapUpdateRequired) {
ArrayList<ItemListView.ItemListAdapter> availableAdapterList =
new ArrayList<ItemListView.ItemListAdapter>();
for (ItemListView.ItemListAdapter adapter : mAllAdapterList) {
- adapter.update(mChannelMap);
+ if (channelMapUpdateRequired) {
+ adapter.update(mChannelMap);
+ }
if (adapter.getItemCount() > 0) {
availableAdapterList.add(adapter);
}
@@ -125,13 +133,20 @@ public class MainMenuView extends VerticalGridView implements View.OnClickListen
private void show() {
if (mChannelMap != null) {
- long id = mChannelMap.getCurrentChannelId();
+ boolean adapterVisibilityChanged = false;
for (ItemListView.ItemListAdapter adapter : mAllAdapterList) {
- if (adapter instanceof ChannelListAdapter) {
- ((ChannelListAdapter) adapter).setCurrentChannelId(id);
+ int prevCount = adapter.getItemCount();
+ adapter.onBeforeShowing();
+ int currCount = adapter.getItemCount();
+ if ((prevCount == 0 && currCount != 0) || (prevCount != 0 && currCount == 0)) {
+ adapterVisibilityChanged = true;
}
}
+
+ if (adapterVisibilityChanged) {
+ updateAdapters(false);
+ }
}
setSelectedPosition(0);
@@ -239,8 +254,10 @@ public class MainMenuView extends VerticalGridView implements View.OnClickListen
private ItemListView.ItemListAdapter[] mAdapters;
public void setItemListAdapters(ItemListView.ItemListAdapter[] adapters) {
- mAdapters = adapters;
- notifyDataSetChanged();
+ if (!Arrays.equals(mAdapters, adapters)) {
+ mAdapters = adapters;
+ notifyDataSetChanged();
+ }
}
@Override