Move opening popup menu to utility class
This commit is contained in:
parent
ef94458249
commit
a1cb3e59d6
3 changed files with 80 additions and 71 deletions
71
app/src/main/java/org/schabi/newpipe/QueueItemMenuUtil.java
Normal file
71
app/src/main/java/org/schabi/newpipe/QueueItemMenuUtil.java
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
package org.schabi.newpipe;
|
||||||
|
|
||||||
|
import static org.schabi.newpipe.util.external_communication.ShareUtils.shareText;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.view.ContextThemeWrapper;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.PopupMenu;
|
||||||
|
|
||||||
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
|
||||||
|
import org.schabi.newpipe.local.dialog.PlaylistAppendDialog;
|
||||||
|
import org.schabi.newpipe.local.dialog.PlaylistCreationDialog;
|
||||||
|
import org.schabi.newpipe.player.playqueue.PlayQueue;
|
||||||
|
import org.schabi.newpipe.player.playqueue.PlayQueueItem;
|
||||||
|
import org.schabi.newpipe.util.NavigationHelper;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
|
public final class QueueItemMenuUtil {
|
||||||
|
public static void openPopupMenu(final PlayQueue playQueue,
|
||||||
|
final PlayQueueItem item,
|
||||||
|
final View view,
|
||||||
|
final boolean hideDetails,
|
||||||
|
final FragmentManager fragmentManager,
|
||||||
|
final Context context,
|
||||||
|
final String tag) {
|
||||||
|
final ContextThemeWrapper themeWrapper =
|
||||||
|
new ContextThemeWrapper(context, R.style.DarkPopupMenu);
|
||||||
|
|
||||||
|
final PopupMenu popupMenu = new PopupMenu(themeWrapper, view);
|
||||||
|
popupMenu.inflate(R.menu.menu_play_queue_item);
|
||||||
|
|
||||||
|
if (hideDetails) {
|
||||||
|
popupMenu.getMenu().findItem(R.id.menu_item_details).setVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
popupMenu.setOnMenuItemClickListener(menuItem -> {
|
||||||
|
switch (menuItem.getItemId()) {
|
||||||
|
case R.id.menu_item_remove:
|
||||||
|
final int index = playQueue.indexOf(item);
|
||||||
|
playQueue.remove(index);
|
||||||
|
return true;
|
||||||
|
case R.id.menu_item_details:
|
||||||
|
// playQueue is null since we don't want any queue change
|
||||||
|
NavigationHelper.openVideoDetail(context, item.getServiceId(),
|
||||||
|
item.getUrl(), item.getTitle(), null,
|
||||||
|
false);
|
||||||
|
return true;
|
||||||
|
case R.id.menu_item_append_playlist:
|
||||||
|
final PlaylistAppendDialog d = PlaylistAppendDialog.fromPlayQueueItems(
|
||||||
|
Collections.singletonList(item)
|
||||||
|
);
|
||||||
|
PlaylistAppendDialog.onPlaylistFound(context,
|
||||||
|
() -> d.show(fragmentManager, tag),
|
||||||
|
() -> PlaylistCreationDialog.newInstance(d)
|
||||||
|
.show(fragmentManager, tag));
|
||||||
|
return true;
|
||||||
|
case R.id.menu_item_share:
|
||||||
|
shareText(context, item.getTitle(), item.getUrl(),
|
||||||
|
item.getThumbnailUrl());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
popupMenu.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
private QueueItemMenuUtil() { }
|
||||||
|
}
|
|
@ -1,9 +1,5 @@
|
||||||
package org.schabi.newpipe.player;
|
package org.schabi.newpipe.player;
|
||||||
|
|
||||||
import static org.schabi.newpipe.player.helper.PlayerHelper.formatSpeed;
|
|
||||||
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
|
|
||||||
import static org.schabi.newpipe.util.external_communication.ShareUtils.shareText;
|
|
||||||
|
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
@ -16,7 +12,6 @@ import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.PopupMenu;
|
|
||||||
import android.widget.SeekBar;
|
import android.widget.SeekBar;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
@ -47,16 +42,18 @@ import org.schabi.newpipe.util.PermissionHelper;
|
||||||
import org.schabi.newpipe.util.ServiceHelper;
|
import org.schabi.newpipe.util.ServiceHelper;
|
||||||
import org.schabi.newpipe.util.ThemeHelper;
|
import org.schabi.newpipe.util.ThemeHelper;
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.schabi.newpipe.QueueItemMenuUtil.openPopupMenu;
|
||||||
|
import static org.schabi.newpipe.player.helper.PlayerHelper.formatSpeed;
|
||||||
|
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
|
||||||
|
|
||||||
public final class PlayQueueActivity extends AppCompatActivity
|
public final class PlayQueueActivity extends AppCompatActivity
|
||||||
implements PlayerEventListener, SeekBar.OnSeekBarChangeListener,
|
implements PlayerEventListener, SeekBar.OnSeekBarChangeListener,
|
||||||
View.OnClickListener, PlaybackParameterDialog.Callback {
|
View.OnClickListener, PlaybackParameterDialog.Callback {
|
||||||
|
|
||||||
private static final String TAG = PlayQueueActivity.class.getSimpleName();
|
private static final String TAG = PlayQueueActivity.class.getSimpleName();
|
||||||
|
|
||||||
private static final int RECYCLER_ITEM_POPUP_MENU_GROUP_ID = 47;
|
|
||||||
private static final int SMOOTH_SCROLL_MAXIMUM_DISTANCE = 80;
|
private static final int SMOOTH_SCROLL_MAXIMUM_DISTANCE = 80;
|
||||||
|
|
||||||
protected Player player;
|
protected Player player;
|
||||||
|
@ -280,33 +277,8 @@ public final class PlayQueueActivity extends AppCompatActivity
|
||||||
}
|
}
|
||||||
|
|
||||||
private void buildItemPopupMenu(final PlayQueueItem item, final View view) {
|
private void buildItemPopupMenu(final PlayQueueItem item, final View view) {
|
||||||
final PopupMenu popupMenu = new PopupMenu(this, view);
|
openPopupMenu(player.getPlayQueue(), item, view, false,
|
||||||
popupMenu.inflate(R.menu.menu_play_queue_item);
|
getSupportFragmentManager(), this, TAG);
|
||||||
|
|
||||||
popupMenu.setOnMenuItemClickListener(menuItem -> {
|
|
||||||
switch (menuItem.getItemId()) {
|
|
||||||
case R.id.menu_item_remove:
|
|
||||||
final int index = player.getPlayQueue().indexOf(item);
|
|
||||||
player.getPlayQueue().remove(index);
|
|
||||||
return true;
|
|
||||||
case R.id.menu_item_details:
|
|
||||||
// playQueue is null since we don't want any queue change
|
|
||||||
NavigationHelper.openVideoDetail(this, item.getServiceId(),
|
|
||||||
item.getUrl(), item.getTitle(), null,
|
|
||||||
false);
|
|
||||||
return true;
|
|
||||||
case R.id.menu_item_append_playlist:
|
|
||||||
openPlaylistAppendDialog(Collections.singletonList(item));
|
|
||||||
return true;
|
|
||||||
case R.id.menu_item_share:
|
|
||||||
shareText(this, item.getTitle(), item.getUrl(),
|
|
||||||
item.getThumbnailUrl());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
popupMenu.show();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -100,8 +100,6 @@ import org.schabi.newpipe.fragments.OnScrollBelowItemsListener;
|
||||||
import org.schabi.newpipe.fragments.detail.VideoDetailFragment;
|
import org.schabi.newpipe.fragments.detail.VideoDetailFragment;
|
||||||
import org.schabi.newpipe.info_list.StreamSegmentAdapter;
|
import org.schabi.newpipe.info_list.StreamSegmentAdapter;
|
||||||
import org.schabi.newpipe.ktx.AnimationType;
|
import org.schabi.newpipe.ktx.AnimationType;
|
||||||
import org.schabi.newpipe.local.dialog.PlaylistAppendDialog;
|
|
||||||
import org.schabi.newpipe.local.dialog.PlaylistCreationDialog;
|
|
||||||
import org.schabi.newpipe.local.history.HistoryRecordManager;
|
import org.schabi.newpipe.local.history.HistoryRecordManager;
|
||||||
import org.schabi.newpipe.player.MainPlayer.PlayerType;
|
import org.schabi.newpipe.player.MainPlayer.PlayerType;
|
||||||
import org.schabi.newpipe.player.event.PlayerEventListener;
|
import org.schabi.newpipe.player.event.PlayerEventListener;
|
||||||
|
@ -140,7 +138,6 @@ import org.schabi.newpipe.views.ExpandableSurfaceView;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
@ -162,6 +159,7 @@ import static com.google.android.exoplayer2.Player.REPEAT_MODE_OFF;
|
||||||
import static com.google.android.exoplayer2.Player.REPEAT_MODE_ONE;
|
import static com.google.android.exoplayer2.Player.REPEAT_MODE_ONE;
|
||||||
import static com.google.android.exoplayer2.Player.RepeatMode;
|
import static com.google.android.exoplayer2.Player.RepeatMode;
|
||||||
import static java.util.concurrent.TimeUnit.MILLISECONDS;
|
import static java.util.concurrent.TimeUnit.MILLISECONDS;
|
||||||
|
import static org.schabi.newpipe.QueueItemMenuUtil.openPopupMenu;
|
||||||
import static org.schabi.newpipe.extractor.ServiceList.YouTube;
|
import static org.schabi.newpipe.extractor.ServiceList.YouTube;
|
||||||
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
|
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
|
||||||
import static org.schabi.newpipe.ktx.ViewUtils.animate;
|
import static org.schabi.newpipe.ktx.ViewUtils.animate;
|
||||||
|
@ -196,7 +194,6 @@ import static org.schabi.newpipe.util.ListHelper.getPopupResolutionIndex;
|
||||||
import static org.schabi.newpipe.util.ListHelper.getResolutionIndex;
|
import static org.schabi.newpipe.util.ListHelper.getResolutionIndex;
|
||||||
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
|
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
|
||||||
import static org.schabi.newpipe.util.Localization.containsCaseInsensitive;
|
import static org.schabi.newpipe.util.Localization.containsCaseInsensitive;
|
||||||
import static org.schabi.newpipe.util.external_communication.ShareUtils.shareText;
|
|
||||||
|
|
||||||
public final class Player implements
|
public final class Player implements
|
||||||
EventListener,
|
EventListener,
|
||||||
|
@ -3037,39 +3034,8 @@ public final class Player implements
|
||||||
}
|
}
|
||||||
|
|
||||||
private void heldQueueItem(final PlayQueueItem item, final View view) {
|
private void heldQueueItem(final PlayQueueItem item, final View view) {
|
||||||
final ContextThemeWrapper themeWrapper =
|
openPopupMenu(playQueue, item, view, true,
|
||||||
new ContextThemeWrapper(context, R.style.DarkPopupMenu);
|
getParentActivity().getSupportFragmentManager(), context, TAG);
|
||||||
|
|
||||||
final PopupMenu popupMenu = new PopupMenu(themeWrapper, view);
|
|
||||||
popupMenu.inflate(R.menu.menu_play_queue_item);
|
|
||||||
|
|
||||||
// Don't show Details in Main Player Popup
|
|
||||||
popupMenu.getMenu().findItem(R.id.menu_item_details).setVisible(false);
|
|
||||||
|
|
||||||
popupMenu.setOnMenuItemClickListener(menuItem -> {
|
|
||||||
switch (menuItem.getItemId()) {
|
|
||||||
case R.id.menu_item_remove:
|
|
||||||
final int index = playQueue.indexOf(item);
|
|
||||||
playQueue.remove(index);
|
|
||||||
return true;
|
|
||||||
case R.id.menu_item_append_playlist:
|
|
||||||
final PlaylistAppendDialog d = PlaylistAppendDialog.fromPlayQueueItems(
|
|
||||||
Collections.singletonList(item)
|
|
||||||
);
|
|
||||||
PlaylistAppendDialog.onPlaylistFound(context,
|
|
||||||
() -> d.show(getParentActivity().getSupportFragmentManager(), TAG),
|
|
||||||
() -> PlaylistCreationDialog.newInstance(d)
|
|
||||||
.show(getParentActivity().getSupportFragmentManager(), TAG));
|
|
||||||
return true;
|
|
||||||
case R.id.menu_item_share:
|
|
||||||
shareText(context, item.getTitle(), item.getUrl(),
|
|
||||||
item.getThumbnailUrl());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
popupMenu.show();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in a new issue