package tv.emby.embyatv.ui; import android.content.Context; import android.graphics.Rect; import android.graphics.drawable.AnimationDrawable; import android.graphics.drawable.Drawable; import android.text.Html; import android.text.TextUtils; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.SoundEffectConstants; import android.view.View; import android.widget.FrameLayout; import android.widget.RelativeLayout; import android.widget.TextView; import mediabrowser.apiinteraction.Response; import mediabrowser.model.dto.BaseItemDto; import tv.emby.embyatv.R; import tv.emby.embyatv.TvApp; import tv.emby.embyatv.util.Utils; /** * Created by Eric on 11/21/2015. */ public class ItemRowView extends FrameLayout { Context mContext; RelativeLayout mWholeRow; TextView mIndexNo; TextView mItemName; TextView mExtraName; TextView mRunTime; TextView mDivider; TextView mWatchedMark; Drawable normalBackground; int ourIndex; String formattedTime; BaseItemDto mBaseItem; RowSelectedListener rowSelectedListener; RowClickedListener rowClickedListener; ItemRowView us; public ItemRowView(Context context) { super(context); inflateView(context); } public ItemRowView(Context context, AttributeSet attributeSet) { super(context, attributeSet); inflateView(context); } public ItemRowView(Context context, BaseItemDto song, int ndx, RowSelectedListener rowSelectedListener, final RowClickedListener rowClickedListener) { super(context); inflateView(context); this.rowSelectedListener = rowSelectedListener; this.rowClickedListener = rowClickedListener; setItem(song, ndx); us = this; setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { playSoundEffect(SoundEffectConstants.CLICK); if (rowClickedListener != null) rowClickedListener.onRowClicked(us); } }); } private void inflateView(Context context) { LayoutInflater inflater = LayoutInflater.from(context); inflater.inflate(R.layout.item_row, this); mContext = context; mWholeRow = (RelativeLayout) findViewById(R.id.wholeRow); mIndexNo = (TextView) findViewById(R.id.indexNo); mItemName = (TextView) findViewById(R.id.songName); mExtraName = (TextView) findViewById(R.id.artistName); mRunTime = (TextView) findViewById(R.id.runTime); mDivider = (TextView) findViewById(R.id.divider); mWatchedMark = (TextView) findViewById(R.id.watchedMark); normalBackground = mWholeRow.getBackground(); setFocusable(true); } @Override protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) { super.onFocusChanged(gainFocus, direction, previouslyFocusedRect); if (gainFocus) { mWholeRow.setBackgroundResource(R.color.lb_default_brand_color); playSoundEffect(SoundEffectConstants.getContantForFocusDirection(direction)); if (rowSelectedListener != null) rowSelectedListener.onRowSelected(this); } else { mWholeRow.setBackground(normalBackground); } } public void setItem(BaseItemDto item, int ndx) { mBaseItem = item; ourIndex = ndx + 1; mIndexNo.setText(Integer.toString(ourIndex)); switch (item.getType()) { case "Audio": mItemName.setText(item.getName()); String artist = item.getArtists() != null && item.getArtists().size() > 0 ? item.getArtists().get(0) : !TextUtils.isEmpty(item.getAlbumArtist()) ? item.getAlbumArtist() : null; if (!TextUtils.isEmpty(artist)) { mExtraName.setText(artist); } else { mExtraName.setVisibility(GONE); mDivider.setVisibility(GONE); } break; default: String series = item.getSeriesName() != null ? item.getSeriesName() + " S" + item.getParentIndexNumber() + " E" + item.getIndexNumber() : null; if (!TextUtils.isEmpty(series)) { mItemName.setText(series); mExtraName.setText(item.getName()); } else { mItemName.setText(item.getName()); mExtraName.setVisibility(GONE); mDivider.setVisibility(GONE); } updateWatched(); break; } formattedTime = Utils.formatMillis(item.getRunTimeTicks() != null ? item.getRunTimeTicks()/10000 : 0); mRunTime.setText(formattedTime); } public void updateWatched() { if (mBaseItem == null) return; if ("Video".equals(mBaseItem.getMediaType()) && mBaseItem.getUserData() != null && mBaseItem.getUserData().getPlayed()) { mWatchedMark.setText(Html.fromHtml("✓")); } else { mWatchedMark.setText(""); } } public void updateCurrentTime(long pos) { if (pos < 0) { mRunTime.setText(formattedTime); } else { mRunTime.setText(Utils.formatMillis(pos) + " / "+ formattedTime); } } public BaseItemDto getItem() { return mBaseItem; } public int getIndex() {return ourIndex-1;} public boolean setPlaying(boolean playing) { if (playing) { mIndexNo.setBackgroundResource(R.drawable.eq_animation); mIndexNo.setText(""); ((AnimationDrawable)mIndexNo.getBackground()).start(); } else { mIndexNo.setBackgroundResource(R.drawable.blank10x10); mIndexNo.setText(Integer.toString(ourIndex)); } return playing; } public boolean setPlaying(String id) { return setPlaying(getItem().getId().equals(id)); } public void setRowSelectedListener(RowSelectedListener listener) { rowSelectedListener = listener; } public static class RowSelectedListener { public void onRowSelected(ItemRowView row) {}; } public static class RowClickedListener { public void onRowClicked(ItemRowView row) {}; } }