Refactor Arraylist to List
This commit is contained in:
parent
393bd59a1c
commit
102d18cd6a
22 changed files with 157 additions and 117 deletions
|
@ -88,7 +88,7 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsView, C
|
||||||
|
|
||||||
private lateinit var simpleSongAdapter: SimpleSongAdapter
|
private lateinit var simpleSongAdapter: SimpleSongAdapter
|
||||||
private lateinit var album: Album
|
private lateinit var album: Album
|
||||||
private lateinit var songs: ArrayList<Song>
|
private lateinit var songs: List<Song>
|
||||||
private var cab: MaterialCab? = null
|
private var cab: MaterialCab? = null
|
||||||
|
|
||||||
private val savedSortOrder: String
|
private val savedSortOrder: String
|
||||||
|
@ -193,17 +193,17 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsView, C
|
||||||
albumText.text = String.format("%s • %s", album.artist, MusicUtil.getYearString(album.year))
|
albumText.text = String.format("%s • %s", album.artist, MusicUtil.getYearString(album.year))
|
||||||
}
|
}
|
||||||
loadAlbumCover()
|
loadAlbumCover()
|
||||||
albumDetailsPresenter.albumSong(album.id)
|
albumDetailsPresenter.albumSongs(album.id)
|
||||||
albumDetailsPresenter.loadMore(album.artistId)
|
albumDetailsPresenter.loadMore(album.artistId)
|
||||||
albumDetailsPresenter.aboutAlbum(album.artist, album.title)
|
albumDetailsPresenter.aboutAlbum(album.artist, album.title)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun songs(songs: ArrayList<Song>) {
|
override fun songs(songs: List<Song>) {
|
||||||
this.songs = songs
|
this.songs = songs
|
||||||
simpleSongAdapter.swapDataSet(songs)
|
simpleSongAdapter.swapDataSet(songs)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun moreAlbums(albums: ArrayList<Album>) {
|
override fun moreAlbums(albums: List<Album>) {
|
||||||
moreTitle.show()
|
moreTitle.show()
|
||||||
moreRecyclerView.show()
|
moreRecyclerView.show()
|
||||||
moreTitle.text = String.format(getString(R.string.label_more_from), album.artist)
|
moreTitle.text = String.format(getString(R.string.label_more_from), album.artist)
|
||||||
|
|
|
@ -129,7 +129,7 @@ class GenreDetailsActivity : AbsSlidingMusicPanelActivity(), CabHolder, GenreDet
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun songs(songs: ArrayList<Song>) {
|
override fun songs(songs: List<Song>) {
|
||||||
songAdapter.swapDataSet(songs)
|
songAdapter.swapDataSet(songs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -238,7 +238,7 @@ class PlaylistDetailActivity : AbsSlidingMusicPanelActivity(), CabHolder, Playli
|
||||||
emptyText.visibility = View.VISIBLE
|
emptyText.visibility = View.VISIBLE
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun songs(songs: ArrayList<Song>) {
|
override fun songs(songs: List<Song>) {
|
||||||
adapter.swapDataSet(songs)
|
adapter.swapDataSet(songs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,6 @@ import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder
|
import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder
|
||||||
import code.name.monkey.retromusic.model.Genre
|
import code.name.monkey.retromusic.model.Genre
|
||||||
import code.name.monkey.retromusic.util.NavigationUtil
|
import code.name.monkey.retromusic.util.NavigationUtil
|
||||||
import java.util.ArrayList
|
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -18,11 +17,11 @@ import java.util.Locale
|
||||||
|
|
||||||
class GenreAdapter(
|
class GenreAdapter(
|
||||||
private val activity: Activity,
|
private val activity: Activity,
|
||||||
dataSet: ArrayList<Genre>,
|
dataSet: List<Genre>,
|
||||||
private val mItemLayoutRes: Int
|
private val mItemLayoutRes: Int
|
||||||
) : RecyclerView.Adapter<GenreAdapter.ViewHolder>() {
|
) : RecyclerView.Adapter<GenreAdapter.ViewHolder>() {
|
||||||
|
|
||||||
var dataSet = ArrayList<Genre>()
|
var dataSet = listOf<Genre>()
|
||||||
private set
|
private set
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
@ -48,7 +47,7 @@ class GenreAdapter(
|
||||||
return dataSet.size
|
return dataSet.size
|
||||||
}
|
}
|
||||||
|
|
||||||
fun swapDataSet(list: ArrayList<Genre>) {
|
fun swapDataSet(list: List<Genre>) {
|
||||||
dataSet = list
|
dataSet = list
|
||||||
notifyDataSetChanged()
|
notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,11 +11,10 @@ import code.name.monkey.retromusic.interfaces.CabHolder
|
||||||
import code.name.monkey.retromusic.model.Album
|
import code.name.monkey.retromusic.model.Album
|
||||||
import code.name.monkey.retromusic.util.MusicUtil
|
import code.name.monkey.retromusic.util.MusicUtil
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
import java.util.ArrayList
|
|
||||||
|
|
||||||
class HorizontalAlbumAdapter(
|
class HorizontalAlbumAdapter(
|
||||||
activity: AppCompatActivity,
|
activity: AppCompatActivity,
|
||||||
dataSet: ArrayList<Album>,
|
dataSet: List<Album>,
|
||||||
cabHolder: CabHolder?
|
cabHolder: CabHolder?
|
||||||
) : AlbumAdapter(
|
) : AlbumAdapter(
|
||||||
activity, dataSet, HorizontalAdapterHelper.LAYOUT_RES, cabHolder
|
activity, dataSet, HorizontalAdapterHelper.LAYOUT_RES, cabHolder
|
||||||
|
|
|
@ -28,14 +28,14 @@ import java.util.ArrayList
|
||||||
|
|
||||||
class ArtistAdapter(
|
class ArtistAdapter(
|
||||||
val activity: AppCompatActivity,
|
val activity: AppCompatActivity,
|
||||||
var dataSet: ArrayList<Artist>,
|
var dataSet: List<Artist>,
|
||||||
var itemLayoutRes: Int,
|
var itemLayoutRes: Int,
|
||||||
cabHolder: CabHolder?
|
cabHolder: CabHolder?
|
||||||
) : AbsMultiSelectAdapter<ArtistAdapter.ViewHolder, Artist>(
|
) : AbsMultiSelectAdapter<ArtistAdapter.ViewHolder, Artist>(
|
||||||
activity, cabHolder, R.menu.menu_media_selection
|
activity, cabHolder, R.menu.menu_media_selection
|
||||||
), PopupTextProvider {
|
), PopupTextProvider {
|
||||||
|
|
||||||
fun swapDataSet(dataSet: ArrayList<Artist>) {
|
fun swapDataSet(dataSet: List<Artist>) {
|
||||||
this.dataSet = dataSet
|
this.dataSet = dataSet
|
||||||
notifyDataSetChanged()
|
notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ import java.util.ArrayList
|
||||||
|
|
||||||
class PlaylistAdapter(
|
class PlaylistAdapter(
|
||||||
private val activity: AppCompatActivity,
|
private val activity: AppCompatActivity,
|
||||||
var dataSet: ArrayList<Playlist>,
|
var dataSet: List<Playlist>,
|
||||||
private var itemLayoutRes: Int,
|
private var itemLayoutRes: Int,
|
||||||
cabHolder: CabHolder?
|
cabHolder: CabHolder?
|
||||||
) : AbsMultiSelectAdapter<PlaylistAdapter.ViewHolder, Playlist>(
|
) : AbsMultiSelectAdapter<PlaylistAdapter.ViewHolder, Playlist>(
|
||||||
|
@ -49,7 +49,7 @@ class PlaylistAdapter(
|
||||||
setHasStableIds(true)
|
setHasStableIds(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun swapDataSet(dataSet: ArrayList<Playlist>) {
|
fun swapDataSet(dataSet: List<Playlist>) {
|
||||||
this.dataSet = dataSet
|
this.dataSet = dataSet
|
||||||
notifyDataSetChanged()
|
notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@ import javax.inject.Inject
|
||||||
class ArtistsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<ArtistAdapter, GridLayoutManager>(),
|
class ArtistsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<ArtistAdapter, GridLayoutManager>(),
|
||||||
ArtistsView {
|
ArtistsView {
|
||||||
|
|
||||||
override fun artists(artists: ArrayList<Artist>) {
|
override fun artists(artists: List<Artist>) {
|
||||||
adapter?.swapDataSet(artists)
|
adapter?.swapDataSet(artists)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,14 +26,12 @@ import code.name.monkey.retromusic.mvp.presenter.GenresPresenter
|
||||||
import code.name.monkey.retromusic.mvp.presenter.GenresView
|
import code.name.monkey.retromusic.mvp.presenter.GenresView
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
|
||||||
class GenresFragment : AbsLibraryPagerRecyclerViewFragment<GenreAdapter, LinearLayoutManager>(), GenresView {
|
class GenresFragment : AbsLibraryPagerRecyclerViewFragment<GenreAdapter, LinearLayoutManager>(), GenresView {
|
||||||
override fun genres(genres: ArrayList<Genre>) {
|
override fun genres(genres: List<Genre>) {
|
||||||
adapter?.swapDataSet(genres)
|
adapter?.swapDataSet(genres)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun showEmptyView() {
|
override fun showEmptyView() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createLayoutManager(): LinearLayoutManager {
|
override fun createLayoutManager(): LinearLayoutManager {
|
||||||
|
@ -48,11 +46,9 @@ class GenresFragment : AbsLibraryPagerRecyclerViewFragment<GenreAdapter, LinearL
|
||||||
override val emptyMessage: Int
|
override val emptyMessage: Int
|
||||||
get() = R.string.no_genres
|
get() = R.string.no_genres
|
||||||
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var genresPresenter: GenresPresenter
|
lateinit var genresPresenter: GenresPresenter
|
||||||
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
App.musicComponent.inject(this)
|
App.musicComponent.inject(this)
|
||||||
|
@ -62,6 +58,7 @@ class GenresFragment : AbsLibraryPagerRecyclerViewFragment<GenreAdapter, LinearL
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
genresPresenter.attachView(this)
|
genresPresenter.attachView(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
if (adapter!!.dataSet.isEmpty()) {
|
if (adapter!!.dataSet.isEmpty()) {
|
||||||
|
|
|
@ -63,7 +63,7 @@ class PlaylistsFragment : AbsLibraryPagerRecyclerViewFragment<PlaylistAdapter, L
|
||||||
adapter?.swapDataSet(ArrayList())
|
adapter?.swapDataSet(ArrayList())
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun playlists(playlists: ArrayList<Playlist>) {
|
override fun playlists(playlists: List<Playlist>) {
|
||||||
adapter?.swapDataSet(playlists)
|
adapter?.swapDataSet(playlists)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ class SongsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<SongAdap
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun songs(songs: ArrayList<Song>) {
|
override fun songs(songs: List<Song>) {
|
||||||
adapter?.swapDataSet(songs)
|
adapter?.swapDataSet(songs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@ import android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI as SONGS_URI
|
||||||
* Created by hemanths on 11/08/17.
|
* Created by hemanths on 11/08/17.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
object AlbumLoader {
|
object AlbumLoader {
|
||||||
|
|
||||||
fun getAllAlbums(context: Context): List<Album> {
|
fun getAllAlbums(context: Context): List<Album> {
|
||||||
return makeAlbumCursor(context, null, null)
|
return makeAlbumCursor(context, null, null)
|
||||||
|
|
|
@ -14,9 +14,7 @@
|
||||||
|
|
||||||
package code.name.monkey.retromusic.mvp.presenter
|
package code.name.monkey.retromusic.mvp.presenter
|
||||||
|
|
||||||
import code.name.monkey.retromusic.App
|
|
||||||
import code.name.monkey.retromusic.Result.Success
|
import code.name.monkey.retromusic.Result.Success
|
||||||
import code.name.monkey.retromusic.loaders.AlbumLoader
|
|
||||||
import code.name.monkey.retromusic.model.Album
|
import code.name.monkey.retromusic.model.Album
|
||||||
import code.name.monkey.retromusic.model.Artist
|
import code.name.monkey.retromusic.model.Artist
|
||||||
import code.name.monkey.retromusic.model.Song
|
import code.name.monkey.retromusic.model.Song
|
||||||
|
@ -39,15 +37,13 @@ interface AlbumDetailsView {
|
||||||
|
|
||||||
fun album(album: Album)
|
fun album(album: Album)
|
||||||
|
|
||||||
fun songs(songs: ArrayList<Song>)
|
fun songs(songs: List<Song>)
|
||||||
|
|
||||||
fun complete()
|
fun complete()
|
||||||
|
|
||||||
fun loadArtistImage(artist: Artist)
|
fun loadArtistImage(artist: Artist)
|
||||||
|
|
||||||
fun moreAlbums(
|
fun moreAlbums(albums: List<Album>)
|
||||||
albums: ArrayList<Album>
|
|
||||||
)
|
|
||||||
|
|
||||||
fun aboutAlbum(lastFmAlbum: LastFmAlbum)
|
fun aboutAlbum(lastFmAlbum: LastFmAlbum)
|
||||||
}
|
}
|
||||||
|
@ -55,7 +51,7 @@ interface AlbumDetailsView {
|
||||||
interface AlbumDetailsPresenter : Presenter<AlbumDetailsView> {
|
interface AlbumDetailsPresenter : Presenter<AlbumDetailsView> {
|
||||||
fun loadAlbum(albumId: Long)
|
fun loadAlbum(albumId: Long)
|
||||||
|
|
||||||
fun albumSong(albumId: Long)
|
fun albumSongs(albumId: Long)
|
||||||
|
|
||||||
fun loadMore(artistId: Long)
|
fun loadMore(artistId: Long)
|
||||||
|
|
||||||
|
@ -88,10 +84,6 @@ interface AlbumDetailsPresenter : Presenter<AlbumDetailsView> {
|
||||||
|
|
||||||
private fun showArtistImage(artist: Artist) {
|
private fun showArtistImage(artist: Artist) {
|
||||||
view?.loadArtistImage(artist)
|
view?.loadArtistImage(artist)
|
||||||
|
|
||||||
/* artist.albums?.filter { it.id != album.id }?.let {
|
|
||||||
if (it.isNotEmpty()) view?.moreAlbums(ArrayList(it))
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun loadAlbum(albumId: Long) {
|
override fun loadAlbum(albumId: Long) {
|
||||||
|
@ -106,11 +98,11 @@ interface AlbumDetailsPresenter : Presenter<AlbumDetailsView> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun albumSong(albumId: Long) {
|
override fun albumSongs(albumId: Long) {
|
||||||
launch {
|
launch {
|
||||||
val songs = AlbumLoader.getSongsForAlbum(App.getContext(), albumId)
|
when (val result = repository.albumSongsById(albumId)) {
|
||||||
withContext(Dispatchers.Main) {
|
is Success -> withContext(Dispatchers.Main) { view.songs(result.data) }
|
||||||
view.songs(songs)
|
is Error -> withContext(Dispatchers.Main) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,10 +14,7 @@
|
||||||
|
|
||||||
package code.name.monkey.retromusic.mvp.presenter
|
package code.name.monkey.retromusic.mvp.presenter
|
||||||
|
|
||||||
import code.name.monkey.retromusic.App
|
import code.name.monkey.retromusic.Result.Success
|
||||||
import code.name.monkey.retromusic.Result
|
|
||||||
import code.name.monkey.retromusic.loaders.AlbumLoader
|
|
||||||
import code.name.monkey.retromusic.loaders.ArtistLoader
|
|
||||||
import code.name.monkey.retromusic.model.Album
|
import code.name.monkey.retromusic.model.Album
|
||||||
import code.name.monkey.retromusic.model.Artist
|
import code.name.monkey.retromusic.model.Artist
|
||||||
import code.name.monkey.retromusic.model.Song
|
import code.name.monkey.retromusic.model.Song
|
||||||
|
@ -77,12 +74,8 @@ interface ArtistDetailsPresenter : Presenter<ArtistDetailsView> {
|
||||||
override fun loadBiography(name: String, lang: String?, cache: String?) {
|
override fun loadBiography(name: String, lang: String?, cache: String?) {
|
||||||
launch {
|
launch {
|
||||||
when (val result = repository.artistInfo(name, lang, cache)) {
|
when (val result = repository.artistInfo(name, lang, cache)) {
|
||||||
is Result.Success -> withContext(Dispatchers.Main) {
|
is Success -> withContext(Dispatchers.Main) { view?.artistInfo(result.data) }
|
||||||
view?.artistInfo(result.data)
|
is Error -> withContext(Dispatchers.Main) {}
|
||||||
}
|
|
||||||
is Result.Error -> withContext(Dispatchers.Main) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -90,31 +83,26 @@ interface ArtistDetailsPresenter : Presenter<ArtistDetailsView> {
|
||||||
override fun loadArtist(artistId: Long) {
|
override fun loadArtist(artistId: Long) {
|
||||||
launch {
|
launch {
|
||||||
when (val result = repository.artistById(artistId)) {
|
when (val result = repository.artistById(artistId)) {
|
||||||
is Result.Success -> withContext(Dispatchers.Main) {
|
is Success -> withContext(Dispatchers.Main) { view?.artist(result.data) }
|
||||||
view?.artist(result.data)
|
is Error -> withContext(Dispatchers.Main) { view?.showEmptyView() }
|
||||||
|
|
||||||
}
|
|
||||||
is Result.Error -> withContext(Dispatchers.Main) {
|
|
||||||
view?.showEmptyView()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun loadArtistSongs(artistId: Long) {
|
override fun loadArtistSongs(artistId: Long) {
|
||||||
launch {
|
launch {
|
||||||
val songs = ArtistLoader.getSongsForArtist(App.getContext(), artistId)
|
when (val result = repository.artistSongsById(artistId)) {
|
||||||
withContext(Dispatchers.Main) {
|
is Success -> withContext(Dispatchers.Main) { view.songs(result.data) }
|
||||||
view.songs(songs)
|
is Error -> withContext(Dispatchers.Main) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun loadArtistAlbums(artistId: Long) {
|
override fun loadArtistAlbums(artistId: Long) {
|
||||||
launch {
|
launch {
|
||||||
val albums = AlbumLoader.getAlbumsForArtist(App.getContext(), artistId)
|
when (val result = repository.artistAlbumsById(artistId)) {
|
||||||
withContext(Dispatchers.Main) {
|
is Success -> withContext(Dispatchers.Main) { view.albums(result.data) }
|
||||||
view.albums(albums)
|
is Error -> withContext(Dispatchers.Main) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,12 +20,16 @@ import code.name.monkey.retromusic.mvp.BaseView
|
||||||
import code.name.monkey.retromusic.mvp.Presenter
|
import code.name.monkey.retromusic.mvp.Presenter
|
||||||
import code.name.monkey.retromusic.mvp.PresenterImpl
|
import code.name.monkey.retromusic.mvp.PresenterImpl
|
||||||
import code.name.monkey.retromusic.providers.interfaces.Repository
|
import code.name.monkey.retromusic.providers.interfaces.Repository
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import kotlin.coroutines.CoroutineContext
|
import kotlin.coroutines.CoroutineContext
|
||||||
|
|
||||||
interface ArtistsView : BaseView {
|
interface ArtistsView : BaseView {
|
||||||
fun artists(artists: ArrayList<Artist>)
|
fun artists(artists: List<Artist>)
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ArtistsPresenter : Presenter<ArtistsView> {
|
interface ArtistsPresenter : Presenter<ArtistsView> {
|
||||||
|
@ -33,8 +37,9 @@ interface ArtistsPresenter : Presenter<ArtistsView> {
|
||||||
fun loadArtists()
|
fun loadArtists()
|
||||||
|
|
||||||
class ArtistsPresenterImpl @Inject constructor(
|
class ArtistsPresenterImpl @Inject constructor(
|
||||||
private val repository: Repository
|
private val repository: Repository
|
||||||
) : PresenterImpl<ArtistsView>(), ArtistsPresenter, CoroutineScope {
|
) : PresenterImpl<ArtistsView>(), ArtistsPresenter, CoroutineScope {
|
||||||
|
|
||||||
private val job = Job()
|
private val job = Job()
|
||||||
|
|
||||||
override val coroutineContext: CoroutineContext
|
override val coroutineContext: CoroutineContext
|
||||||
|
|
|
@ -20,26 +20,30 @@ import code.name.monkey.retromusic.mvp.BaseView
|
||||||
import code.name.monkey.retromusic.mvp.Presenter
|
import code.name.monkey.retromusic.mvp.Presenter
|
||||||
import code.name.monkey.retromusic.mvp.PresenterImpl
|
import code.name.monkey.retromusic.mvp.PresenterImpl
|
||||||
import code.name.monkey.retromusic.providers.interfaces.Repository
|
import code.name.monkey.retromusic.providers.interfaces.Repository
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import java.util.*
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import kotlin.coroutines.CoroutineContext
|
import kotlin.coroutines.CoroutineContext
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by hemanths on 20/08/17.
|
* Created by hemanths on 20/08/17.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
interface GenreDetailsView : BaseView {
|
interface GenreDetailsView : BaseView {
|
||||||
fun songs(songs: ArrayList<Song>)
|
|
||||||
|
fun songs(songs: List<Song>)
|
||||||
}
|
}
|
||||||
|
|
||||||
interface GenreDetailsPresenter : Presenter<GenreDetailsView> {
|
interface GenreDetailsPresenter : Presenter<GenreDetailsView> {
|
||||||
fun loadGenreSongs(genreId: Int)
|
fun loadGenreSongs(genreId: Int)
|
||||||
|
|
||||||
class GenreDetailsPresenterImpl @Inject constructor(
|
class GenreDetailsPresenterImpl @Inject constructor(
|
||||||
private val repository: Repository
|
private val repository: Repository
|
||||||
) : PresenterImpl<GenreDetailsView>(), GenreDetailsPresenter, CoroutineScope {
|
) : PresenterImpl<GenreDetailsView>(), GenreDetailsPresenter, CoroutineScope {
|
||||||
|
|
||||||
private val job = Job()
|
private val job = Job()
|
||||||
|
|
||||||
override val coroutineContext: CoroutineContext
|
override val coroutineContext: CoroutineContext
|
||||||
|
@ -50,7 +54,6 @@ interface GenreDetailsPresenter : Presenter<GenreDetailsView> {
|
||||||
job.cancel()
|
job.cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun loadGenreSongs(genreId: Int) {
|
override fun loadGenreSongs(genreId: Int) {
|
||||||
launch {
|
launch {
|
||||||
when (val result = repository.getGenre(genreId)) {
|
when (val result = repository.getGenre(genreId)) {
|
||||||
|
|
|
@ -20,8 +20,11 @@ import code.name.monkey.retromusic.mvp.BaseView
|
||||||
import code.name.monkey.retromusic.mvp.Presenter
|
import code.name.monkey.retromusic.mvp.Presenter
|
||||||
import code.name.monkey.retromusic.mvp.PresenterImpl
|
import code.name.monkey.retromusic.mvp.PresenterImpl
|
||||||
import code.name.monkey.retromusic.providers.interfaces.Repository
|
import code.name.monkey.retromusic.providers.interfaces.Repository
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import java.util.*
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import kotlin.coroutines.CoroutineContext
|
import kotlin.coroutines.CoroutineContext
|
||||||
|
|
||||||
|
@ -29,15 +32,17 @@ import kotlin.coroutines.CoroutineContext
|
||||||
* @author Hemanth S (h4h13).
|
* @author Hemanth S (h4h13).
|
||||||
*/
|
*/
|
||||||
interface GenresView : BaseView {
|
interface GenresView : BaseView {
|
||||||
fun genres(genres: ArrayList<Genre>)
|
|
||||||
|
fun genres(genres: List<Genre>)
|
||||||
}
|
}
|
||||||
|
|
||||||
interface GenresPresenter : Presenter<GenresView> {
|
interface GenresPresenter : Presenter<GenresView> {
|
||||||
fun loadGenres()
|
fun loadGenres()
|
||||||
|
|
||||||
class GenresPresenterImpl @Inject constructor(
|
class GenresPresenterImpl @Inject constructor(
|
||||||
private val repository: Repository
|
private val repository: Repository
|
||||||
) : PresenterImpl<GenresView>(), GenresPresenter, CoroutineScope {
|
) : PresenterImpl<GenresView>(), GenresPresenter, CoroutineScope {
|
||||||
|
|
||||||
private val job = Job()
|
private val job = Job()
|
||||||
|
|
||||||
override val coroutineContext: CoroutineContext
|
override val coroutineContext: CoroutineContext
|
||||||
|
|
|
@ -16,19 +16,25 @@ package code.name.monkey.retromusic.mvp.presenter
|
||||||
|
|
||||||
import code.name.monkey.retromusic.Result
|
import code.name.monkey.retromusic.Result
|
||||||
import code.name.monkey.retromusic.model.Playlist
|
import code.name.monkey.retromusic.model.Playlist
|
||||||
import code.name.monkey.retromusic.mvp.*
|
import code.name.monkey.retromusic.mvp.BaseView
|
||||||
|
import code.name.monkey.retromusic.mvp.Presenter
|
||||||
|
import code.name.monkey.retromusic.mvp.PresenterImpl
|
||||||
import code.name.monkey.retromusic.providers.interfaces.Repository
|
import code.name.monkey.retromusic.providers.interfaces.Repository
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import kotlin.coroutines.CoroutineContext
|
import kotlin.coroutines.CoroutineContext
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by hemanths on 19/08/17.
|
* Created by hemanths on 19/08/17.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
interface PlaylistView : BaseView {
|
interface PlaylistView : BaseView {
|
||||||
fun playlists(playlists: ArrayList<Playlist>)
|
|
||||||
|
fun playlists(playlists: List<Playlist>)
|
||||||
}
|
}
|
||||||
|
|
||||||
interface PlaylistsPresenter : Presenter<PlaylistView> {
|
interface PlaylistsPresenter : Presenter<PlaylistView> {
|
||||||
|
@ -36,7 +42,7 @@ interface PlaylistsPresenter : Presenter<PlaylistView> {
|
||||||
fun playlists()
|
fun playlists()
|
||||||
|
|
||||||
class PlaylistsPresenterImpl @Inject constructor(
|
class PlaylistsPresenterImpl @Inject constructor(
|
||||||
private val repository: Repository
|
private val repository: Repository
|
||||||
) : PresenterImpl<PlaylistView>(), PlaylistsPresenter, CoroutineScope {
|
) : PresenterImpl<PlaylistView>(), PlaylistsPresenter, CoroutineScope {
|
||||||
|
|
||||||
private val job = Job()
|
private val job = Job()
|
||||||
|
|
|
@ -15,10 +15,17 @@
|
||||||
package code.name.monkey.retromusic.mvp.presenter
|
package code.name.monkey.retromusic.mvp.presenter
|
||||||
|
|
||||||
import code.name.monkey.retromusic.Result
|
import code.name.monkey.retromusic.Result
|
||||||
import code.name.monkey.retromusic.model.*
|
import code.name.monkey.retromusic.model.Playlist
|
||||||
import code.name.monkey.retromusic.mvp.*
|
import code.name.monkey.retromusic.model.Song
|
||||||
|
import code.name.monkey.retromusic.mvp.BaseView
|
||||||
|
import code.name.monkey.retromusic.mvp.Presenter
|
||||||
|
import code.name.monkey.retromusic.mvp.PresenterImpl
|
||||||
import code.name.monkey.retromusic.providers.interfaces.Repository
|
import code.name.monkey.retromusic.providers.interfaces.Repository
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import kotlin.coroutines.CoroutineContext
|
import kotlin.coroutines.CoroutineContext
|
||||||
|
|
||||||
|
@ -26,14 +33,15 @@ import kotlin.coroutines.CoroutineContext
|
||||||
* Created by hemanths on 20/08/17.
|
* Created by hemanths on 20/08/17.
|
||||||
*/
|
*/
|
||||||
interface PlaylistSongsView : BaseView {
|
interface PlaylistSongsView : BaseView {
|
||||||
fun songs(songs: ArrayList<Song>)
|
|
||||||
|
fun songs(songs: List<Song>)
|
||||||
}
|
}
|
||||||
|
|
||||||
interface PlaylistSongsPresenter : Presenter<PlaylistSongsView> {
|
interface PlaylistSongsPresenter : Presenter<PlaylistSongsView> {
|
||||||
fun loadPlaylistSongs(playlist: Playlist)
|
fun loadPlaylistSongs(playlist: Playlist)
|
||||||
|
|
||||||
class PlaylistSongsPresenterImpl @Inject constructor(
|
class PlaylistSongsPresenterImpl @Inject constructor(
|
||||||
private val repository: Repository
|
private val repository: Repository
|
||||||
) : PresenterImpl<PlaylistSongsView>(), PlaylistSongsPresenter, CoroutineScope {
|
) : PresenterImpl<PlaylistSongsView>(), PlaylistSongsPresenter, CoroutineScope {
|
||||||
|
|
||||||
private var job: Job = Job()
|
private var job: Job = Job()
|
||||||
|
|
|
@ -16,10 +16,14 @@ package code.name.monkey.retromusic.mvp.presenter
|
||||||
|
|
||||||
import code.name.monkey.retromusic.Result
|
import code.name.monkey.retromusic.Result
|
||||||
import code.name.monkey.retromusic.model.Song
|
import code.name.monkey.retromusic.model.Song
|
||||||
import code.name.monkey.retromusic.mvp.*
|
import code.name.monkey.retromusic.mvp.Presenter
|
||||||
|
import code.name.monkey.retromusic.mvp.PresenterImpl
|
||||||
import code.name.monkey.retromusic.providers.interfaces.Repository
|
import code.name.monkey.retromusic.providers.interfaces.Repository
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import java.util.*
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import kotlin.coroutines.CoroutineContext
|
import kotlin.coroutines.CoroutineContext
|
||||||
|
|
||||||
|
@ -27,36 +31,37 @@ import kotlin.coroutines.CoroutineContext
|
||||||
* Created by hemanths on 10/08/17.
|
* Created by hemanths on 10/08/17.
|
||||||
*/
|
*/
|
||||||
interface SongView {
|
interface SongView {
|
||||||
fun songs(songs: ArrayList<Song>)
|
|
||||||
|
|
||||||
fun showEmptyView()
|
fun songs(songs: List<Song>)
|
||||||
|
|
||||||
|
fun showEmptyView()
|
||||||
}
|
}
|
||||||
|
|
||||||
interface SongPresenter : Presenter<SongView> {
|
interface SongPresenter : Presenter<SongView> {
|
||||||
fun loadSongs()
|
fun loadSongs()
|
||||||
class SongPresenterImpl @Inject constructor(
|
class SongPresenterImpl @Inject constructor(
|
||||||
private val repository: Repository
|
private val repository: Repository
|
||||||
) : PresenterImpl<SongView>(), SongPresenter, CoroutineScope {
|
) : PresenterImpl<SongView>(), SongPresenter, CoroutineScope {
|
||||||
|
|
||||||
private var job: Job = Job()
|
private var job: Job = Job()
|
||||||
|
|
||||||
override val coroutineContext: CoroutineContext
|
override val coroutineContext: CoroutineContext
|
||||||
get() = Dispatchers.IO + job
|
get() = Dispatchers.IO + job
|
||||||
|
|
||||||
override fun loadSongs() {
|
override fun loadSongs() {
|
||||||
launch {
|
launch {
|
||||||
when (val songs = repository.allSongs()) {
|
when (val songs = repository.allSongs()) {
|
||||||
is Result.Success -> withContext(Dispatchers.Main) { view?.songs(songs.data) }
|
is Result.Success -> withContext(Dispatchers.Main) { view?.songs(songs.data) }
|
||||||
is Result.Error -> withContext(Dispatchers.Main) { view?.showEmptyView() }
|
is Result.Error -> withContext(Dispatchers.Main) { view?.showEmptyView() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun detachView() {
|
override fun detachView() {
|
||||||
super.detachView()
|
super.detachView()
|
||||||
job.cancel();
|
job.cancel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -67,6 +67,33 @@ class RepositoryImpl @Inject constructor(private val context: Context) : Reposit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override suspend fun albumSongsById(albumId: Long): Result<List<Song>> {
|
||||||
|
return try {
|
||||||
|
val songs = AlbumLoader.getSongsForAlbum(context, albumId)
|
||||||
|
Success(songs)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Error(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun artistSongsById(artistId: Long): Result<List<Song>> {
|
||||||
|
return try {
|
||||||
|
val songs = ArtistLoader.getSongsForArtist(context, artistId)
|
||||||
|
Success(songs)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Error(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun artistAlbumsById(artistId: Long): Result<List<Album>> {
|
||||||
|
return try {
|
||||||
|
val albums = AlbumLoader.getAlbumsForArtist(context, artistId)
|
||||||
|
Success(albums)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Error(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override suspend fun allArtists(): Result<ArrayList<Artist>> {
|
override suspend fun allArtists(): Result<ArrayList<Artist>> {
|
||||||
return try {
|
return try {
|
||||||
val artists = ArtistLoader.getAllArtists(context)
|
val artists = ArtistLoader.getAllArtists(context)
|
||||||
|
|
|
@ -34,19 +34,25 @@ interface Repository {
|
||||||
|
|
||||||
suspend fun albumById(albumId: Long): Result<Album>
|
suspend fun albumById(albumId: Long): Result<Album>
|
||||||
|
|
||||||
suspend fun allSongs(): Result<ArrayList<Song>>
|
suspend fun albumSongsById(albumId: Long): Result<List<Song>>
|
||||||
|
|
||||||
suspend fun allArtists(): Result<ArrayList<Artist>>
|
suspend fun artistSongsById(artistId: Long): Result<List<Song>>
|
||||||
|
|
||||||
suspend fun allPlaylists(): Result<ArrayList<Playlist>>
|
suspend fun artistAlbumsById(artistId: Long): Result<List<Album>>
|
||||||
|
|
||||||
suspend fun allGenres(): Result<ArrayList<Genre>>
|
suspend fun allSongs(): Result<List<Song>>
|
||||||
|
|
||||||
|
suspend fun allArtists(): Result<List<Artist>>
|
||||||
|
|
||||||
|
suspend fun allPlaylists(): Result<List<Playlist>>
|
||||||
|
|
||||||
|
suspend fun allGenres(): Result<List<Genre>>
|
||||||
|
|
||||||
suspend fun search(query: String?): Result<MutableList<Any>>
|
suspend fun search(query: String?): Result<MutableList<Any>>
|
||||||
|
|
||||||
suspend fun getPlaylistSongs(playlist: Playlist): Result<ArrayList<Song>>
|
suspend fun getPlaylistSongs(playlist: Playlist): Result<List<Song>>
|
||||||
|
|
||||||
suspend fun getGenre(genreId: Int): Result<ArrayList<Song>>
|
suspend fun getGenre(genreId: Int): Result<List<Song>>
|
||||||
|
|
||||||
suspend fun recentArtists(): Result<Home>
|
suspend fun recentArtists(): Result<Home>
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue