|
|
|
|
@ -3,6 +3,7 @@ package com.fongmi.android.tv.service; |
|
|
|
|
import android.app.PendingIntent; |
|
|
|
|
import android.content.Intent; |
|
|
|
|
import android.os.Binder; |
|
|
|
|
import android.os.Bundle; |
|
|
|
|
import android.os.IBinder; |
|
|
|
|
|
|
|
|
|
import androidx.annotation.NonNull; |
|
|
|
|
@ -16,7 +17,10 @@ import androidx.media3.session.LibraryResult; |
|
|
|
|
import androidx.media3.session.MediaLibraryService; |
|
|
|
|
import androidx.media3.session.MediaLibraryService.MediaLibrarySession; |
|
|
|
|
import androidx.media3.session.MediaSession; |
|
|
|
|
import androidx.media3.session.SessionCommand; |
|
|
|
|
import androidx.media3.session.SessionCommands; |
|
|
|
|
import androidx.media3.session.SessionError; |
|
|
|
|
import androidx.media3.session.SessionResult; |
|
|
|
|
|
|
|
|
|
import com.fongmi.android.tv.App; |
|
|
|
|
import com.fongmi.android.tv.BuildConfig; |
|
|
|
|
@ -45,6 +49,8 @@ public class PlaybackService extends MediaLibraryService implements MediaLibrary |
|
|
|
|
|
|
|
|
|
public static final String LOCAL_BIND_ACTION = BuildConfig.APPLICATION_ID.concat(".LOCAL_BIND"); |
|
|
|
|
|
|
|
|
|
private static final SessionCommand COMMAND_REPEAT = new SessionCommand(ActionEvent.REPEAT, Bundle.EMPTY); |
|
|
|
|
|
|
|
|
|
private static volatile boolean running; |
|
|
|
|
|
|
|
|
|
private final List<PlayerCallback> playerCallbacks = new CopyOnWriteArrayList<>(); |
|
|
|
|
@ -97,16 +103,19 @@ public class PlaybackService extends MediaLibraryService implements MediaLibrary |
|
|
|
|
|
|
|
|
|
private void setupNotification() { |
|
|
|
|
DefaultMediaNotificationProvider provider = new DefaultMediaNotificationProvider.Builder(this).build(); |
|
|
|
|
session.setMediaButtonPreferences(ImmutableList.of(buildStopButton())); |
|
|
|
|
session.setMediaButtonPreferences(ImmutableList.of(buildRepeatButton(), buildStopButton())); |
|
|
|
|
provider.setSmallIcon(R.drawable.ic_notification); |
|
|
|
|
setMediaNotificationProvider(provider); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private CommandButton buildStopButton() { |
|
|
|
|
return new CommandButton.Builder(CommandButton.ICON_STOP).setPlayerCommand(Player.COMMAND_STOP).setDisplayName(getString(R.string.play_stop)).build(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private CommandButton buildRepeatButton() { |
|
|
|
|
return new CommandButton.Builder(player.isRepeatOne() ? CommandButton.ICON_REPEAT_ONE : CommandButton.ICON_REPEAT_OFF).setSessionCommand(COMMAND_REPEAT).setDisplayName(getString(R.string.play_repeat)).build(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public int onStartCommand(Intent intent, int flags, int startId) { |
|
|
|
|
if (intent != null) handleAction(intent.getAction()); |
|
|
|
|
@ -235,7 +244,18 @@ public class PlaybackService extends MediaLibraryService implements MediaLibrary |
|
|
|
|
@NonNull |
|
|
|
|
@Override |
|
|
|
|
public MediaSession.ConnectionResult onConnect(@NonNull MediaSession session, @NonNull MediaSession.ControllerInfo controller) { |
|
|
|
|
return new MediaLibrarySession.ConnectionResult.AcceptedResultBuilder(session).build(); |
|
|
|
|
SessionCommands commands = new MediaSession.ConnectionResult.AcceptedResultBuilder(session).build().availableSessionCommands.buildUpon().add(COMMAND_REPEAT).build(); |
|
|
|
|
return new MediaLibrarySession.ConnectionResult.AcceptedResultBuilder(session).setAvailableSessionCommands(commands).build(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@NonNull |
|
|
|
|
@Override |
|
|
|
|
public ListenableFuture<SessionResult> onCustomCommand(@NonNull MediaSession session, @NonNull MediaSession.ControllerInfo controller, @NonNull SessionCommand customCommand, @NonNull Bundle args) { |
|
|
|
|
if (COMMAND_REPEAT.customAction.equals(customCommand.customAction)) { |
|
|
|
|
dispatchRepeat(); |
|
|
|
|
return Futures.immediateFuture(new SessionResult(SessionResult.RESULT_SUCCESS)); |
|
|
|
|
} |
|
|
|
|
return MediaLibrarySession.Callback.super.onCustomCommand(session, controller, customCommand, args); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public boolean hasExternalClient() { |
|
|
|
|
@ -462,6 +482,11 @@ public class PlaybackService extends MediaLibraryService implements MediaLibrary |
|
|
|
|
public void onPlaybackStateChanged(int state) { |
|
|
|
|
if (state == Player.STATE_ENDED && !(hasNavigationCallback() && isNavigationOwner())) navigateItem(1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void onRepeatModeChanged(int repeatMode) { |
|
|
|
|
if (session != null) session.setMediaButtonPreferences(ImmutableList.of(buildRepeatButton(), buildStopButton())); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
@NonNull |
|
|
|
|
|