Merge pull request #193 from poisdeux/feature/187
Added context menu to TV episode list items
This commit is contained in:
commit
3be65d6724
|
@ -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