Skip to content

Commit a1cb3e5

Browse files
committed
Move opening popup menu to utility class
1 parent ef94458 commit a1cb3e5

3 files changed

Lines changed: 80 additions & 71 deletions

File tree

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package org.schabi.newpipe;
2+
3+
import static org.schabi.newpipe.util.external_communication.ShareUtils.shareText;
4+
5+
import android.content.Context;
6+
import android.view.ContextThemeWrapper;
7+
import android.view.View;
8+
import android.widget.PopupMenu;
9+
10+
import androidx.fragment.app.FragmentManager;
11+
12+
import org.schabi.newpipe.local.dialog.PlaylistAppendDialog;
13+
import org.schabi.newpipe.local.dialog.PlaylistCreationDialog;
14+
import org.schabi.newpipe.player.playqueue.PlayQueue;
15+
import org.schabi.newpipe.player.playqueue.PlayQueueItem;
16+
import org.schabi.newpipe.util.NavigationHelper;
17+
18+
import java.util.Collections;
19+
20+
public final class QueueItemMenuUtil {
21+
public static void openPopupMenu(final PlayQueue playQueue,
22+
final PlayQueueItem item,
23+
final View view,
24+
final boolean hideDetails,
25+
final FragmentManager fragmentManager,
26+
final Context context,
27+
final String tag) {
28+
final ContextThemeWrapper themeWrapper =
29+
new ContextThemeWrapper(context, R.style.DarkPopupMenu);
30+
31+
final PopupMenu popupMenu = new PopupMenu(themeWrapper, view);
32+
popupMenu.inflate(R.menu.menu_play_queue_item);
33+
34+
if (hideDetails) {
35+
popupMenu.getMenu().findItem(R.id.menu_item_details).setVisible(false);
36+
}
37+
38+
popupMenu.setOnMenuItemClickListener(menuItem -> {
39+
switch (menuItem.getItemId()) {
40+
case R.id.menu_item_remove:
41+
final int index = playQueue.indexOf(item);
42+
playQueue.remove(index);
43+
return true;
44+
case R.id.menu_item_details:
45+
// playQueue is null since we don't want any queue change
46+
NavigationHelper.openVideoDetail(context, item.getServiceId(),
47+
item.getUrl(), item.getTitle(), null,
48+
false);
49+
return true;
50+
case R.id.menu_item_append_playlist:
51+
final PlaylistAppendDialog d = PlaylistAppendDialog.fromPlayQueueItems(
52+
Collections.singletonList(item)
53+
);
54+
PlaylistAppendDialog.onPlaylistFound(context,
55+
() -> d.show(fragmentManager, tag),
56+
() -> PlaylistCreationDialog.newInstance(d)
57+
.show(fragmentManager, tag));
58+
return true;
59+
case R.id.menu_item_share:
60+
shareText(context, item.getTitle(), item.getUrl(),
61+
item.getThumbnailUrl());
62+
return true;
63+
}
64+
return false;
65+
});
66+
67+
popupMenu.show();
68+
}
69+
70+
private QueueItemMenuUtil() { }
71+
}

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

Lines changed: 6 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
package org.schabi.newpipe.player;
22

3-
import static org.schabi.newpipe.player.helper.PlayerHelper.formatSpeed;
4-
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
5-
import static org.schabi.newpipe.util.external_communication.ShareUtils.shareText;
6-
73
import android.content.ComponentName;
84
import android.content.Context;
95
import android.content.Intent;
@@ -16,7 +12,6 @@
1612
import android.view.MenuItem;
1713
import android.view.View;
1814
import android.view.ViewGroup;
19-
import android.widget.PopupMenu;
2015
import android.widget.SeekBar;
2116

2217
import androidx.annotation.Nullable;
@@ -47,16 +42,18 @@
4742
import org.schabi.newpipe.util.ServiceHelper;
4843
import org.schabi.newpipe.util.ThemeHelper;
4944

50-
import java.util.Collections;
5145
import java.util.List;
5246

47+
import static org.schabi.newpipe.QueueItemMenuUtil.openPopupMenu;
48+
import static org.schabi.newpipe.player.helper.PlayerHelper.formatSpeed;
49+
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
50+
5351
public final class PlayQueueActivity extends AppCompatActivity
5452
implements PlayerEventListener, SeekBar.OnSeekBarChangeListener,
5553
View.OnClickListener, PlaybackParameterDialog.Callback {
5654

5755
private static final String TAG = PlayQueueActivity.class.getSimpleName();
5856

59-
private static final int RECYCLER_ITEM_POPUP_MENU_GROUP_ID = 47;
6057
private static final int SMOOTH_SCROLL_MAXIMUM_DISTANCE = 80;
6158

6259
protected Player player;
@@ -280,33 +277,8 @@ private void buildControls() {
280277
}
281278

282279
private void buildItemPopupMenu(final PlayQueueItem item, final View view) {
283-
final PopupMenu popupMenu = new PopupMenu(this, view);
284-
popupMenu.inflate(R.menu.menu_play_queue_item);
285-
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;
305-
}
306-
return false;
307-
});
308-
309-
popupMenu.show();
280+
openPopupMenu(player.getPlayQueue(), item, view, false,
281+
getSupportFragmentManager(), this, TAG);
310282
}
311283

312284
////////////////////////////////////////////////////////////////////////////

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

Lines changed: 3 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,6 @@
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;
105103
import org.schabi.newpipe.local.history.HistoryRecordManager;
106104
import org.schabi.newpipe.player.MainPlayer.PlayerType;
107105
import org.schabi.newpipe.player.event.PlayerEventListener;
@@ -140,7 +138,6 @@
140138

141139
import java.io.IOException;
142140
import java.util.ArrayList;
143-
import java.util.Collections;
144141
import java.util.List;
145142
import java.util.Objects;
146143

@@ -162,6 +159,7 @@
162159
import static com.google.android.exoplayer2.Player.REPEAT_MODE_ONE;
163160
import static com.google.android.exoplayer2.Player.RepeatMode;
164161
import static java.util.concurrent.TimeUnit.MILLISECONDS;
162+
import static org.schabi.newpipe.QueueItemMenuUtil.openPopupMenu;
165163
import static org.schabi.newpipe.extractor.ServiceList.YouTube;
166164
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
167165
import static org.schabi.newpipe.ktx.ViewUtils.animate;
@@ -196,7 +194,6 @@
196194
import static org.schabi.newpipe.util.ListHelper.getResolutionIndex;
197195
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
198196
import static org.schabi.newpipe.util.Localization.containsCaseInsensitive;
199-
import static org.schabi.newpipe.util.external_communication.ShareUtils.shareText;
200197

201198
public final class Player implements
202199
EventListener,
@@ -3037,39 +3034,8 @@ public void selectQueueItem(final PlayQueueItem item) {
30373034
}
30383035

30393036
private void heldQueueItem(final PlayQueueItem item, final View view) {
3040-
final ContextThemeWrapper 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-
// Don't show Details in Main Player Popup
3047-
popupMenu.getMenu().findItem(R.id.menu_item_details).setVisible(false);
3048-
3049-
popupMenu.setOnMenuItemClickListener(menuItem -> {
3050-
switch (menuItem.getItemId()) {
3051-
case R.id.menu_item_remove:
3052-
final int index = playQueue.indexOf(item);
3053-
playQueue.remove(index);
3054-
return true;
3055-
case R.id.menu_item_append_playlist:
3056-
final PlaylistAppendDialog d = PlaylistAppendDialog.fromPlayQueueItems(
3057-
Collections.singletonList(item)
3058-
);
3059-
PlaylistAppendDialog.onPlaylistFound(context,
3060-
() -> d.show(getParentActivity().getSupportFragmentManager(), TAG),
3061-
() -> PlaylistCreationDialog.newInstance(d)
3062-
.show(getParentActivity().getSupportFragmentManager(), TAG));
3063-
return true;
3064-
case R.id.menu_item_share:
3065-
shareText(context, item.getTitle(), item.getUrl(),
3066-
item.getThumbnailUrl());
3067-
return true;
3068-
}
3069-
return false;
3070-
});
3071-
3072-
popupMenu.show();
3037+
openPopupMenu(playQueue, item, view, true,
3038+
getParentActivity().getSupportFragmentManager(), context, TAG);
30733039
}
30743040

30753041
@Override

0 commit comments

Comments
 (0)