🙆🏻 Woof that's done it Playlist

Code refactor to Kotlin
This commit is contained in:
Hemanth S 2020-08-13 22:38:37 +05:30
parent ff20b3a052
commit e159b1a32a
73 changed files with 1482 additions and 1785 deletions

View file

@ -30,7 +30,7 @@ object M3UWriter : M3UConstants {
): File? {
if (!dir.exists()) dir.mkdirs()
val file = File(dir, playlist.name + "." + M3UConstants.EXTENSION)
val songs = playlist.getSongs(context)
val songs = playlist.getSongs()
if (songs.size > 0) {
val bw = BufferedWriter(FileWriter(file))
bw.write(M3UConstants.HEADER)

View file

@ -23,22 +23,25 @@ import android.os.Build
import android.os.Environment
import android.os.IBinder
import android.provider.DocumentsContract
import android.provider.MediaStore
import android.widget.Toast
import androidx.core.content.ContextCompat
import code.name.monkey.retromusic.loaders.SongLoader
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.repository.SongRepository
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.PreferenceUtil
import org.koin.core.KoinComponent
import org.koin.core.inject
import java.io.File
import java.util.*
object MusicPlayerRemote {
object MusicPlayerRemote : KoinComponent {
val TAG: String = MusicPlayerRemote::class.java.simpleName
private val mConnectionMap = WeakHashMap<Context, ServiceBinder>()
var musicService: MusicService? = null
private val songRepository by inject<SongRepository>()
@JvmStatic
val isPlaying: Boolean
get() = musicService != null && musicService!!.isPlaying
@ -412,24 +415,17 @@ object MusicPlayerRemote {
songId = uri.lastPathSegment
}
if (songId != null) {
songs = SongLoader.getSongs(
SongLoader.makeSongCursor(
musicService!!,
MediaStore.Audio.AudioColumns._ID + "=?",
arrayOf(songId)
)
)
songs = songRepository.songs(songId)
}
}
}
if (songs == null) {
var songFile: File? = null
if (uri.authority != null && uri.authority == "com.android.externalstorage.documents") {
songFile =
File(
Environment.getExternalStorageDirectory(),
uri.path?.split(":".toRegex(), 2)?.get(1)
)
songFile = File(
Environment.getExternalStorageDirectory(),
uri.path?.split(":".toRegex(), 2)?.get(1)
)
}
if (songFile == null) {
val path = getFilePathFromUri(musicService!!, uri)
@ -440,13 +436,7 @@ object MusicPlayerRemote {
songFile = File(uri.path)
}
if (songFile != null) {
songs = SongLoader.getSongs(
SongLoader.makeSongCursor(
musicService!!,
MediaStore.Audio.AudioColumns.DATA + "=?",
arrayOf(songFile.absolutePath)
)
)
songs = songRepository.songsByFilePath(songFile.absolutePath)
}
}
if (songs != null && songs.isNotEmpty()) {

View file

@ -18,29 +18,31 @@ import android.app.SearchManager
import android.content.Context
import android.os.Bundle
import android.provider.MediaStore
import code.name.monkey.retromusic.loaders.SongLoader
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.repository.RealSongRepository
import org.koin.core.KoinComponent
import org.koin.core.inject
import java.util.*
object SearchQueryHelper {
object SearchQueryHelper : KoinComponent {
private const val TITLE_SELECTION = "lower(" + MediaStore.Audio.AudioColumns.TITLE + ") = ?"
private const val ALBUM_SELECTION = "lower(" + MediaStore.Audio.AudioColumns.ALBUM + ") = ?"
private const val ARTIST_SELECTION = "lower(" + MediaStore.Audio.AudioColumns.ARTIST + ") = ?"
private const val AND = " AND "
private val songRepository by inject<RealSongRepository>()
var songs = ArrayList<Song>()
@JvmStatic
fun getSongs(context: Context, extras: Bundle): ArrayList<Song> {
fun getSongs(context: Context, extras: Bundle): List<Song> {
val query = extras.getString(SearchManager.QUERY, null)
val artistName = extras.getString(MediaStore.EXTRA_MEDIA_ARTIST, null)
val albumName = extras.getString(MediaStore.EXTRA_MEDIA_ALBUM, null)
val titleName = extras.getString(MediaStore.EXTRA_MEDIA_TITLE, null)
var songs = ArrayList<Song>()
var songs = listOf<Song>()
if (artistName != null && albumName != null && titleName != null) {
songs = SongLoader.getSongs(
SongLoader.makeSongCursor(
context,
songs = songRepository.songs(
songRepository.makeSongCursor(
ARTIST_SELECTION + AND + ALBUM_SELECTION + AND + TITLE_SELECTION,
arrayOf(
artistName.toLowerCase(),
@ -54,9 +56,8 @@ object SearchQueryHelper {
return songs
}
if (artistName != null && titleName != null) {
songs = SongLoader.getSongs(
SongLoader.makeSongCursor(
context,
songs = songRepository.songs(
songRepository.makeSongCursor(
ARTIST_SELECTION + AND + TITLE_SELECTION,
arrayOf(artistName.toLowerCase(), titleName.toLowerCase())
)
@ -66,9 +67,8 @@ object SearchQueryHelper {
return songs
}
if (albumName != null && titleName != null) {
songs = SongLoader.getSongs(
SongLoader.makeSongCursor(
context,
songs = songRepository.songs(
songRepository.makeSongCursor(
ALBUM_SELECTION + AND + TITLE_SELECTION,
arrayOf(albumName.toLowerCase(), titleName.toLowerCase())
)
@ -78,9 +78,8 @@ object SearchQueryHelper {
return songs
}
if (artistName != null) {
songs = SongLoader.getSongs(
SongLoader.makeSongCursor(
context,
songs = songRepository.songs(
songRepository.makeSongCursor(
ARTIST_SELECTION,
arrayOf(artistName.toLowerCase())
)
@ -90,9 +89,8 @@ object SearchQueryHelper {
return songs
}
if (albumName != null) {
songs = SongLoader.getSongs(
SongLoader.makeSongCursor(
context,
songs = songRepository.songs(
songRepository.makeSongCursor(
ALBUM_SELECTION,
arrayOf(albumName.toLowerCase())
)
@ -102,9 +100,8 @@ object SearchQueryHelper {
return songs
}
if (titleName != null) {
songs = SongLoader.getSongs(
SongLoader.makeSongCursor(
context,
songs = songRepository.songs(
songRepository.makeSongCursor(
TITLE_SELECTION,
arrayOf(titleName.toLowerCase())
)
@ -113,21 +110,18 @@ object SearchQueryHelper {
if (songs.isNotEmpty()) {
return songs
}
songs =
SongLoader.getSongs(
SongLoader.makeSongCursor(
context,
ARTIST_SELECTION,
arrayOf(query.toLowerCase())
)
songs = songRepository.songs(
songRepository.makeSongCursor(
ARTIST_SELECTION,
arrayOf(query.toLowerCase())
)
)
if (songs.isNotEmpty()) {
return songs
}
songs = SongLoader.getSongs(
SongLoader.makeSongCursor(
context,
songs = songRepository.songs(
songRepository.makeSongCursor(
ALBUM_SELECTION,
arrayOf(query.toLowerCase())
)
@ -135,9 +129,8 @@ object SearchQueryHelper {
if (songs.isNotEmpty()) {
return songs
}
songs = SongLoader.getSongs(
SongLoader.makeSongCursor(
context,
songs = songRepository.songs(
songRepository.makeSongCursor(
TITLE_SELECTION,
arrayOf(query.toLowerCase())
)

View file

@ -14,42 +14,43 @@
package code.name.monkey.retromusic.helper.menu
import android.app.Activity
import android.view.MenuItem
import androidx.fragment.app.FragmentActivity
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.dialogs.AddToPlaylistDialog
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.loaders.GenreLoader
import code.name.monkey.retromusic.model.Genre
import code.name.monkey.retromusic.model.Song
import java.util.*
import code.name.monkey.retromusic.repository.GenreRepository
import org.koin.core.KoinComponent
import org.koin.core.inject
object GenreMenuHelper {
object GenreMenuHelper : KoinComponent {
private val genreRepository by inject<GenreRepository>()
fun handleMenuClick(activity: FragmentActivity, genre: Genre, item: MenuItem): Boolean {
when (item.itemId) {
R.id.action_play -> {
MusicPlayerRemote.openQueue(getGenreSongs(activity, genre), 0, true)
MusicPlayerRemote.openQueue(getGenreSongs(genre), 0, true)
return true
}
R.id.action_play_next -> {
MusicPlayerRemote.playNext(getGenreSongs(activity, genre))
MusicPlayerRemote.playNext(getGenreSongs(genre))
return true
}
R.id.action_add_to_playlist -> {
AddToPlaylistDialog.create(getGenreSongs(activity, genre))
AddToPlaylistDialog.create(getGenreSongs(genre))
.show(activity.supportFragmentManager, "ADD_PLAYLIST")
return true
}
R.id.action_add_to_current_playing -> {
MusicPlayerRemote.enqueue(getGenreSongs(activity, genre))
MusicPlayerRemote.enqueue(getGenreSongs(genre))
return true
}
}
return false
}
private fun getGenreSongs(activity: Activity, genre: Genre): ArrayList<Song> {
return GenreLoader.getSongs(activity, genre.id)
private fun getGenreSongs(genre: Genre): List<Song> {
return genreRepository.songs(genre.id)
}
}

View file

@ -26,13 +26,11 @@ import code.name.monkey.retromusic.dialogs.AddToPlaylistDialog
import code.name.monkey.retromusic.dialogs.DeletePlaylistDialog
import code.name.monkey.retromusic.dialogs.RenamePlaylistDialog
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.loaders.PlaylistSongsLoader
import code.name.monkey.retromusic.misc.WeakContextAsyncTask
import code.name.monkey.retromusic.model.AbsCustomPlaylist
import code.name.monkey.retromusic.model.Playlist
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.PlaylistsUtil
import java.util.*
object PlaylistMenuHelper {
@ -80,11 +78,11 @@ object PlaylistMenuHelper {
private fun getPlaylistSongs(
activity: Activity,
playlist: Playlist
): ArrayList<Song> {
): List<Song> {
return if (playlist is AbsCustomPlaylist) {
playlist.getSongs(activity)
playlist.songs()
} else {
PlaylistSongsLoader.getPlaylistSongList(activity, playlist)
playlist.getSongs()
}
}

View file

@ -15,19 +15,17 @@
package code.name.monkey.retromusic.helper.menu
import androidx.fragment.app.FragmentActivity
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.dialogs.AddToPlaylistDialog
import code.name.monkey.retromusic.dialogs.DeleteSongsDialog
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.model.Song
import java.util.*
object SongsMenuHelper {
fun handleMenuClick(
activity: FragmentActivity,
songs: ArrayList<Song>,
songs: List<Song>,
menuItemId: Int
): Boolean {
when (menuItemId) {