Added context menu to TV episode list items
The context menu adds play and queue functionality for tv show episode items in the tv show episode list.
This commit is contained in:
parent
c39c9df714
commit
73dd123fb3
|
@ -318,7 +318,7 @@ public class AlbumListFragment extends AbstractListFragment {
|
|||
MediaPlayerUtils.play(AlbumListFragment.this, playListItem);
|
||||
return true;
|
||||
case R.id.action_queue:
|
||||
MediaPlayerUtils.queueAudio(AlbumListFragment.this, playListItem);
|
||||
MediaPlayerUtils.queue(AlbumListFragment.this, playListItem, PlaylistType.GetPlaylistsReturnType.AUDIO);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
|
@ -40,6 +40,7 @@ import android.widget.TextView;
|
|||
import org.xbmc.kore.R;
|
||||
import org.xbmc.kore.host.HostInfo;
|
||||
import org.xbmc.kore.host.HostManager;
|
||||
import org.xbmc.kore.jsonrpc.method.Playlist;
|
||||
import org.xbmc.kore.jsonrpc.type.PlaylistType;
|
||||
import org.xbmc.kore.provider.MediaContract;
|
||||
import org.xbmc.kore.provider.MediaDatabase;
|
||||
|
@ -238,7 +239,7 @@ public class ArtistListFragment extends AbstractListFragment {
|
|||
MediaPlayerUtils.play(ArtistListFragment.this, playListItem);
|
||||
return true;
|
||||
case R.id.action_queue:
|
||||
MediaPlayerUtils.queueAudio(ArtistListFragment.this, playListItem);
|
||||
MediaPlayerUtils.queue(ArtistListFragment.this, playListItem, PlaylistType.GetPlaylistsReturnType.AUDIO);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
|
@ -233,7 +233,7 @@ public class AudioGenresListFragment extends AbstractListFragment {
|
|||
MediaPlayerUtils.play(AudioGenresListFragment.this, playListItem);
|
||||
return true;
|
||||
case R.id.action_queue:
|
||||
MediaPlayerUtils.queueAudio(AudioGenresListFragment.this, playListItem);
|
||||
MediaPlayerUtils.queue(AudioGenresListFragment.this, playListItem, PlaylistType.GetPlaylistsReturnType.AUDIO);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
|
@ -38,6 +38,7 @@ import android.view.ViewGroup;
|
|||
import android.widget.CursorTreeAdapter;
|
||||
import android.widget.ExpandableListView;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.PopupMenu;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
|
@ -45,9 +46,11 @@ import org.xbmc.kore.R;
|
|||
import org.xbmc.kore.Settings;
|
||||
import org.xbmc.kore.host.HostManager;
|
||||
import org.xbmc.kore.jsonrpc.event.MediaSyncEvent;
|
||||
import org.xbmc.kore.jsonrpc.type.PlaylistType;
|
||||
import org.xbmc.kore.provider.MediaContract;
|
||||
import org.xbmc.kore.service.LibrarySyncService;
|
||||
import org.xbmc.kore.utils.LogUtils;
|
||||
import org.xbmc.kore.utils.MediaPlayerUtils;
|
||||
import org.xbmc.kore.utils.UIUtils;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
@ -445,7 +448,6 @@ public class TVShowEpisodeListFragment extends AbstractDetailsFragment
|
|||
private class SeasonsEpisodesAdapter extends CursorTreeAdapter {
|
||||
|
||||
private int themeAccentColor;
|
||||
private int separatorPadding;
|
||||
private int iconCollapseResId,
|
||||
iconExpandResId;
|
||||
|
||||
|
@ -476,7 +478,6 @@ public class TVShowEpisodeListFragment extends AbstractDetailsFragment
|
|||
UIUtils.IMAGE_RESIZE_FACTOR);
|
||||
artHeight = (int)(resources.getDimension(R.dimen.seasonlist_art_heigth) /
|
||||
UIUtils.IMAGE_RESIZE_FACTOR);
|
||||
separatorPadding = resources.getDimensionPixelSize(R.dimen.small_padding);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -497,7 +498,7 @@ public class TVShowEpisodeListFragment extends AbstractDetailsFragment
|
|||
viewHolder.titleView = (TextView)view.findViewById(R.id.title);
|
||||
viewHolder.detailsView = (TextView)view.findViewById(R.id.details);
|
||||
viewHolder.episodenumberView = (TextView)view.findViewById(R.id.episode_number);
|
||||
// viewHolder.artView = (ImageView)view.findViewById(R.id.art);
|
||||
viewHolder.contextMenuView = (ImageView)view.findViewById(R.id.list_context_menu);
|
||||
viewHolder.checkmarkView = (ImageView)view.findViewById(R.id.checkmark);
|
||||
|
||||
view.setTag(viewHolder);
|
||||
|
@ -552,8 +553,13 @@ public class TVShowEpisodeListFragment extends AbstractDetailsFragment
|
|||
viewHolder.checkmarkView.setVisibility(View.VISIBLE);
|
||||
viewHolder.checkmarkView.setColorFilter(themeAccentColor);
|
||||
} else {
|
||||
viewHolder.checkmarkView.setVisibility(View.GONE);
|
||||
viewHolder.checkmarkView.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
|
||||
// For the popupmenu
|
||||
ImageView contextMenu = (ImageView)view.findViewById(R.id.list_context_menu);
|
||||
contextMenu.setTag(viewHolder);
|
||||
contextMenu.setOnClickListener(contextlistItemMenuClickListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -588,10 +594,39 @@ public class TVShowEpisodeListFragment extends AbstractDetailsFragment
|
|||
TextView titleView;
|
||||
TextView detailsView;
|
||||
TextView episodenumberView;
|
||||
// ImageView artView;
|
||||
ImageView contextMenuView;
|
||||
ImageView checkmarkView;
|
||||
// ImageView artView;
|
||||
|
||||
int episodeId;
|
||||
}
|
||||
|
||||
private View.OnClickListener contextlistItemMenuClickListener = new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(final View v) {
|
||||
final EpisodeViewHolder viewHolder = (EpisodeViewHolder)v.getTag();
|
||||
|
||||
final PlaylistType.Item playListItem = new PlaylistType.Item();
|
||||
playListItem.episodeid = viewHolder.episodeId;
|
||||
|
||||
final PopupMenu popupMenu = new PopupMenu(getActivity(), v);
|
||||
popupMenu.getMenuInflater().inflate(R.menu.musiclist_item, popupMenu.getMenu());
|
||||
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.action_play:
|
||||
MediaPlayerUtils.play(TVShowEpisodeListFragment.this, playListItem);
|
||||
return true;
|
||||
case R.id.action_queue:
|
||||
MediaPlayerUtils.queue(TVShowEpisodeListFragment.this, playListItem, PlaylistType.GetPlaylistsReturnType.VIDEO);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
popupMenu.show();
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -79,11 +79,12 @@ public class MediaPlayerUtils {
|
|||
}
|
||||
|
||||
/**
|
||||
* Clears current playlist and starts playing item
|
||||
* Queues item to current playlist
|
||||
* @param fragment Fragment instance from which this method is called
|
||||
* @param item PlaylistType.Item that needs to be added to the current audio playlist
|
||||
* @param item PlaylistType.Item that needs to be added to the current playlist
|
||||
* @param type {@link org.xbmc.kore.jsonrpc.type.PlaylistType.GetPlaylistsReturnType}
|
||||
*/
|
||||
public static void queueAudio(final Fragment fragment, final PlaylistType.Item item) {
|
||||
public static void queue(final Fragment fragment, final PlaylistType.Item item, final String type) {
|
||||
Playlist.GetPlaylists getPlaylists = new Playlist.GetPlaylists();
|
||||
|
||||
final Handler callbackHandler = new Handler();
|
||||
|
@ -96,17 +97,17 @@ public class MediaPlayerUtils {
|
|||
@Override
|
||||
public void onSuccess(ArrayList<PlaylistType.GetPlaylistsReturnType> result) {
|
||||
if (!fragment.isAdded()) return;
|
||||
// Ok, loop through the playlists, looking for the audio one
|
||||
int audioPlaylistId = -1;
|
||||
// Ok, loop through the playlists, looking for the correct one
|
||||
int playlistId = -1;
|
||||
for (PlaylistType.GetPlaylistsReturnType playlist : result) {
|
||||
if (playlist.type.equals(PlaylistType.GetPlaylistsReturnType.AUDIO)) {
|
||||
audioPlaylistId = playlist.playlistid;
|
||||
if (playlist.type.equals(type)) {
|
||||
playlistId = playlist.playlistid;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// If found, add to playlist
|
||||
if (audioPlaylistId != -1) {
|
||||
Playlist.Add action = new Playlist.Add(audioPlaylistId, item);
|
||||
if (playlistId != -1) {
|
||||
Playlist.Add action = new Playlist.Add(playlistId, item);
|
||||
action.execute(hostManager.getConnection(), new ApiCallback<String>() {
|
||||
@Override
|
||||
public void onSuccess(String result) {
|
||||
|
|
|
@ -21,41 +21,48 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="@dimen/small_padding">
|
||||
|
||||
<!--<ImageView-->
|
||||
<!--android:id="@+id/art"-->
|
||||
<!--android:layout_width="@dimen/episodelist_art_width"-->
|
||||
<!--android:layout_height="@dimen/episodelist_art_heigth"-->
|
||||
<!--android:layout_alignParentStart="true"-->
|
||||
<!--android:contentDescription="@string/poster"-->
|
||||
<!--android:scaleType="centerCrop"/>-->
|
||||
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/checkmark"
|
||||
android:id="@+id/list_context_menu"
|
||||
android:layout_width="@dimen/default_icon_size"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_height="@dimen/default_icon_size"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_marginTop="@dimen/small_padding"
|
||||
android:contentDescription="@string/seen"
|
||||
android:src="?attr/iconSeen"/>
|
||||
android:padding="@dimen/default_icon_padding"
|
||||
style="@style/Widget.Button.Borderless"
|
||||
android:src="?attr/iconOverflow"
|
||||
android:contentDescription="@string/action_options"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/episode_number"
|
||||
<RelativeLayout
|
||||
android:id="@+id/relativelayout_checkmark_epnumber"
|
||||
android:layout_width="@dimen/seasonlist_art_width"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:gravity="right"
|
||||
style="@style/TextAppearance.Medialist.Title"
|
||||
android:paddingTop="@dimen/small_padding"/>
|
||||
android:layout_alignParentLeft="true">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/checkmark"
|
||||
android:layout_width="@dimen/default_icon_size"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_marginTop="@dimen/small_padding"
|
||||
android:contentDescription="@string/seen"
|
||||
android:src="?attr/iconSeen"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/episode_number"
|
||||
android:layout_width="@dimen/seasonlist_art_width"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/TextAppearance.Medialist.Title"
|
||||
android:gravity="right"/>
|
||||
</RelativeLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignTop="@id/episode_number"
|
||||
android:layout_toRightOf="@id/episode_number"
|
||||
android:layout_toLeftOf="@id/checkmark"
|
||||
android:layout_alignTop="@id/relativelayout_checkmark_epnumber"
|
||||
android:layout_toRightOf="@id/relativelayout_checkmark_epnumber"
|
||||
android:layout_toLeftOf="@id/list_context_menu"
|
||||
style="@style/TextAppearance.Medialist.Title"
|
||||
android:paddingTop="@dimen/small_padding"/>
|
||||
|
||||
|
|
Loading…
Reference in New Issue