Skip to content

Commit acdfee5

Browse files
committed
Show popup menu when long pressing in play queue (Full screen player)
1 parent a6d6ed6 commit acdfee5

4 files changed

Lines changed: 86 additions & 37 deletions

File tree

app/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,10 @@ dependencies {
214214
implementation 'androidx.recyclerview:recyclerview:1.1.0'
215215
implementation "androidx.room:room-runtime:${androidxRoomVersion}"
216216
implementation "androidx.room:room-rxjava3:${androidxRoomVersion}"
217+
218+
// Apple Sillicon Mac workaround (https://issuetracker.google.com/issues/174695268#comment9)
219+
kapt "org.xerial:sqlite-jdbc:3.34.0"
220+
217221
kapt "androidx.room:room-compiler:${androidxRoomVersion}"
218222
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
219223
implementation 'androidx.webkit:webkit:1.4.0'

app/src/main/java/org/schabi/newpipe/player/PlayQueueActivity.java

Lines changed: 21 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -281,42 +281,29 @@ private void buildControls() {
281281

282282
private void buildItemPopupMenu(final PlayQueueItem item, final View view) {
283283
final PopupMenu popupMenu = new PopupMenu(this, view);
284-
final MenuItem remove = popupMenu.getMenu().add(RECYCLER_ITEM_POPUP_MENU_GROUP_ID, 0,
285-
Menu.NONE, R.string.play_queue_remove);
286-
remove.setOnMenuItemClickListener(menuItem -> {
287-
if (player == null) {
288-
return false;
289-
}
284+
popupMenu.inflate(R.menu.menu_play_queue_item);
290285

291-
final int index = player.getPlayQueue().indexOf(item);
292-
if (index != -1) {
293-
player.getPlayQueue().remove(index);
286+
popupMenu.setOnMenuItemClickListener(menuItem -> {
287+
switch (menuItem.getItemId()) {
288+
case R.id.menu_item_remove:
289+
final int index = player.getPlayQueue().indexOf(item);
290+
player.getPlayQueue().remove(index);
291+
return true;
292+
case R.id.menu_item_details:
293+
// playQueue is null since we don't want any queue change
294+
NavigationHelper.openVideoDetail(this, item.getServiceId(),
295+
item.getUrl(), item.getTitle(), null,
296+
false);
297+
return true;
298+
case R.id.menu_item_append_playlist:
299+
openPlaylistAppendDialog(Collections.singletonList(item));
300+
return true;
301+
case R.id.menu_item_share:
302+
shareText(this, item.getTitle(), item.getUrl(),
303+
item.getThumbnailUrl());
304+
return true;
294305
}
295-
return true;
296-
});
297-
298-
final MenuItem detail = popupMenu.getMenu().add(RECYCLER_ITEM_POPUP_MENU_GROUP_ID, 1,
299-
Menu.NONE, R.string.play_queue_stream_detail);
300-
detail.setOnMenuItemClickListener(menuItem -> {
301-
// playQueue is null since we don't want any queue change
302-
NavigationHelper.openVideoDetail(this, item.getServiceId(), item.getUrl(),
303-
item.getTitle(), null, false);
304-
return true;
305-
});
306-
307-
final MenuItem append = popupMenu.getMenu().add(RECYCLER_ITEM_POPUP_MENU_GROUP_ID, 2,
308-
Menu.NONE, R.string.append_playlist);
309-
append.setOnMenuItemClickListener(menuItem -> {
310-
openPlaylistAppendDialog(Collections.singletonList(item));
311-
return true;
312-
});
313-
314-
final MenuItem share = popupMenu.getMenu().add(RECYCLER_ITEM_POPUP_MENU_GROUP_ID, 3,
315-
Menu.NONE, R.string.share);
316-
share.setOnMenuItemClickListener(menuItem -> {
317-
shareText(getApplicationContext(), item.getTitle(), item.getUrl(),
318-
item.getThumbnailUrl());
319-
return true;
306+
return false;
320307
});
321308

322309
popupMenu.show();

app/src/main/java/org/schabi/newpipe/player/Player.java

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@
100100
import org.schabi.newpipe.fragments.detail.VideoDetailFragment;
101101
import org.schabi.newpipe.info_list.StreamSegmentAdapter;
102102
import org.schabi.newpipe.ktx.AnimationType;
103+
import org.schabi.newpipe.local.dialog.PlaylistAppendDialog;
104+
import org.schabi.newpipe.local.dialog.PlaylistCreationDialog;
103105
import org.schabi.newpipe.local.history.HistoryRecordManager;
104106
import org.schabi.newpipe.player.MainPlayer.PlayerType;
105107
import org.schabi.newpipe.player.event.PlayerEventListener;
@@ -138,6 +140,7 @@
138140

139141
import java.io.IOException;
140142
import java.util.ArrayList;
143+
import java.util.Collections;
141144
import java.util.List;
142145
import java.util.Objects;
143146

@@ -193,6 +196,7 @@
193196
import static org.schabi.newpipe.util.ListHelper.getResolutionIndex;
194197
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
195198
import static org.schabi.newpipe.util.Localization.containsCaseInsensitive;
199+
import static org.schabi.newpipe.util.external_communication.ShareUtils.shareText;
196200

197201
public final class Player implements
198202
EventListener,
@@ -3032,6 +3036,45 @@ public void selectQueueItem(final PlayQueueItem item) {
30323036
playQueue.setIndex(index);
30333037
}
30343038

3039+
private void heldQueueItem(final PlayQueueItem item, final View view) {
3040+
final Context themeWrapper =
3041+
new ContextThemeWrapper(context, R.style.DarkPopupMenu);
3042+
3043+
final PopupMenu popupMenu = new PopupMenu(themeWrapper, view);
3044+
popupMenu.inflate(R.menu.menu_play_queue_item);
3045+
3046+
popupMenu.setOnMenuItemClickListener(menuItem -> {
3047+
switch (menuItem.getItemId()) {
3048+
case R.id.menu_item_remove:
3049+
final int index = playQueue.indexOf(item);
3050+
playQueue.remove(index);
3051+
return true;
3052+
case R.id.menu_item_details:
3053+
// playQueue is null since we don't want any queue change
3054+
NavigationHelper.openVideoDetail(context, item.getServiceId(),
3055+
item.getUrl(), item.getTitle(), null,
3056+
false);
3057+
return true;
3058+
case R.id.menu_item_append_playlist:
3059+
final PlaylistAppendDialog d = PlaylistAppendDialog.fromPlayQueueItems(
3060+
Collections.singletonList(item)
3061+
);
3062+
PlaylistAppendDialog.onPlaylistFound(context,
3063+
() -> d.show(getParentActivity().getSupportFragmentManager(), TAG),
3064+
() -> PlaylistCreationDialog.newInstance(d)
3065+
.show(getParentActivity().getSupportFragmentManager(), TAG));
3066+
return true;
3067+
case R.id.menu_item_share:
3068+
shareText(context, item.getTitle(), item.getUrl(),
3069+
item.getThumbnailUrl());
3070+
return true;
3071+
}
3072+
return false;
3073+
});
3074+
3075+
popupMenu.show();
3076+
}
3077+
30353078
@Override
30363079
public void onPlayQueueEdited() {
30373080
notifyPlaybackUpdateToListeners();
@@ -3198,9 +3241,8 @@ public void selected(final PlayQueueItem item, final View view) {
31983241

31993242
@Override
32003243
public void held(final PlayQueueItem item, final View view) {
3201-
final int index = playQueue.indexOf(item);
3202-
if (index != -1) {
3203-
playQueue.remove(index);
3244+
if (playQueue.indexOf(item) != -1) {
3245+
heldQueueItem(item, view);
32043246
}
32053247
}
32063248

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<menu xmlns:android="http://schemas.android.com/apk/res/android">
3+
4+
<item
5+
android:id="@+id/menu_item_remove"
6+
android:title="@string/play_queue_remove" />
7+
<item
8+
android:id="@+id/menu_item_details"
9+
android:title="@string/play_queue_stream_detail" />
10+
<item
11+
android:id="@+id/menu_item_append_playlist"
12+
android:title="@string/append_playlist" />
13+
<item
14+
android:id="@+id/menu_item_share"
15+
android:title="@string/share" />
16+
</menu>

0 commit comments

Comments
 (0)