package tv.emby.embyatv.ui; import android.content.Context; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.TextView; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import mediabrowser.apiinteraction.Response; import mediabrowser.model.dto.BaseItemDto; import mediabrowser.model.querying.ItemFields; import mediabrowser.model.querying.ItemsResult; import tv.emby.embyatv.R; import tv.emby.embyatv.TvApp; import tv.emby.embyatv.querying.StdItemQuery; /** * Created by Eric on 11/21/2015. */ public class ItemListView extends FrameLayout { Context mContext; LinearLayout mList; List<String> mItemIds = new ArrayList<>(); ItemRowView.RowSelectedListener mRowSelectedListener; ItemRowView.RowClickedListener mRowClickedListener; public ItemListView(Context context) { super(context); inflateView(context); } public ItemListView(Context context, AttributeSet attributeSet) { super(context, attributeSet); inflateView(context); } private void inflateView(Context context) { LayoutInflater inflater = LayoutInflater.from(context); inflater.inflate(R.layout.item_list, this); mContext = context; mList = (LinearLayout) findViewById(R.id.songList); } public void setRowSelectedListener(ItemRowView.RowSelectedListener listener) { mRowSelectedListener = listener; } public void setRowClickedListener(ItemRowView.RowClickedListener listener) { mRowClickedListener = listener; } public void clear() { mList.removeAllViews(); mItemIds.clear(); } public void addItems(List<BaseItemDto> items) { int i = 0; for (BaseItemDto item : items) { addItem(item, i++); } //Throw in another item just to provide some padding at the end of the scroll mList.addView(new TextView(mContext)); } public void addItem(BaseItemDto item, int ndx) { mList.addView(new ItemRowView(mContext, item, ndx, mRowSelectedListener, mRowClickedListener)); mItemIds.add(item.getId()); } public ItemRowView updatePlaying(String id) { //look through our song rows and update the playing indicator ItemRowView ret = null; for (int i = 0; i < mList.getChildCount(); i++) { View view = mList.getChildAt(i); if (view instanceof ItemRowView) { ItemRowView row = (ItemRowView)view; if (row.setPlaying(id)) ret = row; } } return ret; } public void refresh() { //update watched state for all items //get them in batch for better performance StdItemQuery query = new StdItemQuery(new ItemFields[] {ItemFields.MediaSources}); query.setUserId(TvApp.getApplication().getCurrentUser().getId()); String[] ids = new String[mItemIds.size()]; query.setIds(mItemIds.toArray(ids)); TvApp.getApplication().getApiClient().GetItemsAsync(query, new Response<ItemsResult>() { @Override public void onResponse(ItemsResult response) { if (response.getItems() != null) { int i = 0; for (BaseItemDto item : response.getItems()) { View view = mList.getChildAt(i+1); // we have title view as first one if (view instanceof ItemRowView) { ItemRowView row = (ItemRowView) view; row.setItem(item, i++); } } } } }); } }