diff --git a/app/src/main/java/org/jellyfin/androidtv/constant/LiveTvOption.kt b/app/src/main/java/org/jellyfin/androidtv/constant/LiveTvOption.kt index a28638e0c8..a3a3af9711 100644 --- a/app/src/main/java/org/jellyfin/androidtv/constant/LiveTvOption.kt +++ b/app/src/main/java/org/jellyfin/androidtv/constant/LiveTvOption.kt @@ -3,7 +3,6 @@ package org.jellyfin.androidtv.constant object LiveTvOption { const val LIVE_TV_GUIDE_OPTION_ID = 1000 const val LIVE_TV_RECORDINGS_OPTION_ID = 2000 - const val VIDEO_QUEUE_OPTION_ID = 3000 const val LIVE_TV_SCHEDULE_OPTION_ID = 4000 const val LIVE_TV_SERIES_OPTION_ID = 5000 } diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/itemdetail/ItemListActivity.java b/app/src/main/java/org/jellyfin/androidtv/ui/itemdetail/ItemListActivity.java index e28a3fa771..60c9a53800 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/itemdetail/ItemListActivity.java +++ b/app/src/main/java/org/jellyfin/androidtv/ui/itemdetail/ItemListActivity.java @@ -3,7 +3,6 @@ import static org.koin.java.KoinJavaComponent.inject; import android.app.Activity; -import android.app.AlertDialog; import android.content.Intent; import android.os.Bundle; import android.os.Handler; @@ -73,7 +72,6 @@ public class ItemListActivity extends FragmentActivity { private int BUTTON_SIZE; // Use fake UUID's to avoid crashing when converting to SDK public static final String FAV_SONGS = "11111111-0000-0000-0000-000000000001"; - public static final String VIDEO_QUEUE = "11111111-0000-0000-0000-000000000002"; private TextView mTitle; private TextView mGenreRow; @@ -206,24 +204,7 @@ protected void onResume() { mAudioEventListener.onPlaybackStateChange(mediaManager.getValue().isPlayingAudio() ? PlaybackController.PlaybackState.PLAYING : PlaybackController.PlaybackState.IDLE, mediaManager.getValue().getCurrentAudioItem()); if (!firstTime && dataRefreshService.getValue().getLastPlayback() > lastUpdated.getTimeInMillis()) { - if (mItemId.equals(VIDEO_QUEUE)) { - //update this in case it changed - delay to allow for the changes - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - mItems = mediaManager.getValue().getCurrentVideoQueue(); - if (mItems != null && mItems.size() > 0) { - mItemList.clear(); - mCurrentRow = null; - mItemList.addItems(mItems); - lastUpdated = Calendar.getInstance(); - } else { - //nothing left in queue - finish(); - } - } - }, 750); - } else if (MediaType.Video.equals(mBaseItem.getMediaType())) { + if (MediaType.Video.equals(mBaseItem.getMediaType())) { new Handler().postDelayed(new Runnable() { @Override public void run() { @@ -342,27 +323,6 @@ private void loadItem(String id) { item.setIsFolder(true); setBaseItem(item); break; - case VIDEO_QUEUE: - BaseItemDto queue = new BaseItemDto(); - queue.setId(VIDEO_QUEUE); - queue.setName(getString(R.string.lbl_current_queue)); - queue.setOverview(getString(R.string.desc_current_video_queue)); - queue.setPlayAccess(PlayAccess.Full); - queue.setMediaType(MediaType.Video); - queue.setBaseItemType(BaseItemType.Playlist); - queue.setIsFolder(true); - if (mediaManager.getValue().getCurrentVideoQueue() != null) { - long runtime = 0; - int children = 0; - for (BaseItemDto video : mediaManager.getValue().getCurrentVideoQueue()) { - runtime += video.getRunTimeTicks() != null ? video.getRunTimeTicks() : 0; - children += 1; - } - queue.setCumulativeRunTimeTicks(runtime); - queue.setChildCount(children); - } - setBaseItem(queue); - break; default: apiClient.getValue().GetItemAsync(id, KoinJavaComponent.get(UserRepository.class).getCurrentUser().getValue().getId().toString(), new Response() { @Override @@ -405,13 +365,6 @@ public void setBaseItem(BaseItemDto item) { favSongs.setLimit(150); apiClient.getValue().GetItemsAsync(favSongs, itemResponse); break; - case VIDEO_QUEUE: - //Show current queue - mTitle.setText(mBaseItem.getName()); - mItemList.addItems(mediaManager.getValue().getCurrentVideoQueue()); - mItems.addAll(mediaManager.getValue().getCurrentVideoQueue()); - updateBackdrop(); - break; default: PlaylistItemQuery playlistSongs = new PlaylistItemQuery(); playlistSongs.setId(mBaseItem.getId()); @@ -478,9 +431,6 @@ private void updatePoster(BaseItemDto item){ case FAV_SONGS: mPoster.setImageResource(R.drawable.favorites); break; - case VIDEO_QUEUE: - mPoster.setImageResource(R.drawable.ic_video_queue); - break; default: Double aspect = ImageUtils.getImageAspectRatio(item, false); String primaryImageUrl = ImageUtils.getPrimaryImageUrl(item); @@ -574,15 +524,8 @@ public void onClick(View v) { @Override public void onClick(View v) { if (mItems.size() > 0) { - if (mBaseItem.getId().equals(VIDEO_QUEUE) - || mBaseItem.getId().equals(FAV_SONGS) - || mBaseItem.getBaseItemType() == BaseItemType.Playlist - || mBaseItem.getBaseItemType() == BaseItemType.MusicAlbum) { - play(mItems, true); - } else { - //use server retrieval in order to get all items - PlaybackHelper.retrieveAndPlay(mBaseItem.getId(), true, mActivity); - } + //use server retrieval in order to get all items + PlaybackHelper.retrieveAndPlay(mBaseItem.getId(), true, mActivity); } else { Utils.showToast(mActivity, R.string.msg_no_playable_items); } @@ -609,64 +552,26 @@ public void onClick(final View v) { } if (!mItemId.equals(FAV_SONGS)) { - if (!mItemId.equals(VIDEO_QUEUE)) { - //Favorite - TextUnderButton fav = TextUnderButton.create(this, R.drawable.ic_heart, buttonSize,2, getString(R.string.lbl_favorite), new View.OnClickListener() { - @Override - public void onClick(final View v) { - UserItemDataDto data = mBaseItem.getUserData(); - apiClient.getValue().UpdateFavoriteStatusAsync(mBaseItem.getId(), KoinJavaComponent.get(UserRepository.class).getCurrentUser().getValue().getId().toString(), !data.getIsFavorite(), new Response() { - @Override - public void onResponse(UserItemDataDto response) { - mBaseItem.setUserData(response); - ((TextUnderButton)v).setActivated(response.getIsFavorite()); - dataRefreshService.getValue().setLastFavoriteUpdate(System.currentTimeMillis()); - } - }); - } - }); - fav.setActivated(mBaseItem.getUserData().getIsFavorite()); - mButtonRow.addView(fav); - fav.setOnFocusChangeListener((v, hasFocus) -> { - if (hasFocus) mScrollView.smoothScrollTo(0, 0); - }); - } - - if (mBaseItem.getBaseItemType() == BaseItemType.Playlist) { - if (VIDEO_QUEUE.equals(mBaseItem.getId())) { - mButtonRow.addView(TextUnderButton.create(this, R.drawable.ic_save, buttonSize, 2, getString(R.string.lbl_save_as_playlist), new View.OnClickListener() { - @Override - public void onClick(View v) { - mediaManager.getValue().saveVideoQueue(mActivity); - } - })); - } - - if (mBaseItem.getId().equals(VIDEO_QUEUE)) { - TextUnderButton delete = TextUnderButton.create(this, R.drawable.ic_trash, buttonSize, 0, getString(R.string.lbl_delete), new View.OnClickListener() { + //Favorite + TextUnderButton fav = TextUnderButton.create(this, R.drawable.ic_heart, buttonSize,2, getString(R.string.lbl_favorite), new View.OnClickListener() { + @Override + public void onClick(final View v) { + UserItemDataDto data = mBaseItem.getUserData(); + apiClient.getValue().UpdateFavoriteStatusAsync(mBaseItem.getId(), KoinJavaComponent.get(UserRepository.class).getCurrentUser().getValue().getId().toString(), !data.getIsFavorite(), new Response() { @Override - public void onClick(final View v) { - new AlertDialog.Builder(mActivity) - .setTitle(R.string.lbl_clear_queue) - .setMessage(R.string.clear_expanded) - .setPositiveButton(R.string.lbl_clear, (dialog, whichButton) -> { - mediaManager.getValue().setCurrentVideoQueue(new ArrayList()); - dataRefreshService.getValue().setLastVideoQueueChange(System.currentTimeMillis()); - finish(); - }) - .setNegativeButton(R.string.btn_cancel, (dialog, which) -> { - }) - .show() - .getButton(AlertDialog.BUTTON_NEGATIVE).requestFocus(); + public void onResponse(UserItemDataDto response) { + mBaseItem.setUserData(response); + ((TextUnderButton)v).setActivated(response.getIsFavorite()); + dataRefreshService.getValue().setLastFavoriteUpdate(System.currentTimeMillis()); } }); - - mButtonRow.addView(delete); - delete.setOnFocusChangeListener((v, hasFocus) -> { - if (hasFocus) mScrollView.smoothScrollTo(0, 0); - }); } - } + }); + fav.setActivated(mBaseItem.getUserData().getIsFavorite()); + mButtonRow.addView(fav); + fav.setOnFocusChangeListener((v, hasFocus) -> { + if (hasFocus) mScrollView.smoothScrollTo(0, 0); + }); } if (mBaseItem.getAlbumArtists() != null && mBaseItem.getAlbumArtists().size() > 0) { diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/itemhandling/ItemLauncher.java b/app/src/main/java/org/jellyfin/androidtv/ui/itemhandling/ItemLauncher.java index 8e91e8228e..3a514e5f82 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/itemhandling/ItemLauncher.java +++ b/app/src/main/java/org/jellyfin/androidtv/ui/itemhandling/ItemLauncher.java @@ -437,23 +437,6 @@ public void onResponse(BaseItemDto response) { activity.startActivity(recordings); break; - case LiveTvOption.VIDEO_QUEUE_OPTION_ID: - Intent queueIntent = new Intent(activity, ItemListActivity.class); - queueIntent.putExtra("ItemId", ItemListActivity.VIDEO_QUEUE); - //Resume first item if needed - List items = KoinJavaComponent.get(MediaManager.class).getCurrentVideoQueue(); - if (items != null) { - BaseItemDto first = items.size() > 0 ? items.get(0) : null; - if (first != null && first.getUserData() != null) { - Long resume = first.getUserData().getPlaybackPositionTicks() / 10000; - queueIntent.putExtra("Position", resume.intValue()); - - } - } - - activity.startActivity(queueIntent); - break; - case LiveTvOption.LIVE_TV_SERIES_OPTION_ID: Intent seriesIntent = new Intent(activity, UserViewActivity.class); BaseItemDto seriesTimers = new BaseItemDto(); diff --git a/app/src/main/java/org/jellyfin/androidtv/util/KeyProcessor.java b/app/src/main/java/org/jellyfin/androidtv/util/KeyProcessor.java index e689b82ff8..e0cf845eea 100644 --- a/app/src/main/java/org/jellyfin/androidtv/util/KeyProcessor.java +++ b/app/src/main/java/org/jellyfin/androidtv/util/KeyProcessor.java @@ -10,7 +10,6 @@ import org.jellyfin.androidtv.R; import org.jellyfin.androidtv.auth.repository.UserRepository; import org.jellyfin.androidtv.constant.CustomMessage; -import org.jellyfin.androidtv.constant.LiveTvOption; import org.jellyfin.androidtv.data.querying.StdItemQuery; import org.jellyfin.androidtv.data.repository.ItemMutationRepository; import org.jellyfin.androidtv.ui.itemdetail.ItemListActivity; @@ -19,7 +18,6 @@ import org.jellyfin.androidtv.ui.itemhandling.BaseRowItem; import org.jellyfin.androidtv.ui.playback.AudioNowPlayingActivity; import org.jellyfin.androidtv.ui.playback.MediaManager; -import org.jellyfin.androidtv.ui.playback.PlaybackLauncher; import org.jellyfin.androidtv.ui.shared.BaseActivity; import org.jellyfin.androidtv.util.apiclient.PlaybackHelper; import org.jellyfin.androidtv.util.sdk.BaseItemExtensionsKt; @@ -145,13 +143,6 @@ public static boolean HandleKey(int key, BaseRowItem rowItem, Activity activity) PlaybackHelper.retrieveAndPlay(rowItem.getProgramInfo().getChannelId(), false, activity); return true; case GridButton: - if (rowItem.getGridButton().getId() == LiveTvOption.VIDEO_QUEUE_OPTION_ID) { - //Queue already there - just kick off playback - BaseItemType itemType = KoinJavaComponent.get(MediaManager.class).getCurrentVideoQueue().size() > 0 ? KoinJavaComponent.get(MediaManager.class).getCurrentVideoQueue().get(0).getBaseItemType() : null; - Class newActivity = KoinJavaComponent.get(PlaybackLauncher.class).getPlaybackActivityClass(itemType); - Intent intent = new Intent(activity, newActivity); - activity.startActivity(intent); - } break; } diff --git a/app/src/main/res/drawable/ic_video_queue.xml b/app/src/main/res/drawable/ic_video_queue.xml deleted file mode 100644 index 24d17c426f..0000000000 --- a/app/src/main/res/drawable/ic_video_queue.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/tile_port_video_queue.xml b/app/src/main/res/drawable/tile_port_video_queue.xml deleted file mode 100644 index c661d73bb4..0000000000 --- a/app/src/main/res/drawable/tile_port_video_queue.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - diff --git a/app/src/main/res/values/attrs_tiles.xml b/app/src/main/res/values/attrs_tiles.xml index cb34c8a79c..98259d6cde 100644 --- a/app/src/main/res/values/attrs_tiles.xml +++ b/app/src/main/res/values/attrs_tiles.xml @@ -5,7 +5,6 @@ - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c173d3dae9..e800018342 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -193,8 +193,6 @@ Select subtitle track This feature will only work if you have properly set up your library on the server with network paths or path substitution and the client you are using can directly access these locations over the network. Got it - Current Queue - Video items currently queued for playback Clear Queue Play Next Up Open diff --git a/app/src/main/res/values/theme_emerald.xml b/app/src/main/res/values/theme_emerald.xml index 7afca76dfb..26d4f2beb2 100644 --- a/app/src/main/res/values/theme_emerald.xml +++ b/app/src/main/res/values/theme_emerald.xml @@ -40,7 +40,6 @@ @color/theme_emerald_light @color/theme_emerald_light @color/theme_emerald_light - @color/theme_emerald_light @color/theme_emerald_light @color/theme_emerald_light @color/theme_emerald_light diff --git a/app/src/main/res/values/theme_jellyfin.xml b/app/src/main/res/values/theme_jellyfin.xml index a5970a0086..9e9a63598b 100644 --- a/app/src/main/res/values/theme_jellyfin.xml +++ b/app/src/main/res/values/theme_jellyfin.xml @@ -72,7 +72,6 @@ @color/indigo_dye @color/indigo_dye @color/indigo_dye - @color/indigo_dye @color/indigo_dye @color/indigo_dye