Solve some Sonarlint warnings

This commit is contained in:
Stypox 2022-04-16 16:01:23 +02:00
parent a19073ec01
commit 4979f84e41
No known key found for this signature in database
GPG key ID: 4BDF1B40A49FDD23
10 changed files with 86 additions and 95 deletions

View file

@ -9,15 +9,20 @@ import android.view.Window;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment; import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.FragmentManager;
import org.schabi.newpipe.NewPipeDatabase; import org.schabi.newpipe.NewPipeDatabase;
import org.schabi.newpipe.database.stream.model.StreamEntity; import org.schabi.newpipe.database.stream.model.StreamEntity;
import org.schabi.newpipe.local.playlist.LocalPlaylistManager; import org.schabi.newpipe.local.playlist.LocalPlaylistManager;
import org.schabi.newpipe.player.Player;
import org.schabi.newpipe.util.StateSaver; import org.schabi.newpipe.util.StateSaver;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Queue; import java.util.Queue;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.disposables.Disposable;
@ -131,13 +136,13 @@ public abstract class PlaylistDialog extends DialogFragment implements StateSave
* @param context context used for accessing the database * @param context context used for accessing the database
* @param streamEntities used for crating the dialog * @param streamEntities used for crating the dialog
* @param onExec execution that should occur after a dialog got created, e.g. showing it * @param onExec execution that should occur after a dialog got created, e.g. showing it
* @return Disposable * @return the disposable that was created
*/ */
public static Disposable createCorrespondingDialog( public static Disposable createCorrespondingDialog(
final Context context, final Context context,
final List<StreamEntity> streamEntities, final List<StreamEntity> streamEntities,
final Consumer<PlaylistDialog> onExec final Consumer<PlaylistDialog> onExec) {
) {
return new LocalPlaylistManager(NewPipeDatabase.getInstance(context)) return new LocalPlaylistManager(NewPipeDatabase.getInstance(context))
.hasPlaylists() .hasPlaylists()
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
@ -147,4 +152,30 @@ public abstract class PlaylistDialog extends DialogFragment implements StateSave
: PlaylistCreationDialog.newInstance(streamEntities)) : PlaylistCreationDialog.newInstance(streamEntities))
); );
} }
/**
* Creates a {@link PlaylistAppendDialog} when playlists exists,
* otherwise a {@link PlaylistCreationDialog}. If the player's play queue is null or empty, no
* dialog will be created.
*
* @param player the player from which to extract the context and the play queue
* @param fragmentManager the fragment manager to use to show the dialog
* @return the disposable that was created
*/
public static Disposable showForPlayQueue(
final Player player,
@NonNull final FragmentManager fragmentManager) {
final List<StreamEntity> streamEntities = Stream.of(player.getPlayQueue())
.filter(Objects::nonNull)
.flatMap(playQueue -> Objects.requireNonNull(playQueue).getStreams().stream())
.map(StreamEntity::new)
.collect(Collectors.toList());
if (streamEntities.isEmpty()) {
return Disposable.empty();
}
return PlaylistDialog.createCorrespondingDialog(player.getContext(), streamEntities,
dialog -> dialog.show(fragmentManager, "PlaylistDialog"));
}
} }

View file

@ -29,6 +29,7 @@ import org.schabi.newpipe.R;
import org.schabi.newpipe.databinding.ActivityPlayerQueueControlBinding; import org.schabi.newpipe.databinding.ActivityPlayerQueueControlBinding;
import org.schabi.newpipe.extractor.stream.StreamInfo; import org.schabi.newpipe.extractor.stream.StreamInfo;
import org.schabi.newpipe.fragments.OnScrollBelowItemsListener; import org.schabi.newpipe.fragments.OnScrollBelowItemsListener;
import org.schabi.newpipe.local.dialog.PlaylistDialog;
import org.schabi.newpipe.player.event.PlayerEventListener; import org.schabi.newpipe.player.event.PlayerEventListener;
import org.schabi.newpipe.player.helper.PlaybackParameterDialog; import org.schabi.newpipe.player.helper.PlaybackParameterDialog;
import org.schabi.newpipe.player.playqueue.PlayQueue; import org.schabi.newpipe.player.playqueue.PlayQueue;
@ -53,8 +54,6 @@ public final class PlayQueueActivity extends AppCompatActivity
private Player player; private Player player;
private PlayQueueAdapter adapter = null;
private boolean serviceBound; private boolean serviceBound;
private ServiceConnection serviceConnection; private ServiceConnection serviceConnection;
@ -128,7 +127,7 @@ public final class PlayQueueActivity extends AppCompatActivity
NavigationHelper.openSettings(this); NavigationHelper.openSettings(this);
return true; return true;
case R.id.action_append_playlist: case R.id.action_append_playlist:
player.onAddToPlaylistClicked(getSupportFragmentManager()); PlaylistDialog.showForPlayQueue(player, getSupportFragmentManager());
return true; return true;
case R.id.action_playback_speed: case R.id.action_playback_speed:
openPlaybackParameterDialog(); openPlaybackParameterDialog();
@ -441,10 +440,9 @@ public final class PlayQueueActivity extends AppCompatActivity
@Override @Override
public void onQueueUpdate(@Nullable final PlayQueue queue) { public void onQueueUpdate(@Nullable final PlayQueue queue) {
if (queue == null) { if (queue == null) {
adapter = null;
queueControlBinding.playQueue.setAdapter(null); queueControlBinding.playQueue.setAdapter(null);
} else { } else {
adapter = new PlayQueueAdapter(this, queue); final PlayQueueAdapter adapter = new PlayQueueAdapter(this, queue);
adapter.setSelectedListener(getOnSelectedListener()); adapter.setSelectedListener(getOnSelectedListener());
queueControlBinding.playQueue.setAdapter(adapter); queueControlBinding.playQueue.setAdapter(adapter);
} }

View file

@ -63,16 +63,6 @@ import android.view.LayoutInflater;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.appcompat.view.ContextThemeWrapper;
import androidx.appcompat.widget.AppCompatImageButton;
import androidx.appcompat.widget.PopupMenu;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.fragment.app.FragmentManager;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
@ -96,7 +86,6 @@ import com.squareup.picasso.Target;
import org.schabi.newpipe.MainActivity; import org.schabi.newpipe.MainActivity;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import org.schabi.newpipe.database.stream.model.StreamEntity;
import org.schabi.newpipe.databinding.PlayerBinding; import org.schabi.newpipe.databinding.PlayerBinding;
import org.schabi.newpipe.error.ErrorInfo; import org.schabi.newpipe.error.ErrorInfo;
import org.schabi.newpipe.error.ErrorUtil; import org.schabi.newpipe.error.ErrorUtil;
@ -105,7 +94,6 @@ import org.schabi.newpipe.extractor.stream.StreamInfo;
import org.schabi.newpipe.extractor.stream.StreamType; import org.schabi.newpipe.extractor.stream.StreamType;
import org.schabi.newpipe.extractor.stream.VideoStream; import org.schabi.newpipe.extractor.stream.VideoStream;
import org.schabi.newpipe.fragments.detail.VideoDetailFragment; import org.schabi.newpipe.fragments.detail.VideoDetailFragment;
import org.schabi.newpipe.local.dialog.PlaylistDialog;
import org.schabi.newpipe.local.history.HistoryRecordManager; import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.player.PlayerService.PlayerType; import org.schabi.newpipe.player.PlayerService.PlayerType;
import org.schabi.newpipe.player.event.PlayerEventListener; import org.schabi.newpipe.player.event.PlayerEventListener;
@ -116,6 +104,7 @@ import org.schabi.newpipe.player.helper.MediaSessionManager;
import org.schabi.newpipe.player.helper.PlayerDataSource; import org.schabi.newpipe.player.helper.PlayerDataSource;
import org.schabi.newpipe.player.helper.PlayerHelper; import org.schabi.newpipe.player.helper.PlayerHelper;
import org.schabi.newpipe.player.mediaitem.MediaItemTag; import org.schabi.newpipe.player.mediaitem.MediaItemTag;
import org.schabi.newpipe.player.notification.NotificationPlayerUi;
import org.schabi.newpipe.player.playback.MediaSourceManager; import org.schabi.newpipe.player.playback.MediaSourceManager;
import org.schabi.newpipe.player.playback.PlaybackListener; import org.schabi.newpipe.player.playback.PlaybackListener;
import org.schabi.newpipe.player.playback.PlayerMediaSession; import org.schabi.newpipe.player.playback.PlayerMediaSession;
@ -125,7 +114,6 @@ import org.schabi.newpipe.player.resolver.AudioPlaybackResolver;
import org.schabi.newpipe.player.resolver.VideoPlaybackResolver; import org.schabi.newpipe.player.resolver.VideoPlaybackResolver;
import org.schabi.newpipe.player.resolver.VideoPlaybackResolver.SourceType; import org.schabi.newpipe.player.resolver.VideoPlaybackResolver.SourceType;
import org.schabi.newpipe.player.ui.MainPlayerUi; import org.schabi.newpipe.player.ui.MainPlayerUi;
import org.schabi.newpipe.player.notification.NotificationPlayerUi;
import org.schabi.newpipe.player.ui.PlayerUi; import org.schabi.newpipe.player.ui.PlayerUi;
import org.schabi.newpipe.player.ui.PlayerUiList; import org.schabi.newpipe.player.ui.PlayerUiList;
import org.schabi.newpipe.player.ui.PopupPlayerUi; import org.schabi.newpipe.player.ui.PopupPlayerUi;
@ -137,10 +125,8 @@ import org.schabi.newpipe.util.PicassoHelper;
import org.schabi.newpipe.util.SerializedCache; import org.schabi.newpipe.util.SerializedCache;
import org.schabi.newpipe.util.StreamTypeUtil; import org.schabi.newpipe.util.StreamTypeUtil;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.IntStream; import java.util.stream.IntStream;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
@ -1192,32 +1178,6 @@ public final class Player implements PlaybackListener, Listener {
/*//////////////////////////////////////////////////////////////////////////
// Playlist append TODO this does not make sense here
//////////////////////////////////////////////////////////////////////////*/
//region Playlist append
public void onAddToPlaylistClicked(@NonNull final FragmentManager fragmentManager) {
if (DEBUG) {
Log.d(TAG, "onAddToPlaylistClicked() called");
}
if (getPlayQueue() != null) {
PlaylistDialog.createCorrespondingDialog(
getContext(),
getPlayQueue()
.getStreams()
.stream()
.map(StreamEntity::new)
.collect(Collectors.toList()),
dialog -> dialog.show(fragmentManager, TAG)
);
}
}
//endregion
/*////////////////////////////////////////////////////////////////////////// /*//////////////////////////////////////////////////////////////////////////
// Mute / Unmute // Mute / Unmute
//////////////////////////////////////////////////////////////////////////*/ //////////////////////////////////////////////////////////////////////////*/

View file

@ -71,16 +71,17 @@ public final class PlayerService extends Service {
Log.d(TAG, "onStartCommand() called with: intent = [" + intent Log.d(TAG, "onStartCommand() called with: intent = [" + intent
+ "], flags = [" + flags + "], startId = [" + startId + "]"); + "], flags = [" + flags + "], startId = [" + startId + "]");
} }
if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())
&& player.getPlayQueue() == null) { if (!Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())
// Player is not working, no need to process media button's action || player.getPlayQueue() != null) {
return START_NOT_STICKY; // ^ no need to process media button's action if player is not working
player.handleIntent(intent);
if (player.getMediaSessionManager() != null) {
player.getMediaSessionManager().handleMediaButtonIntent(intent);
}
} }
player.handleIntent(intent);
if (player.getMediaSessionManager() != null) {
player.getMediaSessionManager().handleMediaButtonIntent(intent);
}
return START_NOT_STICKY; return START_NOT_STICKY;
} }

View file

@ -92,7 +92,10 @@ abstract class BasePlayerGestureListener(
return true return true
} }
return if (onDownNotDoubleTapping(e)) super.onDown(e) else true if (onDownNotDoubleTapping(e)) {
return super.onDown(e)
}
return true
} }
/** /**

View file

@ -266,6 +266,7 @@ public final class NotificationUtil {
null); null);
} }
// fallthrough
case NotificationConstants.PLAY_PAUSE: case NotificationConstants.PLAY_PAUSE:
if (player.getCurrentState() == Player.STATE_COMPLETED) { if (player.getCurrentState() == Player.STATE_COMPLETED) {
return getAction(R.drawable.ic_replay, return getAction(R.drawable.ic_replay,

View file

@ -51,6 +51,7 @@ 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.PlaylistDialog;
import org.schabi.newpipe.player.Player; import org.schabi.newpipe.player.Player;
import org.schabi.newpipe.player.event.PlayerServiceEventListener; import org.schabi.newpipe.player.event.PlayerServiceEventListener;
import org.schabi.newpipe.player.gesture.BasePlayerGestureListener; import org.schabi.newpipe.player.gesture.BasePlayerGestureListener;
@ -147,7 +148,8 @@ public final class MainPlayerUi extends VideoPlayerUi implements View.OnLayoutCh
binding.addToPlaylistButton.setOnClickListener(v -> binding.addToPlaylistButton.setOnClickListener(v ->
getParentActivity().map(FragmentActivity::getSupportFragmentManager) getParentActivity().map(FragmentActivity::getSupportFragmentManager)
.ifPresent(player::onAddToPlaylistClicked)); .ifPresent(fragmentManager ->
PlaylistDialog.showForPlayQueue(player, fragmentManager)));
settingsContentObserver = new ContentObserver(new Handler()) { settingsContentObserver = new ContentObserver(new Handler()) {
@Override @Override
@ -401,6 +403,7 @@ public final class MainPlayerUi extends VideoPlayerUi implements View.OnLayoutCh
//////////////////////////////////////////////////////////////////////////*/ //////////////////////////////////////////////////////////////////////////*/
//region Controls showing / hiding //region Controls showing / hiding
@Override
protected void showOrHideButtons() { protected void showOrHideButtons() {
super.showOrHideButtons(); super.showOrHideButtons();
@Nullable final PlayQueue playQueue = player.getPlayQueue(); @Nullable final PlayQueue playQueue = player.getPlayQueue();
@ -667,12 +670,11 @@ public final class MainPlayerUi extends VideoPlayerUi implements View.OnLayoutCh
} }
animate(binding.itemsListPanel, false, DEFAULT_CONTROLS_DURATION, animate(binding.itemsListPanel, false, DEFAULT_CONTROLS_DURATION,
AnimationType.SLIDE_AND_ALPHA, 0, () -> { AnimationType.SLIDE_AND_ALPHA, 0, () ->
// Even when queueLayout is GONE it receives touch events // Even when queueLayout is GONE it receives touch events
// and ruins normal behavior of the app. This line fixes it // and ruins normal behavior of the app. This line fixes it
binding.itemsListPanel.setTranslationY( binding.itemsListPanel.setTranslationY(
-binding.itemsListPanel.getHeight() * 5); -binding.itemsListPanel.getHeight() * 5.0f));
});
// clear focus, otherwise a white rectangle remains on top of the player // clear focus, otherwise a white rectangle remains on top of the player
binding.itemsListClose.clearFocus(); binding.itemsListClose.clearFocus();
@ -845,8 +847,7 @@ public final class MainPlayerUi extends VideoPlayerUi implements View.OnLayoutCh
} }
PlaybackParameterDialog.newInstance(player.getPlaybackSpeed(), player.getPlaybackPitch(), PlaybackParameterDialog.newInstance(player.getPlaybackSpeed(), player.getPlaybackPitch(),
player.getPlaybackSkipSilence(), (speed, pitch, skipSilence) player.getPlaybackSkipSilence(), player::setPlaybackParameters)
-> player.setPlaybackParameters(speed, pitch, skipSilence))
.show(activity.getSupportFragmentManager(), null); .show(activity.getSupportFragmentManager(), null);
} }

View file

@ -31,7 +31,7 @@ public abstract class PlayerUi {
/** /**
* @param player the player instance that will be usable throughout the lifetime of this UI * @param player the player instance that will be usable throughout the lifetime of this UI
*/ */
public PlayerUi(@NonNull final Player player) { protected PlayerUi(@NonNull final Player player) {
this.context = player.getContext(); this.context = player.getContext();
this.player = player; this.player = player;
} }

View file

@ -1,5 +1,6 @@
package org.schabi.newpipe.player.ui; package org.schabi.newpipe.player.ui;
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
import static org.schabi.newpipe.MainActivity.DEBUG; import static org.schabi.newpipe.MainActivity.DEBUG;
import static org.schabi.newpipe.player.helper.PlayerHelper.buildCloseOverlayLayoutParams; import static org.schabi.newpipe.player.helper.PlayerHelper.buildCloseOverlayLayoutParams;
import static org.schabi.newpipe.player.helper.PlayerHelper.getMinimumVideoHeight; import static org.schabi.newpipe.player.helper.PlayerHelper.getMinimumVideoHeight;
@ -140,8 +141,7 @@ public final class PopupPlayerUi extends VideoPlayerUi {
binding.segmentsButton.setVisibility(View.GONE); binding.segmentsButton.setVisibility(View.GONE);
binding.moreOptionsButton.setVisibility(View.GONE); binding.moreOptionsButton.setVisibility(View.GONE);
binding.topControls.setOrientation(LinearLayout.HORIZONTAL); binding.topControls.setOrientation(LinearLayout.HORIZONTAL);
binding.primaryControls.getLayoutParams().width binding.primaryControls.getLayoutParams().width = WRAP_CONTENT;
= LinearLayout.LayoutParams.WRAP_CONTENT;
binding.secondaryControls.setAlpha(1.0f); binding.secondaryControls.setAlpha(1.0f);
binding.secondaryControls.setVisibility(View.VISIBLE); binding.secondaryControls.setVisibility(View.VISIBLE);
binding.secondaryControls.setTranslationY(0); binding.secondaryControls.setTranslationY(0);
@ -193,14 +193,12 @@ public final class PopupPlayerUi extends VideoPlayerUi {
updateScreenSize(); updateScreenSize();
changePopupSize(popupLayoutParams.width); changePopupSize(popupLayoutParams.width);
checkPopupPositionBounds(); checkPopupPositionBounds();
} else if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) { } else if (player.isPlaying() || player.isLoading()) {
// Use only audio source when screen turns off while popup player is playing if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) {
if (player.isPlaying() || player.isLoading()) { // Use only audio source when screen turns off while popup player is playing
player.useVideoSource(false); player.useVideoSource(false);
} } else if (Intent.ACTION_SCREEN_ON.equals(intent.getAction())) {
} else if (Intent.ACTION_SCREEN_ON.equals(intent.getAction())) { // Restore video source when screen turns on and user was watching video in popup
// Restore video source when screen turns on and user is watching video in popup player
if (player.isPlaying() || player.isLoading()) {
player.useVideoSource(true); player.useVideoSource(true);
} }
} }

View file

@ -41,7 +41,6 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.content.res.AppCompatResources; import androidx.appcompat.content.res.AppCompatResources;
import androidx.appcompat.view.ContextThemeWrapper; import androidx.appcompat.view.ContextThemeWrapper;
import androidx.appcompat.widget.AppCompatImageButton;
import androidx.appcompat.widget.PopupMenu; import androidx.appcompat.widget.PopupMenu;
import androidx.core.graphics.Insets; import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat; import androidx.core.view.ViewCompat;
@ -142,7 +141,7 @@ public abstract class VideoPlayerUi extends PlayerUi
//////////////////////////////////////////////////////////////////////////*/ //////////////////////////////////////////////////////////////////////////*/
//region Constructor, setup, destroy //region Constructor, setup, destroy
public VideoPlayerUi(@NonNull final Player player, protected VideoPlayerUi(@NonNull final Player player,
@NonNull final PlayerBinding playerBinding) { @NonNull final PlayerBinding playerBinding) {
super(player); super(player);
binding = playerBinding; binding = playerBinding;
@ -912,7 +911,20 @@ public abstract class VideoPlayerUi extends PlayerUi
@Override @Override
public void onRepeatModeChanged(@RepeatMode final int repeatMode) { public void onRepeatModeChanged(@RepeatMode final int repeatMode) {
super.onRepeatModeChanged(repeatMode); super.onRepeatModeChanged(repeatMode);
setRepeatModeButton(binding.repeatButton, repeatMode);
switch (repeatMode) {
case REPEAT_MODE_OFF:
binding.repeatButton.setImageResource(R.drawable.exo_controls_repeat_off);
break;
case REPEAT_MODE_ONE:
binding.repeatButton.setImageResource(R.drawable.exo_controls_repeat_one);
break;
case REPEAT_MODE_ALL:
binding.repeatButton.setImageResource(R.drawable.exo_controls_repeat_all);
break;
default:
break; // unreachable
}
} }
@Override @Override
@ -927,21 +939,6 @@ public abstract class VideoPlayerUi extends PlayerUi
setMuteButton(isMuted); setMuteButton(isMuted);
} }
private void setRepeatModeButton(final AppCompatImageButton imageButton,
@RepeatMode final int repeatMode) {
switch (repeatMode) {
case REPEAT_MODE_OFF:
imageButton.setImageResource(R.drawable.exo_controls_repeat_off);
break;
case REPEAT_MODE_ONE:
imageButton.setImageResource(R.drawable.exo_controls_repeat_one);
break;
case REPEAT_MODE_ALL:
imageButton.setImageResource(R.drawable.exo_controls_repeat_all);
break;
}
}
private void setMuteButton(final boolean isMuted) { private void setMuteButton(final boolean isMuted) {
binding.switchMute.setImageDrawable(AppCompatResources.getDrawable(context, isMuted binding.switchMute.setImageDrawable(AppCompatResources.getDrawable(context, isMuted
? R.drawable.ic_volume_off : R.drawable.ic_volume_up)); ? R.drawable.ic_volume_off : R.drawable.ic_volume_up));
@ -1037,6 +1034,7 @@ public abstract class VideoPlayerUi extends PlayerUi
binding.qualityTextView.setVisibility(View.VISIBLE); binding.qualityTextView.setVisibility(View.VISIBLE);
binding.surfaceView.setVisibility(View.VISIBLE); binding.surfaceView.setVisibility(View.VISIBLE);
// fallthrough
default: default:
binding.endScreen.setVisibility(View.GONE); binding.endScreen.setVisibility(View.GONE);
binding.playbackEndTime.setVisibility(View.VISIBLE); binding.playbackEndTime.setVisibility(View.VISIBLE);
@ -1426,8 +1424,6 @@ public abstract class VideoPlayerUi extends PlayerUi
public boolean onKeyDown(final int keyCode) { public boolean onKeyDown(final int keyCode) {
switch (keyCode) { switch (keyCode) {
default:
break;
case KeyEvent.KEYCODE_BACK: case KeyEvent.KEYCODE_BACK:
if (DeviceUtils.isTv(context) && isControlsVisible()) { if (DeviceUtils.isTv(context) && isControlsVisible()) {
hideControls(0, 0); hideControls(0, 0);
@ -1442,7 +1438,7 @@ public abstract class VideoPlayerUi extends PlayerUi
if ((binding.getRoot().hasFocus() && !binding.playbackControlRoot.hasFocus()) if ((binding.getRoot().hasFocus() && !binding.playbackControlRoot.hasFocus())
|| isAnyListViewOpen()) { || isAnyListViewOpen()) {
// do not interfere with focus in playlist and play queue etc. // do not interfere with focus in playlist and play queue etc.
return false; break;
} }
if (player.getCurrentState() == org.schabi.newpipe.player.Player.STATE_BLOCKED) { if (player.getCurrentState() == org.schabi.newpipe.player.Player.STATE_BLOCKED) {
@ -1458,6 +1454,8 @@ public abstract class VideoPlayerUi extends PlayerUi
return true; return true;
} }
break; break;
default:
break; // ignore other keys
} }
return false; return false;