aboutsummaryrefslogtreecommitdiff
path: root/src/com/android/tv
diff options
context:
space:
mode:
authorJaekyun Seok <jaekyun@google.com>2014-05-22 00:59:45 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-05-22 00:59:45 +0000
commit2291294f6cec6929f333e36acffbc12277109da9 (patch)
tree6a57815579e1ba8be35a05114f5901d11f8ec7f0 /src/com/android/tv
parent1a78a5ed6307a8ade4f127890e439d49b4ce1478 (diff)
parent7ebbe134810d0461f031b0b57ea2752ec188ab42 (diff)
downloadTV-2291294f6cec6929f333e36acffbc12277109da9.tar.gz
Merge "Show only enabled channels"
Diffstat (limited to 'src/com/android/tv')
-rw-r--r--src/com/android/tv/data/Channel.java4
-rw-r--r--src/com/android/tv/data/ChannelMap.java14
-rw-r--r--src/com/android/tv/ui/ChannelListAdapter.java44
-rw-r--r--src/com/android/tv/ui/ItemListView.java25
-rw-r--r--src/com/android/tv/ui/MainMenuView.java121
-rw-r--r--src/com/android/tv/ui/OptionsAdapter.java23
6 files changed, 159 insertions, 72 deletions
diff --git a/src/com/android/tv/data/Channel.java b/src/com/android/tv/data/Channel.java
index 9e8bbde3..69908a52 100644
--- a/src/com/android/tv/data/Channel.java
+++ b/src/com/android/tv/data/Channel.java
@@ -74,6 +74,10 @@ public final class Channel {
return mDescription;
}
+ public boolean isBrowsable() {
+ return mIsBrowsable;
+ }
+
public void setDescription(String description) {
mDescription = description;
}
diff --git a/src/com/android/tv/data/ChannelMap.java b/src/com/android/tv/data/ChannelMap.java
index 5030914f..7c0dcf97 100644
--- a/src/com/android/tv/data/ChannelMap.java
+++ b/src/com/android/tv/data/ChannelMap.java
@@ -83,8 +83,18 @@ public class ChannelMap implements LoaderManager.LoaderCallbacks<Cursor> {
return mInput;
}
- public Channel[] getAllChannelList() {
- return mChannelList.toArray(new Channel[0]);
+ public Channel[] getChannelList(boolean browsableOnly) {
+ if (mBrowsableChannelCount == 0 || !browsableOnly) {
+ return mChannelList.toArray(new Channel[0]);
+ }
+
+ ArrayList<Channel> list = new ArrayList<Channel>();
+ for (Channel channel : mChannelList) {
+ if (channel.isBrowsable()) {
+ list.add(channel);
+ }
+ }
+ return list.toArray(new Channel[0]);
}
public int size() {
diff --git a/src/com/android/tv/ui/ChannelListAdapter.java b/src/com/android/tv/ui/ChannelListAdapter.java
index b4bc2c73..baacb752 100644
--- a/src/com/android/tv/ui/ChannelListAdapter.java
+++ b/src/com/android/tv/ui/ChannelListAdapter.java
@@ -24,35 +24,59 @@ import com.android.tv.R;
import com.android.tv.data.Channel;
import com.android.tv.data.ChannelMap;
+import java.util.ArrayList;
+
/*
* An adapter of channel list.
*/
public class ChannelListAdapter extends ItemListView.ItemListAdapter {
private Channel[] mChannelList;
private ItemListView mListView;
+ private boolean mBrowsableOnly;
+ private final String mFixedTitle;
+ private String mTitle;
+ private final int mTileHeight;
public ChannelListAdapter(Context context, Handler handler,
- View.OnClickListener onClickListener) {
+ View.OnClickListener onClickListener, boolean browsableOnly, String title,
+ int tileHeight) {
super(context, handler, R.layout.channel_tile, onClickListener);
+ mBrowsableOnly = browsableOnly;
+ mFixedTitle = title;
+ mTileHeight = tileHeight;
+ }
+
+ @Override
+ public int getTileHeight() {
+ return mTileHeight;
+ }
+
+ @Override
+ public String getTitle() {
+ return mFixedTitle != null ? mFixedTitle : mTitle;
}
+ @Override
public void update(ChannelMap channelMap) {
update(channelMap, mListView);
}
+ @Override
public void update(ChannelMap channelMap, ItemListView listView) {
- mChannelList = channelMap == null ? null : channelMap.getAllChannelList();
+ mChannelList = channelMap == null ? null : channelMap.getChannelList(mBrowsableOnly);
setItemList(mChannelList);
- String title = null;
- mListView = listView;
- if (channelMap != null) {
- setCurrentChannelId(channelMap.getCurrentChannelId());
- title = channelMap.getTvInput().getDisplayName();
- }
+ if (mFixedTitle == null) {
+ mTitle = null;
+ mListView = listView;
+ if (channelMap != null) {
+ setCurrentChannelId(channelMap.getCurrentChannelId());
+ mTitle = channelMap.getTvInput().getDisplayName();
+ }
- if (mListView != null) {
- mListView.setTitle(title);
+ if (mListView != null) {
+ mListView.setTitle(mTitle);
+ }
}
}
diff --git a/src/com/android/tv/ui/ItemListView.java b/src/com/android/tv/ui/ItemListView.java
index 717c486a..9e89e5a0 100644
--- a/src/com/android/tv/ui/ItemListView.java
+++ b/src/com/android/tv/ui/ItemListView.java
@@ -28,6 +28,7 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import com.android.tv.R;
+import com.android.tv.data.ChannelMap;
/*
* A subclass of LinearLayout that shows a title and list view.
@@ -53,17 +54,17 @@ public class ItemListView extends LinearLayout {
super(context, attrs, defStyle);
}
- public void loadViews(int listViewHeight) {
+ public void loadViews() {
mTitleView = (TextView) findViewById(R.id.title);
-
mListView = (HorizontalGridView) findViewById(R.id.list_view);
- ViewGroup.LayoutParams lp = mListView.getLayoutParams();
- lp.height = listViewHeight;
}
public void populateViews(String title, ItemListAdapter adapter) {
mTitleView.setText(title);
mListView.setAdapter(adapter);
+
+ ViewGroup.LayoutParams lp = mListView.getLayoutParams();
+ lp.height = adapter.getTileHeight();
}
public void setTitle(String title) {
@@ -74,13 +75,19 @@ public class ItemListView extends LinearLayout {
mListView.setSelectedPosition(position);
}
- public static class ItemListAdapter extends RecyclerView.Adapter<ItemListAdapter.MyViewHolder> {
+ public static abstract class ItemListAdapter extends
+ RecyclerView.Adapter<ItemListAdapter.MyViewHolder> {
private final LayoutInflater mLayoutInflater;
private final View.OnClickListener mOnClickListener;
private final int mLayoutResId;
private Object[] mItemList;
private Handler mHandler;
+ public abstract int getTileHeight();
+ public abstract String getTitle();
+ public abstract void update(ChannelMap channelMap);
+ public abstract void update(ChannelMap channelMap, ItemListView list);
+
public ItemListAdapter(Context context, Handler handler, int layoutResId,
View.OnClickListener onClickListener) {
mHandler = handler;
@@ -115,8 +122,9 @@ public class ItemListView extends LinearLayout {
@Override
public void onBindViewHolder(MyViewHolder baseHolder, int position) {
TileView view = (TileView) baseHolder.itemView;
- if (mItemList != null && position >= 0 && mItemList.length > position) {
- view.populateViews(mOnClickListener, mItemList[position]);
+ Object[] itemList = mItemList;
+ if (itemList != null && position >= 0 && itemList.length > position) {
+ view.populateViews(mOnClickListener, itemList[position]);
if (view instanceof ViewGroup) {
final ViewGroup viewGroup = (ViewGroup) view;
mHandler.post(new Runnable() {
@@ -133,7 +141,8 @@ public class ItemListView extends LinearLayout {
@Override
public int getItemCount() {
- return mItemList == null ? 0 : mItemList.length;
+ Object[] itemList = mItemList;
+ return itemList == null ? 0 : itemList.length;
}
}
} \ No newline at end of file
diff --git a/src/com/android/tv/ui/MainMenuView.java b/src/com/android/tv/ui/MainMenuView.java
index faf6f719..b12ac72e 100644
--- a/src/com/android/tv/ui/MainMenuView.java
+++ b/src/com/android/tv/ui/MainMenuView.java
@@ -32,22 +32,24 @@ import com.android.tv.data.Channel;
import com.android.tv.data.ChannelMap;
import com.android.tv.dialog.PrivacySettingDialogFragment;
+import java.util.ArrayList;
+
/*
* A subclass of VerticalGridView that shows tv main menu.
*/
public class MainMenuView extends VerticalGridView implements View.OnClickListener {
- private static final int MENU_COUNT = 2;
- private static final int ALL_CHANNEL_LIST_MENU_TYPE = 0;
- private static final int SETTINGS_MENU_TYPE = 1;
+ private static final int DUMMY_TYPE = 0;
+ private static final int CHANNEL_LIST_TYPE = 1;
+ private static final int OPTIONS_TYPE = 2;
private final LayoutInflater mLayoutInflater;
- private final MainMenuAdapter mAapter = new MainMenuAdapter();
+ private final MainMenuAdapter mAdapter = new MainMenuAdapter();
private ChannelMap mChannelMap;
private TvActivity mTvActivity;
private final Handler mHandler = new Handler();
- private final ChannelListAdapter mAllChannelListAdapter;
- private final OptionsAdapter mOptionsAdapter;
+ private final ArrayList<ItemListView.ItemListAdapter> mAllAdapterList =
+ new ArrayList<ItemListView.ItemListAdapter>();
public MainMenuView(Context context) {
this(context, null, 0);
@@ -61,10 +63,21 @@ public class MainMenuView extends VerticalGridView implements View.OnClickListen
super(context, attrs, defStyle);
mLayoutInflater = LayoutInflater.from(context);
- setAdapter(mAapter);
+ setWindowAlignmentOffset(context.getResources().getDimensionPixelOffset(
+ R.dimen.selected_row_alignment));
+ setWindowAlignmentOffsetPercent(VerticalGridView.WINDOW_ALIGN_OFFSET_PERCENT_DISABLED);
+
+ setAdapter(mAdapter);
+
+ // List for enabled channels
+ mAllAdapterList.add(new ChannelListAdapter(context, mHandler, this, true, null,
+ context.getResources().getDimensionPixelOffset(R.dimen.channel_list_view_height)));
- mAllChannelListAdapter = new ChannelListAdapter(context, mHandler, this);
- mOptionsAdapter = new OptionsAdapter(context, mHandler, this);
+ // List for options
+ mAllAdapterList.add(new OptionsAdapter(context, mHandler, this));
+
+ // Keep all items for the main menu
+ setItemViewCacheSize(mAllAdapterList.size());
}
public void setTvActivity(TvActivity activity) {
@@ -73,14 +86,29 @@ public class MainMenuView extends VerticalGridView implements View.OnClickListen
public void setChannelMap(ChannelMap channelMap) {
mChannelMap = channelMap;
- mAllChannelListAdapter.update(channelMap);
- mOptionsAdapter.update(channelMap);
+
+ ArrayList<ItemListView.ItemListAdapter> availableAdapterList =
+ new ArrayList<ItemListView.ItemListAdapter>();
+ for (ItemListView.ItemListAdapter adapter : mAllAdapterList) {
+ adapter.update(channelMap);
+ if (adapter.getItemCount() > 0) {
+ availableAdapterList.add(adapter);
+ }
+ }
+
+ mAdapter.setItemListAdapters(
+ availableAdapterList.toArray(new ItemListView.ItemListAdapter[0]));
}
private void show() {
if (mChannelMap != null) {
long id = mChannelMap.getCurrentChannelId();
- mAllChannelListAdapter.setCurrentChannelId(id);
+
+ for (ItemListView.ItemListAdapter adapter : mAllAdapterList) {
+ if (adapter instanceof ChannelListAdapter) {
+ ((ChannelListAdapter) adapter).setCurrentChannelId(id);
+ }
+ }
}
setSelectedPosition(0);
@@ -185,9 +213,26 @@ public class MainMenuView extends VerticalGridView implements View.OnClickListen
}
class MainMenuAdapter extends RecyclerView.Adapter<MainMenuAdapter.MyViewHolder> {
+ private ItemListView.ItemListAdapter[] mAdapters;
+
+ public void setItemListAdapters(ItemListView.ItemListAdapter[] adapters) {
+ mAdapters = adapters;
+ notifyDataSetChanged();
+ }
+
@Override
public int getItemViewType(int position) {
- return position;
+ ItemListView.ItemListAdapter[] adapters = mAdapters;
+ if (adapters != null && position < adapters.length) {
+ if (adapters[position] instanceof ChannelListAdapter) {
+ return CHANNEL_LIST_TYPE;
+ }
+ if (adapters[position] instanceof OptionsAdapter) {
+ return OPTIONS_TYPE;
+ }
+ }
+
+ return DUMMY_TYPE;
}
private class MyViewHolder extends RecyclerView.ViewHolder {
@@ -198,55 +243,27 @@ public class MainMenuView extends VerticalGridView implements View.OnClickListen
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- View view = null;
- view = mLayoutInflater.inflate(R.layout.item_list, parent, false);
-
- int listViewHeight = 0;
- switch (viewType) {
- case ALL_CHANNEL_LIST_MENU_TYPE:
- listViewHeight = mContext.getResources().getDimensionPixelOffset(
- R.dimen.channel_list_view_height);
- break;
- case SETTINGS_MENU_TYPE:
- listViewHeight = mContext.getResources().getDimensionPixelOffset(
- R.dimen.action_list_view_height);
- break;
-
- default:
- throw new IllegalArgumentException("unexpected view type: " + viewType);
- }
- ((ItemListView) view).loadViews(listViewHeight);
+ View view = mLayoutInflater.inflate(R.layout.item_list, parent, false);
+ ((ItemListView) view).loadViews();
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(MyViewHolder baseHolder, int position) {
- int viewType = position;
- ItemListView listView = null;
- switch (viewType) {
- case ALL_CHANNEL_LIST_MENU_TYPE:
- listView = (ItemListView) baseHolder.itemView;
-
- listView.populateViews(null, mAllChannelListAdapter);
- mAllChannelListAdapter.update(mChannelMap, listView);
- break;
-
- case SETTINGS_MENU_TYPE:
- listView = (ItemListView) baseHolder.itemView;
- listView.populateViews(mContext.getString(R.string.menu_title),
- mOptionsAdapter);
- mOptionsAdapter.update(mChannelMap);
- break;
-
- default:
- throw new IllegalArgumentException("unexpected view type: " + viewType);
+ ItemListView.ItemListAdapter[] adapters = mAdapters;
+ if (adapters != null && position < adapters.length) {
+ ItemListView listView = (ItemListView) baseHolder.itemView;
+ ItemListView.ItemListAdapter adapter = mAdapters[position];
+ listView.populateViews(adapter.getTitle(), adapter);
+ adapter.update(mChannelMap, listView);
}
}
@Override
public int getItemCount() {
- return MENU_COUNT;
+ ItemListView.ItemListAdapter[] adapters = mAdapters;
+ return adapters == null ? 0 : adapters.length;
}
}
-} \ No newline at end of file
+}
diff --git a/src/com/android/tv/ui/OptionsAdapter.java b/src/com/android/tv/ui/OptionsAdapter.java
index 518d3f3e..fc44f043 100644
--- a/src/com/android/tv/ui/OptionsAdapter.java
+++ b/src/com/android/tv/ui/OptionsAdapter.java
@@ -31,10 +31,28 @@ import java.util.ArrayList;
* An adapter of options.
*/
public class OptionsAdapter extends ItemListView.ItemListAdapter {
+ private final String mTitle;
+ private final int mTileHeight;
+
public OptionsAdapter(Context context, Handler handler, View.OnClickListener onClickListener) {
super(context, handler, R.layout.action_tile, onClickListener);
+
+ mTitle = context.getString(R.string.menu_title);
+ mTileHeight = context.getResources().getDimensionPixelOffset(
+ R.dimen.action_list_view_height);
+ }
+
+ @Override
+ public int getTileHeight() {
+ return mTileHeight;
}
+ @Override
+ public String getTitle() {
+ return mTitle;
+ }
+
+ @Override
public void update(ChannelMap channelMap) {
TvInput tvInput = channelMap == null ? null : channelMap.getTvInput();
@@ -54,4 +72,9 @@ public class OptionsAdapter extends ItemListView.ItemListAdapter {
setItemList(actionList.toArray(new MenuAction[0]));
}
+
+ @Override
+ public void update(ChannelMap channelMap, ItemListView list) {
+ update(channelMap);
+ }
}