Files
mpd/android/app/src/main/java/org/musicpd/MPDPlayer.java
2024-01-13 23:15:56 -06:00

76 lines
2.3 KiB
Java

package org.musicpd;
import android.annotation.SuppressLint;
import android.os.Looper;
import androidx.annotation.NonNull;
import androidx.media3.common.Player;
import androidx.media3.common.SimpleBasePlayer;
import androidx.media3.common.util.UnstableApi;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import java.util.Arrays;
import java.util.List;
@UnstableApi
public class MPDPlayer extends SimpleBasePlayer {
List<MediaItemData> placeholderItems;
public MPDPlayer(Looper looper) {
super(looper);
// Dummy items to let us receive next and previous commands
MediaItemData item0 = new MediaItemData.Builder(0)
.build();
MediaItemData item1 = new MediaItemData.Builder(1)
.build();
MediaItemData item2 = new MediaItemData.Builder(2)
.build();
MediaItemData[] items = new MediaItemData[] { item0, item1, item2 };
placeholderItems = Arrays.asList(items);
}
@NonNull
@Override
protected State getState() {
Commands commands = new Commands.Builder().addAll(
COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM,
COMMAND_SEEK_TO_NEXT_MEDIA_ITEM,
COMMAND_PLAY_PAUSE
).build();
return new State.Builder()
.setAvailableCommands(commands)
.setPlaybackState(Player.STATE_READY)
.setPlaylist(placeholderItems)
.setCurrentMediaItemIndex(1)
.build();
}
@NonNull
@Override
protected ListenableFuture<?> handleSetPlayWhenReady(boolean playWhenReady) {
Bridge.playPause();
return Futures.immediateVoidFuture();
}
@NonNull
@SuppressLint("SwitchIntDef")
@Override
protected ListenableFuture<?> handleSeek(int mediaItemIndex, long positionMs, int seekCommand) {
switch (seekCommand) {
case COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM:
case COMMAND_SEEK_TO_PREVIOUS:
Bridge.playPrevious();
break;
case COMMAND_SEEK_TO_NEXT_MEDIA_ITEM:
case COMMAND_SEEK_TO_NEXT:
Bridge.playNext();
break;
}
return Futures.immediateVoidFuture();
}
}