diff --git a/app/src/main/java/com/cappielloantonio/play/repository/QueueRepository.java b/app/src/main/java/com/cappielloantonio/play/repository/QueueRepository.java index a9e6f729..4190baf2 100644 --- a/app/src/main/java/com/cappielloantonio/play/repository/QueueRepository.java +++ b/app/src/main/java/com/cappielloantonio/play/repository/QueueRepository.java @@ -233,28 +233,6 @@ public class QueueRepository { return timestamp; } - public boolean isMediaPlayingPlausible(MediaItem mediaItem) { - boolean isPlausible = true; - - GetLastPlayedMediaThreadSafe getLastPlayedMediaThreadSafe = new GetLastPlayedMediaThreadSafe(queueDao); - Thread thread = new Thread(getLastPlayedMediaThreadSafe); - thread.start(); - - try { - thread.join(); - Queue lastMediaPlayed = getLastPlayedMediaThreadSafe.getQueueItem(); - - if (mediaItem.mediaId.equals(lastMediaPlayed.getId())) { - - isPlausible = System.currentTimeMillis() > lastMediaPlayed.getLastPlay() + lastMediaPlayed.getDuration() * 1000; - } - } catch (InterruptedException e) { - e.printStackTrace(); - } - - return isPlausible; - } - private static class GetMediaThreadSafe implements Runnable { private final QueueDao queueDao; private List media; diff --git a/app/src/main/java/com/cappielloantonio/play/service/MediaManager.java b/app/src/main/java/com/cappielloantonio/play/service/MediaManager.java index c1f70cc9..286148e8 100644 --- a/app/src/main/java/com/cappielloantonio/play/service/MediaManager.java +++ b/app/src/main/java/com/cappielloantonio/play/service/MediaManager.java @@ -17,6 +17,8 @@ import java.util.List; import java.util.concurrent.ExecutionException; public class MediaManager { + private static final String TAG = "MediaManager"; + public static void reset(ListenableFuture mediaBrowserListenableFuture) { if (mediaBrowserListenableFuture != null) { mediaBrowserListenableFuture.addListener(() -> { @@ -225,17 +227,13 @@ public class MediaManager { public static void scrobble(MediaItem mediaItem) { if (mediaItem != null) { - if (getQueueRepository().isMediaPlayingPlausible(mediaItem)) { - getSongRepository().scrobble(mediaItem.mediaMetadata.extras.getString("id")); - } + getSongRepository().scrobble(mediaItem.mediaMetadata.extras.getString("id")); } } public static void saveChronology(MediaItem mediaItem) { if (mediaItem != null) { - if (getQueueRepository().isMediaPlayingPlausible(mediaItem)) { - getChronologyRepository().insert(new Chronology(mediaItem)); - } + getChronologyRepository().insert(new Chronology(mediaItem)); } } diff --git a/app/src/main/java/com/cappielloantonio/play/service/MediaService.kt b/app/src/main/java/com/cappielloantonio/play/service/MediaService.kt index a552451f..7333f1cc 100644 --- a/app/src/main/java/com/cappielloantonio/play/service/MediaService.kt +++ b/app/src/main/java/com/cappielloantonio/play/service/MediaService.kt @@ -6,6 +6,8 @@ import android.app.PendingIntent.FLAG_UPDATE_CURRENT import android.app.TaskStackBuilder import android.content.Intent import android.os.Bundle +import android.os.Looper +import android.util.Log import androidx.media3.cast.CastPlayer import androidx.media3.cast.SessionAvailabilityListener import androidx.media3.common.* @@ -27,6 +29,8 @@ import com.google.common.util.concurrent.ListenableFuture @UnstableApi class MediaService : MediaLibraryService(), SessionAvailabilityListener { + private val TAG = "MediaService" + private val librarySessionCallback = CustomMediaLibrarySessionCallback() private lateinit var player: ExoPlayer @@ -234,12 +238,9 @@ class MediaService : MediaLibraryService(), SessionAvailabilityListener { override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) { if (mediaItem == null) return - if (mediaItem.mediaMetadata.extras?.getString("type") == Constants.MEDIA_TYPE_MUSIC) { - MediaManager.scrobble(mediaItem) - MediaManager.saveChronology(mediaItem) + if(reason == Player.MEDIA_ITEM_TRANSITION_REASON_SEEK || reason == Player.MEDIA_ITEM_TRANSITION_REASON_AUTO) { + MediaManager.setLastPlayedTimestamp(mediaItem) } - - MediaManager.setLastPlayedTimestamp(mediaItem) } override fun onIsPlayingChanged(isPlaying: Boolean) { @@ -250,6 +251,25 @@ class MediaService : MediaLibraryService(), SessionAvailabilityListener { ) } } + + override fun onPositionDiscontinuity( + oldPosition: Player.PositionInfo, + newPosition: Player.PositionInfo, + reason: Int + ) { + super.onPositionDiscontinuity(oldPosition, newPosition, reason) + + if(reason == Player.DISCONTINUITY_REASON_AUTO_TRANSITION) { + if (oldPosition.mediaItem?.mediaMetadata?.extras?.getString("type") == Constants.MEDIA_TYPE_MUSIC) { + MediaManager.scrobble(oldPosition.mediaItem) + MediaManager.saveChronology(oldPosition.mediaItem) + } + + if (newPosition.mediaItem?.mediaMetadata?.extras?.getString("type") == Constants.MEDIA_TYPE_MUSIC) { + MediaManager.setLastPlayedTimestamp(newPosition.mediaItem) + } + } + } }) }