diff --git a/dependencies.gradle b/dependencies.gradle index a18b5d87..520aa0a4 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -43,6 +43,8 @@ ext.versions = [ timber : "4.7.1", fastScroll : "2.0.1", colorPicker : "2.2.3", + rxJava : "3.1.2", + rxAndroid : "3.0.0", ] ext.gradlePlugins = [ @@ -91,6 +93,8 @@ ext.other = [ fastScroll : "com.simplecityapps:recyclerview-fastscroll:$versions.fastScroll", sortListView : "com.github.tzugen:drag-sort-listview:$versions.sortListView", colorPickerView : "com.github.skydoves:colorpickerview:$versions.colorPicker", + rxJava : "io.reactivex.rxjava3:rxjava:$versions.rxJava", + rxAndroid : "io.reactivex.rxjava3:rxandroid:$versions.rxAndroid", ] ext.testing = [ diff --git a/ultrasonic/build.gradle b/ultrasonic/build.gradle index 7835f863..27d06bc3 100644 --- a/ultrasonic/build.gradle +++ b/ultrasonic/build.gradle @@ -106,6 +106,8 @@ dependencies { implementation other.fastScroll implementation other.sortListView implementation other.colorPickerView + implementation other.rxJava + implementation other.rxAndroid kapt androidSupport.room diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/NowPlayingFragment.java b/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/NowPlayingFragment.java index 4da43426..cd5246cd 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/NowPlayingFragment.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/NowPlayingFragment.java @@ -18,6 +18,7 @@ import org.moire.ultrasonic.domain.MusicDirectory; import org.moire.ultrasonic.domain.PlayerState; import org.moire.ultrasonic.service.DownloadFile; import org.moire.ultrasonic.service.MediaPlayerController; +import org.moire.ultrasonic.service.RxBus; import org.moire.ultrasonic.subsonic.ImageLoaderProvider; import org.moire.ultrasonic.util.Constants; import org.moire.ultrasonic.util.NowPlayingEventDistributor; @@ -26,6 +27,7 @@ import org.moire.ultrasonic.util.Settings; import org.moire.ultrasonic.util.Util; import kotlin.Lazy; +import kotlin.Unit; import timber.log.Timber; import static org.koin.java.KoinJavaComponent.inject; @@ -70,8 +72,6 @@ public class NowPlayingFragment extends Fragment { nowPlayingArtist = view.findViewById(R.id.now_playing_artist); nowPlayingEventListener = new NowPlayingEventListener() { - @Override - public void onDismissNowPlaying() { } @Override public void onHideNowPlaying() { } @Override @@ -177,7 +177,7 @@ public class NowPlayingFragment extends Fragment { { if (deltaY < 0) { - nowPlayingEventDistributor.getValue().raiseNowPlayingDismissedEvent(); + RxBus.INSTANCE.getDismissNowPlayingCommandPublisher().onNext(Unit.INSTANCE); return false; } if (deltaY > 0) diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SettingsFragment.java b/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SettingsFragment.java index c1fb0466..e70dfc17 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SettingsFragment.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SettingsFragment.java @@ -31,12 +31,12 @@ import org.moire.ultrasonic.log.FileLoggerTree; import org.moire.ultrasonic.provider.SearchSuggestionProvider; import org.moire.ultrasonic.service.Consumer; import org.moire.ultrasonic.service.MediaPlayerController; +import org.moire.ultrasonic.service.RxBus; import org.moire.ultrasonic.util.Constants; import org.moire.ultrasonic.util.FileUtil; import org.moire.ultrasonic.util.MediaSessionHandler; import org.moire.ultrasonic.util.PermissionUtil; import org.moire.ultrasonic.util.Settings; -import org.moire.ultrasonic.util.ThemeChangedEventDistributor; import org.moire.ultrasonic.util.TimeSpanPreference; import org.moire.ultrasonic.util.TimeSpanPreferenceDialogFragmentCompat; import org.moire.ultrasonic.util.Util; @@ -44,6 +44,7 @@ import org.moire.ultrasonic.util.Util; import java.io.File; import kotlin.Lazy; +import kotlin.Unit; import timber.log.Timber; import static org.koin.java.KoinJavaComponent.inject; @@ -89,7 +90,6 @@ public class SettingsFragment extends PreferenceFragmentCompat private final Lazy mediaPlayerControllerLazy = inject(MediaPlayerController.class); private final Lazy permissionUtil = inject(PermissionUtil.class); - private final Lazy themeChangedEventDistributor = inject(ThemeChangedEventDistributor.class); private final Lazy mediaSessionHandler = inject(MediaSessionHandler.class); @Override @@ -192,7 +192,7 @@ public class SettingsFragment extends PreferenceFragmentCompat } else if (Constants.PREFERENCES_KEY_ID3_TAGS.equals(key)) { showArtistPicture.setEnabled(sharedPreferences.getBoolean(key, false)); } else if (Constants.PREFERENCES_KEY_THEME.equals(key)) { - themeChangedEventDistributor.getValue().RaiseThemeChangedEvent(); + RxBus.INSTANCE.getThemeChangedEventPublisher().onNext(Unit.INSTANCE); } } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt index a92bfcc4..a98b042c 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt @@ -31,6 +31,7 @@ import androidx.navigation.ui.setupWithNavController import androidx.preference.PreferenceManager import com.google.android.material.button.MaterialButton import com.google.android.material.navigation.NavigationView +import io.reactivex.rxjava3.disposables.Disposable import org.koin.android.ext.android.inject import org.koin.androidx.viewmodel.ext.android.viewModel import org.moire.ultrasonic.R @@ -43,6 +44,7 @@ import org.moire.ultrasonic.provider.SearchSuggestionProvider import org.moire.ultrasonic.service.DownloadFile import org.moire.ultrasonic.service.MediaPlayerController import org.moire.ultrasonic.service.MediaPlayerLifecycleSupport +import org.moire.ultrasonic.service.RxBus import org.moire.ultrasonic.subsonic.ImageLoaderProvider import org.moire.ultrasonic.util.Constants import org.moire.ultrasonic.util.FileUtil @@ -52,8 +54,6 @@ import org.moire.ultrasonic.util.PermissionUtil import org.moire.ultrasonic.util.ServerColor import org.moire.ultrasonic.util.Settings import org.moire.ultrasonic.util.SubsonicUncaughtExceptionHandler -import org.moire.ultrasonic.util.ThemeChangedEventDistributor -import org.moire.ultrasonic.util.ThemeChangedEventListener import org.moire.ultrasonic.util.Util import timber.log.Timber @@ -75,14 +75,13 @@ class NavigationActivity : AppCompatActivity() { private lateinit var appBarConfiguration: AppBarConfiguration private lateinit var nowPlayingEventListener: NowPlayingEventListener - private lateinit var themeChangedEventListener: ThemeChangedEventListener + private var themeChangedEventSubscription: Disposable? = null private val serverSettingsModel: ServerSettingsModel by viewModel() private val lifecycleSupport: MediaPlayerLifecycleSupport by inject() private val mediaPlayerController: MediaPlayerController by inject() private val imageLoaderProvider: ImageLoaderProvider by inject() private val nowPlayingEventDistributor: NowPlayingEventDistributor by inject() - private val themeChangedEventDistributor: ThemeChangedEventDistributor by inject() private val permissionUtil: PermissionUtil by inject() private val activeServerProvider: ActiveServerProvider by inject() private val serverRepository: ServerSettingDao by inject() @@ -169,11 +168,12 @@ class NavigationActivity : AppCompatActivity() { showWelcomeDialog() } + RxBus.dismissNowPlayingCommandObservable.subscribe { + nowPlayingHidden = true + hideNowPlaying() + } + nowPlayingEventListener = object : NowPlayingEventListener { - override fun onDismissNowPlaying() { - nowPlayingHidden = true - hideNowPlaying() - } override fun onHideNowPlaying() { hideNowPlaying() @@ -184,12 +184,11 @@ class NavigationActivity : AppCompatActivity() { } } - themeChangedEventListener = object : ThemeChangedEventListener { - override fun onThemeChanged() { recreate() } + themeChangedEventSubscription = RxBus.themeChangedEventObservable.subscribe { + recreate() } nowPlayingEventDistributor.subscribe(nowPlayingEventListener) - themeChangedEventDistributor.subscribe(themeChangedEventListener) serverRepository.liveServerCount().observe( this, @@ -238,7 +237,7 @@ class NavigationActivity : AppCompatActivity() { override fun onDestroy() { super.onDestroy() nowPlayingEventDistributor.unsubscribe(nowPlayingEventListener) - themeChangedEventDistributor.unsubscribe(themeChangedEventListener) + themeChangedEventSubscription?.dispose() imageLoaderProvider.clearImageLoader() permissionUtil.onForegroundApplicationStopped() } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/ApplicationModule.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/ApplicationModule.kt index e44e0774..f7996ca7 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/ApplicationModule.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/ApplicationModule.kt @@ -8,7 +8,6 @@ import org.moire.ultrasonic.util.MediaSessionEventDistributor import org.moire.ultrasonic.util.MediaSessionHandler import org.moire.ultrasonic.util.NowPlayingEventDistributor import org.moire.ultrasonic.util.PermissionUtil -import org.moire.ultrasonic.util.ThemeChangedEventDistributor /** * This Koin module contains the registration of general classes needed for Ultrasonic @@ -18,7 +17,6 @@ val applicationModule = module { single { ImageLoaderProvider(androidContext()) } single { PermissionUtil(androidContext()) } single { NowPlayingEventDistributor() } - single { ThemeChangedEventDistributor() } single { MediaSessionEventDistributor() } single { MediaSessionHandler() } } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/AutoMediaBrowserService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/AutoMediaBrowserService.kt index b8f55481..60547765 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/AutoMediaBrowserService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/AutoMediaBrowserService.kt @@ -14,6 +14,7 @@ import android.support.v4.media.MediaDescriptionCompat import android.support.v4.media.session.MediaSessionCompat import androidx.media.MediaBrowserServiceCompat import androidx.media.utils.MediaConstants +import io.reactivex.rxjava3.disposables.Disposable import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job @@ -93,16 +94,17 @@ class AutoMediaBrowserService : MediaBrowserServiceCompat() { private val useId3Tags get() = Settings.shouldUseId3Tags private val musicFolderId get() = activeServerProvider.getActiveServer().musicFolderId + private var mediaSessionTokenSubscription: Disposable? = null + @Suppress("MagicNumber") override fun onCreate() { super.onCreate() + mediaSessionTokenSubscription = RxBus.mediaSessionTokenObservable.subscribe { + if (sessionToken == null) sessionToken = it + } + mediaSessionEventListener = object : MediaSessionEventListener { - override fun onMediaSessionTokenCreated(token: MediaSessionCompat.Token) { - if (sessionToken == null) { - sessionToken = token - } - } override fun onPlayFromMediaIdRequested(mediaId: String?, extras: Bundle?) { Timber.d( @@ -182,6 +184,7 @@ class AutoMediaBrowserService : MediaBrowserServiceCompat() { override fun onDestroy() { super.onDestroy() + mediaSessionTokenSubscription?.dispose() mediaSessionEventDistributor.unsubscribe(mediaSessionEventListener) mediaSessionHandler.release() serviceJob.cancel() diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerLifecycleSupport.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerLifecycleSupport.kt index 1bcdfce5..6fd548c9 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerLifecycleSupport.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerLifecycleSupport.kt @@ -14,6 +14,7 @@ import android.content.IntentFilter import android.media.AudioManager import android.os.Build import android.view.KeyEvent +import io.reactivex.rxjava3.disposables.Disposable import org.koin.core.component.KoinComponent import org.koin.core.component.inject import org.moire.ultrasonic.R @@ -39,7 +40,7 @@ class MediaPlayerLifecycleSupport : KoinComponent { private var created = false private var headsetEventReceiver: BroadcastReceiver? = null - private lateinit var mediaSessionEventListener: MediaSessionEventListener + private var mediaButtonEventSubscription: Disposable? = null fun onCreate() { onCreate(false, null) @@ -52,13 +53,10 @@ class MediaPlayerLifecycleSupport : KoinComponent { return } - mediaSessionEventListener = object : MediaSessionEventListener { - override fun onMediaButtonEvent(keyEvent: KeyEvent?) { - if (keyEvent != null) handleKeyEvent(keyEvent) - } + mediaButtonEventSubscription = RxBus.mediaButtonEventObservable.subscribe { + handleKeyEvent(it) } - mediaSessionEventDistributor.subscribe(mediaSessionEventListener) registerHeadsetReceiver() mediaPlayerController.onCreate() if (autoPlay) mediaPlayerController.preload() @@ -98,9 +96,8 @@ class MediaPlayerLifecycleSupport : KoinComponent { mediaPlayerController.playerPosition ) - mediaSessionEventDistributor.unsubscribe(mediaSessionEventListener) - mediaPlayerController.clear(false) + mediaButtonEventSubscription?.dispose() applicationContext().unregisterReceiver(headsetEventReceiver) mediaPlayerController.onDestroy() @@ -165,12 +162,7 @@ class MediaPlayerLifecycleSupport : KoinComponent { } } - val headsetIntentFilter: IntentFilter = - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - IntentFilter(AudioManager.ACTION_HEADSET_PLUG) - } else { - IntentFilter(Intent.ACTION_HEADSET_PLUG) - } + val headsetIntentFilter = IntentFilter(AudioManager.ACTION_HEADSET_PLUG) applicationContext().registerReceiver(headsetEventReceiver, headsetIntentFilter) } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt index 21a8e5f8..71402dac 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt @@ -22,6 +22,7 @@ import android.support.v4.media.session.MediaSessionCompat import android.view.KeyEvent import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat +import io.reactivex.rxjava3.disposables.Disposable import kotlin.collections.ArrayList import org.koin.android.ext.android.inject import org.moire.ultrasonic.R @@ -73,6 +74,7 @@ class MediaPlayerService : Service() { private var isInForeground = false private var notificationBuilder: NotificationCompat.Builder? = null private lateinit var mediaSessionEventListener: MediaSessionEventListener + private var mediaSessionTokenSubscription: Disposable? = null private val repeatMode: RepeatMode get() = Settings.repeatMode @@ -102,11 +104,11 @@ class MediaPlayerService : Service() { localMediaPlayer.onNextSongRequested = Runnable { setNextPlaying() } - mediaSessionEventListener = object : MediaSessionEventListener { - override fun onMediaSessionTokenCreated(token: MediaSessionCompat.Token) { - mediaSessionToken = token - } + mediaSessionTokenSubscription = RxBus.mediaSessionTokenObservable.subscribe { + mediaSessionToken = it + } + mediaSessionEventListener = object : MediaSessionEventListener { override fun onSkipToQueueItemRequested(id: Long) { play(id.toInt()) } @@ -134,6 +136,7 @@ class MediaPlayerService : Service() { super.onDestroy() instance = null try { + mediaSessionTokenSubscription?.dispose() mediaSessionEventDistributor.unsubscribe(mediaSessionEventListener) mediaSessionHandler.release() @@ -357,19 +360,11 @@ class MediaPlayerService : Service() { private fun setupOnCurrentPlayingChangedHandler() { localMediaPlayer.onCurrentPlayingChanged = { currentPlaying: DownloadFile? -> - if (currentPlaying != null) { - Util.broadcastNewTrackInfo(this@MediaPlayerService, currentPlaying.song) - Util.broadcastA2dpMetaDataChange( - this@MediaPlayerService, playerPosition, currentPlaying, - downloader.all.size, downloader.currentPlayingIndex + 1 - ) - } else { - Util.broadcastNewTrackInfo(this@MediaPlayerService, null) - Util.broadcastA2dpMetaDataChange( - this@MediaPlayerService, playerPosition, null, - downloader.all.size, downloader.currentPlayingIndex + 1 - ) - } + Util.broadcastNewTrackInfo(this@MediaPlayerService, currentPlaying?.song) + Util.broadcastA2dpMetaDataChange( + this@MediaPlayerService, playerPosition, currentPlaying, + downloader.all.size, downloader.currentPlayingIndex + 1 + ) // Update widget val playerState = localMediaPlayer.playerState diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/RxBus.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/RxBus.kt new file mode 100644 index 00000000..f5ec3885 --- /dev/null +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/RxBus.kt @@ -0,0 +1,42 @@ +package org.moire.ultrasonic.service + +import android.support.v4.media.session.MediaSessionCompat +import android.view.KeyEvent +import io.reactivex.rxjava3.subjects.PublishSubject +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers +import io.reactivex.rxjava3.core.Observable +import io.reactivex.rxjava3.observables.ConnectableObservable +import timber.log.Timber + +object RxBus { + var mediaSessionTokenPublisher: PublishSubject = + PublishSubject.create() + val mediaSessionTokenObservable: Observable = + mediaSessionTokenPublisher.observeOn(AndroidSchedulers.mainThread()) + .replay(1) + .autoConnect() + .doOnEach { Timber.d("RxBus mediaSessionTokenPublisher onEach $it")} + + val mediaButtonEventPublisher: PublishSubject = + PublishSubject.create() + val mediaButtonEventObservable: Observable = + mediaButtonEventPublisher.observeOn(AndroidSchedulers.mainThread()) + .doOnEach { Timber.d("RxBus mediaButtonEventPublisher onEach $it")} + + val themeChangedEventPublisher: PublishSubject = + PublishSubject.create() + val themeChangedEventObservable: Observable = + themeChangedEventPublisher.observeOn(AndroidSchedulers.mainThread()) + .doOnEach { Timber.d("RxBus themeChangedEventPublisher onEach $it")} + + val dismissNowPlayingCommandPublisher: PublishSubject = + PublishSubject.create() + val dismissNowPlayingCommandObservable: Observable = + dismissNowPlayingCommandPublisher.observeOn(AndroidSchedulers.mainThread()) + .doOnEach { Timber.d("RxBus dismissNowPlayingCommandPublisher onEach $it")} + + fun releaseMediaSessionToken() { mediaSessionTokenPublisher = PublishSubject.create() } + +} + + diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/MediaSessionEventDistributor.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/MediaSessionEventDistributor.kt index a9ecade8..fc5b3ab6 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/MediaSessionEventDistributor.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/MediaSessionEventDistributor.kt @@ -23,30 +23,12 @@ class MediaSessionEventDistributor { fun subscribe(listener: MediaSessionEventListener) { eventListenerList.add(listener) - - synchronized(this) { - if (cachedToken != null) - listener.onMediaSessionTokenCreated(cachedToken!!) - } } fun unsubscribe(listener: MediaSessionEventListener) { eventListenerList.remove(listener) } - fun releaseCachedMediaSessionToken() { - synchronized(this) { - cachedToken = null - } - } - - fun raiseMediaSessionTokenCreatedEvent(token: MediaSessionCompat.Token) { - synchronized(this) { - cachedToken = token - eventListenerList.forEach { listener -> listener.onMediaSessionTokenCreated(token) } - } - } - fun raisePlayFromMediaIdRequestedEvent(mediaId: String?, extras: Bundle?) { eventListenerList.forEach { listener -> @@ -61,8 +43,4 @@ class MediaSessionEventDistributor { fun raiseSkipToQueueItemRequestedEvent(id: Long) { eventListenerList.forEach { listener -> listener.onSkipToQueueItemRequested(id) } } - - fun raiseMediaButtonEvent(keyEvent: KeyEvent?) { - eventListenerList.forEach { listener -> listener.onMediaButtonEvent(keyEvent) } - } } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/MediaSessionEventListener.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/MediaSessionEventListener.kt index e4075248..fe59496b 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/MediaSessionEventListener.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/MediaSessionEventListener.kt @@ -15,9 +15,9 @@ import android.view.KeyEvent * Callback interface for MediaSession related event subscribers */ interface MediaSessionEventListener { - fun onMediaSessionTokenCreated(token: MediaSessionCompat.Token) {} +// fun onMediaSessionTokenCreated(token: MediaSessionCompat.Token) {} fun onPlayFromMediaIdRequested(mediaId: String?, extras: Bundle?) {} fun onPlayFromSearchRequested(query: String?, extras: Bundle?) {} fun onSkipToQueueItemRequested(id: Long) {} - fun onMediaButtonEvent(keyEvent: KeyEvent?) {} +// fun onMediaButtonEvent(keyEvent: KeyEvent?) {} } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/MediaSessionHandler.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/MediaSessionHandler.kt index d7ebf424..a0db5943 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/MediaSessionHandler.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/MediaSessionHandler.kt @@ -25,6 +25,7 @@ import org.moire.ultrasonic.domain.PlayerState import org.moire.ultrasonic.imageloader.BitmapUtils import org.moire.ultrasonic.receiver.MediaButtonIntentReceiver import org.moire.ultrasonic.service.DownloadFile +import org.moire.ultrasonic.service.RxBus import timber.log.Timber private const val INTENT_CODE_MEDIA_BUTTON = 161 @@ -53,7 +54,7 @@ class MediaSessionHandler : KoinComponent { if (referenceCount > 0) return mediaSession?.isActive = false - mediaSessionEventDistributor.releaseCachedMediaSessionToken() + RxBus.releaseMediaSessionToken() mediaSession?.release() mediaSession = null @@ -72,7 +73,7 @@ class MediaSessionHandler : KoinComponent { mediaSession = MediaSessionCompat(applicationContext, "UltrasonicService") val mediaSessionToken = mediaSession?.sessionToken ?: return - mediaSessionEventDistributor.raiseMediaSessionTokenCreatedEvent(mediaSessionToken) + RxBus.mediaSessionTokenPublisher.onNext(mediaSessionToken) updateMediaButtonReceiver() @@ -147,7 +148,7 @@ class MediaSessionHandler : KoinComponent { // This probably won't be necessary once we implement more // of the modern media APIs, like the MediaController etc. val event = mediaButtonEvent.extras!!["android.intent.extra.KEY_EVENT"] as KeyEvent? - mediaSessionEventDistributor.raiseMediaButtonEvent(event) + event?.let { RxBus.mediaButtonEventPublisher.onNext(it) } return true } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/NowPlayingEventDistributor.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/NowPlayingEventDistributor.kt index 0d19903e..785bdfb1 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/NowPlayingEventDistributor.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/NowPlayingEventDistributor.kt @@ -23,8 +23,4 @@ class NowPlayingEventDistributor { fun raiseHideNowPlayingEvent() { eventListenerList.forEach { listener -> listener.onHideNowPlaying() } } - - fun raiseNowPlayingDismissedEvent() { - eventListenerList.forEach { listener -> listener.onDismissNowPlaying() } - } } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/NowPlayingEventListener.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/NowPlayingEventListener.kt index 3f4bd75e..edcbcf2c 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/NowPlayingEventListener.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/NowPlayingEventListener.kt @@ -4,7 +4,6 @@ package org.moire.ultrasonic.util * Callback interface for Now Playing event subscribers */ interface NowPlayingEventListener { - fun onDismissNowPlaying() fun onHideNowPlaying() fun onShowNowPlaying() } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/ThemeChangedEventDistributor.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/ThemeChangedEventDistributor.kt deleted file mode 100644 index bdce05ab..00000000 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/ThemeChangedEventDistributor.kt +++ /dev/null @@ -1,22 +0,0 @@ -package org.moire.ultrasonic.util - -/** - * This class distributes Theme change related events to its subscribers. - * It is a primitive implementation of a pub-sub event bus - */ -class ThemeChangedEventDistributor { - var eventListenerList: MutableList = - listOf().toMutableList() - - fun subscribe(listener: ThemeChangedEventListener) { - eventListenerList.add(listener) - } - - fun unsubscribe(listener: ThemeChangedEventListener) { - eventListenerList.remove(listener) - } - - fun RaiseThemeChangedEvent() { - eventListenerList.forEach { listener -> listener.onThemeChanged() } - } -} diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/ThemeChangedEventListener.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/ThemeChangedEventListener.kt deleted file mode 100644 index 5656f1d4..00000000 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/ThemeChangedEventListener.kt +++ /dev/null @@ -1,8 +0,0 @@ -package org.moire.ultrasonic.util - -/** - * Callback interface for Theme change event subscribers - */ -interface ThemeChangedEventListener { - fun onThemeChanged() -}