all: log listener additions
Log whenever a listener is added/removed. This might make it easier to track concurrency issues stemming from listener dispatch and addition occuring at the same time.
This commit is contained in:
parent
bf40516ddd
commit
63f7627fbc
3 changed files with 27 additions and 3 deletions
|
@ -240,24 +240,32 @@ constructor(
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
override fun addUpdateListener(listener: MusicRepository.UpdateListener) {
|
override fun addUpdateListener(listener: MusicRepository.UpdateListener) {
|
||||||
|
logD("Adding $listener to update listeners")
|
||||||
updateListeners.add(listener)
|
updateListeners.add(listener)
|
||||||
listener.onMusicChanges(MusicRepository.Changes(deviceLibrary = true, userLibrary = true))
|
listener.onMusicChanges(MusicRepository.Changes(deviceLibrary = true, userLibrary = true))
|
||||||
}
|
}
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
override fun removeUpdateListener(listener: MusicRepository.UpdateListener) {
|
override fun removeUpdateListener(listener: MusicRepository.UpdateListener) {
|
||||||
updateListeners.remove(listener)
|
logD("Removing $listener to update listeners")
|
||||||
|
if (!updateListeners.remove(listener)) {
|
||||||
|
logW("Update listener $listener was not added prior, cannot remove")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
override fun addIndexingListener(listener: MusicRepository.IndexingListener) {
|
override fun addIndexingListener(listener: MusicRepository.IndexingListener) {
|
||||||
|
logD("Adding $listener to indexing listeners")
|
||||||
indexingListeners.add(listener)
|
indexingListeners.add(listener)
|
||||||
listener.onIndexingStateChanged()
|
listener.onIndexingStateChanged()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
override fun removeIndexingListener(listener: MusicRepository.IndexingListener) {
|
override fun removeIndexingListener(listener: MusicRepository.IndexingListener) {
|
||||||
indexingListeners.remove(listener)
|
logD("Removing $listener from indexing listeners")
|
||||||
|
if (!indexingListeners.remove(listener)) {
|
||||||
|
logW("Indexing listener $listener was not added prior, cannot remove")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
|
@ -266,6 +274,7 @@ constructor(
|
||||||
logW("Worker is already registered")
|
logW("Worker is already registered")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
logD("Registering worker $worker")
|
||||||
indexingWorker = worker
|
indexingWorker = worker
|
||||||
if (indexingState == null) {
|
if (indexingState == null) {
|
||||||
worker.requestIndex(true)
|
worker.requestIndex(true)
|
||||||
|
@ -278,6 +287,7 @@ constructor(
|
||||||
logW("Given worker did not match current worker")
|
logW("Given worker did not match current worker")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
logD("Unregistering worker $worker")
|
||||||
indexingWorker = null
|
indexingWorker = null
|
||||||
currentIndexingState = null
|
currentIndexingState = null
|
||||||
}
|
}
|
||||||
|
|
|
@ -323,6 +323,7 @@ class PlaybackStateManagerImpl @Inject constructor() : PlaybackStateManager {
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
override fun addListener(listener: PlaybackStateManager.Listener) {
|
override fun addListener(listener: PlaybackStateManager.Listener) {
|
||||||
|
logD("Adding $listener to listeners")
|
||||||
if (isInitialized) {
|
if (isInitialized) {
|
||||||
listener.onNewPlayback(queue, parent)
|
listener.onNewPlayback(queue, parent)
|
||||||
listener.onRepeatChanged(repeatMode)
|
listener.onRepeatChanged(repeatMode)
|
||||||
|
@ -334,7 +335,10 @@ class PlaybackStateManagerImpl @Inject constructor() : PlaybackStateManager {
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
override fun removeListener(listener: PlaybackStateManager.Listener) {
|
override fun removeListener(listener: PlaybackStateManager.Listener) {
|
||||||
listeners.remove(listener)
|
logD("Removing $listener from listeners")
|
||||||
|
if (!listeners.remove(listener)) {
|
||||||
|
logW("Listener $listener was not added prior, cannot remove")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
|
@ -344,6 +348,8 @@ class PlaybackStateManagerImpl @Inject constructor() : PlaybackStateManager {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logD("Registering internal player $internalPlayer")
|
||||||
|
|
||||||
if (isInitialized) {
|
if (isInitialized) {
|
||||||
internalPlayer.loadSong(queue.currentSong, playerState.isPlaying)
|
internalPlayer.loadSong(queue.currentSong, playerState.isPlaying)
|
||||||
internalPlayer.seekTo(playerState.calculateElapsedPositionMs())
|
internalPlayer.seekTo(playerState.calculateElapsedPositionMs())
|
||||||
|
@ -363,6 +369,8 @@ class PlaybackStateManagerImpl @Inject constructor() : PlaybackStateManager {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logD("Unregistering internal player $internalPlayer")
|
||||||
|
|
||||||
this.internalPlayer = null
|
this.internalPlayer = null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@ import android.content.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import androidx.annotation.StringRes
|
import androidx.annotation.StringRes
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
|
import org.oxycblt.auxio.util.logD
|
||||||
import org.oxycblt.auxio.util.logW
|
import org.oxycblt.auxio.util.logW
|
||||||
import org.oxycblt.auxio.util.unlikelyToBeNull
|
import org.oxycblt.auxio.util.unlikelyToBeNull
|
||||||
|
|
||||||
|
@ -73,15 +74,19 @@ interface Settings<L> {
|
||||||
override fun registerListener(listener: L) {
|
override fun registerListener(listener: L) {
|
||||||
if (this.listener == null) {
|
if (this.listener == null) {
|
||||||
// Registering a listener when it was null prior, attach the callback.
|
// Registering a listener when it was null prior, attach the callback.
|
||||||
|
logD("Registering shared preference listener")
|
||||||
sharedPreferences.registerOnSharedPreferenceChangeListener(this)
|
sharedPreferences.registerOnSharedPreferenceChangeListener(this)
|
||||||
}
|
}
|
||||||
|
logD("Registering listener $listener")
|
||||||
this.listener = listener
|
this.listener = listener
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun unregisterListener(listener: L) {
|
override fun unregisterListener(listener: L) {
|
||||||
if (this.listener !== listener) {
|
if (this.listener !== listener) {
|
||||||
logW("Given listener was not the current listener.")
|
logW("Given listener was not the current listener.")
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
logD("Unregistering listener $listener")
|
||||||
this.listener = null
|
this.listener = null
|
||||||
// No longer have a listener, detach from the preferences instance.
|
// No longer have a listener, detach from the preferences instance.
|
||||||
sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
|
sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
|
||||||
|
@ -92,6 +97,7 @@ interface Settings<L> {
|
||||||
key: String
|
key: String
|
||||||
) {
|
) {
|
||||||
// FIXME: Settings initialization firing the listener.
|
// FIXME: Settings initialization firing the listener.
|
||||||
|
logD("Dispatching settings change $key")
|
||||||
onSettingChanged(key, unlikelyToBeNull(listener))
|
onSettingChanged(key, unlikelyToBeNull(listener))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue