diff --git a/app/src/main/java/com/oscarliang/spotifyclone/MainActivity.java b/app/src/main/java/com/oscarliang/spotifyclone/MainActivity.java index bd6a501..b3050a9 100644 --- a/app/src/main/java/com/oscarliang/spotifyclone/MainActivity.java +++ b/app/src/main/java/com/oscarliang/spotifyclone/MainActivity.java @@ -14,6 +14,7 @@ import androidx.navigation.ui.NavigationUI; import com.oscarliang.spotifyclone.core.auth.AuthManager; +import com.oscarliang.spotifyclone.core.player.MusicPlayer; import com.oscarliang.spotifyclone.databinding.ActivityMainBinding; import java.util.Objects; @@ -35,6 +36,9 @@ public class MainActivity extends AppCompatActivity implements HasAndroidInjecto @Inject AuthManager authManager; + @Inject + MusicPlayer musicPlayer; + private ActivityMainBinding binding; private NavController navController; private View navView; @@ -79,8 +83,7 @@ private void initToolbar() { private void initDrawer() { binding.drawer.navView.setNavigationItemSelectedListener(item -> { if (item.getItemId() == R.id.action_logout) { - authManager.signOut(); - navigateWelcomeFragment(); + signOut(); } item.setChecked(true); binding.drawerLayout.close(); @@ -172,6 +175,16 @@ private void subscribeAuthState() { ); } + private void signOut() { + // Clear all the music to prevent playing + // the music in bg when user is not log in + musicPlayer.clearMusic(); + + // Sign out and navigate to welcome page + authManager.signOut(); + navigateWelcomeFragment(); + } + private void navigateWelcomeFragment() { // Pop up all the backstack to prevent navigating back navController.navigate( diff --git a/core/player/src/main/java/com/oscarliang/spotifyclone/core/player/ExoMusicPlayer.java b/core/player/src/main/java/com/oscarliang/spotifyclone/core/player/ExoMusicPlayer.java index 477bac0..99429c3 100644 --- a/core/player/src/main/java/com/oscarliang/spotifyclone/core/player/ExoMusicPlayer.java +++ b/core/player/src/main/java/com/oscarliang/spotifyclone/core/player/ExoMusicPlayer.java @@ -200,6 +200,15 @@ public void addPlaylist(@NonNull List musics, @NonNull String playlistId) this.musics.onNext(musics); } + @Override + public void clearMusic() { + // Stop the current music and clear all the media items. + // Note that we do not call release(), or the player + // will be unavailable when later the user re-login. + mediaController.stop(); + mediaController.clearMediaItems(); + } + private MediaItem createMediaItem(Music music) { return new MediaItem.Builder() .setMediaId(music.getId()) diff --git a/core/player/src/main/java/com/oscarliang/spotifyclone/core/player/MusicPlayer.java b/core/player/src/main/java/com/oscarliang/spotifyclone/core/player/MusicPlayer.java index 0e56c5e..1ac7f9f 100644 --- a/core/player/src/main/java/com/oscarliang/spotifyclone/core/player/MusicPlayer.java +++ b/core/player/src/main/java/com/oscarliang/spotifyclone/core/player/MusicPlayer.java @@ -37,4 +37,6 @@ public interface MusicPlayer { void addPlaylist(@NonNull List musics, @NonNull String playlistId); + void clearMusic(); + } \ No newline at end of file