diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9aaa2bebd..7399a8e59 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -8,6 +8,7 @@ + - - diff --git a/app/src/main/java/com/github/goldy1992/mp3player/MikesMp3Player.java b/app/src/main/java/com/github/goldy1992/mp3player/MikesMp3Player.java index 85342c8b0..e6a955554 100644 --- a/app/src/main/java/com/github/goldy1992/mp3player/MikesMp3Player.java +++ b/app/src/main/java/com/github/goldy1992/mp3player/MikesMp3Player.java @@ -2,14 +2,11 @@ import android.app.Application; +/** + * Declared in case need in the future + */ public class MikesMp3Player extends Application { - /** - * Declared in case need in the future - */ - @Override - public void onCreate() { - super.onCreate(); -// startService(new Intent(this, KillNotificationService.class)); - } + + } diff --git a/app/src/main/java/com/github/goldy1992/mp3player/client/SeekerBarController2.java b/app/src/main/java/com/github/goldy1992/mp3player/client/SeekerBarController2.java index c3c0533b7..b604c4589 100644 --- a/app/src/main/java/com/github/goldy1992/mp3player/client/SeekerBarController2.java +++ b/app/src/main/java/com/github/goldy1992/mp3player/client/SeekerBarController2.java @@ -182,7 +182,7 @@ private boolean validPosition(long position) { } private float getPositionAsFraction() { - Log.e(LOG_TAG, "current pos: " + currentPosition + ", seekerbar max" + seekerBar.getMax()); + //Log.d(LOG_TAG, "current pos: " + currentPosition + ", seekerbar max" + seekerBar.getMax()); return currentPosition / (float) seekerBar.getMax(); } diff --git a/app/src/main/java/com/github/goldy1992/mp3player/client/activities/FolderActivity.java b/app/src/main/java/com/github/goldy1992/mp3player/client/activities/FolderActivity.java index c4de15a18..604ccd1fa 100644 --- a/app/src/main/java/com/github/goldy1992/mp3player/client/activities/FolderActivity.java +++ b/app/src/main/java/com/github/goldy1992/mp3player/client/activities/FolderActivity.java @@ -44,7 +44,7 @@ public void onConnected() { super.onConnected(); MediaItem mediaItem = getIntent().getParcelableExtra(MEDIA_ITEM); String itemLibraryId = MediaItemUtils.getLibraryId(mediaItem); - this.viewPageFragment = new SongListFragment(MediaItemType.FOLDER, itemLibraryId, getMediaActivityCompatComponent()); + this.viewPageFragment = SongListFragment.newInstance(MediaItemType.FOLDER, itemLibraryId, getMediaActivityCompatComponent()); initialiseView(R.layout.activity_folder); getSupportFragmentManager().beginTransaction().add(R.id.songListFragment, viewPageFragment).commit(); getSupportActionBar().setTitle(MediaItemUtils.getDirectoryName(mediaItem)); diff --git a/app/src/main/java/com/github/goldy1992/mp3player/client/activities/MainActivity.java b/app/src/main/java/com/github/goldy1992/mp3player/client/activities/MainActivity.java index b039097cf..c0f819226 100644 --- a/app/src/main/java/com/github/goldy1992/mp3player/client/activities/MainActivity.java +++ b/app/src/main/java/com/github/goldy1992/mp3player/client/activities/MainActivity.java @@ -180,9 +180,9 @@ public void onChildrenLoaded(@NonNull String parentId, @NonNull ArrayList mediaBrowserAdapter.connect()); runOnUiThread(r); } @@ -193,6 +195,10 @@ public void setMediaBrowserAdapter(MediaBrowserAdapter mediaBrowserAdapter) { this.mediaBrowserAdapter = mediaBrowserAdapter; } + private void createService() { + startService(new Intent(getApplicationContext(), MediaPlaybackServiceInjector.class)); + } + private void initialiseDependencies() { MediaActivityCompatComponent component = DaggerMediaActivityCompatComponent .factory() diff --git a/app/src/main/java/com/github/goldy1992/mp3player/client/views/fragments/viewpager/FolderListFragment.java b/app/src/main/java/com/github/goldy1992/mp3player/client/views/fragments/viewpager/FolderListFragment.java index c53d1601d..5c9176d18 100644 --- a/app/src/main/java/com/github/goldy1992/mp3player/client/views/fragments/viewpager/FolderListFragment.java +++ b/app/src/main/java/com/github/goldy1992/mp3player/client/views/fragments/viewpager/FolderListFragment.java @@ -6,17 +6,16 @@ import com.github.goldy1992.mp3player.commons.MediaItemType; import com.github.goldy1992.mp3player.dagger.components.MediaActivityCompatComponent; -import javax.inject.Inject; - import static com.github.goldy1992.mp3player.commons.Constants.MEDIA_ITEM; public class FolderListFragment extends MediaItemListFragment { - @Inject - public FolderListFragment(MediaItemType mediaItemType, String id, MediaActivityCompatComponent component) { - super(mediaItemType, id, component); + public static FolderListFragment newInstance(MediaItemType mediaItemType, String id, MediaActivityCompatComponent component) { + FolderListFragment folderListFragment = new FolderListFragment(); + folderListFragment.init(mediaItemType, id, component); + return folderListFragment; } - + @Override public void itemSelected(MediaBrowserCompat.MediaItem item) { Intent intent = intentMapper.getIntent(this.parentItemType); diff --git a/app/src/main/java/com/github/goldy1992/mp3player/client/views/fragments/viewpager/MediaItemListFragment.java b/app/src/main/java/com/github/goldy1992/mp3player/client/views/fragments/viewpager/MediaItemListFragment.java index 1e84eebcb..788562fe5 100644 --- a/app/src/main/java/com/github/goldy1992/mp3player/client/views/fragments/viewpager/MediaItemListFragment.java +++ b/app/src/main/java/com/github/goldy1992/mp3player/client/views/fragments/viewpager/MediaItemListFragment.java @@ -53,7 +53,7 @@ public abstract class MediaItemListFragment extends Fragment implements MyGeneri private AlbumArtPainter albumArtPainter; private MyGenericItemTouchListener myGenericItemTouchListener; - public MediaItemListFragment(MediaItemType mediaItemType, String id, MediaActivityCompatComponent component) { + public void init(MediaItemType mediaItemType, String id, MediaActivityCompatComponent component) { this.parentItemType = mediaItemType; this.parentItemTypeId = id; injectDependencies(component); diff --git a/app/src/main/java/com/github/goldy1992/mp3player/client/views/fragments/viewpager/SongListFragment.java b/app/src/main/java/com/github/goldy1992/mp3player/client/views/fragments/viewpager/SongListFragment.java index 89ca4b0ae..277ac7e82 100644 --- a/app/src/main/java/com/github/goldy1992/mp3player/client/views/fragments/viewpager/SongListFragment.java +++ b/app/src/main/java/com/github/goldy1992/mp3player/client/views/fragments/viewpager/SongListFragment.java @@ -6,15 +6,13 @@ import com.github.goldy1992.mp3player.commons.MediaItemUtils; import com.github.goldy1992.mp3player.dagger.components.MediaActivityCompatComponent; -import javax.inject.Inject; - public class SongListFragment extends MediaItemListFragment { - @Inject - public SongListFragment(MediaItemType mediaItemType, String id, MediaActivityCompatComponent compatComponent) { - super(mediaItemType, id, compatComponent); + public static SongListFragment newInstance(MediaItemType mediaItemType, String id, MediaActivityCompatComponent component) { + SongListFragment songListFragment = new SongListFragment(); + songListFragment.init(mediaItemType, id, component); + return songListFragment; } - @Override public void itemSelected(MediaBrowserCompat.MediaItem item) { mediaControllerAdapter.playFromMediaId(MediaItemUtils.getLibraryId(item), null); diff --git a/app/src/main/java/com/github/goldy1992/mp3player/dagger/components/ServiceComponent.java b/app/src/main/java/com/github/goldy1992/mp3player/dagger/components/ServiceComponent.java index afe1d6566..d014af112 100644 --- a/app/src/main/java/com/github/goldy1992/mp3player/dagger/components/ServiceComponent.java +++ b/app/src/main/java/com/github/goldy1992/mp3player/dagger/components/ServiceComponent.java @@ -9,6 +9,7 @@ import com.github.goldy1992.mp3player.dagger.modules.service.MediaSessionConnectorModule; import com.github.goldy1992.mp3player.dagger.modules.service.SearchDatabaseModule; import com.github.goldy1992.mp3player.service.MediaPlaybackService; +import com.google.android.exoplayer2.ui.PlayerNotificationManager.NotificationListener; import javax.inject.Singleton; @@ -31,7 +32,7 @@ public interface ServiceComponent { @Component.Factory interface Factory { ServiceComponent create(@BindsInstance Context context, - @BindsInstance MediaPlaybackService mediaPlaybackService, + @BindsInstance NotificationListener notificationListener, @BindsInstance String workerId); } } diff --git a/app/src/main/java/com/github/goldy1992/mp3player/service/KillNotificationService.java b/app/src/main/java/com/github/goldy1992/mp3player/service/KillNotificationService.java deleted file mode 100644 index 7e93cd96e..000000000 --- a/app/src/main/java/com/github/goldy1992/mp3player/service/KillNotificationService.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.github.goldy1992.mp3player.service; - -import android.app.NotificationManager; -import android.app.Service; -import android.content.Context; -import android.content.Intent; -import android.os.IBinder; - -import androidx.annotation.Nullable; - -public class KillNotificationService extends Service{ - - @Override - public void onTaskRemoved(Intent rootIntent) { - super.onTaskRemoved(rootIntent); - String ns = Context.NOTIFICATION_SERVICE; - NotificationManager nMgr = (NotificationManager) getSystemService(ns); - nMgr.cancelAll(); - } - - @Nullable - @Override - public IBinder onBind(Intent intent) { - return null; - } -} \ No newline at end of file diff --git a/app/src/main/java/com/github/goldy1992/mp3player/service/MediaPlaybackService.java b/app/src/main/java/com/github/goldy1992/mp3player/service/MediaPlaybackService.java index 6397a8d3d..2d6e9733c 100644 --- a/app/src/main/java/com/github/goldy1992/mp3player/service/MediaPlaybackService.java +++ b/app/src/main/java/com/github/goldy1992/mp3player/service/MediaPlaybackService.java @@ -1,18 +1,22 @@ package com.github.goldy1992.mp3player.service; +import android.app.Notification; import android.content.Intent; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; import android.support.v4.media.MediaBrowserCompat; import android.support.v4.media.session.MediaSessionCompat; +import android.util.Log; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.media.MediaBrowserServiceCompat; import com.github.goldy1992.mp3player.service.library.ContentManager; -import com.github.goldy1992.mp3player.service.player.PlayerNotificationManagerCreator; +import com.google.android.exoplayer2.ui.PlayerNotificationManager.NotificationListener; import java.util.List; @@ -22,13 +26,12 @@ /** * Created by Mike on 24/09/2017. */ -public abstract class MediaPlaybackService extends MediaBrowserServiceCompat { +public abstract class MediaPlaybackService extends MediaBrowserServiceCompat implements NotificationListener { private static final String LOG_TAG = "MEDIA_PLAYBACK_SERVICE"; private ContentManager contentManager; private HandlerThread worker; private Handler handler; - private PlayerNotificationManagerCreator playerNotificationManagerCreator; private MediaSessionConnectorCreator mediaSessionConnectorCreator; private MediaSessionCompat mediaSession; private RootAuthenticator rootAuthenticator; @@ -38,16 +41,23 @@ public abstract class MediaPlaybackService extends MediaBrowserServiceCompat { @Override public void onCreate() { super.onCreate(); - this.playerNotificationManagerCreator.create(); this.mediaSessionConnectorCreator.create(); setSessionToken(mediaSession.getSessionToken()); + } + + @Override + public int onStartCommand (Intent intent, + int flags, + int startId) { + Log.i(LOG_TAG, "breakpoint, on start command called"); + return START_STICKY; } @Override - public BrowserRoot onGetRoot(String clientPackageName, int clientUid, - Bundle rootHints) { + public BrowserRoot onGetRoot(@NonNull String clientPackageName, int clientUid, + @Nullable Bundle rootHints) { return rootAuthenticator.authenticate(clientPackageName, clientUid, rootHints); } @@ -73,6 +83,27 @@ public void onLoadChildren(@NonNull String parentId, @NonNull ResultFor a service, the {@code ongoing} flag can be used as an indicator as to whether it + * should be in the foreground. + * + * @param notificationId The id of the notification which has been posted. + * @param notification The {@link Notification}. + * @param ongoing Whether the notification is ongoing. + */ + @Override + public void onNotificationPosted( + int notificationId, Notification notification, boolean ongoing) { + // fix to make notifications removable on versions < oreo. + if (!ongoing) { + stopForeground(false); + } else { + startForeground(notificationId, notification); + } + } + @Override public void onSearch(@NonNull String query, Bundle extras, @NonNull Result> result) { @@ -84,22 +115,6 @@ public void onSearch(@NonNull String query, Bundle extras, }); } - - @Override - public void onDestroy() { - super.onDestroy(); - stopForeground(true); - mediaSession.release(); - worker.quitSafely(); - } - - @Override - public void onTaskRemoved(Intent rootIntent) { - super.onTaskRemoved(rootIntent); - mediaSession.release(); - stopSelf(); - } - public MediaSessionCompat getMediaSession() { return mediaSession; } @@ -134,11 +149,6 @@ public void setMediaSessionConnectorCreator(MediaSessionConnectorCreator mediaSe this.mediaSessionConnectorCreator = mediaSessionConnectorCreator; } - @Inject - public void setPlayerNotificationManagerCreator(PlayerNotificationManagerCreator playerNotificationManagerCreator) { - this.playerNotificationManagerCreator = playerNotificationManagerCreator; - } - @VisibleForTesting public HandlerThread getWorker() { return worker; diff --git a/app/src/main/java/com/github/goldy1992/mp3player/service/MyControlDispatcher.java b/app/src/main/java/com/github/goldy1992/mp3player/service/MyControlDispatcher.java index b787f4a4b..8c4f72efb 100644 --- a/app/src/main/java/com/github/goldy1992/mp3player/service/MyControlDispatcher.java +++ b/app/src/main/java/com/github/goldy1992/mp3player/service/MyControlDispatcher.java @@ -1,6 +1,7 @@ package com.github.goldy1992.mp3player.service; import com.github.goldy1992.mp3player.service.player.AudioBecomingNoisyBroadcastReceiver; +import com.github.goldy1992.mp3player.service.player.MyPlayerNotificationManager; import com.google.android.exoplayer2.DefaultControlDispatcher; import com.google.android.exoplayer2.Player; @@ -10,15 +11,22 @@ public class MyControlDispatcher extends DefaultControlDispatcher { private final AudioBecomingNoisyBroadcastReceiver audioBecomingNoisyBroadcastReceiver; + private final MyPlayerNotificationManager playerNotificationManager; + @Inject - public MyControlDispatcher(AudioBecomingNoisyBroadcastReceiver audioBecomingNoisyBroadcastReceiver) { + public MyControlDispatcher(AudioBecomingNoisyBroadcastReceiver audioBecomingNoisyBroadcastReceiver, + MyPlayerNotificationManager playerNotificationManager) { this.audioBecomingNoisyBroadcastReceiver = audioBecomingNoisyBroadcastReceiver; + this.playerNotificationManager = playerNotificationManager; } @Override public boolean dispatchSetPlayWhenReady(Player player, boolean playWhenReady) { if (playWhenReady) { audioBecomingNoisyBroadcastReceiver.register(); + if (!this.playerNotificationManager.isActive()) { + this.playerNotificationManager.activate(); + } } else { audioBecomingNoisyBroadcastReceiver.unregister(); } diff --git a/app/src/main/java/com/github/goldy1992/mp3player/service/player/DecreaseSpeedProvider.java b/app/src/main/java/com/github/goldy1992/mp3player/service/player/DecreaseSpeedProvider.java index cde11c2a4..46fcdda1a 100644 --- a/app/src/main/java/com/github/goldy1992/mp3player/service/player/DecreaseSpeedProvider.java +++ b/app/src/main/java/com/github/goldy1992/mp3player/service/player/DecreaseSpeedProvider.java @@ -1,21 +1,19 @@ package com.github.goldy1992.mp3player.service.player; -import android.os.Handler; import android.support.v4.media.session.PlaybackStateCompat; import com.github.goldy1992.mp3player.R; import com.google.android.exoplayer2.Player; import javax.inject.Inject; -import javax.inject.Named; import static com.github.goldy1992.mp3player.commons.Constants.DECREASE_PLAYBACK_SPEED; public class DecreaseSpeedProvider extends SpeedChangeActionProviderBase { @Inject - public DecreaseSpeedProvider(@Named("worker") Handler handler) { - super(handler); + public DecreaseSpeedProvider() { + super(); } @Override diff --git a/app/src/main/java/com/github/goldy1992/mp3player/service/player/IncreaseSpeedProvider.java b/app/src/main/java/com/github/goldy1992/mp3player/service/player/IncreaseSpeedProvider.java index a36e70520..ba36adef0 100644 --- a/app/src/main/java/com/github/goldy1992/mp3player/service/player/IncreaseSpeedProvider.java +++ b/app/src/main/java/com/github/goldy1992/mp3player/service/player/IncreaseSpeedProvider.java @@ -1,21 +1,19 @@ package com.github.goldy1992.mp3player.service.player; -import android.os.Handler; import android.support.v4.media.session.PlaybackStateCompat; import com.github.goldy1992.mp3player.R; import com.google.android.exoplayer2.Player; import javax.inject.Inject; -import javax.inject.Named; import static com.github.goldy1992.mp3player.commons.Constants.INCREASE_PLAYBACK_SPEED; public class IncreaseSpeedProvider extends SpeedChangeActionProviderBase { @Inject - public IncreaseSpeedProvider(@Named("worker")Handler handler) { - super(handler); + public IncreaseSpeedProvider() { + super(); } @Override diff --git a/app/src/main/java/com/github/goldy1992/mp3player/service/player/PlayerNotificationManagerCreator.java b/app/src/main/java/com/github/goldy1992/mp3player/service/player/MyPlayerNotificationManager.java similarity index 52% rename from app/src/main/java/com/github/goldy1992/mp3player/service/player/PlayerNotificationManagerCreator.java rename to app/src/main/java/com/github/goldy1992/mp3player/service/player/MyPlayerNotificationManager.java index 76c02a870..44f4e8748 100644 --- a/app/src/main/java/com/github/goldy1992/mp3player/service/player/PlayerNotificationManagerCreator.java +++ b/app/src/main/java/com/github/goldy1992/mp3player/service/player/MyPlayerNotificationManager.java @@ -3,6 +3,7 @@ import android.content.Context; import android.graphics.Color; +import androidx.annotation.VisibleForTesting; import androidx.core.app.NotificationCompat; import com.github.goldy1992.mp3player.LogTagger; @@ -10,12 +11,13 @@ import com.github.goldy1992.mp3player.service.MyDescriptionAdapter; import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.ui.PlayerNotificationManager; +import com.google.android.exoplayer2.ui.PlayerNotificationManager.NotificationListener; import javax.inject.Inject; import javax.inject.Singleton; @Singleton -public class PlayerNotificationManagerCreator implements LogTagger { +public class MyPlayerNotificationManager implements LogTagger { private static final int NOTIFICATION_ID = 512; @@ -26,22 +28,32 @@ public class PlayerNotificationManagerCreator implements LogTagger { private final ExoPlayer exoPlayer; private final Context context; private final MyDescriptionAdapter myDescriptionAdapter; + private final NotificationListener notificationListener; + private boolean isActive = false; @Inject - public PlayerNotificationManagerCreator(Context context, MyDescriptionAdapter myDescriptionAdapter, ExoPlayer exoPlayer) { + public MyPlayerNotificationManager(Context context, MyDescriptionAdapter myDescriptionAdapter, + ExoPlayer exoPlayer, + NotificationListener notificationListener) { this.context = context; this.myDescriptionAdapter = myDescriptionAdapter; this.exoPlayer = exoPlayer; - - + this.notificationListener = notificationListener; + create(); } public PlayerNotificationManager create() { if (null == playbackNotificationManager) { - this.playbackNotificationManager = PlayerNotificationManager.createWithNotificationChannel(context, - CHANNEL_ID, R.string.notification_channel_name, R.string.channel_description, NOTIFICATION_ID, myDescriptionAdapter); - - this.playbackNotificationManager.setPlayer(exoPlayer); + this.playbackNotificationManager = + PlayerNotificationManager.createWithNotificationChannel( + context, + CHANNEL_ID, + R.string.notification_channel_name, + R.string.channel_description, + NOTIFICATION_ID, + myDescriptionAdapter, + notificationListener); + this.playbackNotificationManager.setPlayer(null); this.playbackNotificationManager.setColor(Color.BLACK); this.playbackNotificationManager.setVisibility(NotificationCompat.VISIBILITY_PUBLIC); this.playbackNotificationManager.setPriority(NotificationCompat.PRIORITY_LOW); @@ -54,8 +66,32 @@ public PlayerNotificationManager create() { return playbackNotificationManager; } + public void activate() { + this.playbackNotificationManager.setPlayer(exoPlayer); + this.isActive = true; + } + + public void deactivate() { + this.playbackNotificationManager.setPlayer(null); + this.isActive = false; + } + + public boolean isActive() { + return isActive; + } + @Override public String getLogTag() { return "MEDIA_PLAYBACK_SERVICE"; } + + @VisibleForTesting + public PlayerNotificationManager getPlaybackNotificationManager() { + return playbackNotificationManager; + } + + @VisibleForTesting + public void setPlayerNotificationManager(PlayerNotificationManager playerNotificationManager) { + this.playbackNotificationManager = playerNotificationManager; + } } diff --git a/app/src/main/java/com/github/goldy1992/mp3player/service/player/SpeedChangeActionProviderBase.java b/app/src/main/java/com/github/goldy1992/mp3player/service/player/SpeedChangeActionProviderBase.java index 41161d7b4..b787a052f 100644 --- a/app/src/main/java/com/github/goldy1992/mp3player/service/player/SpeedChangeActionProviderBase.java +++ b/app/src/main/java/com/github/goldy1992/mp3player/service/player/SpeedChangeActionProviderBase.java @@ -1,7 +1,6 @@ package com.github.goldy1992.mp3player.service.player; import android.os.Bundle; -import android.os.Handler; import android.util.Log; import com.google.android.exoplayer2.ControlDispatcher; @@ -14,23 +13,13 @@ public abstract class SpeedChangeActionProviderBase implements MediaSessionConnector.CustomActionProvider { - Handler handler; - private static final float MINIMUM_PLAYBACK_SPEED = 0.25f; private static final float MAXIMUM_PLAYBACK_SPEED = 2f; private static final float DEFAULT_PLAYBACK_SPEED_CHANGE = 0.05f; private static final String LOG_TAG = "ACTN_PRVDR"; - public SpeedChangeActionProviderBase(Handler handler) { - this.handler = handler; - } - @Override public void onCustomAction(Player player, ControlDispatcher controlDispatcher, String action, Bundle extras) { - handler.post(() -> { this.performAction(player, action);} ); - } - - private void performAction(Player player, String action) { Log.i(LOG_TAG, "hit speed change"); final float currentSpeed = player.getPlaybackParameters().speed; float newSpeed = currentSpeed; diff --git a/app/src/test/java/com/github/goldy1992/mp3player/client/views/fragments/viewpager/FolderListFragmentTest.java b/app/src/test/java/com/github/goldy1992/mp3player/client/views/fragments/viewpager/FolderListFragmentTest.java index ba62410f5..85d9fbcf9 100644 --- a/app/src/test/java/com/github/goldy1992/mp3player/client/views/fragments/viewpager/FolderListFragmentTest.java +++ b/app/src/test/java/com/github/goldy1992/mp3player/client/views/fragments/viewpager/FolderListFragmentTest.java @@ -36,7 +36,7 @@ public void setup() { activityScenario = Robolectric.buildActivity(TestMainActivity.class).setup(); TestMainActivity testMainActivity = activityScenario.get(); MediaActivityCompatComponent component = testMainActivity.getMediaActivityCompatComponent(); - folderListFragment = new FolderListFragment(MediaItemType.FOLDERS, "id", component); + folderListFragment = FolderListFragment.newInstance(MediaItemType.FOLDERS, "id", component); super.setup(folderListFragment, FolderListFragment.class); } diff --git a/app/src/test/java/com/github/goldy1992/mp3player/client/views/fragments/viewpager/SongListFragmentTest.java b/app/src/test/java/com/github/goldy1992/mp3player/client/views/fragments/viewpager/SongListFragmentTest.java index 66f4807ff..2501e939f 100644 --- a/app/src/test/java/com/github/goldy1992/mp3player/client/views/fragments/viewpager/SongListFragmentTest.java +++ b/app/src/test/java/com/github/goldy1992/mp3player/client/views/fragments/viewpager/SongListFragmentTest.java @@ -35,7 +35,7 @@ public void setup() { activityScenario = Robolectric.buildActivity(TestMainActivity.class).setup(); TestMainActivity testMainActivity = activityScenario.get(); MediaActivityCompatComponent component = testMainActivity.getMediaActivityCompatComponent(); - folderListFragment = new SongListFragment(MediaItemType.SONGS, "id", component); + folderListFragment = SongListFragment.newInstance(MediaItemType.SONGS, "id", component); super.setup(folderListFragment, SongListFragment.class); } @Test diff --git a/app/src/test/java/com/github/goldy1992/mp3player/service/MediaPlaybackServiceTest.java b/app/src/test/java/com/github/goldy1992/mp3player/service/MediaPlaybackServiceTest.java index bc2d9dd34..2a5c78210 100644 --- a/app/src/test/java/com/github/goldy1992/mp3player/service/MediaPlaybackServiceTest.java +++ b/app/src/test/java/com/github/goldy1992/mp3player/service/MediaPlaybackServiceTest.java @@ -102,13 +102,4 @@ public void testOnLoadChildrenRejectedMediaId() { //shadowOf(mediaPlaybackService.getWorker().getLooper()).idle(); verify(result, times(1)).sendResult(any()); } - - @Test - public void testOnDestroy() throws IllegalAccessException { - MediaSessionCompat mediaSessionSpy = spy(mediaPlaybackService.getMediaSession()); - FieldUtils.writeField(mediaPlaybackService, "mediaSession", mediaSessionSpy, true); - mediaPlaybackService.onDestroy(); - verify(mediaSessionSpy, times(1)).release(); - } - } diff --git a/app/src/test/java/com/github/goldy1992/mp3player/service/MyControlDispatcherTest.java b/app/src/test/java/com/github/goldy1992/mp3player/service/MyControlDispatcherTest.java index ffad71207..d6fdef8f4 100644 --- a/app/src/test/java/com/github/goldy1992/mp3player/service/MyControlDispatcherTest.java +++ b/app/src/test/java/com/github/goldy1992/mp3player/service/MyControlDispatcherTest.java @@ -1,6 +1,7 @@ package com.github.goldy1992.mp3player.service; import com.github.goldy1992.mp3player.service.player.AudioBecomingNoisyBroadcastReceiver; +import com.github.goldy1992.mp3player.service.player.MyPlayerNotificationManager; import com.google.android.exoplayer2.ExoPlayer; import org.junit.Before; @@ -11,8 +12,10 @@ import org.robolectric.RobolectricTestRunner; import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; @RunWith(RobolectricTestRunner.class) public class MyControlDispatcherTest { @@ -22,20 +25,34 @@ public class MyControlDispatcherTest { @Mock private AudioBecomingNoisyBroadcastReceiver audioBecomingNoisyBroadcastReceiver; + @Mock + private MyPlayerNotificationManager playerNotificationManager; + @Mock private ExoPlayer exoPlayer; @Before public void setup() { MockitoAnnotations.initMocks(this); - this.myControlDispatcher = new MyControlDispatcher(audioBecomingNoisyBroadcastReceiver); + this.myControlDispatcher = new MyControlDispatcher(audioBecomingNoisyBroadcastReceiver, playerNotificationManager); } @Test public void testDispatchSetPlayWhenReady() { + when(playerNotificationManager.isActive()).thenReturn(true); + final boolean result = myControlDispatcher.dispatchSetPlayWhenReady(exoPlayer, true); + assertTrue(result); + verify(audioBecomingNoisyBroadcastReceiver, times(1)).register(); + verify(playerNotificationManager, never()).activate(); + } + + @Test + public void testDispatchSetPlayWhenReadyPlaybackManagerNotActive() { + when(playerNotificationManager.isActive()).thenReturn(false); final boolean result = myControlDispatcher.dispatchSetPlayWhenReady(exoPlayer, true); assertTrue(result); verify(audioBecomingNoisyBroadcastReceiver, times(1)).register(); + verify(playerNotificationManager, times(1)).activate(); } @Test diff --git a/app/src/test/java/com/github/goldy1992/mp3player/service/player/DecreaseSpeedProviderTest.java b/app/src/test/java/com/github/goldy1992/mp3player/service/player/DecreaseSpeedProviderTest.java index 6849c8a4f..937ee3c8d 100644 --- a/app/src/test/java/com/github/goldy1992/mp3player/service/player/DecreaseSpeedProviderTest.java +++ b/app/src/test/java/com/github/goldy1992/mp3player/service/player/DecreaseSpeedProviderTest.java @@ -30,7 +30,7 @@ public class DecreaseSpeedProviderTest extends SpeedProviderTestBase{ public void setup() { MockitoAnnotations.initMocks(this); super.setup(); - this.decreaseSpeedProvider = new DecreaseSpeedProvider(handler); + this.decreaseSpeedProvider = new DecreaseSpeedProvider(); } @Test diff --git a/app/src/test/java/com/github/goldy1992/mp3player/service/player/IncreaseSpeedProviderTest.java b/app/src/test/java/com/github/goldy1992/mp3player/service/player/IncreaseSpeedProviderTest.java index 4df587464..e41b655e9 100644 --- a/app/src/test/java/com/github/goldy1992/mp3player/service/player/IncreaseSpeedProviderTest.java +++ b/app/src/test/java/com/github/goldy1992/mp3player/service/player/IncreaseSpeedProviderTest.java @@ -32,7 +32,7 @@ public class IncreaseSpeedProviderTest extends SpeedProviderTestBase { public void setup() { MockitoAnnotations.initMocks(this); super.setup(); - this.increaseSpeedProvider = new IncreaseSpeedProvider(handler); + this.increaseSpeedProvider = new IncreaseSpeedProvider(); } @Test diff --git a/app/src/test/java/com/github/goldy1992/mp3player/service/player/MyPlayerNotificationManagerTest.java b/app/src/test/java/com/github/goldy1992/mp3player/service/player/MyPlayerNotificationManagerTest.java new file mode 100644 index 000000000..28793480b --- /dev/null +++ b/app/src/test/java/com/github/goldy1992/mp3player/service/player/MyPlayerNotificationManagerTest.java @@ -0,0 +1,66 @@ +package com.github.goldy1992.mp3player.service.player; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; + +import com.github.goldy1992.mp3player.service.MyDescriptionAdapter; +import com.google.android.exoplayer2.ExoPlayer; +import com.google.android.exoplayer2.ui.PlayerNotificationManager; + +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.jupiter.api.Tag; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RobolectricTestRunner; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +@RunWith(RobolectricTestRunner.class) +public class MyPlayerNotificationManagerTest { + + private MyPlayerNotificationManager myPlayerNotificationManager; + + private Context context; + @Mock + private MyDescriptionAdapter myDescriptionAdapter; + + @Mock + private ExoPlayer exoPlayer; + + @Mock + private PlayerNotificationManager playerNotificationManager; + + @Mock + private PlayerNotificationManager.NotificationListener notificationListener; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + this.context = InstrumentationRegistry.getInstrumentation().getContext(); + this.myPlayerNotificationManager = new MyPlayerNotificationManager(this.context, this.myDescriptionAdapter, this.exoPlayer, this.notificationListener); + assertNotNull(myPlayerNotificationManager.getPlaybackNotificationManager()); + assertFalse(myPlayerNotificationManager.isActive()); + } + + @Test + public void testActivate() { + myPlayerNotificationManager.setPlayerNotificationManager(playerNotificationManager); + myPlayerNotificationManager.activate(); + assertTrue(myPlayerNotificationManager.isActive()); + verify(playerNotificationManager, times(1)).setPlayer(exoPlayer); + } + + @Test + public void testDeactivate() { + myPlayerNotificationManager.setPlayerNotificationManager(playerNotificationManager); + myPlayerNotificationManager.deactivate(); + assertFalse(myPlayerNotificationManager.isActive()); + verify(playerNotificationManager, times(1)).setPlayer(null); + } +} \ No newline at end of file