package com.video.ui.view.block; import android.content.Context; import android.graphics.Color; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; import com.tv.ui.metro.model.Block; import com.tv.ui.metro.model.DisplayItem; import com.video.ui.R; import com.tv.ui.metro.model.LayoutConstant; import java.util.ArrayList; /** * Created by wangwei on 11/20/14. */ public class PortBlockView<T> extends LinearBaseCardView implements DimensHelper{ Block<T> content; public PortBlockView(Context context) { super(context, null, 0); } public PortBlockView(Context context, AttributeSet attrs) { super(context, attrs, 0); } private Dimens mDimens; public PortBlockView(Context context, Block<T> blocks, Object tag) { super(context, null, 0); setTag(R.integer.picasso_tag, tag); setOrientation(VERTICAL); setBackgroundResource(R.drawable.com_block_n); initUI(blocks); } public PortBlockView(Context context, Object tag) { super(context, null, 0); setTag(R.integer.picasso_tag, tag); setOrientation(VERTICAL); setBackgroundResource(R.drawable.com_block_n); } public void addChildView(final ArrayList<Block<T>> blocks){ for(Block<T> block:blocks){ addChildView(block); } } public void addChildView(final Block<T> block){ switch (block.ui_type.id){ //tabs_horizontal and linearlayout_title show just has one, and they should be the first item case LayoutConstant.tabs_horizontal: { View blockView = new ChannelTabsBlockView(getContext(), block, getTag(R.integer.picasso_tag)); LayoutParams flp = new LayoutParams(LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); addView(blockView, flp); if (blockView instanceof DimensHelper) { getDimens().height += ((DimensHelper) blockView).getDimens().height; } break; } case LayoutConstant.linearlayout_title:{ View root = View.inflate(getContext(), R.layout.sub_channel_title, null); TextView title = (TextView) root.findViewById(R.id.channel_title); title.setText(block.title); LayoutParams flp = new LayoutParams(LayoutParams.MATCH_PARENT, getResources().getDimensionPixelSize(R.dimen.title_height)); addView(root, flp); getDimens().height += getResources().getDimensionPixelSize(R.dimen.title_height); break; } case LayoutConstant.linearlayout_single_poster:{ addOnePadding(); SinglePosterBlockView view = new SinglePosterBlockView(getContext(), block, getTag(R.integer.picasso_tag)); LayoutParams flp = new LayoutParams(LayoutParams.MATCH_PARENT, view.getDimens().height); addView(view, flp); getDimens().height += view.getDimens().height; break; } case LayoutConstant.list_rich_header: { addOnePadding(); RankBlockView view = new RankBlockView(getContext(), block, getTag(R.integer.picasso_tag)); LayoutParams flp = new LayoutParams(LayoutParams.MATCH_PARENT, view.getDimens().height); addView(view, flp); getDimens().height += view.getDimens().height; break; } case LayoutConstant.grid_media_land: case LayoutConstant.grid_media_port: case LayoutConstant.grid_media_land_title: case LayoutConstant.grid_media_port_title:{ //grid already have one top padding, so ignore GridMediaBlockView view = new GridMediaBlockView(getContext(), block, getTag(R.integer.picasso_tag)); LayoutParams flp = new LayoutParams(LayoutParams.MATCH_PARENT, view.getDimens().height); addView(view, flp); getDimens().height += view.getDimens().height; break; } case LayoutConstant.linearlayout_none: { //addOnePadding(); View buttonContain = View.inflate(getContext(), R.layout.button_enter, null); Button blockView = (Button) buttonContain.findViewById(R.id.enter_button); blockView.setText(block.title); blockView.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { launcherAction(getContext(), block); } }); addView(buttonContain); getDimens().height += getResources().getDimensionPixelSize(R.dimen.rank_button_height); //last one //addOnePadding(); break; } case LayoutConstant.linearlayout_poster:{ addOnePadding(); BlockLinearButtonView bv = new BlockLinearButtonView(getContext(), block.items, getTag(R.integer.picasso_tag)); LayoutParams flp = new LayoutParams(LayoutParams.MATCH_PARENT, bv.getDimens().height); addView(bv, flp); getDimens().height += bv.getDimens().height; //add one more for seperate //addOnePadding(); break; } case LayoutConstant.linearlayout_land: { addOnePadding(); PosterEnterBlockView bv = new PosterEnterBlockView(getContext(), block.items, getTag(R.integer.picasso_tag)); LayoutParams flp = new LayoutParams(LayoutParams.MATCH_PARENT, bv.getDimens().height); addView(bv, flp); getDimens().height += bv.getDimens().height; //for last sep, because no padding //addOnePadding(); break; } case LayoutConstant.linearlayout_filter:{ SelectItemsBlockView bv = new SelectItemsBlockView(getContext(), block.filters.filters(), block.ui_type.id, (Block<DisplayItem>) block); addView(bv); getDimens().height += bv.getDimens().height; addOnePadding(); break; } case LayoutConstant.linearlayout_episode:{ SelectItemsBlockView bv = SelectItemsBlockView.createEpisodeButtonBlockView(getContext(), block.media.items, 0, block.media.display_layout==null?8:block.media.display_layout.max_display); LayoutParams flp = new LayoutParams(LayoutParams.MATCH_PARENT, bv.getDimens().height); addView(bv, flp); getDimens().height += bv.getDimens().height; break; } case LayoutConstant.linearlayout_episode_list:{ SelectItemsBlockView bv = SelectItemsBlockView.createEpisodeListBlockView(getContext(), block.media.items, 0, block.media.display_layout==null?4:block.media.display_layout.max_display); LayoutParams flp = new LayoutParams(LayoutParams.MATCH_PARENT, bv.getDimens().height); addView(bv, flp); getDimens().height += bv.getDimens().height; break; } case LayoutConstant.linearlayout_filter_select:{ SelectItemsBlockView child = SelectItemsBlockView.createFilterSelectBlockView(getContext(), block.filters.all.get(0), 12); addView(child); getDimens().height += child.getDimens().height; addOnePadding(); break; } case LayoutConstant.list_small_icon: case LayoutConstant.grid_small_icon: { TableSmallIconBlockView child = new TableSmallIconBlockView(getContext(), block); addView(child); getDimens().height += child.getDimens().height; addOnePadding(); break; } case LayoutConstant.linearlayout_episode_select:{ SelectItemsBlockView child = SelectItemsBlockView.createEpisodeSelectBlockView(getContext(), block.media.items, block.media.display_layout==null?12:block.media.display_layout.max_display); addView(child); getDimens().height += child.getDimens().height; addOnePadding(); break; } case LayoutConstant.linearlayout_search:{ SelectItemsBlockView child = SelectItemsBlockView.createSearchBlockView(getContext(), (ArrayList<com.tv.ui.metro.model.DisplayItem>) block.items, 12); addView(child); getDimens().height += child.getDimens().height; addOnePadding(); break; } } } private static int media_item_padding = -1; @Override public Dimens getDimens() { if(mDimens == null){ mDimens = new Dimens(); mDimens.width = getResources().getDimensionPixelSize(R.dimen.media_banner_width); mDimens.height = 0; media_item_padding = getResources().getDimensionPixelSize(R.dimen.media_item_padding); } return mDimens; } private void initUI(Block<T> rootblock) { content = rootblock; int size = content.blocks.size(); for (int i=0;i<size;i++){ addChildView(content.blocks.get(i)); } //more than one padding getDimens().height += media_item_padding; } private void addOnePadding(){ View view = new View(getContext()); view.setBackgroundColor(Color.TRANSPARENT); LayoutParams flp = new LayoutParams(LayoutParams.MATCH_PARENT, media_item_padding); addView(view, flp); //add padding getDimens().height += media_item_padding; } @Override public void invalidateUI() { for(int i=0;i<getChildCount();i++){ View view = getChildAt(i); if(view instanceof DimensHelper){ ((DimensHelper) view).invalidateUI(); } } } @Override public void unbindDrawables(View view) { } }