From fcd88b78598db3105dfa2ee437be089aa4a1fdca Mon Sep 17 00:00:00 2001 From: dkanada Date: Wed, 14 Oct 2020 23:04:49 +0900 Subject: [PATCH] add custom event listener for playback controls --- .../main/java/com/dkanada/gramophone/App.java | 4 +- .../gramophone/helper/EventListener.java | 142 ++++++++++++++++++ 2 files changed, 144 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/dkanada/gramophone/helper/EventListener.java diff --git a/app/src/main/java/com/dkanada/gramophone/App.java b/app/src/main/java/com/dkanada/gramophone/App.java index 4cac2bb9..d5ec3738 100644 --- a/app/src/main/java/com/dkanada/gramophone/App.java +++ b/app/src/main/java/com/dkanada/gramophone/App.java @@ -6,13 +6,13 @@ import android.content.Context; import android.os.Build; import android.provider.Settings; +import com.dkanada.gramophone.helper.EventListener; import com.dkanada.gramophone.util.PreferenceUtil; import com.kabouzeid.appthemehelper.ThemeStore; import com.dkanada.gramophone.shortcuts.DynamicShortcutManager; import org.jellyfin.apiclient.interaction.AndroidDevice; import org.jellyfin.apiclient.interaction.ApiClient; -import org.jellyfin.apiclient.interaction.ApiEventListener; import org.jellyfin.apiclient.interaction.VolleyHttpClient; import org.jellyfin.apiclient.interaction.device.IDevice; import org.jellyfin.apiclient.interaction.http.IAsyncHttpClient; @@ -54,7 +54,7 @@ public class App extends Application { ILogger logger = new AndroidLogger(context.getClass().getName()); IAsyncHttpClient httpClient = new VolleyHttpClient(logger, context); IDevice device = new AndroidDevice(deviceId, deviceName); - ApiEventListener eventListener = new ApiEventListener(); + EventListener eventListener = new EventListener(); return new ApiClient(httpClient, logger, server, appName, appVersion, device, eventListener); } diff --git a/app/src/main/java/com/dkanada/gramophone/helper/EventListener.java b/app/src/main/java/com/dkanada/gramophone/helper/EventListener.java new file mode 100644 index 00000000..30566802 --- /dev/null +++ b/app/src/main/java/com/dkanada/gramophone/helper/EventListener.java @@ -0,0 +1,142 @@ +package com.dkanada.gramophone.helper; + +import android.util.Log; + +import org.jellyfin.apiclient.interaction.ApiClient; +import org.jellyfin.apiclient.interaction.ApiEventListener; +import org.jellyfin.apiclient.model.apiclient.RemoteLogoutReason; +import org.jellyfin.apiclient.model.apiclient.SessionUpdatesEventArgs; +import org.jellyfin.apiclient.model.dto.UserDto; +import org.jellyfin.apiclient.model.entities.LibraryUpdateInfo; +import org.jellyfin.apiclient.model.session.BrowseRequest; +import org.jellyfin.apiclient.model.session.GeneralCommand; +import org.jellyfin.apiclient.model.session.MessageCommand; +import org.jellyfin.apiclient.model.session.PlayRequest; +import org.jellyfin.apiclient.model.session.PlaystateRequest; +import org.jellyfin.apiclient.model.session.SessionInfoDto; +import org.jellyfin.apiclient.model.session.UserDataChangeInfo; + +public class EventListener extends ApiEventListener { + public static final String TAG = EventListener.class.getSimpleName(); + + @Override + public void onRemoteLoggedOut(ApiClient client, RemoteLogoutReason reason) { + Log.i(TAG, "onRemoteLoggedOut"); + } + + @Override + public void onUserUpdated(ApiClient client, UserDto userDto) { + Log.i(TAG, "onUserUpdated"); + } + + @Override + public void onLibraryChanged(ApiClient client, LibraryUpdateInfo info) { + Log.i(TAG, "onLibraryChanged"); + } + + @Override + public void onUserConfigurationUpdated(ApiClient client, UserDto userDto) { + Log.i(TAG, "onUserConfigurationUpdated"); + } + + @Override + public void onBrowseCommand(ApiClient client, BrowseRequest command) { + Log.i(TAG, "onBrowseCommand"); + } + + @Override + public void onPlayCommand(ApiClient client, PlayRequest command) { + Log.i(TAG, "onPlayCommand"); + } + + @Override + public void onPlaystateCommand(ApiClient client, PlaystateRequest command) { + Log.i(TAG, "onPlayStateCommand"); + + switch (command.getCommand()) { + case PlayPause: + if (MusicPlayerRemote.isPlaying()) { + MusicPlayerRemote.pauseSong(); + } else { + MusicPlayerRemote.resumePlaying(); + } + break; + case Pause: + MusicPlayerRemote.pauseSong(); + break; + case Unpause: + MusicPlayerRemote.resumePlaying(); + break; + case NextTrack: + MusicPlayerRemote.playNextSong(); + case PreviousTrack: + MusicPlayerRemote.playPreviousSong(); + break; + case Rewind: + case FastForward: + break; + case Seek: + long position = command.getSeekPositionTicks() / 10000; + MusicPlayerRemote.seekTo((int) position); + break; + case Stop: + MusicPlayerRemote.pauseSong(); + MusicPlayerRemote.clearQueue(); + } + } + + @Override + public void onMessageCommand(ApiClient client, MessageCommand command) { + Log.i(TAG, "onMessageCommand"); + } + + @Override + public void onGeneralCommand(ApiClient client, GeneralCommand command) { + Log.i(TAG, "onGeneralCommand"); + } + + @Override + public void onSendStringCommand(ApiClient client, String value) { + Log.i(TAG, "onSendStringCommand"); + } + + @Override + public void onSetVolumeCommand(ApiClient client, int value) { + Log.i(TAG, "onSetVolumeCommand"); + } + + @Override + public void onSetAudioStreamIndexCommand(ApiClient client, int value) { + Log.i(TAG, "onSetAudioStreamIndexCommand"); + } + + @Override + public void onSetSubtitleStreamIndexCommand(ApiClient client, int value) { + Log.i(TAG, "onSetSubtitleStreamIndexCommand"); + } + + @Override + public void onUserDataChanged(ApiClient client, UserDataChangeInfo info) { + Log.i(TAG, "onUserDataChanged"); + } + + @Override + public void onSessionsUpdated(ApiClient client, SessionUpdatesEventArgs args) { + Log.i(TAG, "onSessionsUpdated"); + } + + @Override + public void onPlaybackStart(ApiClient client, SessionInfoDto info) { + Log.i(TAG, "onPlaybackStart"); + } + + @Override + public void onPlaybackStopped(ApiClient client, SessionInfoDto info) { + Log.i(TAG, "onPlaybackStopped"); + } + + @Override + public void onSessionEnded(ApiClient client, SessionInfoDto info) { + Log.i(TAG, "onSessionEnded"); + } +}